0


SQL Server 连接查询和子查询

提示: 利用单表简单查询和多表高级查询技能,并且根据查询要求灵活使用内连接查询、外连接查询或子查询等。同时还利用内连接查询的两种格式、三种外连接查询语法格式和子查询的语法格式。

文章目录


前言

内连接查询(不同表之间查询)

1.查询所有学生的学号、姓名、选修课程号和成绩

方法一

USE XSCJ
GO
SELECT student.sno,sname,cno,grade from student,sc
where student.sno=sc.sno

在这里插入图片描述

方法二

USE XSCJ
GO
SELECT student.sno,sname,cno,grade 
from student join sc on student.sno=sc.sno

在这里插入图片描述

2.查询选修了课程名称为“数据库原理与应用”的学生的学号和姓名

方法一

USE XSCJ
select student.sno,sname from student,sc,course
where student.sno=sc.sno and sc.cno=course.cno and cname='数据库原理与应用'

在这里插入图片描述

方法二

select student.sno,sname from student join sc 
on student.sno=sc.sno join course on sc.cno=course.cno
where cname='数据库原理与应用'

在这里插入图片描述

3.使用别名实现查询所有学生的学号、姓名、选修课程号和成绩

select x.sno,sname,cno,grade
from student x,sc y
where x.sno=y.sno

在这里插入图片描述
自身连接查询

4.查询所有年龄比张文宝大的学生的姓名、性别和年龄

select A.sname,A.ssex,A.sage
from student A,student B
where B.sname='张文宝'and A.sage>B.sage

在这里插入图片描述
使用第二种格式实现内连接查询(JOIN ON)

5.用格式二实现查询所有学生的学号、姓名、选修课程号和成绩

SELECT student.sno,sname,cno,grade
from student join sc
on student.sno=sc.sno

在这里插入图片描述
外连接(左外连接)

6.查询所有学生的学号、姓名及对应选课的信息,如果该学生没有选课,也需要显示该生的学号和姓名

SELECT student.sno,sname,cno,grade
from student leftouterjoin sc
on student.sno=sc.sno

在这里插入图片描述
右外连接

7.查询选课学生的基本信息(若实际上有外键约束,这种情况是不存在的)

select sc.sno,sname,cno,grade
from sc rightouterjoin student
on student.sno=sc.sno

在这里插入图片描述

8.采用右外连接查询学生的学号、选修的课程号、课程名及学分,同时也列出无学生选修的课程信息

select sc.sno,course.cno,cname,credit
from sc rightouterjoin course
on course.cno=sc.cno

在这里插入图片描述
全外连接

9.student和sc表实现全外连接

select*from sc fullouterjoin student 
on student.sno=sc.sno

在这里插入图片描述
UNION联合查询

10.从student表中查询年龄为‘19’和‘20’的学生的系部,不包括重复行

select sdept from student where sage='19'unionselect sdept from student where sage='20'

在这里插入图片描述

11.从student表中查询年龄为‘19’和‘20’的学生的系部,包括重复行

select sdept from student where sage='19'unionallselect sdept from student where sage='20'

在这里插入图片描述
使用IN或NOT IN 的子查询

12.查询所有选修课程的学生的学号和姓名

select sno,sname
from student
where sno in(select sno from sc)

在这里插入图片描述

改为连接查询实现

selectdistinct student.sno,sname
from student join sc
on student.sno=sc.sno

在这里插入图片描述
使用比较运算符的子查询

13.查询年龄高于平均年龄的学生的学号、姓名和年龄

select sno,sname,sage
from student 
where sage>(selectAVG(sage)from student)

在这里插入图片描述
使用ANY或ALL的子查询

14.查询比CS系的任一学生年龄都大的学生姓名和年龄

select sname,sage
from student
where sage>any(select sage from student where sdept='CS')AND sdept!='CS'select*from student

在这里插入图片描述
使用EXISTS的子查询

15.查询已有学生选修的课程信息

select*from course
whereexists(select*from sc where course.cno=sc.cno)

在这里插入图片描述

16.查询尚没有学生选修的课程信息

select*from course
wherenotexists(select*from sc where course.cno=sc.cno)

在这里插入图片描述
查看course表
在这里插入图片描述
抽取数据到另一个表

17.查询CS系学生的信息,生成一个新表temp

select*intotempfrom student 
where sdept='CS'select*fromtemp

在这里插入图片描述
INSERT语句中的子查询

18.将所有的学号和课程号信息生成一个新表SCL

INSERTINTO SCL(sno,cno)select sno,cno
from student,course

在这里插入图片描述
在这里插入图片描述
UPDATE 语句中的子查询

19.将选修了“前台页面设计”课程的学生成绩增加5分

UPDATE sc
set grade=grade+5where cno=(select cno from course
 where sc.cno=course.cno and cname='前台页面设计')

在这里插入图片描述
删除语句中的子查询

20.删除选修了“前台页面设计”课程的选课信息

deletefrom sc
 where cno=(select cno from course
 where sc.cno=course.cno and cname='前台页面设计')

在这里插入图片描述


总结

今天的学习内容就分享到这里啦,如果对友友们有帮助的话,记得点赞收藏博客,关注后续的SQL Server内容哦~👻👻👻请添加图片描述


本文转载自: https://blog.csdn.net/qq_66238381/article/details/130087594
版权归原作者 长月. 所有, 如有侵权,请联系我们删除。

“SQL Server 连接查询和子查询”的评论:

还没有评论