数据库系统课件_第1页
数据库系统课件_第2页
数据库系统课件_第3页
数据库系统课件_第4页
数据库系统课件_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据库查询,数据库存在的意义在于将数据组织在一起,以方便查询。“查询”的含义就是用来描述从数据库中获取数据和操纵数据的过程。 SQL语言中最主要、最核心的部分是它的查询功能。查询语言用来对己经存在于数据库中的数据按照特定的组合、条件表达式或者一定次序进行检索。,2021/4/11,2,本章学习目标,简单查询,SELECT ALL|DISTINCT TOPPERCENT select_list INTO new_table_name FROM table_name WHERE search_condition GROUP BY group_by_expression HAVING search_

2、condition ORDER BY order_expression ASC | DESC COMPUTE function BY group_expression ,2021/4/11,3,关键字,关键字,给出查询条件,按指定的列进行分组,指出分组的条件,按照指定的列排序,用于汇总分组显示,结果(不)包含重复记录,返回结果的前指定数量行,4,SELECT 语句的基本结构,在SELECT 语句中最基本的必不可少的关键字只有两个:SELECT、和FROM。 SELECT 用于从数据库中检索数据; FROM 用于指定要检索的表名。,SELECT * FROM 学生表,简单单表查询,Where 子

3、句 选择行,使用WHERE子句的目的是从表中筛选出符合条件的行,实现条件查询,其语法形式如下: SELECT column_name1,column_name2, FROM table_name WHERE search_condition :定义查询条件。 SQL Server支持的查询条件包括比较运算、逻辑运算、模糊匹配、范围、列表、以及是否为空。,6,1.比较,7,例1:查找学生”吴宇”的基本信息 select * from 学生表 where 姓名= 吴宇 例2:查找1990年后出生的学生姓名和出生日期 select 姓名,出生日期 From 学生表 where 出生日期=1990-1

4、-1 例3:显示所有政治面貌不是党员的学生情况 select * from 学生表 where 政治面貌 党员,8,2.范 围( BETWEENAND ),BETWEENAND关键字返回界定范围以内(包括上界和下界)的所有值;NOT BETWEENAND关键字返回界定范围以外(不包括上界和下界)的所有值。,SELECT 课程名称,学分 FROM 课程表 WHERE 学分 BETWEEN 4 AND 6 ORDER BY 学分,SELECT 学号,课程号,成绩 FROM 选课表 WHERE 成绩 NOT BETWEEN 60 AND 100 ORDER BY 成绩,9,3. 列 表,如果要检索一

5、组分散的值,可以使用IN关键字构成列表。IN关键字允许用户选择与列表中的值相匹配的行,指定项必须用圆括号()括起来,各项之间用逗号分隔。【例】使用IN关键字指定数值和字符列表,SELECT 学号,课程名称,成绩 FROM 选课表 WHERE 成绩 IN (60,100) ORDER BY 成绩,SELECT * FROM 学生表 WHERE 专业 IN (网络工程 , 计算机科学与技术),10,4. 模糊匹配,使用LIKE关键字来查询并返回与指定的字符串、日期、时间等表达式模糊匹配的数据行。,: LIKE关键字后面的表达式必须用单引号()括起来。 LIKE关键字的逻辑非(反)为NOT LIKE

6、关键字。,SELECT * FROM 学生表 WHERE 籍贯 LIKE 广东%,11,通 配 符,为了增加模式匹配的灵活性,表达式中可以使用的匹配通配符有四种,如下表所示。,【例】 试比较以下两段程序运行结果的差异。,SELECT * FROM 课程表 WHERE 课程名称 LIKE 数%,SELECT * FROM 课程表 WHERE 课程名称 LIKE 数_,5. 空值判断,前面已介绍,空值(NULL)并不代表空格或0,而是表示数据值未知或不可用。所有空值皆相等,它与任何数据进行运算或比较返回的结果仍为NULL。 空值无法使用比较运算符或者模式匹配进行判断,只能使用空值判断符 ISNOT

7、NULL 来判断表达式的值是否为空。,SELECT * FROM 选课表 WHERE 成绩 IS NULL,14,6. 逻辑运算,WHERE 子句中可以利用逻辑运算符AND、OR和NOT连接查询条件。 NOT 用于对搜索条件取相反的返回结果; AND 用于两个条件表达式的与连接,即当这两个条件表达式均成立(逻辑值为真)时,返回结果才成立(真); OR 用于两个条件表达式的或连接,即当这两个条件表达式中有一个成立(为真),返回结果就成立(为真)。,15,【例】 逻辑运算符的使用 逻辑运算符的优先级并不相同。当一个语句中包含多个逻辑运算符时,取值的优先顺序依次为:NOT、AND和OR。,SELEC

