实验目标:

1.掌握涉及一个以上数据表的查询方法。

2.掌握等值连接

3.掌握自然连接

4.掌握非等值连接

5.掌握自身连接、外连接和复合条件连接

本次实验sql脚本:

INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N'T1', N'李力    ', N'男', 47, N'教授      ', 1800, 3000, N'计算机    ')
GO
INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N'T2', N'王平    ', N'女', 28, N'讲师      ', 850, 1200, N'信息      ')
GO
INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N'T3', N'刘伟    ', N'男', 30, N'讲师      ', 900, 1200, N'计算机    ')
GO
INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N'T4', N'张雪    ', N'女', 51, N'教授      ', 1900, 3000, N'自动化    ')
GO
INSERT [dbo].[T] ([TNO], [TN], [SEX], [AGE], [PROF], [SAL], [COMM], [DEPT]) VALUES (N'T5', N'张兰    ', N'女', 39, N'副教授    ', 1300, 2000, N'信息      ')
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C1', N'程序设计  ', 60)
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C2', N'微机原理  ', 80)
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C3', N'数字逻辑  ', 60)
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C4', N'数据结构  ', 80)
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C5', N'数据库    ', 60)
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C6', N'编译原理  ', 60)
GO
INSERT [dbo].[C] ([CNO], [CN], [CT]) VALUES (N'C7', N'操作系统  ', 60)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T1', N'C1', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T1', N'C4', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T2', N'C5', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T3', N'C1', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T3', N'C5', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T4', N'C2', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T4', N'C3', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T5', N'C5', NULL)
GO
INSERT [dbo].[TC] ([TNO], [CNO], [Evaluation]) VALUES (N'T5', N'C7', NULL)
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S0', N'王青山  ', N'男', 19, N'计算机    ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S1', N'赵亦    ', N'女', 17, N'计算机    ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S2', N'钱尔    ', N'男', 18, N'信息      ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S3', N'张晓明  ', N'男', 18, N'信息      ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S4', N'李思    ', N'男', 21, N'自动化    ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S5', N'周武    ', N'男', 19, N'计算机    ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S6', N'吴丽    ', N'女', 20, N'自动化    ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S7', N'范思萌  ', N'女', 18, N'信息      ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S8', N'孙姗    ', N'女', 20, N'信息      ')
GO
INSERT [dbo].[S] ([SNO], [SN], [SEX], [AGE], [DEPT]) VALUES (N'S9', N'张海涛  ', N'男', 19, N'信息      ')
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S1', N'C1', 90)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S1', N'C2', 85)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S2', N'C5', 50)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S2', N'C6', 80)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S3', N'C1', 75)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S3', N'C2', 70)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S3', N'C4', 85)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S4', N'C1', 93)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S4', N'C2', 85)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S4', N'C3', 83)
GO
INSERT [dbo].[SC] ([SNO], [CNO], [SCORE]) VALUES (N'S5', N'C2', 89)
GO

一、连接查询

1.完成查询所有选课学生的学号、姓名、选课名称及成绩后,请回答以下问题:

 请将查询到的信息截图。

 下面的SQL语句可否完成上面的查询任务?为什么?

不可以,因为列名sno不明确,因为S表和SC表都存在sno列,需要表名.列名的形式来区分。

该题是通过连接谓词“=”完成两表的等值连接,请将此题改成用JOIN为关键字的内连接,将相应的SQL语句描述,from子句可参考以下格式:

2.完成查询每门课程的课程号、任课老师姓名及其选课人数,请回答以下问题:

 请将查询到的信息截图

① 此题哪几个表进行连接,连接的条件分别是什么?

T,TC,.C 和SC表,

连接条件是t.tno=tc.tno and c.cno=tc.cno and c.cno=sc.cno

② 说说你对此题分组的理解。

使用GROUP BY子句可以对C.CNO,T.TN多个字段进行分组操作,并可以对分组结果进行count累计过滤操作

二、自身连接

1.完成查询所有比“刘伟”工资高的老师的姓名、工资以及刘伟的工资,请回答以下问题:

① 请将查询到的信息截图

请将此题改成用JOIN为关键字的内连接,将相应的SQL语句描述。

2.在完成查询同时选修了“程序设计”和“微机原理”的学生姓名、系名题前,请回答以下问题:

① 请查询只选修了“程序设计”的学生姓名、系名,请将查询到的信息截图。

② 请查询只选修了“微机原理”的学生姓名、系名,请将查询到的信息截图。

③ 再把两个结果连接起来,现在是不是就得到了此题的结果,请把结果截图。

三、外连接

1.完成查询所有学生的学号、姓名、选课名称及成绩(没有选课的学生的选课信息显示为空)前,请完成下面的问题。

 前面用相应的内连接SQL语句(如下)完成了查询选课学生的相关信息,得到如下图所示的信息。可以用这种方法得到此题要求的信息吗?为什么?

 用左连接完成SC表与S表的连接,有下面两种方案,哪种方案是正确的?为什么?

