当前位置:必发365电子游戏 > 编程 > 2.一道SQL语句面试题,必需满意第风华正茂范式
2.一道SQL语句面试题,必需满意第风华正茂范式
2019-12-19

----1.数据库的三范式?
意气风发范式: 各种列都以不可分割的原子单元;
二范式: 必需满意第风华正茂范式;每种列都正视于主键。
三范式:必需满足第二范式;各样列不可能传递信任于主键。

1.用一条SQL语句 查询出每门课都大于80分的学员姓名  

 

name   kecheng   fenshu
张三     语文       81
张三     数学       75
李四     语文       76
李四     数学       90
王五     语文       81
王五     数学       100
王五     英语       90

----2.主键的设计原则有啥样?
大器晚成、唯黄金时代的标记生机勃勃行;
二、作为叁个得以被外键有效援引的目的;
三、无需更新主键;
四、主键不应当富含动态变化的数码,如时间戳 等;
五、主键应当有Computer自动生成。

A: select distinct name from table  where  name not in (select distinct name from table where fenshu<=80)

 

2.黄金时代道SQL语句面试题,关于group by
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负

----3.数量的限制有何样特点(主键约束,唯风度翩翩限定, 非空限制, null限定, 暗中同意值约束, check[枚举]封锁, 外键限定, 长约束卡塔尔(قطر‎

譬喻要生成下列结果, 该怎么写sql语句?

风流罗曼蒂克、主键约束:表中定义八个主键来唯生龙活虎明确表中每风华正茂行数据的标志符;(非空,唯豆蔻梢头)
二、唯生龙活虎限制:保证在三个字段只怕大器晚成组字段里的数目与表中此外行的数码相比较是独一无二的;
三、非空节制:压迫列不收受 NULL 值;
四、null节制:只用于定义列约束,未有别的约束时暗中认可是null限制;
五、暗中同意值约束:用于向列中插入暗许值,若无明确任何的值,那么会将暗许值增加到全数的新记录;
六、check[枚举]自律:用于限定列中的值的限定;
七、外键约束:用于幸免破坏表之间总是的动作;
八、长度大概束:

            胜 负
2005-05-09 2 2

----4.主键节制和唯意气风发限制有哪些分歧?

2005-05-10 1 2

利用函数连接:
SELECT rq,SUM(CASE  WHEN shengfu='胜' THEN 1 ELSE 0 END) 胜,SUM(CASE WHEN shengfu='负' THEN 1 ELSE 0 END) 负 FROM tmp GROUP BY rq;
外连接:
SELECT n.rq,n.胜,m.负 FROM (SELECT rq,COUNT(*) 胜 FROM tmp WHERE shengfu='胜' GROUP BY rq) n INNER JOIN (SELECT rq,COUNT(*) 负 FROM tmp WHERE shengfu='负' GROUP BY rq) m ON n.rq=m.rq;
自连接:
SELECT a.rq, a.a1 胜,b.b1 负 FROM
(SELECT rq,COUNT(rq) a1 FROM tmp WHERE shengfu='胜' GROUP BY rq)a,
(SELECT rq,COUNT(rq) b1 FROM tmp WHERE shengfu='负' GROUP BY rq)b
 WHERE a.rq=b.rq;  

1.在二个表中,只好定义一个primary key限制,但可定义五个unique限定;
2.对此钦赐为primary key的叁个列或三个列的组成,个中任何一个列都无法冒出空值,而对此unique所节制的唯风流倜傥键,
则允许为null,只是null值最多有多少个。

二个表中的Id有多个记录,把具有那几个id的记录查出来,并呈现共有多少条记录数。

必发365手机版下载平台,select id, Count(*) from tb group by id having count(*)>1
select * from(select count(ID) as count from table group by ID)T where T.count>1

SQL资料:和大家在课体育场所所学的一点都不小的不等在于:子查询的地点特别灵活,可以出今后from子句后(供给为此询问取外号),
也能够出今后select的对象列中,请留意读懂下列例子(有的地方取小名一贯就空格前边世小名,有的地点是用as后边跟别称的诀窍)。
注:主若是学习基本语句或短语的用法

Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#必发365电子游戏官网,,C#,score) 成绩表
Teacher(T#,Tname) 教师表

问题:
1、查询“001”课程比“002”课程战绩高的全体学子的学号;
select a.S#
from (select s#,score from SC where C#=’001′) a,
(select s#,score from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;

2、查询平均战绩超乎60分的校友的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;

3、查询全部同学的学号、姓名、选课数、总成绩;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname

4、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;

5、查询没学过“叶平”老师课的同室的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’);

6、查询学过“001”并且也学过数码“002”课程的校友的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# and SC.C#=’001′and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);
7、查询学过“叶平”老师所教的全体课的同学的学号、姓名;
select S#,Sname
from Student
where S# in
(select S# from SC ,Course ,Teacher
where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’ group by S# having count(SC.C#)=(select count(C#)
from Course,Teacher where Teacher.T#=Course.T# and Tname=’叶平’));

8、查询全数课程成绩小于60分的同桌的学号、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

9、查询未有学全全部课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

10、查询至稀有一门课与学号为“1001”的同桌所学雷同的同校的学号和姓名;
select S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='1001');

11、删除学习“叶平”老师课的SC表记录;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';

12、查询各科战绩最高和最低的分:以如下格局显得:课程ID,最高分,最低分
SELECT L.C# 课程ID,L.score 最高分,R.score 最低分
FROM SC L ,SC R
WHERE L.C# = R.C#
and
L.score = (SELECT MAX(IL.score)
FROM SC IL,Student IM
WHERE IL.C# = L.C# and IM.S#=IL.S#
GROUP BY IL.C#)
and
R.Score = (SELECT MIN(IR.score)
FROM SC IR
WHERE IR.C# = R.C#
GROUP BY IR.C# );

13、查询学一生均战绩及其排名
SELECT 1+(SELECT COUNT( distinct 平均战表卡塔尔(英语:State of Qatar)
FROM (SELECT S#,AVG(score卡塔尔国 平均成绩
FROM SC
GROUP BY S# ) T1
WHERE 平均成绩 > T2.等分成绩卡塔尔国 排名, S# 学子学号,平均成绩
FROM (SELECT S#,AVG(score卡塔尔国 平均战绩 FROM SC GROUP BY S# ) T2
OXC90DE普拉多 BY 平均成绩 desc;

14、查询各科战绩前三名的笔录:(思虑成绩并列景况卡塔尔(قطر‎
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM
(select distinct score from SC order) by score desc)
ORDER BY t1.C#;

(2卡塔尔(قطر‎、查询各科战表前三名的笔录:(bu考虑成绩并列意况卡塔尔
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC)
ORDER BY t1.C#;

15、查询每门功成绩最棒的前两名
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC )
ORDER BY t1.C#;

补充:
早就驾驭原表
year salary
——————
2000 1000
2001 2000
2002 3000
2003 4000

解:
select b.year,sum(a.salary)
from salary a,salary b
where a.year<=b.year
group by b.year
order by b.year;

在面试进度中反复相见生机勃勃道SQL查询的主题材料,查询A(ID,Name卡塔尔表中第31至40条记下,ID作为主键恐怕是或不是连接增进的列,完整的查询语句如下:
方法一:
select top 10 *
from A
where ID >(select max(ID) from (select top 30 ID from A order by ID ) T) order by ID
方法二:
select top 10 *
from A
where ID not In (select top 30 ID from A order by ID)
order by ID

 

 

.学生表 如下:
电动编号   学号   姓名课程编号课程名称分数
1        2005001 张三 0001      数学    69
2        2005002 李四 0001      数学    89
3        2005001 张三 0001      数学    69
去除除了自行编号区别,其余都如出少年老成辙的上学的小孩子冗余消息

A: delete tablename where 自动编号 not in(select min(自动编号卡塔尔(英语:State of Qatar) from tablename group by 学号,姓名,课程编号,课程名称,分数卡塔尔(قطر‎

 

----5.内连接和外接连的分别

内链接:也叫自然连接,多表作为联合检查,满意条件的数目能力表现;
外链接:分为左外连接,右外连接,全外连接,全外连接要是有on条件,在大势所趋程度上亦然内对接,若无on条件表示笛Carl积。

----6.左外接连,右外连接和全外连接的区分

左外连接:以左表为标准,查询满意条件的列,右表未有相配到的数目以null代替;
右外连接:以右表为尺度,查询满足条件的列,左表未有相配到的多寡以null代替;
全外连接:即便有on条件,在早晚水准上同样内连接,若无on条件表示笛Carl积

----7.您接纳过什么mysql函数.

字符串函数: concat连接,lpad左填充,rpad右填充 ,ltrim删除左边空格,rtrim删除侧边空格,replace替换,length再次来到字符长度
substring截取;
数字函数:ceil向上取整,floor向下取整,abs绝对值,mod取余,rand发生0~1的人身自由数,round四舍五入,可设置保留位数,
truncate可设置保留小数,但不会四舍五入
日子函数:now再次来到年月日时分秒,curdate再次来到年月日,curtime重临时分秒,week重临当几日前期是当二零黄金年代八年的第几周,
year重返当明天期的年份,date_format可安装时间格式,date_add可将日期往前推或向后推
流程函数:if(n,t,f卡塔尔n为true时施行t,不然推行f ,ifnull(n,t,f卡塔尔国n为空时实施t,否则施行f。

----8.视图是怎么样? 视图的亮点有哪些?
视图:是根据三个表或多个表或视图的逻辑表,自个儿不带有数据,通过它能够对表里面的数量开展询问和退换
视图的独特的地方:
1.对数码库表的拜见,因为视图能够有选拔性的抉择数据Curry的意气风发某些。
2.客户通过简单的询问能够从叶影参差查询中获取结果, 进而隐蔽数据复杂性 。
3.维护数据的独立性,视图可从几个表检索数据。
4.对此同生龙活虎的多少可产生不一样的视图, 以差异的角度来体现基表中的数据.
5.视图中能够选择连接(join卡塔尔,用多个表中相关的列构成一个新的多少集。此视图就对客户掩盖了数量来源于四个表的真相。
6.经过视图可以设定允许顾客访问的列和数量行,从而为表提供了额外的安控。

----9.常用的oracle的函数有哪些?

2.一道SQL语句面试题,必需满意第风华正茂范式。字符函数:initcap首字母大写,
lower字母全体转变来小写,
upper字母全体转换到大写,
replace替换,
substr截取字符串,
concat连接字符串,
lpad 和 和 rpad 左填充字符和右填充字符,
length再次回到字符串的长短;

日申时间函数:add_months 扩充或减去月份,
months_between总计钦命的多个日子之间月数之差,
last_day 再次回到日期的终极一天,
round 和 和 trunc根据钦定的精度进行四舍五入,
next_day 给出日期 date 和星期几计量下多少个星期的日期,
数字函数:abs相对值,
round四舍五入,
trunc钦赐截尾取整的数字和截取精度的数字
mod取余
ceil向上取整
floor向下取整
Power(x,y) 返回 x 的 的 y
Mod (x ,y )返回 x 除 除 y 的余数
转移函数:to_char转变到字符类型
to_date转变届期间项目
to_number转变来数字类型
错落函数:nvl(string1, replace_with卡塔尔国假诺 string1 为 null,则 nvl 函数再次回到 replace_with
的值,不然重返 string1 的值
nvl2(e1, e2, e3卡塔尔(قطر‎ 假若 e1 为 null,则函数再次回到 e3,不然再次来到 e2。
nullif(exp1,expr2卡塔尔假若 exp1 和 exp2 非凡则赶回空(null卡塔尔(英语:State of Qatar),否则再次来到第贰个值

分组函数:AVG (columname卡塔尔 重回内定列的平均值
MAX (columname卡塔尔(قطر‎ 重返内定列的最大值
MIN (columname卡塔尔国 重回内定列的最小值
SUM (columname卡塔尔(قطر‎ 重临钦定列的总值
COUNT
COUNT (*卡塔尔国 总结全体行个数,包涵重复行和空值得行
COUNT (columname卡塔尔 总计钦定列非空值的个行数
COUNT (DISTINC翼虎 columname卡塔尔 总括内定列中 非重复,非空值得行个数

----10.存款和储蓄函数和存款和储蓄进程的差别?
1.存款和储蓄函数有且仅有多少个重临值,而存款和储蓄进程也可以有再次来到值。
2.存款和储蓄函数只好有输入函数 而存款和储蓄进程能够有七个 in,out,inout 参数。
3.囤积进程中的语句成效更有力,存款和储蓄进程能够兑现很复杂的专门的学问逻辑,而函数有成都百货上千约束,如不能够在函数中应用 insert,update,delete,create 等话语;存款和储蓄函数只完毕查询的 职业,可担当输入参数并再次回到叁个结果,也等于函数完结的职能指向性相比强。
4.蕴蓄进程能够调用存款和储蓄函数。但函数不能够调用存款和储蓄进程。
5.囤积进度日常是作为贰个单身的蓬蓬勃勃对来实行(call 调用卡塔尔国。而函数可以视作查询语句的三个部分来调用。

----11.仓储进程的劣点 和 优点?
优点:
1.囤积进程只在创立时开展编写翻译,今后每一趟实践存款和储蓄进度都不需再另行编写翻译,可增加数据库实施进度。
2.当对数据库进行理并答复杂操作时,可将此复杂操功能存款和储蓄进度封装起来与数据库提供的事务管理结合一齐行使。
3.积存进度能够重复使用,可降低数据库开垦职员的专门的学问量
4.安全性高,可设定独有少数客商才享有对点名存款和储蓄过程的使用权
5. 通过存款和储蓄进程能够使有关的动作在同盟爆发,进而能够保护数据库的完整性和安全性。

  1. 能够下落互联网的通讯量。
  2. 使彰显公司准绳的演算程序归入数据库服务器中,以便聚焦调控;

缺点:
1.调护医治麻烦;
2.移植难题,数据库端代码当然是与数据库相关的;
3.重复编写翻译难题,因为后端代码是运维前编写翻译的,如若含有引用关系的对象发生改换时,
受影响的存放进程、包将索要重新编写翻译(可是也得以设置成运营时刻自动编写翻译);
4.比如在叁个顺序系统中山高校量的运用存款和储蓄进度,到程序提交使用的时候随着顾客要求的增
加会招致数据布局的改换。

----12.jdbc中怎样调用存款和储蓄进程?
1.class.forname加载数据库驱动;
2.创建connection连接;
3.通过connection对象创造callableStatement对象;
4.设置传入的参数和挂号传出参数;
5.实施sql语句,获取传出参数;
6.刑满释放能源,关闭结果集,callableStatement对象、connection对象。

----13.jdbc的履行步骤
1.class.forname加载数据库驱动;
2.创建connection连接;
3.通过connection对象创设Statement对象;
4.透过Statement对象举办sql语句完毕增加和删除查改操作;
5.假诺是查询,重临二个结实集对象,循环迭代结果集。

----14.触发器是怎么样? 触发器的连串有如何?
数据库触发器:是叁个与表相关联的、存款和储蓄的 PL/SQL 程序。每当叁个一定的数量操作语句(Insert,update,delete卡塔尔在钦点的表上发出时,
Oracle 自动地试行触发器中定义的语句体系。

语句级触发器
在钦定的操作语句操作早先或之后实践叁遍,不管那条语句影响了有一点点行。
行级触发器(FOCRUISER EACH ROW)
触发语句作用的每一条记下都被触发。在行级触发器中使用 old 和 new 伪记录变量,识别值的气象。

-----15.游标的职能?

  1. 点名结果集中一定行的职责。
  2. 依靠当前的结果集地点检索大器晚成行或一而再的几行。
  3. 在结果集的当下地方修改行中的数据。
  4. 对其余客商所做的数据变动定义差别的敏感性品级。
  5. 能够以编制程序的不二秘籍访问数据库。

----16.mysql的端口? oracle的端口?
mysql的端口:3306;
oracle的端口:1521;

----17.mysql的分页? oracle的分页?

limit分页:Select * from table_name limit n,m;//n为发端行数,m为要截取的行数;
rownum分页:select a.* ,rownum rn from (select * from table_name rownum<=n) a where rn>m;

----18.轻易说下数据库的作业;
作业是保持数据的生龙活虎致性,它由相关的 DDL 或许 DML 语句做为载体,这组语句试行的
结果也许一齐成功,要么一齐退步;
数据库事务的八个特征(ACID卡塔尔:原子性,风姿罗曼蒂克致性,隔开性,持久性。

----19.oracle的索引.
目录是关全面据库中用来寄存每一条记下的大器晚成种对象,首要指标是加快数据
的读取速度和完整性检查。