版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言第第3 3章章 SQLSQL查询语言查询语言人脑人脑不是一个可以灌注知不是一个可以灌注知识的识的容器容器,而是一个可以点燃,而是一个可以点燃的的火把火把。古希腊生物学家、散文家:普多塔戈古希腊生物学家、散文家:普多塔戈2数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言第第3 3章章 SQLSQL查询语言查询语言3数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言第第3章章 SQL查询语言查询语言n 学习目标学习目标lSQL(Structured Query Language,结构化查询语
2、言,结构化查询语言)是关是关系数据库的标准语言系数据库的标准语言l几乎所有的关系型数据库管理系统均采用几乎所有的关系型数据库管理系统均采用SQL语言标准语言标准l教学目标主要有两个:教学目标主要有两个:要求读者掌握对数据库的基本操作,并了解数据库管理要求读者掌握对数据库的基本操作,并了解数据库管理系统的基本功能系统的基本功能要求读者熟练掌握要求读者熟练掌握SQL查询语句,并运用查询语句,并运用SQL语句完成语句完成对数据库的操作对数据库的操作ostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的
3、对象关系型数据库管理系统。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。4数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言第第3章章 SQL语言语言n 学习方法学习方法l要求读者结合课堂讲授的知识,强化上机实训,要求读者结合课堂讲授的知识,强化上机实训,通过实通过实训加深对课堂上学过的
4、有关概念和知识点的理解,以便训加深对课堂上学过的有关概念和知识点的理解,以便达到融会贯通的学习目标达到融会贯通的学习目标。n 学习指南学习指南l重点:重点:3.2、3.3和和3.4节节l难点:难点:3.4节节5数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言第第3章章 SQL语言语言n 本章导读本章导读l SQL查询语句对关系代数运算做了哪些扩展?查询语句对关系代数运算做了哪些扩展?l 连接查询包括哪些?它们分别用于什么地方?连接查询包括哪些?它们分别用于什么地方?l 在使用分组聚合查询时需要注意的地方。在使用分组聚合查询时需要注意的地方。l 相关子查询与非相关子查询的概念
5、。相关子查询与非相关子查询的概念。l 如何理解存在量词以及存在量词在如何理解存在量词以及存在量词在SQL查询中的重要地位。查询中的重要地位。l 如何理解查询表的概念,查询表与子查询有何异同点?如何理解查询表的概念,查询表与子查询有何异同点?6数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言目目 录录集合查询集合查询 SQL概述概述 3.1单表查询单表查询 3.3连接查询连接查询 3.5嵌套子查询嵌套子查询 SQL查询一般格式查询一般格式 3.23.43.67数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.1 SQL概述概述 n SQL语言于语言于19
6、74年由年由Boyce等提出,并于等提出,并于19751979年在年在IBM公司研制的公司研制的System R数据库管理系统数据库管理系统上实现,现已成为国际标准。上实现,现已成为国际标准。n 很多数据库厂商都对很多数据库厂商都对SQL语句进行了再开发和扩展语句进行了再开发和扩展n 标准标准SQL命令包括:命令包括:l数据操纵语言数据操纵语言DML 查询:查询:SELECT 插入:插入:INSERT 修改:修改:UPDATE 删除:删除:DELETEn 可被用来完成几乎所有的数据库操作可被用来完成几乎所有的数据库操作l数据定义语言数据定义语言DDL 创建对象:创建对象:CREATE 删除对象
7、:删除对象:DROP 修改对象:修改对象:ALTERl数据控制语言数据控制语言DCL 权限权限授予:授予:GRANT 权限收回:权限收回:REVOKE8数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.1 SQL概述概述n 3.1.1 SQL发展发展 n 3.1.2 SQL特点特点n 3.1.3 SQL查询基本概念查询基本概念 9数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.1.1 SQL发展发展 n SQL-86:第一个:第一个SQL标准,由美国国家标准局标准,由美国国家标准局(American National Standard Instit
8、ute,简称,简称ANSI)公布,公布,1987年国际标准化组织年国际标准化组织(International Organization for Standardization,简称,简称ISO)通过。通过。该标准也称为该标准也称为SQL-1n SQL-92:在:在1992年,由年,由ISO和和ANSI对对SQL-86进行进行重新修订,该标准也称为重新修订,该标准也称为SQL-2n SQL-99:在:在1999年,该版本在年,该版本在SQL-2的基础上,扩的基础上,扩展了诸多功能,包括递归、触发、面向对象技术等展了诸多功能,包括递归、触发、面向对象技术等。该标准也称为。该标准也称为SQL-3 n
9、 SQL-2003:该标准是最新的标准,也称:该标准是最新的标准,也称SQL-4,于,于2003年发布年发布 10数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.1.1 SQL发展发展n SQL语言由语言由4部分组成部分组成l数据定义语言数据定义语言DDL(Data Definition Language)定义数据库的逻辑结构定义数据库的逻辑结构,包括数据库、基本表、视图和索引等,包括数据库、基本表、视图和索引等,扩展扩展DDL还支持存储过程、函数、对象、触发器等的定义还支持存储过程、函数、对象、触发器等的定义DDL包括包括3类语言,即定义、修改和删除类语言,即定义、修
10、改和删除l数据操纵语言数据操纵语言DML(Data Manipuplation Language)对数据库的数据进行检索和更新对数据库的数据进行检索和更新,其中更新操作包括插入、删除,其中更新操作包括插入、删除和修改数据和修改数据l数据控制语言数据控制语言DCL(Data Control Language)对数据库的对象进行授权、用户维护对数据库的对象进行授权、用户维护(包括创建、修改和删除包括创建、修改和删除)、完整性规则定义和事务定义完整性规则定义和事务定义等等l其它其它主要是主要是嵌入式嵌入式SQL语言和动态语言和动态SQL语言的定义语言的定义,规定了,规定了SQL语言语言在宿主语言中使
11、用的规则在宿主语言中使用的规则扩展扩展SQL还包括数据库数据的还包括数据库数据的重新组织、备份与恢复重新组织、备份与恢复等功能等功能11数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.1.2 SQL特点特点 n 综合统一综合统一 l 集数据定义语言集数据定义语言DDL、数据操纵语言、数据操纵语言DML、数据控制语言、数据控制语言DCL的功的功能于一体能于一体 n 高度非过程化高度非过程化:描述做什么,不涉及怎么做。描述做什么,不涉及怎么做。 n 面向集合的操作方式面向集合的操作方式l 采用集合操作方式,其操作对象、操作结果都是元组的集合采用集合操作方式,其操作对象、操作
12、结果都是元组的集合 n 同一种语法结构提供两种使用方式同一种语法结构提供两种使用方式l SQL语言既是自含式语言,又是嵌入式语言。在两种不同的使用方语言既是自含式语言,又是嵌入式语言。在两种不同的使用方式下,其语法结构基本上是一致的式下,其语法结构基本上是一致的 n 语言简洁,易学易用语言简洁,易学易用l SQL语言的动词非常少,主要包括:语言的动词非常少,主要包括: 数据查询数据查询 :SELECT; 数据更新:数据更新: INSERT、UPDATE、DELETE; 数据定义数据定义 :CREATE、DROP、ALTER; 数据控制数据控制 :GRANT、REVOKE 12数据库原理数据库原
13、理第第 3 3 章章 SQLSQL查询语言查询语言3.1.3 SQL查询基本概念查询基本概念 n SQL语言支持三级模式结构,外模式对应视图和部语言支持三级模式结构,外模式对应视图和部分基本表,模式对应基本表,内模式对应存储文件分基本表,模式对应基本表,内模式对应存储文件 SQL视图视图1视图视图2基本表基本表1基本表基本表2基本表基本表3基本表基本表4存储文件存储文件1存储文件存储文件2 外模式外模式 模式模式 内模式内模式13数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.1.3 SQL查询基本概念查询基本概念n 基本表基本表l 数据库中独立存在的表称为基本表数据库
14、中独立存在的表称为基本表l 在在SQL中一个关系对应一个基本表中一个关系对应一个基本表l 一个一个(或多个或多个)基本表对应一个存储文件基本表对应一个存储文件l 一个表可以带若干索引一个表可以带若干索引l 索引存放在存储文件中索引存放在存储文件中n 视图视图l 指从一个或几个基本表指从一个或几个基本表(或视图或视图)导出的表,是虚表导出的表,是虚表l 只存放只存放视图的定义视图的定义而不存放对应数据而不存放对应数据n 查询表查询表l 指查询结果对应的表指查询结果对应的表n 存储文件存储文件l 指数据库中存放关系的物理文件指数据库中存放关系的物理文件14数据库原理数据库原理第第 3 3 章章 S
15、QLSQL查询语言查询语言目目 录录集合查询集合查询 SQL概述概述 3.1单表查询单表查询 3.3连接查询连接查询 3.5嵌套子查询嵌套子查询 SQL查询一般格式查询一般格式 3.23.43.615数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询n 本章所用的数据库为学生成绩管理数据库本章所用的数据库为学生成绩管理数据库ScoreDB,其数据库,其数据库模式如图模式如图3-2 图图3-6所示,关系数据如图所示,关系数据如图3-8 图图3-12所示所示16数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询17数据
16、库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询18数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询19数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询20数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询21数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言22数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2单表查询单表查询 n 3.2.1 投影运算投影运算n 3.2.2 选择运算选择运算
17、 n 3.2.3 排序运算排序运算n 3.2.4 查询表查询表n 3.2.5 聚合查询聚合查询23数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n SQL基本结构包括基本结构包括3个子句:个子句:lSELECT子句子句对应对应投影运算投影运算,指定查询结果中所需要的属性或,指定查询结果中所需要的属性或表达式表达式lFROM子句子句 对应对应笛卡尔积笛卡尔积,给出查询所涉及的表,表可以是基本表、,给出查询所涉及的表,表可以是基本表、视图或视图或查询表查询表lWHERE子句子句 对应对应选择运算选择运算(包括连接运算所转化的选择运算)(包括连接运算
18、所转化的选择运算),指定,指定查询结果元组所需要满足的选择条件查询结果元组所需要满足的选择条件n SELECT和和FROM是必须的,其他是可选的是必须的,其他是可选的24数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 基本语法为:基本语法为: SELECT A1, A2, ., An FROM R1, R2, ., Rm WHERE PA1, A2, ., An代表需要查找的属性或表达式代表需要查找的属性或表达式R1, R2, ., Rm代表查询所涉及的表代表查询所涉及的表P代表谓词代表谓词(即选择条件即选择条件),如果省略,如果省略WHER
19、E子句,表示子句,表示P为真为真SQL的查询结果中的查询结果中允许包含重复元组允许包含重复元组n SQL执行过程执行过程(逻辑上的理解)(逻辑上的理解):l首先对首先对R1, R2, ., Rm执行笛卡尔积执行笛卡尔积l然后在笛卡尔积中选择使得谓词然后在笛卡尔积中选择使得谓词P为真的记录为真的记录l再在再在A1, A2, ., An属性列中进行投影运算,属性列中进行投影运算,不消除重复元组不消除重复元组如需消除重复元组,必须使用关键字如需消除重复元组,必须使用关键字DISTINCT25数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 基本语法为
20、:基本语法为: SELECT A1, A2, ., An FROM R1, R2, ., Rm WHERE PA1, A2, ., An代表需要查找的属性或表达式代表需要查找的属性或表达式R1, R2, ., Rm代表查询所涉及的表代表查询所涉及的表P代表谓词代表谓词(即选择条件即选择条件),如果省略,如果省略WHERE子句,表示子句,表示P为真为真SQL的查询结果中允许包含重复元组的查询结果中允许包含重复元组n SQL执行过程执行过程(逻辑上的理解)(逻辑上的理解):l首先对首先对R1, R2, ., Rm执行笛卡尔积执行笛卡尔积l然后在笛卡尔积中选择使得谓词然后在笛卡尔积中选择使得谓词P为
21、真的记录为真的记录l再在再在A1, A2, ., An属性列中进行投影运算,不消除重复元组属性列中进行投影运算,不消除重复元组如需消除重复元组,必须使用关键字如需消除重复元组,必须使用关键字DISTINCTn 刚才描述的刚才描述的SQL查询执行过程只是查询执行过程只是逻辑上逻辑上的,在具体执行时的,在具体执行时会进行会进行优化处理优化处理,查询优化的内容详见第,查询优化的内容详见第7章。章。26数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 查询指定列查询指定列l选取表中的全部列或指定列,通过选取表中的全部列或指定列,通过SELECT确定要查
22、询的确定要查询的属性属性l例例3.1 查询所有班级的班级编号、班级名称和所属学院查询所有班级的班级编号、班级名称和所属学院 SELECT classNo, className, institute FROM Class该查询的执行过程是:该查询的执行过程是:从从Class表中依次取出每个元组表中依次取出每个元组对每个元组仅选取对每个元组仅选取classNo、className和和institute三个属性的三个属性的值,形成一个新元组值,形成一个新元组最后将这些新元组组织为一个结果关系输出最后将这些新元组组织为一个结果关系输出该查询的结果如图该查询的结果如图3-13所示所示27数据库原理数据库
23、原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 查询指定列查询指定列l选取表中的全部列或指定列,通过选取表中的全部列或指定列,通过SELECT确定要查询的确定要查询的属性属性l例例3.1 查询所有班级的班级编号、班级名称和所属学院查询所有班级的班级编号、班级名称和所属学院 SELECT classNo, className, institute FROM Class该查询的执行过程是:该查询的执行过程是:从从Class表中依次取出每个元组表中依次取出每个元组对每个元组仅选取对每个元组仅选取classNo、className和和institute三个属性的三个
24、属性的值,形成一个新元组值,形成一个新元组最后将这些新元组组织为一个结果关系输出最后将这些新元组组织为一个结果关系输出该查询的结果如图该查询的结果如图3-13所示所示28数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 消除重复元组消除重复元组l需要消除重复元组,使用需要消除重复元组,使用DISTINCT关键字关键字l例例3.2 查询所有学院的名称。查询所有学院的名称。 SELECT institute FROM Class上述查询不消除重复元组,其查询结果如图上述查询不消除重复元组,其查询结果如图3-14所示所示l消除重复元组,查询结果如图消
25、除重复元组,查询结果如图3-15所示所示 SELECT DISTINCT institute FROM Class图图 3-14图图 3-1529数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 查询所有列查询所有列l可使用两种方法:可使用两种方法:将所有的列在将所有的列在SELECT子句中列出子句中列出(可以改变列的显示顺序可以改变列的显示顺序);使用使用*符号,符号,*表示所有属性,按照表定义时的顺序显示所有属性表示所有属性,按照表定义时的顺序显示所有属性l 例例3.3 查询所有班级的全部信息。查询所有班级的全部信息。 SELECT cla
26、ssNo, className, classNum, grade, institute FROM Classl或或 SELECT * FROM Class30数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 给属性列取别名给属性列取别名l可为属性列取一个便于理解的列名,如用中文来显示列名可为属性列取一个便于理解的列名,如用中文来显示列名l为属性列取别名特别适合经过计算的列为属性列取别名特别适合经过计算的列l例例3.4 查询所有班级的所属学院、班级编号和班级名称,查询所有班级的所属学院、班级编号和班级名称,要求用中文显示列名要求用中文显示列名 S
27、ELECT institute 所属学院所属学院, classNo 班级编号班级编号, className 班级名称班级名称 FROM Classl查询结果如图查询结果如图3-16所示。该查询可使用所示。该查询可使用AS关键字取别名:关键字取别名: SELECT institute AS 所属学院所属学院, classNo AS 班级编号班级编号, className AS 班级名称班级名称 FROM Class31数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 给属性列取别名给属性列取别名l可为属性列取一个便于理解的列名,如用中文来显示列名
28、可为属性列取一个便于理解的列名,如用中文来显示列名l为属性列取别名特别适合经过计算的列为属性列取别名特别适合经过计算的列l例例3.4 查询所有班级的所属学院、班级编号和班级名称,查询所有班级的所属学院、班级编号和班级名称,要求用中文显示列名要求用中文显示列名 SELECT institute 所属学院所属学院, classNo 班级编号班级编号, className 班级名称班级名称 FROM Classl查询结果如图查询结果如图3-16所示。该查询可使用所示。该查询可使用AS关键字取别名:关键字取别名: SELECT institute AS 所属学院所属学院, classNo AS 班级编
29、号班级编号, className AS 班级名称班级名称 FROM Class32数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.1 投影运算投影运算n 查询经过计算的列查询经过计算的列l可使用属性、常数、函数和表达式可使用属性、常数、函数和表达式 l例例3.5查询每门课程的课程号、课程名以及查询每门课程的课程号、课程名以及周课时周课时(周课周课时时为为课时数课时数除以除以16),并将课程名中大写字母改为小写字,并将课程名中大写字母改为小写字母输出。母输出。 SELECT courseNo 课程号课程号, lower(courseName) 课程名课程名, cour
30、seHour/16 AS 周课时周课时FROM Coursel函数函数lower()将大写字母改为将大写字母改为小写字母小写字母l查询结果如图查询结果如图3-17所示所示33数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言例子例子n select NO: + RIGHT(studentno,2) + , + studentname + BIRTHDAY: + STR(YEAR(birthday) from student34数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n WHERE子句可实现关系代数中的选择运算子句可实现关
31、系代数中的选择运算n WHERE常用的查询条件有:常用的查询条件有:l比较运算:比较运算:、=、=、=、(或或!=)l范围查询:范围查询:NOT BETWEEN AND l集合查询:集合查询: NOT IN l空值查询:空值查询:IS NOT nulll字符匹配查询:字符匹配查询: NOT LIKE l逻辑查询:逻辑查询:AND、OR、NOT35数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n 比较运算比较运算l使用比较运算符使用比较运算符、=、=、=、(或或!=) l例例3.6 查询查询2015级的班级编号、班级名称和所属学院。级的班级编号、
32、班级名称和所属学院。 SELECT classNo, className, institute FROM Class WHERE grade=2015l其查询结果如图其查询结果如图3-18所示所示该选择运算执行该选择运算执行顺序是?顺序是?36数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l该查询的执行过程可能有多种方法:该查询的执行过程可能有多种方法:全表扫描法全表扫描法依次取出依次取出Class表中的每个元组表中的每个元组判断该元组的判断该元组的grade属性值是否等于属性值是否等于2015若是则将该元组的班级编号、班级名称和所属学院属性取
33、出,形若是则将该元组的班级编号、班级名称和所属学院属性取出,形成一个新元组成一个新元组最后将所有新元组组织为一个结果关系输出最后将所有新元组组织为一个结果关系输出该方法适用于小表,或者该表未在该方法适用于小表,或者该表未在grade属性列上建索引属性列上建索引索引搜索法索引搜索法如果该表在如果该表在grade属性列上建有索引,且满足条件的记录不多,属性列上建有索引,且满足条件的记录不多,则可使用索引搜索法来检索数据则可使用索引搜索法来检索数据具体使用何种方法由数据库管理系统的查询优化器来选择,详具体使用何种方法由数据库管理系统的查询优化器来选择,详见第见第8章内容章内容37数据库原理数据库原理
34、第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.7 在学生在学生Student表中查询表中查询年龄大于或等于年龄大于或等于19岁岁的同的同学学号、姓名和出生日期。学学号、姓名和出生日期。 SELECT studentNo, studentName, birthday FROM Student WHERE date_part(year,CURRENT_DATE) - date_part(year,birthday)=19 date_part(year,CURRENT_DATE)函数得到当前年份函数得到当前年份 date_part(year,birthday)
35、函数提取日期中的年份函数提取日期中的年份38数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.7 在学生在学生Student表中查询表中查询年龄大于或等于年龄大于或等于19岁岁的同的同学学号、姓名和出生日期。学学号、姓名和出生日期。 SELECT studentNo, studentName, birthday FROM Student WHERE year(getdate() - year(birthday)=19 函数函数getdate()获取当前系统的日期获取当前系统的日期 函数函数year()提取日期中的年份提取日期中的年份39数
36、据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n 范围查询范围查询lBETWEEN.AND 用于查询属性值在某一个范围内的用于查询属性值在某一个范围内的元组元组lNOT BETWEEN.AND ( )用于查询属性值不在某一个范用于查询属性值不在某一个范围内的元组围内的元组lBETWEEN后是属性的下限值,后是属性的下限值,AND后是属性的上限值后是属性的上限值l例例3.8 在选课在选课Score表中查询成绩在表中查询成绩在8090分之间的同学分之间的同学学号、课程号和相应成绩学号、课程号和相应成绩 SELECT studentNo, course
37、No, score FROM Score WHERE score BETWEEN 80 AND 90该查询也可以使用该查询也可以使用逻辑运算逻辑运算AND实现,见例实现,见例3.2240数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.9 在选课在选课Score表中查询成绩不在表中查询成绩不在8090分之间的同分之间的同学学号、课程号和相应成绩。学学号、课程号和相应成绩。 SELECT studentNo, courseNo, score FROM Score WHERE score NOT BETWEEN 80 AND 90该查询也可以
38、使用该查询也可以使用逻辑运算逻辑运算OR实现,见例实现,见例3.2341数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n 集合查询集合查询lIN用于查询属性值在某个集合内的元组用于查询属性值在某个集合内的元组lNOT IN用于查询属性值不在某个集合内的元组用于查询属性值不在某个集合内的元组l IN后面是集合,可以是具体的集合,也可以是后面是集合,可以是具体的集合,也可以是查询出来查询出来的元组集合的元组集合(该部分内容详见该部分内容详见3.4节的内容节的内容)。l例例3.10 在选课在选课Score表中查询选修了表中查询选修了“001”、“00
39、5”或或“003”课程的同学学号、课程号和相应成绩。课程的同学学号、课程号和相应成绩。 SELECT studentNo, courseNo, score FROM Score WHERE courseNo IN (001, 005, 003)该查询也可以使用该查询也可以使用逻辑运算逻辑运算OR实现,见例实现,见例3.1942数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.11 在学生在学生 Student表中查询籍贯不是表中查询籍贯不是“南昌南昌”或或“上上海海”的同学姓名、籍贯和所属班级编号。的同学姓名、籍贯和所属班级编号。 SEL
40、ECT studentName, native, classNo FROM Student WHERE native NOT IN (南昌南昌, 上海上海)该查询也可以使用该查询也可以使用逻辑运算逻辑运算AND实现,见例实现,见例3.2143数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n 空值查询空值查询l空值表示未知或不确定的值,空值表示为空值表示未知或不确定的值,空值表示为nulllIS null用于查询属性值为空值用于查询属性值为空值lIS NOT null用于查询属性值不为空值用于查询属性值不为空值lIS不能用不能用“=”替代替代l例
41、例3.12 在课程在课程Course表中查询先修课程为空值的课程信息表中查询先修课程为空值的课程信息. SELECT * FROM Course WHERE priorCourse IS NULLis nullis not null44数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.13 在课程在课程Course表中查询有先修课程的课程信息。表中查询有先修课程的课程信息。 SELECT * FROM Course WHERE priorCourse IS NOT NULL45数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查
42、询语言3.2.2 选择运算选择运算n 字符匹配查询字符匹配查询l LIKE用于字符匹配查询,语法格式为:用于字符匹配查询,语法格式为: NOT LIKE ESCAPE l 查询的含义是:查询的含义是: 如果在如果在LIKE前没有前没有NOT,则查询指定的属性列值与,则查询指定的属性列值与相匹相匹配的元组;配的元组; 如果在如果在LIKE前有前有NOT,则查询指定的属性列值不与,则查询指定的属性列值不与相匹相匹配的元组。配的元组。 可以是一个具体的字符串,也可以包括通配符可以是一个具体的字符串,也可以包括通配符%和和_ %表示任意长度的字符串表示任意长度的字符串 ab%,表示所有以,表示所有以a
43、b开头的任意长度的字符串;开头的任意长度的字符串; zhang%ab,表示以,表示以zhang开头,以开头,以ab结束,中间可以是任意个结束,中间可以是任意个字符的字符串。字符的字符串。 符号符号_(下划线下划线)表示任意一个字符表示任意一个字符 ab_,表示所有以,表示所有以 ab开头的开头的3个字符的字符串,其中第个字符的字符串,其中第3个字符个字符为任意字符;为任意字符; a_b表示所有以表示所有以a开头,以开头,以b 结束的结束的4个字符的字符串,且第个字符的字符串,且第2、3个字符为任意字符。个字符为任意字符。46数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3
44、.2.2 选择运算选择运算l例例3.14 在班级在班级Class表中查询班级名称中含有会计的班级表中查询班级名称中含有会计的班级信息信息 SELECT * FROM Class WHERE className LIKE %会计会计%注意:注意:匹配字符串必须用一对引号括起来匹配字符串必须用一对引号括起来l例例3.15 在学生在学生Student表中查询所有姓王且全名为表中查询所有姓王且全名为3个汉个汉字的同学学号和姓名字的同学学号和姓名 SELECT studentNo, studentName FROM Student WHERE studentName LIKE 王王_注意:注意:在中文在
45、中文SQL-Server中,如果匹配字符串为汉字,则中,如果匹配字符串为汉字,则一个下划线代表一个汉字;如果是西文,则一个下划线代一个下划线代表一个汉字;如果是西文,则一个下划线代表一个字符。表一个字符。47数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.16 在学生在学生Student表中查询名字中不含有表中查询名字中不含有“福福”的同学学的同学学号和姓名。号和姓名。 SELECT studentNo, studentName FROM Student WHERE studentName NOT LIKE %福福%48数据库原理数据库
46、原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.17 在学生在学生Student表中查询蒙古族的同学学号和姓名表中查询蒙古族的同学学号和姓名 SELECT studentNo, studentName FROM Student WHERE nation LIKE 蒙古族蒙古族注意:注意:如果匹配字符串中如果匹配字符串中不含有不含有%和和_,则,则LIKE与比较运算与比较运算符符“=”的查询结果一样的查询结果一样该查询等价于下面的查询:该查询等价于下面的查询: SELECT studentNo, studentName FROM Student WHER
47、E nation=蒙古族蒙古族49数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n 如果查询字串中本身要包含如果查询字串中本身要包含%和和_,必须使用,必须使用“ESCAPE ”短语,短语,对通配符进行转义处理对通配符进行转义处理。l例例3.18 在班级在班级Class表中查询班级名称中含有表中查询班级名称中含有“16_”符号符号的班级名称的班级名称 SELECT className FROM Class WHERE className LIKE %16_% ESCAPE “ESCAPE ”表示表示为换码字符为换码字符紧跟在紧跟在符号后的符号后
48、的_不是通配符不是通配符,而是,而是普通的用户要查询的符号普通的用户要查询的符号50数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算如果将如果将#字符作为换码字符,则该查询可改写为:字符作为换码字符,则该查询可改写为: SELECT className FROM Class WHERE className LIKE %16#_% ESCAPE #51数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算n 逻辑查询逻辑查询lSQL提供提供AND、OR和和NOT逻辑运算符分别实现逻辑与、逻辑运算符分别实现逻
49、辑与、逻辑或和逻辑非运算逻辑或和逻辑非运算l例例3.19 在选课在选课Score表中查询选修了表中查询选修了“001”、“005”或或“003”课程的同学学号、课程号和相应成绩课程的同学学号、课程号和相应成绩SELECT studentNo, courseNo, scoreFROM ScoreWHERE courseNo=001 OR courseNo=005 OR courseNo=003l在例在例3.10中使用的是集合运算,本例中采用逻辑中使用的是集合运算,本例中采用逻辑“或或”运运算算52数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例
50、例3.20 在在Student表中查询表中查询1998年出生且民族为年出生且民族为“汉族汉族”的同学学号、姓名、出生日期。的同学学号、姓名、出生日期。 SELECT studentNo, studentName, birthday FROM Student where date_part(year,birthday) =1998 AND nation=汉族汉族l注意:注意:在逻辑运算中,不可以对同一个属性进行逻辑在逻辑运算中,不可以对同一个属性进行逻辑“与与”的等值运算的等值运算如在选课如在选课Score表中查询同时选修了表中查询同时选修了“001”和和“002”课程的同学的课程的同学的选课信
51、息,选课信息,如下查询是错误的,得不到结果如下查询是错误的,得不到结果: SELECT * FROM Score WHERE courseNo=001 AND courseNo=002要实现该查询,需要使用要实现该查询,需要使用连接运算连接运算或或嵌套子查询嵌套子查询通过连接运算表示该查询,参见例通过连接运算表示该查询,参见例3.34、例、例3.37通过嵌套子查询,参见例通过嵌套子查询,参见例3.45、例、例3.46 53数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.21 在在Student表中查询籍贯既不是表中查询籍贯既不是“南昌南
52、昌”也不是也不是“上海上海”的同学姓名、籍贯和所属班级编号。的同学姓名、籍贯和所属班级编号。 SELECT studentName, native, classNo FROM Student WHERE native!=南昌南昌 AND native!=上海上海l例例3.22 在选课在选课Score表中查询成绩在表中查询成绩在8090分之间的同分之间的同学学号、课程号和相应成绩。学学号、课程号和相应成绩。 SELECT studentNo, courseNo, score FROM Score WHERE score= 80 AND score=9054数据库原理数据库原理第第 3 3 章章
53、SQLSQL查询语言查询语言3.2.2 选择运算选择运算l例例3.23 在选课在选课Score表中查询成绩不在表中查询成绩不在8090分之间的同学分之间的同学学号、课程号和相应成绩。学号、课程号和相应成绩。 SELECT studentNo, courseNo, score FROM Score WHERE score9055数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言小结小结n 投影,选择查询(比较运算投影,选择查询(比较运算,范围查询范围查询,集合查询集合查询,空空值查询值查询,字符匹配查询字符匹配查询,逻辑查询)逻辑查询)n 查询次序:查询次序:n Selet n
54、 Fromn where56数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.3 排序运算排序运算n 使用使用ORDER BY 子句实现排序运算,其语法为:子句实现排序运算,其语法为: ORDER BY ASC | DESC , ASC | DESC . l其中:其中:, , . 可以是属性、函数或表达式可以是属性、函数或表达式缺省按升序缺省按升序(ASC)排序排序按降序排序,必须指明按降序排序,必须指明DESC选项选项l该运算含义是:该运算含义是:在查询结果中首先按在查询结果中首先按的值进行排序的值进行排序在在值相等的情况下再按值相等的情况下再按值排序值排序依此类推
55、依此类推57数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.3 排序运算排序运算l例例3.24 在学生在学生 Student表中查询籍贯既不是表中查询籍贯既不是“南昌南昌”也不也不是是“上海上海”的同学姓名、籍贯和所属班级编号,的同学姓名、籍贯和所属班级编号,并按籍贯并按籍贯的降序排序输出的降序排序输出。 SELECT studentName, native, classNo FROM Student WHERE native!=南昌南昌 AND native!=上海上海 ORDER BY native DESC58数据库原理数据库原理第第 3 3 章章 SQLSQ
56、L查询语言查询语言3.2.3 排序运算排序运算l例例3.25 在学生在学生Student表中查询表中查询“女女”学生的学号、姓名、学生的学号、姓名、所属班级编号和出生日期,所属班级编号和出生日期,并按班级编号的升序、出生日期并按班级编号的升序、出生日期的月份降序排序输出的月份降序排序输出。 SELECT studentNo, studentName, classNo, birthday FROM Student WHERE sex=女女 ORDER BY classNo, date_part(mm,birthday) DESC其中:其中: date_part(mm,birthday)函数表示提
57、取日期函数表示提取日期表达式的月份表达式的月份查询结果如图查询结果如图3-22所示所示59数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.3 排序运算排序运算l例例3.25 在学生在学生Student表中查询表中查询“女女”学生的学号、姓名、学生的学号、姓名、所属班级编号和出生日期,所属班级编号和出生日期,并按班级编号的升序、出生日期并按班级编号的升序、出生日期的月份降序排序输出的月份降序排序输出。 SELECT studentNo, studentName, classNo, birthday FROM Student WHERE sex=女女 ORDER BY
58、classNo, date_part(mm,birthday) DESC其中:其中: date_part(mm,birthday)函数表示提取日期函数表示提取日期表达式的月份表达式的月份查询结果如图查询结果如图3-22所示所示60数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2简单查询简单查询 n 3.2.1 投影运算投影运算n 3.2.2 选择运算选择运算 n 3.2.3 排序运算排序运算n 3.2.4 查询表查询表ORDER BY ASC | DESC , ASC | DESC, . 61数据库原理数据库原理第第 3 3 章章 SQLSQL查询语言查询语言3.2.
59、4 查询表查询表n FROM子句后面可以是基本关系、视图,还可以是查询表子句后面可以是基本关系、视图,还可以是查询表l 例例3.26 查询查询1999年出生的年出生的“女女”同学基本信息。同学基本信息。l 分析:可以先将学生表中的女生记录查询出来,然后再对查询表进行分析:可以先将学生表中的女生记录查询出来,然后再对查询表进行选择、投影操作。选择、投影操作。 SELECT studentNo, studentName, birthday FROM (SELECT * FROM Student WHERE sex=女女) AS a WHERE date_part(year,birthday)=19
60、99l 在在FROM子句后是一个子句后是一个子查询子查询,表示对子查询的查询结果,表示对子查询的查询结果查询表查询表进行查询进行查询l 必须为查询表取一个必须为查询表取一个名称名称(称为元组变量称为元组变量),如使用,如使用AS a取名为取名为a FROM (SELECT * FROM Student WHERE sex=女女) al 该查询等价于下面的查询:该查询等价于下面的查询: SELECT studentNo, studentName, birthday FROM student WHERE date_part(year,birthday)=1999 AND sex=女女62数据库原理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030非洲航空企业行业市场竞争市场发展技术革新市场趋势分析及投资机会规划研究报告
- 2025-2030非洲石油开采产业市场现状发展需求分析及投资风险评估规划分析研究报告
- 2025年10月湖南省方正证券股份有限公司(方正研究所)招考机械行业研究员(机械团队)笔试历年备考题库附带答案详解试卷2套
- 2025年07月湖南省临澧沪农商村镇银行2025年下半年招考员工笔试历年常考点试题专练附带答案详解试卷2套
- 2025年05月上海市兴业国信资产管理有限公司招考暑期实习生笔试历年常考点试题专练附带答案详解试卷2套
- 2025年04月安徽省华安证券股份有限公司春季招考笔试历年典型考点题库附带答案详解试卷2套
- 2025四川雅安市荥经县县属国有企业招聘笔试及人员笔试参考题库附带答案详解2套试卷
- 2026年内蒙古北方职业技术学院单招职业倾向性考试题库及答案详解(典优)
- 2026年内蒙古北方职业技术学院单招职业倾向性测试题库及答案详解(新)
- 2026年内蒙古化工职业学院单招职业倾向性考试题库含答案详解(新)
- 【黑产大数据】2025年互联网黑灰产趋势年度总结
- 2026年山东圣翰财贸职业学院单招综合素质考试备考试题带答案解析
- 2026年竞彩知识模拟练习题集含答案
- 2025年退休党支部书记抓党建工作述职报告
- 水下焊接技术培训课件
- 2026年小红书运营账号人设差异化打造调研
- 2025年安徽粮食工程职业学院单招职业适应性考试模拟测试卷附答案解析
- 大班幼儿劳动教育的现状与对策研究
- 2025年四川省绵阳市中考数学试卷附解析答案
- TCSES88-2023建设项目竣工环境保护设施验收技术规范污染影响类总则
- 2026年湖南科技职业学院单招职业适应性考试必刷测试卷附答案
评论
0/150
提交评论