SQL题库

880 阅读21分钟

1、(单选题) 比赛结果result表内容如下:

Date                    Win
2017-07-122017-07-122017-07-152017-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 SNAGESEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=“王华”)
B.	SELECT SNAGESEX FROM S WHERE SN=“王华”
C.	SELECT SNAGESEX FROM S WHERE AGE>(SELECT AGE WHERE SN=“王华”)
D.	SELECT SNAGESEX 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语句完整语法:

  1. select 目标表的列名或列表达式序列
  2. from 基本表名和(或)视图序列
  3. [where 行条件表达式]
  4. [group by 列名序列] [having 组条件表达式]
  5. [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.	显示在1030部门工作并且工资大于5500元的雇员的姓名和工资,列标题显示为EmployeeMonthly Salary
        语句:SELECT ENAME EMPLOYEE ,SAL &quot;MONTHLY SALARY&quot; FROM EMP WHERE DEPTNO IN(10,30)AND SAL&gt;5500;
B.	显示受雇时间在201011日和20121231日之间的雇员的姓名、工资、及受雇时间,并以受雇时间升序排列。
        语句: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&gt;SAL*1.1;
D.	查询没有奖金且工资低于6500并工作岗位是经理、普通员工、销售员的所有员工信息。
        语句:SELECT * FROM EMP WHERE SAL&lt;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的学生的平均分。