注:此内容仅仅只是记录成长与分享学习,不能保证绝对正确
实验三 数据查询
实验日期: 2022 年 4 月 10 日 星期 天 实验地点: 宿舍
一 实验目的
1. 熟练掌握SQL的SELECT简单查询语句。
2. 熟练使用SQL语句进行多表连接查询、嵌套查询、集合查询等复杂查询。
二 实验要求
1. 请大家务必动手完成实验,实验过程中,会随机抽查提问,作为实验成绩重要参考。
2. 请将数据库studb的两个基本文件自行保留,下次实验在此基础上进行。
3. 请在本实验报告指定方框认真填写对应的实验代码或实验结果。
三 实验内容
1. 通过执行SQL的SELECT语句,对数据表S进行投影、选择等单表简单查询。
2. 通过执行SQL语句,对数据表S、C、SC中的数据进行多表连接查询。
3. 通过执行SQL语句,对数据表S、C、SC中的数据进行集合查询。
4. 通过执行SQL语句,对数据表S、C、SC中的数据进行嵌套查询。
四 实验步骤
附加前述数据库,按下述要求完成实验:
1. 投影查询
1)在S表中查询计算机系学生的学号和姓名。
SQL命令为:
SELECT SNO,SNAME FROM S; |
2)在S表中查询学生的学号、年龄和出生年份(当前年份减去年龄),要求查询结果的列名显示为“学号”,“年龄”,“出生年份”。
SQL命令为:
SELECT SNO AS 学号,AGE AS 年龄,2022-AGE AS 出生年份 FROM S; |
2. 选择查询
1)在S表中查询计算机系年龄小于20岁的学生信息。
SQL命令为:
SELECT * FROM S WHERE DNAME LIKE '计算机' AND AGE<20; |
2)利用字符串匹配进行模糊查询,在S表中找出其姓名中含有某个指定字的学生信息。
SQL命令为:
SELECT * FROM S WHERE SNAME LIKE '%X%' ; |
3. 多表连接查询
1)查询所有学生信息以及他们选修课程的课程号和得分(S表与SC表连接查询)。
SQL命令为:
SELECT S.SNO,SNAME,AGE,GENDER,DNAME,CNO,SCORE FROM S,SC WHERE S.SNO=SC.SNO; |
2)通过取别名将C表与其自身进行连接查询,查询每一门课程的间接先选课,查询结果的第一列为课程号,第二列为间接先选课的课程号,比如课程C4的先选课为C2,C2的先选课为C1,所以C4的间接先选课为C1。
SQL命令为:
SELECT first.CNO,second.PRE_CNO FROM C first ,C second WHERE first.PRE_CNO=second.CNO |
4. 集合查询 运用UNION运算符查询选修了课程C2或C4的学生的学号和姓名。
SQL命令为:
SELECT SC.SNO,S.SNAME FROM SC,S WHERE SC.SNO=S.SNO AND CNO='C2' GROUP BY CNO UNION SELECT SC.SNO,S.SNAME FROM SC,S WHERE SC.SNO=S.SNO AND CNO='C4' GROUP BY CNO |
5. 嵌套查询
1)使用运算符IN查询选修了“数据结构”课程(或其他课程)的学生的学号和姓名,完善并执行下列SQL语句。
SELECT SNO,SNAME FROM S
WHERE SNO IN
( SELECT SNO FROM SC
WHERE CNO IN
( SELECT CNO FROM C
WHERE CNAME='数据结构'
)
);
2)使用存在量词EXISTS查询选修了C2课程的学生的姓名,完善并执行下列SQL语句。
SELECT SNAME
FROM S
WHERE EXISTS
(
SELECT *
FROM SC
WHERE SC.SNO=S.SNO AND CNO='C2'
)
3)检索选修了所有课程的学生学号和姓名,完善并执行下列SQL语句(可通俗理解为:查询这样的学生,不存在(NOT EXISTS)这样的课程,该学生没选(NOT EXISTS))。
SELECT SNO,SNAME FROM S
WHERE NOT EXISTS
(
SELECT * FROM C
WHERE NOT EXISTS
(
SELECT * FROM SC
WHERE SC.SNO=S.SNO AND SC.CNO=C.CNO
)
);
五 自选动作
请在下框填写除了上述实验内容之外自选的实验内容:
使用内联函数求学生总人数,总分,最高最低分,平均分等等 SELECT COUNT(*)人数 FROM S SELECT SUM(SCORE)总分,MAX(SCORE)最高分,MIN(SCORE)最低分,AVG(SCORE)及格 FROM SC SELECT SNO,AVG(SCORE)及格 FROM SC group by SNO having AVG(SCORE)>=60 |
六 实验总结
一开始实验的时候不知道切换数据库,导致一直显示的都是无效列名和无效对象名,上网查阅了资料才知道,打开SQL默认的是系统数据库master,所以一直都显示无效,后来在“新建查询”下面的可用数据库里把其改为“studb”后才行的。之后的实验基本都还顺畅,没什么大困难。 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)