数据库技术与应用——SQL Server 2005 教学课件 ppt 作者 张建伟 第5章 数据查询

上传人:E**** 文档编号:89377203 上传时间:2019-05-24 格式:PPT 页数:78 大小:656KB
返回 下载 相关 举报
数据库技术与应用——SQL Server 2005 教学课件 ppt 作者  张建伟 第5章 数据查询_第1页
第1页 / 共78页
数据库技术与应用——SQL Server 2005 教学课件 ppt 作者  张建伟 第5章 数据查询_第2页
第2页 / 共78页
数据库技术与应用——SQL Server 2005 教学课件 ppt 作者  张建伟 第5章 数据查询_第3页
第3页 / 共78页
数据库技术与应用——SQL Server 2005 教学课件 ppt 作者  张建伟 第5章 数据查询_第4页
第4页 / 共78页
数据库技术与应用——SQL Server 2005 教学课件 ppt 作者  张建伟 第5章 数据查询_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《数据库技术与应用——SQL Server 2005 教学课件 ppt 作者 张建伟 第5章 数据查询》由会员分享,可在线阅读,更多相关《数据库技术与应用——SQL Server 2005 教学课件 ppt 作者 张建伟 第5章 数据查询(78页珍藏版)》请在金锄头文库上搜索。

1、第5章 数据查询,本章目录,5.1 SELECT语句解析与简单SQL语句 5.2 SELECT子句查询 5.3 条件查询 5.4 嵌套查询 5.5 集合查询 5.6连接查询 5.7 排序查询 5.8 显示部分记录的top查询 5.9 统计函数与别名查询 5.10 分组查询 本章小结,5.1 SELECT语句解析与简单SQL语句,如果希望查看表中的数据,可以使用SELECT语句来完成任务。SELECT语句有三个基本的组成部分:SELECT子句、FROM子句和WHERE子句。其一般格式为: SELECT ALL | DISTINCT , FROM , WHERE GROUP BY HAVING O

2、RDER BY ASC | DESC ,SELECT子句用于指定将要查询的列名称 FROM子句指定将要查询的对象(表或视图) WHERE子句指定数据应该满足的条件 一般情况下,SELECT子句和FROM子句是必不可少的,WHERE子句是可选的。如果没有使用WHERE子句,那么表示无条件地查询所有的数据。 如果SELECT语句中有GROUP子句,则将查询结果按照的值进行分组,将该属性列值相等的记录作为一个组。 如果GROUP子句带有HAVING短语,则只有满足指定条件的组才会输出。 如果有ORDER子句,则结果还要按照的值进行升序或降序排列后再输出。,如图5.1的示例中,使用了一个简单的SELE

3、CT语句查询Student表中的所有数据。在这个示例中,SELECT子句后面的*表示所有列,FROM子句后面的表名称是要查询的对象,没有使用WHERE子句,表示查询所有的数据。,图5.1 简单的SELECT查询语句示例,5.2 SELECT子句查询,在很多情况下,用户可能只对表中一部分属性列的值感兴趣,这时可以在SELECT子句的中指定要查询的属性列。,图5.2 查询指定数据列示例,SELECT子句的不仅可以是表中的属性列,也可以是表达式,或者说,可以是经过计算的值。 可以在SELECT关键字后面的列列表中使用各种运算符和函数。这些运算符和函数包括算术运算符、数学函数、字符串函数、日期和时间函

