项目5 表查询的实现讲解

上传人:我** 文档编号:116707550 上传时间:2019-11-17 格式:PPT 页数:58 大小:1.22MB
返回 下载 相关 举报
项目5 表查询的实现讲解_第1页
第1页 / 共58页
项目5 表查询的实现讲解_第2页
第2页 / 共58页
项目5 表查询的实现讲解_第3页
第3页 / 共58页
项目5 表查询的实现讲解_第4页
第4页 / 共58页
项目5 表查询的实现讲解_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《项目5 表查询的实现讲解》由会员分享,可在线阅读,更多相关《项目5 表查询的实现讲解(58页珍藏版)》请在金锄头文库上搜索。

1、项目5 表数据操作 项目5 数据查询的实现 v 5.1 项目描述 v 5.2 技术要点 v 5.3 在OnlineCS数据库中实现单表查询 v 5.4 在OnlineCS数据库中连接查询 v 5.5 在OnlineCS数据库中嵌套查询 v 5.6 在OnlineCS数据库中组合查询 v 5.7 在OnlineCS数据库中T-SQL的可视化操作 v 5.8 项目支撑知识 v 5.9 本章小结 v 5.10 拓展训练 5.1 项目描述 v 当数据库创建好之后,用户为了实现某种用途而只查询数 据的一部分内容,其他不需要的内容不显示出来,这就需 要用SELECT查询语句实现对数据库中数据表的信息进行查

2、 询操作。 v 用户不仅可以对单表查询,还可以多表连接查询以及更为 复杂的查询设置。 5.2 技术要点 v 5.2.1 数据查询的方法 v 数据查询的方法主要有两种:一种方法是在SQL Server Management Studio管理器中实现界面方式查询;一种是利 用T-SQL语言的SELECT语句查询。 v 5.2.2 T-SQL语言 v 在SQL Server中,可以用SELECT语句查询。 SELECT ALL|DISTINCTTOP n PERCENT FROM数据源,.nWHERE WHERE GROUP BY HAVING ORDER BY ASC|DESC 5.3 在Onli

3、neCS数据库中实现单表查询 选择表中的若干列 查询指定列 查询全部列 查询经过计算的值 设置列的别名 查询指定列 v 【例5.1】查询全体学生的姓名与学号. SELECT Sname,Sno FROM Students 查询全部列 v 【例5.2】查询全体的学生的详细记录. SELECT * FROM Students 查询经过计算的值 v 【例5.3】查询全体学生的姓名及其年龄. SELECT Sname,YEAR(GETDATE()-YEAR(Sbirthday) FROM Students Sname (无列名) - 张三 20 李四 20 王五 19 李一 19 王二 20 张七 2

4、1 张五 19 设置列的别名 v 【例5.3】查询全体学生的姓名及其年龄. SELECT Sname,YEAR(GETDATE()-YEAR(Sbirthday)AS Age FROM Students Sname Age - 张三 20 李四 20 王五 19 李一 19 王二 20 张七 21 张五 19 选择表中的若干元组 v 1)消除取值重复的行 v 2)限制结果返回的行数 v 3)查询满足条件的元组 消除取值重复的行 v 【例5.4】对学生表只选择所在系名,消除结果集中地重复行 SELECT DISTINCT Sdept FROM Students 该语句的执行结果: Sdept 计

5、科系 自动化 国际贸易 限制结果返回的行数 v 【例5.5】查询学生表前5个学生的信息。 SELECT TOP 5 * FROM Students 若查询学生表前5%的学生信息,则所用语句为: SELECT TOP 5 PERCENT * FROM Students 查询满足条件的元组 v 查询满足条件的元组可以通过WHERE子句来实现,WHERE子句常用的查 询条件见下表 查询谓词 比较=;=;! 确定范围BETWEEN AND;NOT BETWEEN AND 确定集合IN;NOT IN 字符匹配LIKE;IS NOT LIKE 空值IS NULL; IS NOT NULL 多重条件AND;

6、OR 比较大小 v 【例5.6】查询计科系系学生的名单。 SELECT * FROM Students WHERE Sdept = 计科系 v 【例5.7】查询考试成绩不及格的学生的学号。 SELECT DISTINCT Sno FROM SC WHERE Grade2 对查询结果排序 v 【例 5.23】 查询学生选课成绩,查询结果按成绩降序排 列,相同成绩的按照学号升序排列。 SELECT * FROM SC ORDER BY Grade DESC , Sno ASC v 【例 5.24】 查询选修课程数大于等于2的学生的学号,平 均成绩和选课门数,并按平均成绩降序排列。 SELECT S

7、NO AS 学号, AVG(GRADE)AS 平均成绩, COUNT(*)AS 选课门数 FROM SC GROYP BY SNO HAVING COUNT(*)大于等于2 ORDER BY AVG(GRADE) DESC 5.4 在OnlineCS数据库中连接查询 v 连接是二元运算,可以对两个或多个表进行查询,结果集 通常是含有参加连接运算的两个表(或多个表)的指定列 的表。 v 在实际运用中,多数情况下用户查询的列都来自多个表, 把涉及多个表的查询称为连接查询。 v 在T-SQL语言中,连接查询有两大类表示形式,一是符合 SQL标准连接谓词的表示形式,二是T-SQL扩展的使用关键 词JO