① 再将上面得到的所有学生的部分信息左连接先C表,得到此题要求的所有信息,请把结果截图,并说说对左连接的理解。

② 此题可以改为右连接吗?如果可以,请描述相应的SQL语句

四、综合练习

综合练习的sql脚本:

--学生表(学号、姓名、年龄、性别)
create table student(
sno varchar(10) primary key,
sname varchar(20),
sage int,
ssex varchar(5)
)
--教师表(教师工号、姓名)
create table teacher(
tno varchar(10) primary key,
tname varchar(20)
)
--课程表(课程号、课程名、教师工号)
create table course(
cno varchar(10),
cname varchar(20),
tno varchar(10),
constraint pk_course primary key (cno,tno)
)
--成绩表(学号、课程号、分数)
create table sc(
sno varchar(10),
cno varchar(10),
score real,
constraint pk_sc primary key (sno,cno)
)
--初始化学生表
insert into student values ('s001','张三',23,'男');
insert into student values ('s002','李四',23,'男');
insert into student values ('s003','吴鹏',25,'男');
insert into student values ('s004','琴沁',20,'女');
insert into student values ('s005','王丽',20,'女');
insert into student values ('s006','李波',21,'男');
insert into student values ('s007','刘玉',21,'男');
insert into student values ('s008','萧蓉',21,'女');
insert into student values ('s009','陈萧晓',23,'女');
insert into student values ('s010','陈美',22,'女');
--初始化教师表
insert into teacher values ('t001', '刘阳');
insert into teacher values ('t002', '谌燕');
insert into teacher values ('t003', '胡明星');
--初始化课程表
insert into course values ('c001','J2SE','t002');
insert into course values ('c002','Java Web','t002');
insert into course values ('c003','SSH','t001');
insert into course values ('c004','Oracle','t001');
insert into course values ('c005','SQL SERVER 2005','t003');
insert into course values ('c006','C#','t003');
insert into course values ('c007','JavaScript','t002');
insert into course values ('c008','DIV+CSS','t001');
insert into course values ('c009','PHP','t003');
insert into course values ('c010','EJB3.0','t002');
--初始化成绩表
insert into sc values ('s001','c001',78.9);
insert into sc values ('s002','c001',80.9);
insert into sc values ('s003','c001',81.9);
insert into sc values ('s004','c001',60.9);
insert into sc values ('s001','c002',82.9);
insert into sc values ('s002','c002',72.9);
insert into sc values ('s003','c002',81.9);
insert into sc values ('s001','c003','59');

创建另一数据库,执行shiyan综合.sql,完成表的创建及数据的插入。回答以下问题(请贴出以下问题的sql语句)

① 查询不同课程成绩相同的学生的学号、课程号、学生成绩(自身连接)

select a.* from sc a ,sc b where a.score=b.score and a.cno<>b.cno

② 查询课程编号为c001 且课程成绩在80 分以上的学生的学号和姓名

select student.sno,sname

from student,sc

where student.sno=sc.sno and sc.cno='c001' and score>=80

③ 查询不及格的课程,并按课程成绩降序排列

select sc.sno,cname,score

from sc,course

where sc.cno=course.cno and sc.score<60

order by score desc

④ 查询课程成绩在70 分以上的姓名、课程名称和分数;

select sname,cname,score

from sc,student,course

where sc.sno=student.sno and sc.cno=course.cno and sc.score>70

⑤ 查询课程名称为“Oracle”,且分数低于60 的学生姓名和分数

select sname,score

from student,sc,course

where sc.sno=student.sno and sc.cno=course.cno and course.cname='Oracle' and scourse.score<60

⑥ 查询平均成绩大于85 的所有学生的学号、姓名和平均成绩

select student.sno,sname,avg(score) as 平均成绩

from student  join sc on student.sno=sc.sno

group by student.sno,sname

having avg(score)>85

⑦ 查询出只选修了一门课程的全部学生的学号和姓名

select student.sno,sname

from student left join sc on student.sno=sc.sno

group by student.sno,sname

having count(cno)=1

注意:having count(cno)不能写成having count(*),因为没有成绩的学生信息也有一行数据。

也可以:

select student.sno,sname

from student,sc

where student.sno=sc.sno

group by student.sno,sname

having count(cno)=1

⑧ 统计列印各科成绩,各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[ <60]

select course.cno,cname,sum(case when score<60 then 1 else 0 end) as '[<60]',

sum(case when score>=60 and score<70 then 1 else 0 end) as '[70-60]',

sum(case when score>=70 and score<85 then 1 else 0 end) as '[85-70]',

sum(case when score>=85 and score<100 then 1 else 0  end) as '[100-85]'

from sc,course

where sc.cno=course.cno

group by course.cno,cname

⑨ 查询不同老师所教不同课程平均分从高到低显示,平均分最多保留两位小数。

select sc.cno,teacher.tname,cname,round(avg(score),2) as 平均成绩

from course,sc,teacher

where course.cno=sc.cno and course.tno=teacher.tno

group by teacher.tname,sc.cno,cname

