1、(单选题) 比赛结果result表内容如下:
Date Win
2017-07-12 胜
2017-07-12 负
2017-07-15 胜
2017-07-15 负
如果要生成下列结果, 正确的sql语句是:( )
比赛日期 胜 负
2017-07-12 1 1
2017-07-15 1 1
A. select Data As 比赛日期, (case when Win = ‘胜’ then 1 else 0 end) 胜, (case when Win =’负’ then 1 else 0 end) 负 from result group by Date
B. select Data As 比赛日期, SUM(case when Win = ‘胜’ then 1 else 0 end) 胜, SUM(case when Win =’负’ then 1 else 0 end) 负 from result
C. select Data As 比赛日期, SUM(when Win = ‘胜’ then 1 else 0 end) 胜, SUM(when Win =’负’ then 1 else 0 end) 负 from result group by Date
D. select Data As 比赛日期, SUM(case when Win = ‘胜’ then 1 else 0 end) 胜, SUM(case when Win =’负’ then 1 else 0 end) 负 from result group by Date
答案:D。由于结果是按日期一行表示的,所以要用的到group by Date,又因为是group by 分组表示,所以每个Date在结果中只有一行,所以需要用SUM函数将同一日期的结果聚合在一行中。在sql中,只有case when 没有单独的when
2、(单选题) 某学院包含多个专业如计算机科学、信息管理、软件工程、网络工程。每个专业每年都招收一个班级的学生。在招生过程中就已明确规定,一个学生只能就读于该学院的一个班级,但是一个班级可以招收不超过60个学生。那么,学生和班级之间是________的关系。
A. 一对多
B. 多对多
C. 一对一
D. 多对一
答案:D
3、(单选题) 某IT公司人事管理采用专门的人事管理系统来实现。后台数据库名为LF。新来的人事部张经理新官上任,第一件事是要对公司的员工做全面的了解。可是他在访问员工信息表EMPL里的工资和奖金字段的时被拒绝,只能查看该表其他字段。作为LF的开发者你将如何解决这一问题:( )
A. 废除张经理的数据库用户账户对表EMPL里的工资列和奖金列的SELECT权限
B. 添加张经理到db_datareader角色
C. 添加张经理到db_accessadmin角色
D. 授予张经理的数据库用户账户对表EMPL里的工资列和奖金列的SELECT权限
答案:D db_accessadmin:可以添加、删除用户的用户 db_datareader:可以查看所有数据库中用户表内数据的用户 由于张经理只是需要访问工资列和奖金列,所以只需要授予他查看这两列的权利就可以了。不需要授予他查看其他信息的权利,不然可能会造成信息的泄露
4、(单选题) 如果ORDER BY子句后未指定ASC或DESC,默认使用以下哪个?
A. DESC
B. ASC
C. 不存在默认值
D. 其它选项都不对
答案:B,默认就是ASC升序排列
5、(单选题) 快件信息表(waybillinfo)中存储了快件的所有操作信息,请找出在中山公园网点,异常派送(optype='异常派件')次数超过3次的快件(waybillno),正确的sql为()
A. select waybillno, count(*) from waybillinfo where zonecode = ‘中山公园’ and optype = ‘异常派件’ and count(waybillno) > 3
B. select waybillno, count(*) from waybillinfo where zonecode = ‘中山公园’ and optype = ‘异常派件’ order by waybillno having count(*) > 3
C. select waybillno, count(*) from waybillinfo where zonecode = ‘中山公园’ and optype = ‘异常派件’ having count(*) > 3
D. select waybillno from waybillinfo where zonecode = ‘中山公园’ and optype = ‘异常派件’ group by waybillno having count(*) > 3
答案:D。这道题目最简单的判断方法就是根据查询结果判断。由于需要输出的结果是快件信息,所以不需要count()。
涉及到的知识点:
① where后面不能以聚合函数作为条件,count()就是一个聚合函数
② having只能用在group by 之后,不能单独使用
6、(单选题) 下面哪些字符最可能会导致sql注入?
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
A. ‘(单引号)
B. /
C. “(双引号)
D. $
答案:A。以JDBC连接MySQL来说,执行sql查询语句时,可以通过 ’(单引号)来操作输入使查询结果始终为真。
7、(单选题) 运动会比赛信息的数据库,有如下三个表:
运动员ATHLETE(运动员编号 Ano,姓名Aname,性别Asex,所属系名 Adep),
项目ITEM (项目编号Ino,名称Iname,比赛地点Ilocation),
成绩SCORE (运动员编号Ano,项目编号Ino,积分Score)。
写出目前总积分最高的系名及其积分,SQL语句实现正确的是:( )
A. select Adep,SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep having SUM(Score)>=ANY(select SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep)
B. select Adep,SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep having SUM(Score)>=SOME(select SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep)
C. select Adep,SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep having SUM(Score) in (select SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep)
D. select Adep,SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep having SUM(Score)>=ALL(select SUM(Score) from ATHLETE,SCORE where ATHLETE.Ano = SCORE.Ano group by Adep)
答案:D。这题主要考点为ALL、ANY、SOME的区别。其中ANY和SOME都是只要有一个满足即可。ALL为必须全满足。
8、(不定项选择题) 有订单表orders,包含字段用户信息userid,字段产品信息productid,以下语句能够返回至少被订购过两次的productid?()
A. select productid from orders where count(productid) > 1
B. select productid from orders where max(productid) > 1
C. select productid from orders where having count(productid) > 1 group by productid
D. select productid from orders group by productid having count(productid) > 1
答案:D。
① where后面不能跟聚合函数coun(),max()等
② having必须跟group by
9、(不定项选择题) 有两张表,如下图所示
表A(仅列出部分数据作参考)
Order_id User_id Add_time
11701245001 10000 1498882474
11701245002 10001 1498882475
表B:(仅列出部分数据作参考)
id Order_id goods_id price
1 11701245001 1001 10
2 11701245001 1002 20
3 11701245002 1001 10
问:用SQL查询 购买过goods_id 为1001的用户user_id()
A. select user_id from A where order_id = (select order_id from B where goods_id = ‘1001’)
B. select a.user_id from A a,B b where a.order_id = b.order_id and b.goods_id = ‘1001’
C. select user_id from A where order_id in (select order_id from B where goods_id = ‘1001’)
D. select A.user_id from A left join B on A.order_id = B.order_id where B.goods_id = ‘1001’
答案:BCD。 A错在当后面语句有多个返回值时,不能用=,而应该用in。 D中left join on 是左连接的意思。
10、(不定项选择题) 在SQL中语法规范中,having子句的使用下面描述正确的是:( )
A. having子句即可包含聚合函数作用的字段也可包含普通的标量字段
B. 使用having的同时不能使用where子句
C. having子句必须与group by子句同时使用,不能单独使用
D. 使用having子句的作用是限定分组条件
E. having子句和where子句是等同的
F. 如果select语句中没有聚合函数的使用,就不能使用having子句
答案:AC
11、(单选题)MySQL是一种()数据库管理系统。
A. 层次型
B. 联盟型
C. 关系型
D. 对象型
答案:C。关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。
12、(单选题)大学生春季运动会的数据库,保存了比赛信息的三个表如下:
运动员 sporter(运动员编号 sporterid,姓名name,性别 sex,所属系号 department),
项目 item (项目编号 itemid,名称 itemname,比赛地点 location),
成绩 grade (运动员编号 id,项目编号 itemid,积分 mark)。
用SQL语句完成在“体育馆”进行比赛的各项目名称及其冠军的姓名,正确的是:( )。
A. SELECT i.itemname,s.name FROM grade g,(SELECT itemid iid,MAX(mark) max FROM grade WHERE itemid IN ( SELECT itemid FROM item WHERE location='体育馆') GROUP BY itemid) temp,item i,sporter s WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
B. SELECT i.itemname,s.name FROM grade g,(SELECT itemid iid,MIN(mark) max FROM grade WHERE itemid IN ( SELECT itemid FROM item WHERE location='体育馆') GROUP BY itemid) temp,item i,sporter s WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
C. SELECT i.itemname,s.name FROM grade g,(SELECT itemid iid,MAX(mark) max FROM grade WHERE itemid IN ( SELECT itemid FROM item WHERE location='体育馆') ) temp,item i,sporter s WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
D. SELECT i.itemname,s.name FROM grade g,(SELECT itemid iid,MIN(mark) max FROM grade WHERE itemid IN ( SELECT itemid FROM item WHERE location='体育馆') GROUP BY itemid) temp,item i,sporter s WHERE g.itemid=temp.iid AND g.mark=temp.max AND s.sporterid=g.sporterid;
答案:A。 1,首先找出在“体育馆”中进行的比赛项目id;
SELECT itemid
FROM item
WHERE location='体育馆'
2,然后在成绩表中根据项目id进行分组后找出单个项目最高分;
SELECT itemid iid,MAX(mark) max
FROM grade
WHERE itemid IN ( SELECT itemid FROM item WHERE location='体育馆') //条件限制地点在体育馆
GROUP BY itemid
3,接下来将上面含有项目id和项目最高分信息的表与另外三张表连接;
grade g, (上面含有项目最高分信息的表) temp, item i,sporter s
WHERE g.itemid=temp.iid
AND g.mark=temp.max
AND temp.iid=i.itemid
AND s.sporterid=g.sporterid
4,最后按要求从连接后的表中选出项目名称和冠军姓名。
SELECT i.itemname,s.name
FROM (以上连接后的表)
13、(单选题)积分result表中有A B C D四列,要求:
1)当A列值大于等于B列时,选择A列否则选择B列
2)当C列值大于等于D列时,选择C列否则选择D列
用SQL语句实现正确的是:( )
A. select ( when A>=B then A else B ) MAX_AB, ( when C>=D then C else D ) MAX_CD from result
B. select (case when A>=B then A else B ) MAX_AB, (case when C>=D then C else D ) MAX_CD from result
C. select (case when A>=B then A else B end) MAX_AB, (case when C>=D then C else D end) MAX_CD from result
D. select case when A>=B then A else B end MAX_AB, case when C>=D then C else D end MAX_CD from result
答案:C。
case when 条件 then 结果1 else 结果2 end。固定条件语句句式。
在sqlserver中必须要有括号。MySQL中D可以执行,即MySQL中不要求一定要有括号
14、(单选题)有一张学生成绩表sc(sno 学号,class 课程,score 成绩),请查询出每个学生的英语、数学的成绩(行转列,一个学生只有一行记录)。
A. select sno,class,score from sc where class in('english','math')
B. select sno,
if(class='english',score,0),
if(class='math',score,0)
from sc
where class in('english','math')
C. select sno,
case when class='english' then score else 0 end ,
case when class='math' then score else 0 end
from sc
where class in('english','math')
D. select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno
答案:D。
A选项,得到的结果只是原表的提取
B、C选项都行转列了,但是没有对列进行命名,也没有聚合,会导致一个学号存在两条数据
15、(单选题)有一个名为app的MySQL数据库表,其建表语句如下:
CREATE TABLE `app` ( `app_id` int(10) DEFAULT '0',//应用ID
`version_code` int(10) DEFAULT '0',//应用的版本号
`download_count` int(10) DEFAULT '0'//当前版本的下载量
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
当前表中数据记录如下,一条记录表示某个应用的某个版本的下载量记录:
+--------+--------------+----------------+
| app_id | version_code | download_count |
+--------+--------------+----------------+
| 1 | 10 | 90 |
| 1 | 11 | 100 |
| 1 | 10 | 20 |
| 2 | 15 | 10 |
| 2 | 16 | 15 |
| 2 | 17 | 30 |
| 2 | 16 | 5 |
| 3 | 2 | 50 |
+--------+--------------+----------------+
问: 下面那个MySQL语句可以查出每个应用中总下载量最大的版本号和次数( )?
A. select t.app_id, t.version_code, max(t.download_sum) from (select app_id, version_code, sum(download_count) download_sum from app group by app_id, version_code) as t group by t.app_id having t.download_sum > max(t.download_sum);
B. select t.app_id, t.version_code, max(t.download_sum) from (select app_id, version_code, sum(download_count) download_sum from app group by app_id, version_code order by download_sum desc) as t group by t.app_id;
C. select l.app_id, l.version_code, max(download_sum) from app l inner join (select app_id , version_code, sum(download_count) as download_sum from app group by app_id, version_code ) as t on l.app_id = t.app_id and l.version_code = t.version_code group by l.app_id, l.version_code;
D. select l.app_id, l.version_code, max(download_sum) from app l inner join (select app_id , version_code, sum(download_count) as download_sum from app group by app_id, version_code ) as t on l.app_id = t.app_id and l.version_code = t.version_code group by l.app_id;
答案:B。
select app_id, version_code, sum(download_count) download_sum from app group by app_id, version_code order by download_sum desc ,这句话的意思是将app_id且version_code相同的合并,并将其download count相加。再按download_sum降序排列。
之后再对上面生成的这个表进行查询,直接利用group by和max()获取结果。
16、(不定项选择题)下面有关sql 语句中 delete truncate的说法正确的是?()
A. 论清理表数据的速度,truncate一般比delete更快
B. truncate命令可以用来删除部分数据。
C. truncate只删除表的数据不删除表的结构
D. delete能够回收高水位
答案:AC。
delete 可以用来删除表中数据,可以使用where限制,从而删除部分数据
truncate也是用于删除表中数据,但是不能部分删除,只能全部删除。而且一般速度快于
delete,因为truncate删除表中数据会回收高水位。(即会释放存储空间)
drop 用于删除整个表,包括表的数据,和表的结构,上两个不删除表的结构。
17、(单选题)SQL中属于分组查询的语句是?()
A. where
B. 联盟链
C. group by
D. having
答案:C。
where是筛选、group by是分组。order by 是排序,
group by + having是筛选分组
18、(单选题)请取出 BORROW表中日期(RDATE字段)为当天的所有记录?(RDATE字段为datetime型,包含日期与时间)。SQL语句实现正确的是:( )
A. select * from BORROW where datediff(dd,RDATE,getdate())=0
B. select * from BORROW where RDATE=getdate()
C. select * from BORROW where RDATE-getdate()=0
D. select * from BORROW where RDATE>getdate()
答案:A。getdate()返回值包括时间,精准到秒,且为当前系统时间
>代表>
datediff():获取两个时间的时间间隔
19、(单选题)某软件公司正在升级一套水务管理系统。该系统用于县市级供排水企业、供水厂、排水厂中水务数据的管理工作。系统经重新整合后,开发人员决定不再使用一张备份数据表waterinfo001表,需永久删除。选出符合要求的语句。
A. DELETE TABLE waterinfo001
B. DELETE FROM TABLE waterinfo001
C. DROP TABLE waterinfo001
D. DROP FROM TABLE waterinfo001
答案:C。
delete 可以用来删除表中数据,可以使用where限制,从而删除部分数据
truncate也是用于删除表中数据,但是不能部分删除,只能全部删除。而且一般速度快于 delete,因为truncate删除表中数据会回收高水位。(即会释放存储空间)
drop 用于删除整个表,包括表的数据,和表的结构,上两个不删除表的结构。
20、(单选题)修改表test_tbl字段i的缺省值为1000,可以使用SQL语句( )
A. ALTER TABLE test_tbl ALTER i SET DEFAULT 1000;
B. ALTER TABLE test_tbl i SET DEFAULT 1000;
C. ALTER TABLE test_tbl MODIFY i SET DEFAULT 1000;
D. ALTER TABLE test_tbl CHANGE i SET DEFAULT 1000;
答案:A。
ALTER TABLE <表名> [修改选项]
{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名> }
21、(单选题)检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是()
A. SELECT SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=“王华”)
B. SELECT SN,AGE,SEX FROM S WHERE SN=“王华”
C. SELECT SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE WHERE SN=“王华”)
D. SELECT SN,AGE,SEX FROM S WHERE AGE>王华.AGE
答案:A。
22、(单选题)设有图书管理数据库:
图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))
读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))
借阅(借书证号C(4),总编号C(6),借书日期D(8))
对于图书管理数据库,查询0001号借书证的读者姓名和所借图书的书名。
SQL语句正确的是______。
SELECT 姓名,书名 FROM 借阅,图书,读者 WHERE
借阅.借书证号="0001" AND
_____
____
A. 图书.分类号=借阅.分类号 AND
读者.借书证号=借阅.借书证号
B. 图书.总编号=借阅.总编号 AND
读者.借书证号=借阅.借书证号
C. 读者.总编号=借阅.总编号 AND
读者.借书证号=借阅.借书证号
D. 图书.总编号=借阅.总编号 AND
读者.书名=借阅.书名
答案:B。
考察如何通过表中相关属性限制查找。
A借阅没有分类号
C读者没有总编号
D读者没有书名
23、(单选题)若要“查询选修了3门以上课程的学生的学号”,则正确的SQL语句是( )
A. SELECT S# FROM SC GROUP BY S# WHERE COUNT(*)> 3
B. SELECT S# FROM SC GROUP BY S# HAVING COUNT(*)> 3
C. SELECT S# FROM SC ORDER BY S# WHERE COUNT(*)> 3
D. SELECT S# FROM SC ORDER BY S# HAVING COUNT(*)> 3
答案:B。
where后面不能跟复合函数
group by 跟 having
24、(不定项选择题)SQL语句中,可以查看到学生信息表中,学生姓名的SQL语句为?()
A. select 学生信息 from 学生信息
B. select 学生信息 from 学生姓名
C. select * from 学生信息
D. select 学生姓名 from 学生信息
答案:CD
学生信息:是表名
学生姓名:是列名
25、(不定项选择题)使用SQL语句建个存储过程proc_stu,然后以student表中的学号Stu_ID为输入参数@s_no,返回学生个人的指定信息。下面创建存储过程语句正确的是:( )
A. CREATE PROCEDURE [stu].[proc_student]
@s_no AS int
AS
BEGIN
select * from stu.student where Stu_ID=@s_no
END
B. CREATE PROCEDURE [stu].[proc_student]
@s_no int
AS
BEGIN
select * from stu.student where Stu_ID=@s_no
END
C. CREATE PROCEDURE [stu].[proc_student]
@s_no int
AS
BEGIN
select * from stu.student where s_no=@s_no
END
D. CREATE PROCEDURE [stu].[proc_student]
@s_no AS int
AS
BEGIN
select * from stu.student where Stu_ID=@Stu_ID
END
答案:AB。
存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。它可以提高SQL的速度,存储过程是编译过的,如果某一个操作包含大量的SQL代码或分别被执行多次,那么使用存储过程比直接使用单条SQL语句执行速度快的多。
26、(单选题)SQL查询中使用where子句指出的是
A. 查询目标
B. 查询结果
C. 查询视图
D. 查询条件
答案:D。
27、(单选题)SQL中,下面对于数据定义语言DDL描述正确的是()
A. DDL关心的是数据库中的数据
B. 联盟链
C. 控制对数据库的访问
D. 定义数据库的结构
答案:D。 DDL:数据库定义语言
28、(单选题)某打车公司将驾驶里程(drivedistanced)超过5000里的司机信息转移到一张称为seniordrivers 的表中,他们的详细情况被记录在表drivers 中,正确的sql为()
A. insert into seniordrivers drivedistanced>=5000 from drivers where
B. insert seniordrivers (drivedistanced) values from drivers where drivedistanced>=5000
C. insert into seniordrivers (drivedistanced)values>=5000 from drivers where
D. select * into seniordrivers from drivers where drivedistanced >=5000
答案:D。
29、(单选题)select语句完整语法:
- select 目标表的列名或列表达式序列
- from 基本表名和(或)视图序列
- [where 行条件表达式]
- [group by 列名序列] [having 组条件表达式]
- [order by 列名[asc | desc]],则sql语句的执行顺序是:
A. 1),3),4),2),5)
B. 2),3),4),1),5)
C. 2),4),3),1),5)
D. 2),3),5),1),4)
答案:B。
30、(单选题)查询显示雇员的姓名和姓名中是否含有字母A的信息,满足如下条件
如果字符A在姓名的首位,则显示'字符A在首位'
如果字符A在姓名的末位,则显示'字符A在末位'
如果字符A在姓名中不存在,则显示'没有字符A'
其他情况显示'字符A在中间'
下列操作语句正确的是:( )
A. select ename, case charindex(‘A‘,ename) when 0 then ‘字符A在首位‘ when len(ename) then ‘字符A在末位‘ when 0 then ‘没有字符A‘ else ‘字符A在中间‘ end 名称类别 from emp;
B. select ename, case charindex(‘A‘,ename) when 1 then ‘字符A在首位‘ when len(ename)+1 then ‘字符A在末位‘ when 0 then ‘没有字符A‘ else ‘字符A在中间‘ end 名称类别 from emp;
C. select ename, case charindex(‘A‘,ename) when 1 then ‘字符A在首位‘ when len(ename) then ‘字符A在末位‘ when 0 then ‘没有字符A‘ else ‘字符A在中间‘ end 名称类别 from emp;
D. select ename, case charindex(‘A‘,ename) when 0 then ‘字符A在首位‘ when len(ename)+1 then ‘字符A在末位‘ when 0 then ‘没有字符A‘ else ‘字符A在中间‘ end 名称类别 from emp;
答案:C。 通过CHARINDEX如果能够找到对应的字符串,则返回该字符串位置,否则返回0。起始位置为1。
31、(单选题)雇员表EMP 结构如下
( 雇员编号 EMPNO , 姓名 ENAME ,
工作岗位 JOB , 管理员编号 MGR ,
受雇时间 HIREDATE , 工资 SAL ,
奖金 COMM , 部门编号 DEPTNO );
下列操作语句正确的是:( )
A. 显示在10和30部门工作并且工资大于5500元的雇员的姓名和工资,列标题显示为Employee和Monthly Salary
语句:SELECT ENAME EMPLOYEE ,SAL "MONTHLY SALARY" FROM EMP WHERE DEPTNO IN(10,30)AND SAL>5500;
B. 显示受雇时间在2010年1月1日和2012年12月31日之间的雇员的姓名、工资、及受雇时间,并以受雇时间升序排列。
语句:SELECT ENAME,SAL,HIREDATE FROM EMP WHERE HIREDATE BETWEEN '2010-01-01' AND '2012-12-31' ORDER BY HIREDATE;
C. 显示奖金比工资多10%以上的雇员的姓名、工资及奖金。
语句:SELECT ENAME,SAL ,COMM FROM EMP WHERE COMM>SAL*1.1;
D. 查询没有奖金且工资低于6500并工作岗位是经理、普通员工、销售员的所有员工信息。
语句:SELECT * FROM EMP WHERE SAL<6500 AND COMM IS NULL AND JOB IN ('经理','普通员工','销售员');
答案:A。
B选项因为between...and后面加日期的话,短日期默认time为00:00:00 因此查询日期只能截止到2012-12-31 00:00:00 并没有当天的记录
C选项没有考虑COMM为NULL的情况
D选项没有考虑COMM为0的情况
32、(不定项选择题)有订单表orders,包含字段用户信息userid,字段产品信息productid,以下语句能够返回至少被订购过两次的productid?()
A. select productid from orders where count(productid)>1
B. select productid from orders where max(productid)>1
C. select productid from orders where having count(productid)>1 group by productid
D. select productid from orders group by productid having count(productid)>1
答案:D。 本题考察的是group by + having 的用法和作用
33、(单选题)一张学生成绩表score,部分内容如下:
name course grade
张三 操作系统 67
张三 数据结构 86
李四 软件工程 89
用一条SQL 语句查询出每门课都大于80 分的学生姓名,SQL语句实现正确的是:( )
A. Select distinct name from score where name not in(Select name from score where grade <= 80);
B. Select distinct name from score where name in(Select name from score where grade <= 80);
C. Select name from score where name not in(Select name from score where grade <= 80);
D. Select name from score where name in(Select name from score where grade <= 80);
答案:A。
distinct用于返回唯一不同的值。即不返回重复的值。
所以C的话会返回两个张三。
34、(单选题)SQL语言共分为三大类(亦有说法分为四大类),那么不属于数据操纵语言的有()
A. update
B. grant
C. delete
D. insert
答案:B。 grant(赋予用户权限),deny(禁止权限),revoke(收回权限)属于数据控制语言
35、(不定项选择题)表结构如下:
CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sno` int(11) NOT NULL,
`cno` tinyint(4) NOT NULL,
`score` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
以下查询语句结果一定相等的是()
A. SELECT sum(score) / count(*) FROM score WHERE cno = 2;
B. SELECT sum(score) / count(id) FROM score WHERE cno = 2;
C. SELECT sum(score) / count(sno) FROM score WHERE cno = 2;
D. SELECT sum(score) / count(score) FROM score WHERE cno = 2;
E. SELECT sum(score) / count(1) FROM score WHERE cno = 2;
F. SELECT avg(score) FROM score WHERE cno = 2;
答案:ABCE; DF;
因为聚合函数自动过滤为NULL的数据。又因为id,sno都不会为NULL,score可能为NULL,所以count(*) = count(id) = count(sno) = count(1)。count(score) 和 avg(score)都会过滤score为NULL的学生数据,所以求得是出去score为NULL的学生的平均分。