4、数以及系统函数等。 算术运算符(包括、*、/ 和)可以用在各种数值列上,数值列的数据类型可以是INT、SMALLINT、TINYINT、FLOAT、REAL、MONEY或SMALLMONEY。,【例5.1】查询全体学生的姓名及其出生年份。 SELECT Sname, 2007-Sage FROM Student 查询结果如图5.3所示。,图5.3 查询计算列的值,数学函数返回参加运算的数据的数值,如下面的检索语句,分别使用了求圆周率的PI函数、求正弦值的SIN函数、求指数的EXP函数、求幂值的POWER函数等。 SELECT PI(),SIN(PI()/2),COS(PI()/4),EXP(1

5、0), POWER(10,2),在SELECT子句中,可以通过使用ALL或DISTINCT关键字来控制查询结果集的显示。ALL关键字表示检索所有的数据,包括重复的数据行,DISTINCT关键字表示仅仅显示不重复的数据行,对于重复的数据行,则只显示一次。默认使用ALL关键字。 【例5.2】查询选修了课程的学生学号。 SELECT Sno FROM SC 或 SELECT DISTINCT Sno FROM SC,图5.4使用了ALL的查询,图5.5 使用了DISTINCT的查询,5.3 条件查询,5.3.1 确定查询 5.3.2 模糊查询 5.3.3 带查找范围的查询,5.3.1 确定查询,在W

6、HERE子句中,确定查询指的是使用比较运算符、列表、合并以及取反等运算方式进行的条件查询。 比较运算符是搜索条件中最常用的。用于比较大小的运算符一般包括: =(等于), =(大于等于), (大于),(不等于)。,【例5.3】查询Student表中所有年龄大于19岁的学生信息。 SELECT * FROM Student WHERE Sage 19 或者 SELECT * FROM Student WHERE NOT Sage = 19 查询结果如图5.6所示。,图5.6 使用“”运算符查询,【例5.4】查询所有计算机学院(“CS”)的学生姓名和学号。 SELECT Sno, Sname FRO

7、M Student WHERE Sdep = CS 如果想查询所有非计算机学院的学生名单,则可以使用: SELECT Sno, Sname FROM Student WHERE Sdep CS,在WHERE子句中,还可以使用逻辑运算符把若干个查询条件合并起来,组成较复杂的查询条件。这些逻辑运算符包括AND、OR和NOT。 AND运算符表示只有在所有的条件都为真时,才返回真。 OR运算符表示只要有一个条件为真,就可以返回真。NOT运算符取反。 当一个WHERE子句同时包含多个逻辑运算符时,其优先级从高到低一次为NOT、AND、OR。 用户也可以用括号改变优先级。,【例5.5】查询Student表

8、中所有男生或者年龄大于19岁的学生姓名和年龄。 SELECT Sname, Sage FROM Student WHERE Ssex = 男 OR Sage 19 查询结果如图5.7所示。,图5.7 带有逻辑运算符的查询,5.3.2 模糊查询,通常在查询字符数据时,提供的查询条件并不是十分准确,例如,查询仅仅是包含或类似某种样式的字符。这种查询称为模糊查询,在WHERE子句中,可以使用LIKE关键字实现这种灵活的查询。 LIKE关键字用于搜索与特定字符串匹配的字符数据。LIKE关键字后面可以跟一个列值的一部分而不是完整的列值。其基本语法形式为: NOT LIKE 匹配字符串 ESCAPE 其中

9、,方括号中的内容是可选的,例如如果LIKE关键字前面有NOT关键字,表示该条件取反。ESCAPE子句用于指定转义字符。匹配字符串可以是一个完整的字符串,也可以包含通配符、_、,这四种通配符的含义如表5.1所示。,表5.1 LIKE子句中的通配符,需要强调的是,带有通配符的字符串必须使用单引号引起来。下面是一些带有通配符的示例: LIKE AB% 返回以“AB”开始的任意字符串。 LIKE %ABC 返回以“ABC”结束的任意字符串。 LIKE %ABC% 返回包含“ABC”的任意字符串。 LIKE _AB 返回以“AB”结束的3个字符的字符串。 LIKE ACE% 返回以“A”、“C”、“E”

10、开始的任意字符串。 LIKE A-Zing 返回4个字符长的字符串,结尾是“ing”,第1个字符的范围是从A到Z。 LIKE La% 返回以“L”开始、第2个字符不是“a”的任意字符串。,【例5.6】查询所有姓刘的学生的姓名、学号和性别。 SELECT Sno, Sname, Ssex FROM Student WHERE Sname LIKE 刘% 【例5.7】查询所有不姓刘的学生姓名和学号。 SELECT Sno, Sname FROM Student WHERE Sname NOT LIKE 刘% 【例5.8】查询姓名中第二个字为“勇”字的学生姓名和学号。 SELECT Sno, Sna

