习题
1.选择题
(1)设A、B两个数据表的记录数分别为3和4,对两个表执行交叉联接查询,查询结果中最多可获得(C )条记录。
A.3 B. 4 C. 12 D. 81
(2)如果查询的SELECT子句为SELECT A, B, C * D,则不能使用的GROUP B子句是( A )。
A.GROUP BY A
B.GROUP BY A,B
C.GROUP BY A,B,C*D
D.GROUP BY A,B,C,D
(3)关于查询语句中ORDER BY子句使用正确的是( C )。
A.如果未指定排序字段,则默认按递增排序
B.数据表的字段都可用于排序
C.如果在SELECT子句中使用了DISTINCT关键字,则排序字段必须出现在查询结果中
D.联合查询不允许使用ORDER BY子句
(4)在查询设计器中,不能与其他窗格保持同步的是(D )。
A.关系图窗格 B. 网格窗格
C.SQL窗格 D. 结果窗格
(5)下列函数中,返回值数据类型为int的是(B)。
A.LEFT B. LEN
C.LTRIM D. SUNSTRING
2.填空题
(1) 在启动查询分析器时,在登录对话框中可使用(Local)作为本地服务器名称。
(2) 查询分析器窗口主要由对象浏览器和(查询)窗口组成。
(3) 从Windows“开始”菜单启动查询分析器后,默认数据库为(master)。
(4) 以表格方式显示的查询结果保存为(导出)文件,其文件扩展名为(csv);以文本方式显示的查询结果保存为(报表)文件,其文件扩展名为(rpt)。
(5) 可使用(PRINT)或(SELECT)语句来显示函数结果。
(6) 在查询语句中,应在(SELECT)子句中指定输出字段。
(7) 如果要使用SELECT语句返回指定条数的记录,则应使用(TOP)关键字来限定输出字段。
(8) 联合查询指使用(UNION)运算将多个(查询结果)合并到一起。
(9) 当一个子SELECT的结果作为查询的条件,即在一个SELECT语句的WHERE子句中出现另一个SELECT语句,这种查询称为(嵌套)查询。
(10) 连接查询可分为3种类型:(内连接)、(外连接)和交叉连接。
3.问答题
(1) 在SELECT语句中,根据列的数据对查询结果进行排序的子句是什么?能消除重复行的关键字是什么?
(2) 写出与表达式“仓库号NOT IN('wh1','wh2')”功能相同的表达式。
用BETWEEN、AND形式改写条件子句WHERE mark> 550 AND mark<650。
(3) 在一个包含集合函数的SELECT语句中,GROUP BY子句有哪些用途?
(4) HA VING与WHERE同时用于指出查询条件,请说明各自的应用场合。
(5) 如果只想查看两个联接的表中互相匹配的行,应使用什么类型的联接?
4.应用题
(1) 使用SQL语句创建学生基本信息表student(s _ no、s _ name、s _ sex、birthday、polity ) 和学生成绩表sco时(s_no、c_no、score)。
针对这两个表,利用SELECT语句实现下列查询。
①所有学生的基本信息,并按学号排序。
SELECT * FROM student ORDER BY s_no
②所有女生的信息和女生的人数。
SELECT * FROM student WHERE s_sex=”女”
SELECT COUNT(*) as 女生人数FROM student WHERE s_sex=”女”
③所有男生的姓名、出生日期和年龄。
SELECT s_name,birtherday,YEAR(GETDATE())-YEAR(birthday) AS 年龄FROM student WHERE s_sex=”男”
④所有学生的姓名、出生日期、年龄、选修课程和成绩。
SELECT a.s_name, a.birthday, YEAR(GETDATE())-YEAR(birthday) AS 年龄,b.c_no,b.score FROM student a INNER JOIN sco b ON a.s_no=b.s_no
⑤某个指定姓名学生的成绩。
SELECT a.s_name,b.score FROM student a INNER JOIN sco b ON a.s_no=b.s_no WHERE
a.s_name=”张三”
⑥不及格学生的姓名。
SELECT a.s_name FROM student a INNER JOIN sco b ON a.s_no=b.s_no WHERE
b.score<60
⑦按女生进行分组查询。
SELECT S_SEX ,COUNT(S_SEX)AS 人数FROM student GROUP BY S_SEX
(2) 使用如下3个表,写出操作语句。
部门:部门号C(8),部门名C(12),负责人C(6),电话C(16)
职工:部门号C(8),职工号C(10),姓名C(8),性别C(2),出生日期D
工资:职工号C(10),基本工资N(8.2),津贴N(8.2),奖金N(8.2),扣除N(8.2)
①查询职工的实发工资。
SELECT 姓名,(基本工资+津贴+奖金-扣除) AS 实发工资 FROM 工资,职工 WHERE 职工.职工号=工资.职工号
②查询1962年10月27日出生的职工信息。
SELECT * FROM 职工 WHERE 出生日期='1962-10-27'
③查询每个部门年龄最长者的信息,要求得到的信息包括部门名和最长者的出生日期。
SELECT 部门名,MIN(出生日期) FROM 部门 JOIN 职工 ON 部门.部门号=职工.部门号GROUP BY 部门名
④查询所有目前年龄在35岁以上(不含35岁)的职工信息(姓名、性别和年龄)。
SELECT 姓名,性别,YEAR(GETDATE())-YEAR(出生日期) AS年龄 FROM 职工 WHERE YEAR(GETDATE())-YEAR(出生日期)>35
⑤查询有10名以上(含10名)职工的部门信息(部门名和职工人数),并按职工人数降序排序。
SELECT 部门名,COUNT(职工号)AS 职工人数 FROM 部门,职工 WHERE 部门.部门号=职工.部门号 GROUP BY 部门名 HAVING COUNT(*)>=10 ORDER BY 职工人数 DESC。