8、T 学号,课程名称,成绩 FROM 选课表 WHERE (成绩 80 OR 成绩 60) AND 课程名称 = 计算机网络,聚合和统计,可以使用SELECT语句对表中数据进行统计和汇总,得到有用的信息。在SQL Server中,统计汇总数据称为聚合数据,所以统计函数又称为聚合函数。它们用于计算表中某列数据的总和、平均值或最大值、最小值等,还可以统计特定记录的个数。 统计函数可直接放在SELECT子句的列表中,通过将统计函数与分组子句(GROUP BY)有效组合,可以得到分组统计值,即分类汇总值。,常用统计函数,例使用统计函数得到选课表成绩统计信息。 返回了选课表中总成绩(SUM)、平均成绩(A

9、VG)、最高成绩(MAX)、最低成绩(MIN)。 除COUNT(*)函数之外,统计函数在计算中均忽略空值,但不忽略重复值。如果需要忽略重复值,可以使用DISTINCT关键字。,SELECT total=SUM(成绩),average=AVG(成绩), max=MAX(成绩),min=MIN(成绩) FROM 选课表,例 使用COUNT(expression)和COUNT(*)函数分别统计选课表中总记录数、成绩字段值非空的记录数和成绩字段值不相同的记录个数。 注意:由于统计函数只返回单一值,如果某个选择列表中使用了统计函数,则该选择列表只能包含统计函数,或由GROUP BY子句分组的列,以及为结

10、果集中每一行返回同一值的表达式。,SELECT COUNT(*) AS 总记录数, COUNT(成绩)AS 成绩非空记录数, COUNT(DISTINCT 成绩)AS 成绩非空且不重复记录数 FROM 选课表,分组(GROUP BY 子句),使用GROUP BY子句可以进行分组汇总,为结果集中的每一行产生一个汇总值。GROUP BY子句与统计函数有密切关系。 GROUP BY关键字后面跟着的列名称为分组列,分组列中的每个重复值将被汇总为一行。,GROUP BY group_by_expression,n,注意:当指定group by 时,选择列表中任一非统计表达式内的所有列都应包含在group

11、 by 列表中,或者group by 表达式必须与选择列表表达式完全匹配。,分组筛选(HAVING子句),HAVING子句的语法: HAVING 例 使用HAVING子句限定查询条件,SELECT 课程编号,平均成绩=AVG(成绩) FROM 选课表 GROUP BY 课程编号 HAVING AVG(成绩) 90 ORDER BY 课程编号,分组筛选(HAVING子句),HAVING子句通常与GROUP BY子句一起使用。用于指定组或合计的搜索条件,其作用与WHERE子句相似,二者的区别: 作用对象不同: WHERE子句作用于表和视图中的行,而HAVING子句作用于形成的组。WHERE子句限制