11、me FROM Student WHERE Sname LIKE _勇%,如果用户要查询的字符串本身就含有通配符,这时就要使用ESCAPE关键字,对通配符进行转义。 【例5.9】查询DB_Design课程的课程号和学分。 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE ESCAPE 表示“”为转义字符,这样匹配字符串中紧跟在“”后面的字符“_”就不再具有通配符的含义,而是转义为普通的“_”字符处理。,5.3.3 带查找范围的查询,谓词BETWEENAND和NOT BETWEENAND可以用来查找属性值在或不在指

12、定范围内的元组。其中,BETWEEN后是范围的下限,AND后是范围的上限。 【例5.10】查询年龄在1922之间的学生的姓名、年龄和所属院系。 SELECT Sname, Sage, Sdep FROM Student WHERE Sage BETWEEN 19 AND 22 【例5.11】查询年龄不在1922之间的学生的姓名、年龄和所属院系。 SELECT Sname, Sage, Sdep FROM Student WHERE Sage NOT BETWEEN 19 AND 22,5.4 嵌套查询,基本概念 5.4.1 带IN的嵌套查询 5.4.2 带比较运算符的嵌套查询 5.4.3 带A

13、NY或ALL的嵌套查询 5.4.4 带EXISTS的嵌套查询,在SQL语言中,一个SELECTFROM WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。 例如:SELECT Sname FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno = 2 ) ; 在本例中,下层查询块“SELECT Sno FROM SC WHERE Cno = 2”是嵌套在上层查询块“SELECT Sname FROM Student WHERE Sno IN”的WHERE子句中的。上

14、层查询块称为外层查询或者父查询,下层查询块称为内层查询或子查询。,当查询语句比较复杂、不容易理解,或者一个查询依赖于另外一个查询结果时,就可以使用子查询。 SQL语言允许多层嵌套查询,即一个子查询中还可以嵌套其他子查询。 在使用子查询时,需要注意以下几点: 子查询必须使用圆括号括起来。 子查询中不能使用ORDER BY子句。 如果子查询中使用了ORDER BY子句,则ORDER BY子句必须与TOP子句同时出现。 嵌套查询一般的求解方法是由里向外,即每个子查询要在上一级查询处理之前求解,子查询的结果用于建立其父查询要使用的查找条件。,5.4.1 带IN的嵌套查询,在嵌套查询中,子查询的结果往往

15、是一个集合,所以谓词IN是嵌套查询中最常使用的谓词。其主要使用方式为: WHERE IN (子查询),【例5.12】查询与“李勇”在同一个院系学习的学生信息。 先分步完成此查询,然后再构造嵌套查询。 (1)确定“刘尘”所在的系名。 SELECT Sdep FROM Student WHERE Sname= 刘尘 查找结果为SS。 (2)查找所有在SS系学习的学生学号、姓名、系别信息。 SELECT Sno, Sname, Sdep FROM Student WHERE Sdep=SS,将第(1)步查询嵌入到第(2)步查询中,构造出嵌套查询: SELECT Sno, Sname, Sdep FR

16、OM Student WHERE Sdep IN ( SELECT Sdep FROM Student WHERE Sname= 刘尘 ),【例5.13】查询选修了课程名为“数据库原理”的学生学号和姓名。 本查询涉及学号、姓名和课程名3个属性。学号和姓名存放在Student表中,课程名存放在Course表中,这两个表之间没有直接的联系,所以需要通过SC表建立二者之间的联系。因此本查询实际上涉及3个关系。 SELECT Sno, Sname FROM Student WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno IN ( SELECT Cno FROM Course WHERE Cname= 数据库原理 ),5.4.2 带比较运算符的嵌套查询

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

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

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