> 文章列表 > SQL Server 连接查询和子查询

SQL Server 连接查询和子查询

SQL Server 连接查询和子查询

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

文章目录

  • 前言
  • 1.查询所有学生学号、姓名、选修课程号和成绩
    • 方法一
    • 方法二
  • 2.查询选修了课程名称为“数据库原理与应用”的学生的学号和姓名
    • 方法一
    • 方法二
  • 3.使用别名实现查询所有学生的学号、姓名、选修课程号和成绩
  • 4.查询所有年龄比张文宝大的学生的姓名、性别和年龄
  • 5.用格式二实现查询所有学生的学号、姓名、选修课程号和成绩
  • 6.查询所有学生的学号、姓名及对应选课的信息,如果该学生没有选课,也需要显示该生的学号和姓名
  • 7.查询选课学生的基本信息(若实际上有外键约束,这种情况是不存在的)
  • 8.采用右外连接查询学生的学号、选修的课程号、课程名及学分,同时也列出无学生选修的课程信息
  • 9.student和sc表实现全外连接
  • 10.从student表中查询年龄为‘19’和‘20’的学生的系部,不包括重复行
  • 11.从student表中查询年龄为‘19’和‘20’的学生的系部,包括重复行
  • 12.查询所有选修课程的学生的学号和姓名
    • 改为连接查询实现
  • 13.查询年龄高于平均年龄的学生的学号、姓名和年龄
  • 14.查询比CS系的任一学生年龄都大的学生姓名和年龄
  • 15.查询已有学生选修的课程信息
  • 16.查询尚没有学生选修的课程信息
  • 17.查询CS系学生的信息,生成一个新表temp
  • 18.将所有的学号和课程号信息生成一个新表SCL
  • 19.将选修了“前台页面设计”课程的学生成绩增加5分
  • 20.删除选修了“前台页面设计”课程的选课信息
  • 总结

前言

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

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

方法一

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

SQL Server 连接查询和子查询

方法二

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

SQL Server 连接查询和子查询

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

方法一

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

SQL Server 连接查询和子查询

方法二

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

SQL Server 连接查询和子查询

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

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

SQL Server 连接查询和子查询
自身连接查询

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

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

SQL Server 连接查询和子查询
使用第二种格式实现内连接查询(JOIN ON)

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

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

SQL Server 连接查询和子查询
外连接(左外连接)

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

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

SQL Server 连接查询和子查询
右外连接

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

select sc.sno,sname,cno,grade
from sc right outer join student
on student.sno=sc.sno

SQL Server 连接查询和子查询

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

select sc.sno,course.cno,cname,credit
from sc right outer join course
on course.cno=sc.cno

SQL Server 连接查询和子查询
全外连接

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

select *
from sc full outer join student 
on student.sno=sc.sno

SQL Server 连接查询和子查询
UNION联合查询

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

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

SQL Server 连接查询和子查询

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

select sdept from student where sage='19'
union all
select sdept from student where sage='20'

SQL Server 连接查询和子查询
使用IN或NOT IN 的子查询

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

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

SQL Server 连接查询和子查询

改为连接查询实现

select distinct student.sno,sname
from student join sc
on student.sno=sc.sno

SQL Server 连接查询和子查询
使用比较运算符的子查询

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

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

SQL Server 连接查询和子查询
使用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

SQL Server 连接查询和子查询
使用EXISTS的子查询

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

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

SQL Server 连接查询和子查询

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

select *
from course
where not exists
(select * from sc where course.cno=sc.cno)

SQL Server 连接查询和子查询
查看course表
SQL Server 连接查询和子查询
抽取数据到另一个表

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

select *
into temp
from student 
where sdept='CS'
select * from temp

SQL Server 连接查询和子查询
INSERT语句中的子查询

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

INSERT INTO SCL(sno,cno)
select sno,cno
from student,course

SQL Server 连接查询和子查询
SQL Server 连接查询和子查询
UPDATE 语句中的子查询

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

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

SQL Server 连接查询和子查询
删除语句中的子查询

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

delete from scwhere cno=(select cno from coursewhere sc.cno=course.cno and cname='前台页面设计')

SQL Server 连接查询和子查询


总结

今天的学习内容就分享到这里啦,如果对友友们有帮助的话,记得点赞收藏博客,关注后续的SQL Server内容哦~👻👻👻SQL Server 连接查询和子查询