12、查找的行,HAVING子句限制查找的组。 执行顺序不同。若查询语句中同时有WHERE子句和HAVING子句,执行时,先去掉不满足WHERE条件的行,然后分组,分组执行统计函数后再去掉不满足HAVING条件的组。 WHERE子句中不能直接有统计函数,但HAVING子句的条件中可以包含统计函数。,注意 : 统计函数不允许进行复合运算.例如,MAX(AVG(score) where子句中不能直接使用统计函数.,SELECT 课程名称,学分 FROM 课程表 Where 学分AVG(学分),SELECT 课程名称,学分 FROM 课程表 Where 学分 (select AVG(学分) from 课程

13、表),24,计算和汇总,1使用COMPUTE子句生成汇总行 SQL Server提供了COMPUTE和COMPUTE BY子句,用来与统计函数配合以完成数据汇总。 COMPUTE子句可以在查询结果集的最后生成汇总数据行,具体如何汇总取决于子句中采用的统计函数,如SUM、AVG、COUNT、MAX、MIN等,还可以是统计方差或标准偏差等。,25,例用COMPUTE子句生成汇总行 该例显示选课表中以“10”开头的课程的课程号和成绩,并使用COMPUTE子句对这些成绩平均统计,返回结果包括明细行和最后的汇总行。,SELECT 课程号,成绩 FROM 选课表 WHERE 课程号 LIKE 10% OR

14、DER BY 课程号 COMPUTE AVG(成绩),26,COMPUTE BY 子句,2使用COMPUTE BY子句生成分组汇总行 该例使用COMPUTE BY子句对选课表中以“10”开头的课程的成绩分组求和统计,返回结果包括明细行和分组汇总行。,SELECT 课程编号,成绩 FROM 选课表 WHERE 课程编号 LIKE 10% ORDER BY 课程编号 COMPUTE AVG(成绩) BY 课程编号,COMPUTE 子句,使用COMPUTE子句要注意以下几点: COMPUTE子句中指定的列必须是SELECT子句中已有的。 COMPUTE子句中的统计函数内不能使用DISTINCT关键字

15、。 因为COMPUTE子句产生了非标准行,所以使用了COMPUTE 子句后就不能使用SELECT INTO子句生成新表。,28,COMPUTE BY 子句,使用COMPUTE BY子句注意以下几点: COMPUTE BY子句必须与ORDER BY子句一起使用,且COMPUTE BY子句指定的列必须与ORDER BY子句指定的列相同,或者为其子集,而且两者之间从左到右的顺序也必须相同。 COMPUTE和COMPUTE BY子句可出现在同一条SELECT语句中,以得到分组汇总值和总汇总值。 COMPUTE和COMPUTE BY子句中,不能使用ntext、text或image数据类型。,29,多表查

16、询,到目前为止我们的查询都是仅对一个表进行的。由于一个数据库存在相互关联的多个表,往往要从多个表中获取相应的信息。 方法:一般主要通过连接查询和子查询(嵌套查询)的方法实现同时对多个表的操作,并把查询结果组合成一个表。,连接查询,连接可以实现从两个或多个表中查询数据。 连接条件可以通过指定每个表中要用于连接的列(通常采用“主键=外键”的形式)及指定比较各列值时使用的运算符(、=等)和表达式来定义。 SELECT语句中的连接可以在FROM子句或WHERE子句中定义。,在FROM子句中定义连接,基本语法形式: 其中: join_type 指定所执行的连接类型。分为内连接、外连接和交叉连接。 ON

17、指定连接条件,FROM join_table1 join_type join_table2 ON(join_condition),【例】 在FORM 子句中定义(内)连接,SELECT 学号,课程表.课程名称,学分,成绩 FROM 课程表 join 选课表 ON (课程表.课程编号=选课表.课程编号) WHERE 成绩60,在WHERE 子句中定义连接,2在WHERE子句中定义连接的语法形式 其中:table1和table2是要连接的数据表名;join_operator为连接操作符,有=(内连接)、= *(右外连接)、* =(左外连接)等。,FROM table1,table2 WHERE t

18、able1.column join_operator table2.column,【例】在WHERE子句中定义(内)连接,SELECT 学生表.学号, 课程表.课程名称,学分,成绩 FROM 选课表,课程表 WHERE 课程表.课程编号=选课表.课程编号 AND 成绩60,内连接,内联接是用比较运算符比较表中列值,返回符合连接条件的数据行,从而将两个表连接成一个新表(数据集)。在形成的数据集中没有不满足连接条件的数据行。 在连接条件中主要使用比较运算符(=、=、!等)比较连接列的列值。 两表中进行连接的列其列名可以不同,但必须具有相同的或可自动进行转换的数据类型。 如果连接的列具有相同的列名(

19、因为它们在不同表中,这是允许的),则要加上表名作为限制,否则会产生混淆,系统报错.,【例】在FROM子句中定义(内)连接,SELECT 学生表.学号,专业,课程表.课程名称,学分,成绩 FROM 学生表 inner join 选课表 on 学生表.学号=选课表.学号 inner join 课程表 on 课程表.课程编号=选课表.课程编号 WHERE 成绩90,等值连接,【例】在WHERE子句中定义(内)连接,SELECT 学生表.学号,专业,课程表.课程名称,学分,成绩 FROM 学生表,选课表,课程表 WHERE 课程表.课程编号=选课表.课程编号 AND 学生表.学号=选课表.学号 AND

20、 成绩90,【例】定义表的连接时使用别名,SELECT A.学号,专业,B.课程名称,学分,成绩 FROM 学生表 AS A ,选课表 AS B ,课程表 ASC WHERE C.课程编号=B.课程编号 AND A.学号=B.学号 AND 成绩90,子(嵌套)查询,在一个查询语句中包含另一个(或多个)查询语句称为嵌套查询。其中,外层的查询语句为主查询语句,内层的查询语句为子查询语句。 嵌套查询的执行过程是:首先执行子查询语句,得到的子查询结果集传递给外层主查询语句,作为外层查询语句中的查询项或查询条件使用。子查询也可以再嵌套子查询。,子查询的返回值,在嵌套查询中,子查询可以返回单个值,也可返回

21、多个值,甚至返回多行多列(表)。这样主查询语句中与子查询返回值的匹配也有不同的处理方法。 (1)子查询返回单值 如果子查询的SELECT子句中只有一项(“*”除外),且根据检索限定条件只有一个值相匹配,这样,子查询将返回单一值(更多的情况是子查询的查询项是聚合函数,且未使用GROUP BY子句,这时子查询返回单值)。 可直接使用比较运算符进行匹配筛选。,子查询的返回值,(2)子查询返回多值 如果子查询的SELECT子句只有一项(“*”除外),但可能返回多个值(即值列表),这时就不能直接使用比较运算符进行简单的匹配筛选。 处理方法: 用IN或NOT IN在列表中选择. 在比较运算符后加关键字ANY引入子查询值列表. 在比较运算符后加关键字ALL引入子查询值列表.,子查询返回多值,用IN或NOT IN在列表中选择 IN或NOT IN关键字用于确定查询条件是否在(或不在)子查询的返回值列表中。 【例】,SELECT 姓名,性别,所在系 FROM 学生表 WHERE 学号 NOT IN (SELECT 学号 FROM 选课表 ),子查询返回多值,在比较运算符前加关键字ANY引入子查询值列表 用IN关键字引入子查询值列表也可用“=ANY”来代替。除用“=”外,还可以用其它比较运算符(如=、!等)与ANY组合。 用ANY引入子查询时,外层查询

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论