8、IN的表示形式。 谓词连接 v 在SELECT语句的WHERE子句中使用比较运算符给出连接条 件对表进行连接的表示形式,称为谓词连接表示形式 v 【例5.25】查找每个学生及其选修课程的情况。 SELECT Students.*,SC.* FROM Students ,SC WHERE Students.Sno=SC.Sno v 【例5.26】自然连接查询。 SELECT Students.*,SC.*,Grade FROM Students ,SC WHERE Students.Sno=SC.Sno v 【例5.27】查询选修了“数据库原理及应用”的计科系系的学 生学号和姓名。 SELECT

9、 Students.Sno,Sname FROM Students ,SC,Courses WHERE Students.Sno=SC.Sno AND Courses.Con=SC.Cno AND Cname =数据库原理及应用AND Sdept=计科系 以JOIN关键字指定的连接 v 用关键自合并数据连接的简单语法为: SELECT 表列 FROM INNER|LEFT|RIGHTOUTERJOIN, ON 说明:INNER表示内连接 OUTER表示外连接 CROSS JOIN表示交叉连接 内连接 v 【例5.28】用JOIN关键字表达下列查询,插叙每个学生的 情况以及选修的情况。 SELE

10、CT Students.*,Cno,Grade FROM Students JOIN SC ON Students.Sno=SC.Sno v 【例5.29】用JOIN关键字表达下列查询,查询选修了“数据 库原理原理及应用”的计科系的学生学号和姓名。 SELECT Students.Sno,Sname FROM Students JOIN SC ON Students.Sno=SC.Sno JOIN Courses ON SC.Cno=Courses.Cno WHERE Cname = 数据库原理及应用AND Sdept=机科系 自连接 v 【例5.30】查询每一门课的间接先行课(即先行课的先行

11、 课)。 SELECT A.Cno,B.PreCno FROM Courses A, Courses B WHERE A.PreCno=B.Cno 外连接 v 外联包括以下三种 v 左外连接(LEFT OUTER JOIN);结果表中除了包括满足 连接条件的行外 还包括坐标的所有行。 v 右外连接(RIGHT OUTER JOIN):结果中除了表中包括满 足连接条件的行外还包括游标的所有行 v 完全外连接(FULL OUTER JOIN):结果表中除了包括满连 接条件的行外还包括两个表的所有行 外连接 v 【例5.31】查找所有学生情况及其选修任何课程若学生为 选秀任何课程也要包括其基本情况。

12、 SELECT Students.*,Cno FROM Students LEFT OUTER JOIN SC ON Students.Sno=SC.Sno v 【例5.32】查找被选修的课程的情况和所有课程的名字。 SELECT SC.*,Cname FROM SC RIGHT JOIN Courses ON SC.Cno=Courses.Cno 交叉连接 v 交叉连接实际上是将两个表惊醒笛卡尔积运算,结果表示 有第一个表的每行于第二个表的每行凭借后形成的表,因 此结果表的行数等于两个表行数之积。 v 【例5.33】列出学生所有可能的选修情况。 SELECT Sno,Sname,Cno,Cn

13、ame. FROM Students CROSS JOIN Courses 5.5在OnlineCS数据库中嵌套查询 v 在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询 块。将一个查询块嵌套在另一个查询块的WHERE子句或 HAVING短语的条件中的查询称为嵌套查询或子查询。 v 嵌套查询一般的求解方法是由里向外处理,即每个子查 询在上一级查询处理之前求解,子查询的结果用于建立其 父查询的查找条件。 使用IN操作符的嵌套查询 v 【例5.34】查询与“张三”在同一个系学习的学生的学号与姓名。 SELECT Sno,Sname FROM Students WHERE Sd

14、ept IN SELECT Sdept FROM Students WHERE Sname=李一 【例5.35】查询选修了“数据库原理及应用“的学生的学号和姓名。 SELECT Sno,Sname FROM Students WHERE Sno IN SELECT Sno FROM SC WHERE Cno IN ( SELECT Cno FROM Courses WHERE Cname= 数据库原理及应用) 使用比较符的嵌套查询 v 在【例5.34】中,由于一个学生只能在一个系学习,也就 是说内查询的结果是一个值,因此,可以用=代替IN,其 SQL语句如下: SELECT Sno,Sname

15、 FROM Students WHERE Sdept= SELECT Sdept FROM Students WHERE Sname=李一 使用ANY或ALL操作符的嵌套查询 v 格式为: ANY|ALL v 表5-9 ANY、ALL谓词与聚合函数及IN谓词的等价转换关系 =或!=MIN ALLNOT IN=MAX 使用ANY或ALL操作符的嵌套查询 v 【例5.36】查询其他系中比计科系某一学生年龄小即出 生日期大的学生。 SELECT * FROM Students WHERE Sbirthday ANY (SELECT Sbirthday FROM Students WHERE Sdept= 计科系) AND Sdept 计科系 v 【例5.37】查询其他系中比计科系学生年龄都小的学生。 SELECT * FROM Students WHERE Sbirthday (SELECT MAX(Sbirthday) FROM Students WHERE Sdept= 计科系) AND Sdept 计科系 使用EXISTS操作符的嵌套查询 v 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑值 或逻辑假值 v 【例5.38】查询选修了C1课程的学生姓名。 SELECT Sname FROM Students WHERE EXISTS (SELECT * FROM SC

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号