《SQL语句强化练习题及答案》由会员分享,可在线阅读,更多相关《SQL语句强化练习题及答案(7页珍藏版)》请在金锄头文库上搜索。
1、SQL语句强化练习题及答案一、简单查询1、列出全部学生的信息。SELECT * FROM 学生2、列出软件专业全部学生的学号及姓名。SELECT 学号,姓名 FROM 学生 WHERE 专业=软件3、列出所有必修课的课号。SELECT DISTINCT 课号 FROM 必修课4、求1号课成绩大于80分的学生的学号及成绩,并按成绩由高到低列出。SELECT 学号,成绩 FROM 选课 WHERE 课号=1 AND 成绩80 ORDER BY 成绩 DESC5、列出非软件专业学生的名单。方法一:SELECT 姓名 FROM 学生 WHERE 专业软件方法二:SELECT 姓名 FROM 学生 WH
2、ERE NOT 专业=软件方法三:SELECT 姓名 FROM 学生 WHERE 专业!=软件6、查询成绩在7080分之间的学生选课得分情况方法一:SELECT * FROM 选课 WHERE 成绩=70 AND 成绩150(二)自连接查询1、列出那些专业相同的学生相应的姓名及专业信息。SELECT a.姓名,b.姓名,专业 FROM 学生 a,学生 b WHERE a.学号b.学号 AND a.专业=b.专业2、求至少选修1号课和2号课的学生的学号。SELECT X.学号 FROM 选课 X,选课 Y WHERE X.学号=Y.学号 AND X.课号=1 AND Y.课号=23、有以下表ra
3、te.dbf 币种1代码 C(2)、币种2代码 C(2)、买入价 N(8,4)、卖出价 N(8,4)外汇汇率.dbf 币种1 C(4)、币种2 C(4)、买入价 N(8,4)、卖出价 N(8,4)外汇代码.dbf 外汇名称 C(10)、外汇代码 C(10)要求:将所有“外汇汇率”表中的数据插入rate表中并且顺序不变,由于“外汇汇率”中的币种1和币种2存放的是外币名称,而rate表中的币种1代码和币种2代码应该存放外币代码,所以插入时要做相应的改动,外币名称与外向代码的对应关系存储在“外汇代码”表中。SELECT A.外币代码 AS 币种1代码,B.外币代码 AS 币种2代码,;买入价,卖出价
4、 FROM 外汇代码 A,外汇汇率,外汇代码 B;WHERE A.外币名称=外汇汇率.币种1 AND B.外币名称=外汇汇率.币种2 INTO TABLE rate4、假定有“雇员”表(雇员号 C(2),雇员姓名 C(6),经理号 C(2),根据雇员关系列出上一级经理及其所领导的职员清单。(教案中的例题)SELECT 领导,S.雇员姓名,雇员,E.雇员姓名 FROM 雇员 S,雇员 E WHERE S.雇员号=E.经理(三)超连接1、列出选修1号课的学生姓名及成绩。方法一:(使用简单连接查询格式)SELECT 姓名,成绩 FROM 学生,选课 WHERE 学生.学号=选课.学号 AND 课号=
5、1方法二:(使用内部连接格式)SELECT 姓名,成绩 FROM 学生 INNER JOIN 选课 ON 学生.学号=选课.学号 WHERE 课号=1方法三:内部连接的INNER短语可以省略。(与方法二等价)SELECT 姓名,成绩 FROM 学生 JOIN 选课 ON 学生.学号=选课.学号 WHERE 课号=12、查询订货管理数据库中数据的仓库号、城市、供应商名和地址信息。方法一:使用简单连接格式。SELECT 仓库.仓库号,城市,供应商名,地址 FROM 供应商,订购单,职工,仓库;WHERE 供应商.供应商号=订购单.供应商号 AND订购单.职工号=职工.职工号 ;AND 职工.仓库号
6、=仓库.仓库号方法二:使用超连接的内部连接格式。(注意连接条件的顺序)SELECT 仓库.仓库号,城市,供应商名,地址 FROM 供应商 JOIN 订购单 JOIN 职工 JOIN 仓库 ;ON 职工.仓库号=仓库.仓库号 ON 订购单.职工号=职工.职工号 ON 供应商.供应商号=订购单.供应商号3、查询没有选修任何课程的学生姓名。方法一:使用嵌套查询SELECT 姓名 FROM 学生 WHERE 学号 NOT IN (SELECT 学号 FROM 选课)方法二:使用超连接的右连接。SELECT 姓名 FROM 选课 RIGHT JOIN 学生 ON 选课.学号=学生.学号 WHERE 选课
7、.学号学生.学号方法三:使用超连接的左连接。(注意表名顺序和方法二的不同)SELECT 姓名 FROM 学生 LEFT JOIN 选课 ON 选课.学号=学生.学号 WHERE 选课.学号学生.学号三、嵌套查询(一)普通嵌套与谓词EXISTS1、列出选修汇编语言课的学生的学号。方法一:SELECT 学号 FROM 选课 WHERE 课号=(SELECT 课号 FROM 课程 WHERE 课名=汇编语言)方法二:使用谓词EXISTS。注意和方法一格式上的不同。SELECT 学号 FROM 选课 WHERE EXIST (SELECT * FROM 课程 ;WHERE 课名=汇编语言 AND 选课
8、.课号=课程.课号)2、求软件专业所有必修课的课程信息。方法一:SELECT * FROM 课程 WHERE 课号 IN; (SELECT 课号 FROM 必修课 WHERE 必修专业=软件)方法二:SELECT * FROM 课程 WHERE EXIST (SELECT * FROM 必修课 WHERE 必修专业=软件 ;AND 课程.课号=必修课.课号)(二)量词ANY、SOME、ALL1、求选修2号课的学生中,成绩比选修1号课的最低成绩要高的学生的学号和成绩。方法一:SELECT 学号,成绩 FROM 选课 WHERE 课号=2 AND 成绩;(SELECT MIN(成绩) FROM 选
9、课 WHERE 课号=1)方法二:ANY等价于SOME,所以可将ANY换成SOME。SELECT 学号,成绩 FROM 选课 WHERE 课号=2 AND 成绩ANY ;(SELECT 成绩 FROM 选课 WHERE 课号=1)2、求选修2号课的学生中,成绩比选修1号课的任何学生的成绩都要高的那些学生的学号和成绩。方法一:SELECT 学号,成绩 FROM 选课 WHERE 课号=2 AND 成绩;(SELECT MAX(成绩) FROM 选课 WHERE 课号=1)方法二:SELECT 学号,成绩 FROM 选课 WHERE 课号=2 AND 成绩ALL ;(SELECT 成绩 FROM
10、选课 WHERE 课号=1)(三)内外层互相关嵌套(外层依赖于内层的查询结果,内层依赖于外层来进一步查询)1、列出每门课程中成绩最高的选课信息。SELECT * FROM 选课 A WHERE 成绩=(SELECT MAX(成绩) FROM 选课 B WHERE A.课号=B.课号)2、列出每个学生中成绩低于本人平均成绩的选课信息。SELECT * FROM 选课 A WHERE 成绩(SELECT AVG(成绩) FROM 选课 B WHERE A.学号=B.学号)3、列出表“订购单2.dbf”(其内容就是在订购单表的基础上增加一个总金额字段)中每个职工经手的具有最高总金额的订购单信息。(教
11、案中例题)SELECT out.职工号,out.供应商号,out.订货单号,out.订货日期,out.总金额;FROM 订购单 out WHERE 总金额=(SELECT MAX(总金额) FROM 订购单 inner1;Where out.职工号=inner1.职工号)四、操作功能1、在课程表中插入新的元组(5,大学英语)。INSERT INTO 课程(课号,课名) VALUES(5,大学英语)2、给学生表中男生的记录加上删除标记。DELETE FROM 学生 WHERE 性别=男3、将选课表中所有课程的成绩分别提高5分。将课号为“4”的课程的成绩置为空值。UPDATE 选课 SET 成绩=成绩+5UPDATE 选课 SET 成绩=NULL WHERE 课号=4五、定义表结构1、建立研究生表,该表不属于任何数据库,其结构如表所示:字段名字段类型字段长度小数位数特殊要求学号C6 姓名C8 性别C2 年龄N30 入学年月D 允许空值CREATE TABLE 研究生 FREE (学号 C(6),姓名 C(8),性别 C(2),年龄 N(3,0),入学年月 D NULL)2、假设已经建立了XSK数据库,在XSK中建立“学生1”表,其结构如表所示