order by avg(score) desc

若不想把cname放在group by 里,也可以放在一些聚集函数,但不影响它的值,如max(cname)

⑩ 查询所有课程成绩小于60 分的同学的学号、姓名

select student.sno,sname

from student,sc

where student.sno=sc.sno

group by student.sno,sname

having sum(case when score<60 then 1 else 0 end)=count(*)

SQL service基础(四)连接查询、自身连接查询、外连接查询和复合条件连接查询相关推荐

  1. MySQL复合条件连接查询

    复合条件连接查询 就是在连接查询的过程中,通过添加过滤条件来限制查询结果,使查询结果更加精确 在department表和employee表之间,使用内连接查询,并且,将查询结果按照年龄从小到大排序

  2. SQL service基础(五)嵌套查询(UNION、EXCEPT、INTERSECT)

    实验目标: 1.掌握嵌套查询,从而增强SQL的查询能力 2.掌握UNION.EXCEPT.INTERSECT操作符将来自不同查询但结构相同的数据集合组合起来,形成一个具有综合信息的查询结果 sql脚本 ...

  3. SQL service基础(二)对数据指定列查询、条件查询、查询结果排序、聚集函数查询、分组统计查询

    实验目标: 1.掌握指定列或全部列查询 2.掌握按条件查询 3.掌握对查询结果排序 4.掌握使用聚集函数的查询 5.掌握分组统计查询 一.请完成书中实验7.1,并完成以下问题. 1.查询所有学生的姓名 ...

  4. SQL service基础(九)用户定义数据类型和用户定义函数的概念、创建及使用方法

    实验目标: 1.学习和掌握用户定义数据类型的概念.创建及使用方法. 2.学习和掌握用户定义函数的概念.创建及使用方法. 创建一个数据库,执行shiyan15.sql脚本 一.创建和使用用户定义的函数( ...

  5. 为什么用IP查询网查询的自己的外网IP和用tracert命令查询的自己的出口IP不一致?

    斜体为读者提问: 我在电脑上查询的出口IP是58.60.*.*,然后用tracert命令查询ping百度的路径,结果发现路径里面没有同一网段的(即以58.60.开头的),这是为什么? 正文 题主这个问 ...

  6. ad被锁定的账户_如何在AD中方便查询被锁定的帐号状态和特定条件的查询被锁定的帐号...

    背景 你们有没有试过这样一个情况,为了加强AD域的帐号安全,防止帐号被恶意的密码枚举,所以在AD域中设置了帐号锁定的策略,当你设置了帐号锁定策略之后,发现真的有很多的用户反馈帐号用不了了,查看这个用户 ...

  7. mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...

    一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...

  8. Redis实现分页和多条件模糊查询方案

    导言 Redis是一个高效的内存数据库,它支持包括String.List.Set.SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊 ...

  9. 条件查询_多条件组合查询---测试用例设计

    一.假设查询因子:A,B,C,D,E(下拉框+复选框) 1.单独查询:A:B:C:D:E - 确保单独查询的正确性,这也是最基本的. 2.两个组合查询:AB:AC:AD:AE:BC:BD:BE:CD: ...

最新文章

  1. 2021年大数据Flink(六):Flink On Yarn模式
  2. SuperGLUE和GLUE双料冠军!图灵T-NLRv5:MNLI和RTE首次达到人类水平
  3. 「天才少年」稚晖君调戏机械臂!加上AI视觉,2小时学会抓螺母【文末送5本书】...
  4. Key-Value Store Indexer(Lily HBase Indexer) 小型采坑
  5. 从性能角度选购Adroid智能手机,双核、大屏与游戏的取舍
  6. mysql left join join right
  7. CSS浮动(二)---Float
  8. 【OpenCV 例程200篇】82. 频率域巴特沃斯低通滤波器
  9. MFC和Direct3D9一起使用
  10. Swift之学习资料
  11. 华为OJ之奥运会金牌排名显示国家名称
  12. Scrapy爬虫项目的创建及案例
  13. WIN10虚拟机安装教程
  14. [转] 测度论简介------一个通往异世界的大门
  15. 什么是听觉?机器听觉?
  16. 关于Word的累加符号上下标变右标的解决办法
  17. SpringBoot 实现自定义钉钉机器人
  18. mysql将小数取整,mysql的取整函数
  19. 【持续更新】机器学习特征工程实用技巧大全
  20. 20210310 钣金件螺栓螺帽缺失检测汇总 dropout

热门文章

  1. Nacos之服务治理
  2. “旧网站回收——以旧换新”活动引发换购热潮
  3. python找工作不好找怎么办_为何Python不好找工作?
  4. 【笔记】tomcat原理
  5. 忘了Excel 2003文档的密码怎么办
  6. Luogu P1092 虫食算 爆搜
  7. 一条十几秒的Tik Tok视频月变现9w,2022年还得是短视频来钱快
  8. java有序数组找中位数_有序数组中找中位数
  9. CRC校验码产生器设计(verilog)
  10. 如何解决局域网常掉线问题