文章详情页
SQL Server数据库连接查询和子查询实战案例
浏览:238日期:2023-05-02 10:03:27
目录
- 前言
- 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 XSCJGOSELECT student.sno,sname,cno,grade from student,scwhere student.sno=sc.sno

方法二
USE XSCJGOSELECT student.sno,sname,cno,grade from student join sc on student.sno=sc.sno

2.查询选修了课程名称为“数据库原理与应用”的学生的学号和姓名
方法一
USE XSCJselect student.sno,sname from student,sc,coursewhere 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.cnowhere cname="数据库原理与应用"

3.使用别名实现查询所有学生的学号、姓名、选修课程号和成绩
select x.sno,sname,cno,gradefrom student x,sc ywhere x.sno=y.sno

自身连接查询
4.查询所有年龄比张文宝大的学生的姓名、性别和年龄
select A.sname,A.ssex,A.sagefrom student A,student Bwhere B.sname="张文宝" and A.sage>B.sage

使用第二种格式实现内连接查询(JOIN ON)
5.用格式二实现查询所有学生的学号、姓名、选修课程号和成绩
SELECT student.sno,sname,cno,gradefrom student join scon student.sno=sc.sno

外连接(左外连接)
6.查询所有学生的学号、姓名及对应选课的信息,如果该学生没有选课,也需要显示该生的学号和姓名
SELECT student.sno,sname,cno,gradefrom student left outer join scon student.sno=sc.sno

右外连接
7.查询选课学生的基本信息(若实际上有外键约束,这种情况是不存在的)
select sc.sno,sname,cno,gradefrom sc right outer join studenton student.sno=sc.sno

8.采用右外连接查询学生的学号、选修的课程号、课程名及学分,同时也列出无学生选修的课程信息
select sc.sno,course.cno,cname,creditfrom sc right outer join courseon course.cno=sc.cno

全外连接
9.student和sc表实现全外连接
select *from sc full outer join 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"union allselect sdept from student where sage="20"

使用IN或NOT IN 的子查询
12.查询所有选修课程的学生的学号和姓名
select sno,snamefrom studentwhere sno in(select sno from sc)

改为连接查询实现
select distinct student.sno,snamefrom student join scon student.sno=sc.sno

使用比较运算符的子查询
13.查询年龄高于平均年龄的学生的学号、姓名和年龄
select sno,sname,sagefrom student where sage>(select AVG(sage) from student)

使用ANY或ALL的子查询
14.查询比CS系的任一学生年龄都大的学生姓名和年龄
select sname,sagefrom studentwhere sage>any (select sage from student where sdept="CS") AND sdept!="CS"select * from student

使用EXISTS的子查询
15.查询已有学生选修的课程信息
select *from coursewhere exists(select * from sc where course.cno=sc.cno)

16.查询尚没有学生选修的课程信息
select *from coursewhere not exists(select * from sc where course.cno=sc.cno)

查看course表

抽取数据到另一个表
17.查询CS系学生的信息,生成一个新表temp
select *into tempfrom student where sdept="CS"select * from temp

INSERT语句中的子查询
18.将所有的学号和课程号信息生成一个新表SCL
INSERT INTO SCL(sno,cno)select sno,cnofrom student,course


UPDATE 语句中的子查询
19.将选修了“前台页面设计”课程的学生成绩增加5分
UPDATE scset grade=grade+5where cno=(select cno from course where sc.cno=course.cno and cname="前台页面设计")

删除语句中的子查询
20.删除选修了“前台页面设计”课程的选课信息
delete from sc where cno= (select cno from course where sc.cno=course.cno and cname="前台页面设计")

总结
到此这篇关于SQL Server数据库连接查询和子查询的文章就介绍到这了,更多相关SQLServer连接查询和子查询内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
标签:
MsSQL
排行榜

网公网安备