《数据库查询学习.pptx》由会员分享,可在线阅读,更多相关《数据库查询学习.pptx(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、25 三月 202316.1 SELECT语句的简单查询【例6-1】从作者表中找到每位作者姓名和住宅电话。USE book_manage SELECT 姓名,住宅电话 FROM 作者表【例6-2】从“作者表”中找到姓为“李”的作者姓名和住宅电话。USE book_manage SELECT 姓名,住宅电话 FROM 作者表 WHERE 姓名 LIKE 李%第1页/共25页25 三月 20232【例6-3】从“作者表”中找到住宅电话区号为“010”的作者编号、姓名和住宅电话。USE book_manage SELECT 作者编号,姓名,住宅电话 FROM 作者表 WHERE 住宅电话 LIKE
2、010%第2页/共25页25 三月 202336.2 T-SQL高级查询6.2.1 多表查询 连接查询:通过每个表之间共同列的关联性来查询数据,它是关系数据库查询最主要的特征。连接查询分为内连接查询、外连接查询、自连接查询。合并查询:使用UNION操作符的查询,是求两个或多个查询结果的并集。第3页/共25页25 三月 202341连接查询【例6-4】查找成绩为90分或以上的学生姓名、课程号和成绩。USE Students SELECT Student.SName,SC.CNo,SC.Grade FROM Student JOIN SC ON(Student.SNo=SC.SNo)WHERE G
3、rade=90第4页/共25页25 三月 20235连接类型 内连接(INNER):仅显示两个连接表中匹配的行,INNER关键字可以缺省。【例6-5】查找选修了课程的学生姓名。USE students SELECT DISTINCT S.SName FROM Student AS S INNER JOIN SC AS G ON(S.SNo=G.SNo)第5页/共25页25 三月 20236外连接(OUTER):连接双方有左右之分,“表1”称为“左”表,表2称为“右”表。用左表的每行数据去匹配右表的数据列,符合连接条件的数据返回到结果集中,不符合连接条件的列将被填上NULL 值再返回到结果集中。
4、左外连接(Left Outer)右外连接(Right Outer)完全外连接(Full Outer)第6页/共25页25 三月 20237左外连接:结果集中包括“左”表中的所有行及“右”表中所有匹配的行,不包括“右”表中不匹配的行。【例6-6】查看所有学生姓名及其选课情况(课程号)。USE students SELECT S.SName,G.CNo FROM Student AS S LEFT OUTER JOIN SC AS G ON(S.SNo=G.SNo)第7页/共25页25 三月 20238右外连接:包括“右”表中的所有行及“左”表中所有匹配的行,不包括“左”表中不匹配的行。【例6-7
5、】查找所有选修了课程的学生姓名。USE students SELECT DISTINCT S.SName FROM Student AS S RIGHT OUTER JOIN SC AS G ON(S.SNo=G.SNo)第8页/共25页25 三月 20239完全外连接:包括所有连接表中的所有行,不论它们是否匹配。【例6-8】查看所有任课教师及课程情况。USE students SELECT T.TName,C.CName FROM Teachers AS T FULL OUTER JOIN Courses AS C ON(C.TNo=T.TNo)第9页/共25页25 三月 202310交叉连
6、接(CROSS):即两个连接表的笛卡儿积,求两个表中所有行的连串,每个连串作为结果集中的一行。【例6-9】“教师基本信息”表与“课程基本信息”表的交叉连接。USE students SELECT T.TName,C.CName FROM Teachers AS T CROSS JOIN Courses AS C 第10页/共25页25 三月 202311自连接:连接双方可以是不同的两个表,也可以是同一个表。在一个表与其自身之间进行连接为自连接。自连接可以是内连接或外连接。【例6-10】求“数据库原理及应用”课程的间接先行课的课程号。USE students SELECT C1.CName,C2
7、.PCNo FROM Courses AS C1 JOIN Courses AS C2 ON(C1.PCNo=C2.CNo)WHERE C1.CName=数据库原理及应用第11页/共25页25 三月 2023122合并查询【例6-11】求table1和table2中的内容。SELECT *FROM table1 UNION SELECT *FROM table2UNION操作符将两个或两个以上的查询结果合并为一个结果集,其语法格式如下:UNION ALL UNION ALL 第12页/共25页25 三月 2023136.2.2 分组查询 1GROUP BY子句【例6-12】求各职称级别教师的平
8、均年龄。USE students SELECT 职称,AVG(Age)FROM Teachers WHERE Age=50 GROUP BY 职称第13页/共25页25 三月 202314GROUP BY子句的语法格式为:GROUP BY ALL ,n WITH CUBE|ROLLUP 【例6-13】求各职称级别教师的平均年龄。SELECT 职称,Sex,COUNT(*)AS 人数 FROM Teachers GROUP BY 职称,Sex WITH CUBE第14页/共25页25 三月 2023152HAVING 子句【例6-14】求平均成绩为80分或以上的学生的姓名及平均成绩。USE St
9、udents SELECT S.SName,AVG(G.Grade)AS 平均成绩 FROM SC AS G JOIN Student AS S ON(G.SNo=S.SNo)GROUP BY S.SName HAVING AVG(G.Grade)=80第15页/共25页25 三月 2023166.2.3 统计查询 1聚合函数【例6-16】求学生的平均成绩、最高分、最低分以及总分。USE students SELECT AVG(Grade)AS 平均成绩,MAX(Grade)AS 最高分,MIN(Grade)AS 最低分,SUM(Grade)AS 总分 FROM SC第16页/共25页25 三
10、月 2023172.使用COMPUTE和COMPUTE BY子句【例6-18】求每名学生的所选课的门数、平均分和总分。USE students SELECT S.SName,COUNT(*)AS 课程门数,AVG(G.Grade)AS 平均分,SUM(G.Grade)AS 总分 FROM SC AS G JOIN Student AS S ON (G.Sno=S.SNo)GROUP BY S.Sname第17页/共25页25 三月 2023186.2.4 嵌套查询 1使用IN的嵌套查询 使用嵌套查询改写【例6-5】,查找选修了课程的学生姓名。USE students SELECT SName
11、FROM Student WHERE SNo IN (SELECT DISTINCT SNo FROM SC)第18页/共25页25 三月 2023192使用比较运算符的嵌套查询【例6-28】查询没有选修课程的学生姓名。USE Students SELECT SName FROM Student WHERE SNo ALL (SELECT DISTINCT SNo FROM SC)第19页/共25页25 三月 2023203EXISTS嵌套查询 使用EXISTS的嵌套查询改写【例6-5】,查找选修了课程的学生姓名。USE Students SELECT SName FROM Student W
12、HERE EXISTS (SELECT*FROM SC WHERE SNo=Student.SNo)第20页/共25页25 三月 202321改写【例6-28】,查询没有选修课程的学生姓名。USE Students SELECT SName FROM Student WHERE NOT EXISTS (SELECT *FROM SC WHERE SNo=Student.SNo)第21页/共25页25 三月 2023226.3 存储查询结果 6.3.1 将查询结果存储到新表中 SELECT语句的INTO子句可以将查询后所得的结果集存储到一个新表中。【例6-36】将找到的选修了课程的学生学号、姓名
13、和性别存储到一个新表中。USE students SELECT SNo,SName,Sex INTO 学生名单 FROM Student WHERE EXISTS(SELECT *FROM SC WHERE SNo=Student.SNo)第22页/共25页25 三月 2023236.3.2 将查询结果添加到已有表中 用SELECT子查询也可以将查询所得的结果集添加到一个已有表中。【例6-37】为“书籍档案”表添加从“书籍资料”表中属于“数据库”的所有书籍的记录。USE bookmanage INSERT INTO 书籍档案 SELECT*FROM 书籍资料 WHERE 类别编号 IN(SELECT 类别编号 FROM 书籍类别 WHERE 书籍类型名称=数据库)第23页/共25页25 三月 2023246.3.3 对查询结果进行修改【例6-38】使用嵌套的子查询,将属于“数据库”类型的所有书籍的价格加价。UPDATE 书籍档案 SET 单价=单价*1.2 WHERE 类别编号 IN(SELECT 类别编号 FROM 书籍类别 WHERE 书籍类别.书籍类型名称=数据库)第24页/共25页25 三月 202325感谢您的观看。第25页/共25页
限制150内