SQL语言(超全)_第1页
SQL语言(超全)_第2页
SQL语言(超全)_第3页
SQL语言(超全)_第4页
SQL语言(超全)_第5页
已阅读5页,还剩168页未读 继续免费阅读

下载本文档

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

文档简介

1、第第3章章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 数据定义数据定义3.3 查询查询3.4 数据更新数据更新3.5 视图视图3.6 数据控制数据控制3.7 嵌入式嵌入式SQL(不讲不讲)第第3章章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述1. SQL的特点的特点2. SQL的核心功能的核心功能3. SQL的基本概念的基本概念SQL1. 名称由来:名称由来:Structured Query Language2. 特点:特点:1. 混合型:混合型: 关系代数关系代数、关系演算关系演算2. 综合统一:综合统一: 含含DDL、DML、DCL3.非

2、过程化:非过程化: 只需提出只需提出“做什么做什么”,数据独立性高数据独立性高4.集合操作:集合操作: 对象和结果都是元组集合对象和结果都是元组集合5.多种多种使用方式:使用方式:独立使用独立使用: 自含式自含式嵌入高级语言嵌入高级语言:嵌入式嵌入式3. 版本版本:74年发明,年发明,86年年 ANSI公布公布SQL-86,ISO通过通过,ANSI: SQL-89、SQL-92、SQL3。6.语言简洁:语言简洁: 接近英语口语,易学易用。接近英语口语,易学易用。1. SQL的特点的特点第第3章章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述1. SQL的特点的特点2. SQ

3、L的核心功能的核心功能3. SQL的基本概念的基本概念2. SQL的核心功能的核心功能SQL功能功能 命命 令令 动动 词词 数据查询数据查询 SELECT数据定义数据定义CREATE,DROP,ALTER数据操纵数据操纵INSERT,UPDATE,DELETE数据控制数据控制GRANT,REVOKE第第3章章 关系数据库标准语言关系数据库标准语言SQL1. SQL的特点的特点2. SQL的核心功能的核心功能3. SQL的基本概念的基本概念3.1 SQL概述概述3. SQL的基本概念的基本概念基本表基本表:对应于:对应于模式模式。特点:。特点: 一个基本关系一个基本关系一个基本表;一个基本表;

4、 多个基本表多个基本表一个存储文件;一个存储文件; 一个基本表可带多个索引,放在存储文件中。一个基本表可带多个索引,放在存储文件中。存储文件存储文件:逻辑结构:逻辑结构内模式内模式,物理结构任意。,物理结构任意。视图视图(view):对应于对应于外模式外模式。是从基本表或其他视图中导出的是从基本表或其他视图中导出的虚表虚表,不存储。,不存储。基本表和视图都是基本表和视图都是关系关系,都用,都用SQL语言进行操作。语言进行操作。SQL对数据库对数据库三级三级模式模式结构的支持结构的支持:视图视图1视图视图2基本表基本表2存储文件存储文件1SQL模式模式内模式内模式基本表基本表1基本表基本表3存储

5、文件存储文件2外模式外模式第第3章章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 数据定义数据定义3.3 查询查询3.4 数据更新数据更新3.5 视图视图3.6 数据控制数据控制3.7 嵌入式嵌入式SQL第第3章章 关系数据库标准语言关系数据库标准语言SQL3.2 数据定义数据定义1. 数据定义概述数据定义概述 2. 定义、删除与修改基本表定义、删除与修改基本表3. 建立与删除索引建立与删除索引1. 数据定义概述数据定义概述 创建创建和和删除删除: 基本表、视图、索引。基本表、视图、索引。修改修改基本表。无修改基本表。无修改索引索引、视图视图的操作的操作: 删除重建

6、。删除重建。操作操作对象对象 操作方式操作方式创建创建删除删除修改修改表表CREATE TABLEDROP TABLEALTER TABLE视图视图 CREATE VIEWDROP VIEW索引索引 CREATE INDEXDROP INDEX本节只介绍本节只介绍基本表基本表和和索引索引,视图视图在在3.5节介绍。节介绍。第第3章章 关系数据库标准语言关系数据库标准语言SQL3.2 数据定义数据定义1. 数据定义概述数据定义概述 2. 定义、删除与修改基本表定义、删除与修改基本表3. 建立与删除索引建立与删除索引1. 定义基本表定义基本表 一般格式:一般格式: CREATE TABLE ( 列

7、级完整性约束列级完整性约束 , 列级完整性约束列级完整性约束. ,) ;:基本表的名字,:基本表的名字,:基本表所含的属性基本表所含的属性(列列)的名字,一个或多个。的名字,一个或多个。列级完整性约束列级完整性约束:规定列要满足的一些约束条件:规定列要满足的一些约束条件(仅仅涉及一个涉及一个属性,如:属性,如:NOT NULL、UNIQUE、单属性单属性主码、外码等主码、外码等)表级完整性约束条件表级完整性约束条件:规定表要满足的一些约束条件:规定表要满足的一些约束条件(涉及一涉及一个或多个属性,如:个或多个属性,如:单属性或组合单属性或组合的主码、外码等的主码、外码等) :指明属性的:指明属

8、性的数据类型数据类型及及长度长度。不同。不同DBMS支持支持的数据类型不完全相同的数据类型不完全相同(在实验课中介绍在实验课中介绍)。;为语句结束标志,在为语句结束标志,在SQL Server中可省略。中可省略。 2. 定义、删除与修改基本表定义、删除与修改基本表 CREATE TABLE Student ( Sno CHAR(5) CONSTRAINT PK_Stu PRIMARY KEY, Sname CHAR(20) CONSTRAINT UQ1 UNIQUE, Ssex CHAR(2), Sage INT NOT NULL CONSTRAINT UQ2 UNIQUE CONSTRAIN

9、T CK1 CHECK(Sage=15 AND Sage=35), Sdept CHAR(15), CHECK(Ssex IN (男男,女女) AND Sno LIKE 95_ ) )说明:说明: 1) CONSTRAINT用来为约束用来为约束取名字取名字,如果,如果不取名不取名则不用则不用 2) 一列可以含多个约束,其间用空格分隔一列可以含多个约束,其间用空格分隔 3) 在在SQL Server中中, NOT NULL不是对象,可取名但无效。不是对象,可取名但无效。 4) 列级列级CHECK约束约束中的中的只能访问只能访问本列本列 5) 表级表级CHECK约束约束中的中的可访问可访问本表的所

10、有列本表的所有列例例1 建立建立: Student(Sno, Sname, Ssex, Sage, Sdept) Course(Cno, Cname, Cpno,Ccredit) SC(Sno, Cno, Grade) 例:创建基本表例:创建基本表CREATE TABLE Course ( Cno CHAR(4) PRIMARY KEY, Cname CHAR(20), Cpno CHAR(4), Ccredit INT )CREATE TABLE SC ( Sno CHAR(5) FOREIGN KEY REFERENCES Student(Sno), Cno CHAR(4) FOREIGN

11、 KEY REFERENCES Course(Cno), Grade INT, PRIMARY KEY (Sno, Cno) )要先建要先建Student和和Course, 后建后建SC,为什么?为什么?例例1 建立建立: Student(Sno, Sname, Ssex, Sage, Sdept) Course(Cno, Cname, Cpno,Ccredit) SC(Sno, Cno, Grade) 例:创建基本表例:创建基本表ALTER TABLE ADD 完整性约束完整性约束 DROP COLUMN ALTER COLUMN NOT NULL DROP CONSTRAINT : 指定要

12、修改的基本表;指定要修改的基本表;ADD子句子句: : 用于增加新列和新的完整性约束;用于增加新列和新的完整性约束;DROP COLUMN子句子句: : 用于删除指定列用于删除指定列ALTER COLUMN 子句子句:用于修改原有的列定义:用于修改原有的列定义DROP CONSTRAINT 子句子句:用于删除完整性约束;:用于删除完整性约束;2. 修改基本表修改基本表 一般格式为一般格式为( (与书上格式有区别与书上格式有区别) ):2. 定义、删除与修改基本表定义、删除与修改基本表 例:修改基本表例:修改基本表例例2 向向Student表增加表增加Scity列。列。 ALTER TABLE

13、Student ADD Scity CHAR(20)CONSTRAINT CK3 CHECK( Scity IN (杭州杭州, 宁波宁波) ) 如果表中已有数据,则如果表中已有数据,则新增加的列一律为空值。新增加的列一律为空值。例例3 将年龄的数据类型改为将年龄的数据类型改为SMALLINT并允许取空值并允许取空值 。 ALTER TABLE Student ALTER COLUMN Sage SMALLINT NULL1)若有若有约束对象约束对象访问该列,则不允许修改,除非删除这些对象访问该列,则不允许修改,除非删除这些对象2)修改原有的列定义有可能会破坏已有数据。修改原有的列定义有可能会破

14、坏已有数据。例例4 删除删除Scity列列。ALTER TABLE Student DROP COLUMN Scity若有若有约束对象约束对象访问该列,则不允许删除。访问该列,则不允许删除。例例5 先先删除删除约束对象约束对象CK1、CK3、UQ2, 然后执行然后执行例例3和和例例4。 ALTER TABLE Student DROP CK1, CK3, UQ2DROP TABLE , 例例5 删除删除SC表,表,Couser表和表和Student表表DROP TABLE SC , Course, Student1) SC一定要写在一定要写在Course和和Student前面,前面,为什么?为

15、什么? 2) 基本表定义一旦删除,表中的数据、索引都将自动被删除基本表定义一旦删除,表中的数据、索引都将自动被删除掉。执行删除操作一定要掉。执行删除操作一定要格外小心格外小心。3. 删除基本表删除基本表 一般格式为:一般格式为:2. 定义、删除与修改基本表定义、删除与修改基本表 第第3章章 关系数据库标准语言关系数据库标准语言SQL3.2 数据定义数据定义1. 数据定义概述数据定义概述 2. 定义、删除与修改基本表定义、删除与修改基本表3. 建立与删除索引建立与删除索引3. 建立与删除索引建立与删除索引 索引是加快查询速度的有效手段:索引是加快查询速度的有效手段:无索引无索引:在表:在表R中查

16、找中查找A属性值为属性值为ai的元组,的元组,顺序查找。顺序查找。比较次数为比较次数为 |R|/2有索引:有索引:在索引顺序表中在索引顺序表中二分查找二分查找ai,Aait索引项索引项记录位置记录位置aiLoc若若|R|232=4294967296,无索引要比较无索引要比较2147483647次次有索引只需比较有索引只需比较32次。次。根据记录位置找到所需记录。根据记录位置找到所需记录。比较次数为比较次数为log2(|R|)。按索按索引项引项的值的值升序升序或或降降序序可以在一个基本表上建立一个或多个索引。可以在一个基本表上建立一个或多个索引。1.建立索引建立索引 一般格式为:一般格式为: C

17、REATE UNIQUE CLUSTER INDEX ON ( , . ) :指定要建索引的基本表。指定要建索引的基本表。 :指定要建索引的指定要建索引的列名。列名。索引可以建在一列或多列索引可以建在一列或多列上,各列名之间用逗号分隔。上,各列名之间用逗号分隔。 :每个每个后后可可指定索引值的排列次序,包括指定索引值的排列次序,包括ASC(升序)和升序)和DESC(降序)两种,缺省值为降序)两种,缺省值为ASC。 UNIQUE:表明每一个索引值只对应唯一的数据记录。表明每一个索引值只对应唯一的数据记录。 CLUSTER:建立建立聚簇索引聚簇索引:表中的记录按索引项的顺序存:表中的记录按索引项的

18、顺序存放。一个基本表最多只能建立一个聚簇索引。放。一个基本表最多只能建立一个聚簇索引。聚簇索引列数据的更新会导致表中记录的物理移动,代价聚簇索引列数据的更新会导致表中记录的物理移动,代价较大,因此经常更新的列不宜建聚簇索引。较大,因此经常更新的列不宜建聚簇索引。 3. 建立与删除索引建立与删除索引 例:建立索引例:建立索引 例例6 为为Student、Course、SC建立索引。建立索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno) /*默认升序默认升序*/CREATE UNIQUE INDEX Coucno ON Course(Cno) /*默认升序

19、默认升序*/CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC) DROP INDEX ., .例例7 删除索引删除索引Stusno、 Coucno、 SCno DROP INDEX Student.Stusno,Course.Coucno,SC.SCno1)索引一经建立,就由索引一经建立,就由DBMS使用和维护它使用和维护它,不需用户干预不需用户干预;2)如果数据如果数据增删改频繁增删改频繁,系统会花费许多时间来维护索引,系统会花费许多时间来维护索引, 这时,可以这时,可以删除删除一些不必要的索引。一些不必要的索引。2. 删除索引删除索引 一般格

20、式为:一般格式为:3. 建立与删除索引建立与删除索引 第第3章章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 数据定义数据定义3.3 查询查询3.4 数据更新数据更新3.5 视图视图3.6 数据控制数据控制3.7 嵌入式嵌入式SQL第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询 ( )1. 查询概述查询概述 SQL用用SELECT语句进行查询,其一般格式为(含若干语句进行查询,其一般格式为(含若干子句子句):):SELECT ALL|

21、DISTINCT ,. FROM , . WHERE GROUP BY HAVING ORDER BY ASC|DESC 含义含义: ( )根据根据WHERE子句的条件表达式,子句的条件表达式,从从FROM子句的基本表或视图的笛卡儿积中,子句的基本表或视图的笛卡儿积中,找出满足条件的元组,找出满足条件的元组,按按SELECT子句的目标列表达式,子句的目标列表达式,进行投影,进行投影,形成结果表。形成结果表。FrsX1, X2,X1X21. 查询概述查询概述如果有如果有GROUP BY子句,则:子句,则: 最后将这条最后将这条“记录记录”投影到目标列,产生结果表的投影到目标列,产生结果表的一条记

22、录。一条记录。演示演示 然后将然后将(聚聚)集函数集函数作用到组,得到一条作用到组,得到一条“记录记录”,演示,演示 先将选择结果先将选择结果F(r s),按按的值分的值分组组(值相等的元组分为一组值相等的元组分为一组),演示,演示如果有如果有ORDER BY,则结果表还要按则结果表还要按的值升序或的值升序或降序排列。降序排列。如果如果GROUP BY带带HAVING,则只输出满足则只输出满足HAVING条件的组条件的组SQL用用SELECT语句进行查询,其一般格式为(含若干语句进行查询,其一般格式为(含若干子句子句):):SELECT ALL|DISTINCT ,. FROM , . WHE

23、RE GROUP BY HAVING ORDER BY ASC|DESC 含义含义:第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列选择列:指定列指定列,所有列,计算列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值判断,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使

24、用使用HAVING筛选组筛选组指仅涉及指仅涉及一个表一个表的查询,包括:的查询,包括:选择列选择列、选择行选择行。是。是最简单最简单的查询。的查询。2. 单表查询单表查询 选择表中的部分或全部列,是选择表中的部分或全部列,是投影投影。 1) 查询指定列查询指定列 例例1 查询全体学生的查询全体学生的学号学号与与姓名姓名。 SELECT Sno, Sname FROM Student 结果表中列的顺序可以和原表不同结果表中列的顺序可以和原表不同: 例例2 查询全体学生的查询全体学生的姓名姓名、学号学号、所在系所在系。 SELECT Sname, Sno, Sdept FROM Student(1

25、)选择列选择列:第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列选择列:指定列,:指定列,所有列所有列,计算列,计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值判断,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组 a) 在在SELECT子句中子句中

26、列出所有属性列出所有属性; b) 若结果表若结果表列顺序列顺序与原表与原表相同相同,可将,可将 指定为指定为* 例例3 查询全体学生的详细记录查询全体学生的详细记录 SELECT * FROM Student 无条件地查询表的全部信息:无条件地查询表的全部信息:全表查询全表查询,最简单。,最简单。 2) 查询所有列。查询所有列。两种方法:两种方法:2. 单表查询单表查询第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列选择列:指定列,所有列,:指定列,所有列,

27、计算列计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值判断,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组可以是可以是算术表达式算术表达式: 例例4 查全体学生的查全体学生的姓名姓名及其及其出生年份出生年份 SELECT Sname, YEAR( GETDATE( ) ) - Sage FROM Student 用当前年份减去学生的年龄,得到学生的出生年份。用当前年份减去学生的年龄,

28、得到学生的出生年份。输出的结果为:输出的结果为: Sname (无列名无列名) 李勇李勇 1987 刘晨刘晨 1988 王名王名 1989张立张立 1988 3) 查询计算列:查询计算列:表中表中不存在不存在,是,是计算而得计算而得的列的列也可以是也可以是字符串常量字符串常量、函数函数等等2. 单表查询单表查询 SELECT Sname, Birth In, 2007-Sage, LOWER(Sdept) FROM Student 结果为:结果为: Sname (无列名无列名) (无列名无列名) (无列名无列名) 李勇李勇 Birth In 1987 cs 刘晨刘晨 Birth In 1988

29、 is . 可以为结果表的列指定可以为结果表的列指定别名别名,例如,例如: : SELECT Sname AS NAME, Birth In BIRTH, 2007-Sage AS Year of Birth, LOWER(Sdept) DEPARTMENT FROM Student 结果为:结果为: NAME BIRTH Year of Birth DEPARTMENT 李勇李勇 Birth In 1987 cs . 思考:思考:要将要将2007-Sage 列的别名改为列的别名改为Births Year, 应如何写?应如何写?例例5 查全体学生的查全体学生的姓名姓名、出生年份出生年份和和所在

30、系所在系,要求用,要求用小写小写字母字母表示所在系名。表示所在系名。第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值判断,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVI

31、NG筛选组筛选组1) 消除重复行消除重复行: 例例6 查选修了课程的学生的学号。查选修了课程的学生的学号。 SELECT Sno FROM SC假设假设SC表中有下列数据:表中有下列数据: Sno Cno Grade 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80 选择部分元组的选择部分元组的部分部分列或列或全部全部列。列。 需指定需指定DISTINCT短语、短语、WHERE子句。子句。2. 单表查询单表查询用用DISTINCT短语可消除重复:短语可消除重复:SELECT DISTINCT Sno FROM SC执行结果为:执行结果

32、为: Sno 95001 95001 95001 95002 95002结果为:结果为: Sno 95001 95002(2)选择行选择行:1) 消除重复行消除重复行: 例例6 查选修了课程的学生的学号。查选修了课程的学生的学号。 SELECT DISTINCT Sno FROM SC 选择部分元组的选择部分元组的部分部分列或列或全部全部列。列。 需指定需指定DISTINCT短语、短语、WHERE子句。子句。2. 单表查询单表查询注意:注意:DISTINCT属于整个属于整个SELECT子句子句, 必须必须紧跟紧跟SELECT 例如以下例如以下SELECT语句是语句是错误的错误的: SELECT

33、 Ssex, DISTINCT Sname FROM Student正确的语句为:正确的语句为: SELECT DISTINCT Ssex, Sname FROM Student(2)选择行选择行:第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值判断

34、,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组 2)查询满足条件的行:查询满足条件的行:通过通过WHERE子句实现。子句实现。查询条件查询条件运算运算比较比较大小大小=, , =, =, !=, , !, !确定范围确定范围BETWEEN AND, NOT BETWEEN AND确定集合确定集合IN, NOT IN字符匹配字符匹配LIKE, NOT LIKE空值空值判断判断IS NULL, IS NOT NULL组合条件组合条件NOT, AND, OR下面逐一举例说明。下面逐一举例说明。 WHE

35、RE子句中常用的子句中常用的查询条件查询条件为:为:第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小比较大小,确定范围,确定集合,确定范围,确定集合字符匹配,空值判断,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组

36、 例例7 查查CS系全体学生的系全体学生的名名单。单。 SELECT Sname FROM Student WHERE Sdept= CS 例例8 查年龄在查年龄在20岁以下的学生岁以下的学生姓名姓名及其及其年龄年龄。 SELECT Sname, Sage FROM Student WHERE Sage , =, =, !=, , !, != 20例例9 查至少有一门课不及格的学生查至少有一门课不及格的学生学号学号。 SELECT DISTINCT Sno FROM SC WHERE Grade =L AND X=HX NOT BETWEEN L AND H 等价于等价于: XH确定范围:确定

37、范围: BETWEEN AND 第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小,确定范围,比较大小,确定范围,确定集合确定集合字符匹配,空值判断,组合条件字符匹配,空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组例例12 查查IS系

38、、系、 MA系或系或CS系的学生系的学生姓名姓名和和性别性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN (IS, MA, CS) /*用用()表示集合表示集合*/ NOT IN 查找属性值查找属性值不属于不属于指定集合的元组指定集合的元组例例13 查既不是查既不是IS系和系和MA系,也不是系,也不是CS系的学生系的学生姓名姓名和和性别性别 SELECT Sname, Ssex FROM Student WHERE Sdept NOT IN (IS, MA, CS) 显然:显然:X IN (e1, , ek) 等价于等价于: X=e1 ORO

39、R X=ekX NOT IN (e1, , ek)等价于等价于: Xe1 ANDAND X ek确定集合确定集合: IN 查找属性值查找属性值属于属于指定集合的元组指定集合的元组第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配字符匹配,空值判断,组合条件,

40、空值判断,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组 NOT LIKE ESCAPE 含义:含义:若若与与匹配匹配则为真,否则为假。则为真,否则为假。:由普通字符串和:由普通字符串和通配符通配符(%和和_)构成:构成: %:代表任意字符串。如:代表任意字符串。如a%b:a开头开头b结尾,长度结尾,长度=2 _:代表任意一个字符。如:代表任意一个字符。如a_b:a开头开头b结尾结尾, 长度为长度为3例例14 查所有姓查所有姓刘刘的学生的学生姓名姓名、学号学号和和性别性别。 SELECT Sname, Sno, Ssex F

41、ROM Student WHERE Sname LIKE 刘刘% 例例15 查姓查姓“欧阳欧阳”且全名为且全名为3个汉字的学生姓名。个汉字的学生姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳欧阳_注意注意:在支持中文的:在支持中文的DBMS中一个汉字为一个字符。中一个汉字为一个字符。例例16 查名字中第查名字中第2个字为个字为“阳阳”的学生的姓名和学号。的学生的姓名和学号。 SELECT Sname, Sno FROM Student WHERE Sname LIKE _阳阳%字符串匹配字符串匹配 :用用LIKE运算符实现,格式为:运算符实现

42、,格式为: SELECT Sname , Sno, Ssex FROM Student WHERE Sname NOT LIKE 刘刘%若需要匹配若需要匹配%或或_本身本身,就要用就要用ESCAPE对对通配符通配符进行进行转义转义, 即将匹配串中的即将匹配串中的%或或_转义为普通字符。转义为普通字符。例例18 查查DB_ Design课程的课程号和学分。课程的课程号和学分。 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE ESCAPE 表示表示 为换码字符,这样紧跟在为换码字符,这样紧跟在 后面的字符后面的字符

43、“_”不再是通配符,被转义为普通的不再是通配符,被转义为普通的“_”字符。字符。 例例19 查以查以“DB_”开头,倒数第三个字符为开头,倒数第三个字符为i的课程信息。的课程信息。 SELECT * FROM Course WHERE Cname LIKE DB_%i _ _ ESCAPE 注意:注意:若匹配串中不含若匹配串中不含%或或_, 则:则: X LIKE Pat 等价于:等价于: X Pat X NOT LIKE Pat 等价于:等价于: X Pat例例17 查所有不姓刘的学生姓名。查所有不姓刘的学生姓名。第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2

44、. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,字符匹配,空值判断空值判断,组合条件,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组例例20 查查成绩为空成绩为空的选课记录中的的选课记录中的学号学号和和课程号课程号。 SELECT Sno, Cno FROM S

45、C WHERE Grade IS NULL 注意注意:IS不能用等号代替。不能用等号代替。例例21 查查有成绩有成绩的选课记录中的的选课记录中的学号学号和和课程号课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 注意:注意: X IS NOT NULL等价于等价于: NOT X IS NULL空值判断空值判断 :IS NULL、IS NOT NULL第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定

46、列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值,字符匹配,空值,组合条件组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组例例22 查询查询CS系年龄在系年龄在20岁以下的学生姓名。岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept=CS AND Sage20组合条件查询组合条件查询:用:用NOT、AND、OR和和括号括号连接多

47、个连接多个简单查询条件简单查询条件,形成一个,形成一个复杂查询条件复杂查询条件。例例12 查查IS系、系、 MA系或系或CS系的学生姓名和性别。系的学生姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN (IS, MA, CS)IN运算实际上是多个运算实际上是多个OR运算的缩写,因此例运算的缩写,因此例12中的查中的查询询 也可以用也可以用OR运算写成:运算写成: SELECT Sname, Ssex FROM Student WHERE Sdept=IS OR Sdept=MA OR Sdept=CS 第第3章章 关系数据库标准语言关系

48、数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值,组合条件字符匹配,空值,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组例例23 查询选修了查询选修了3号课程的学号及成绩,按成绩降序排列。号课程的学号及成绩,按成绩

49、降序排列。 SELECT Sno, Grade FROM SC WHERE Cno=3 ORDER BY Grade DESC例例24 查询全体学生情况,按所在系升序排列,对同一系查询全体学生情况,按所在系升序排列,对同一系的学生按年龄降序排列。的学生按年龄降序排列。 SELECT * FROM Student ORDER BY Sdept, Sage DESC(3)对查询结果排序对查询结果排序:用:用ORDER BY指定按指定按某些列某些列升序升序(ASC)或降序或降序(DESC) ,其中其中ASC为缺省值。为缺省值。 第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询

50、概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值,组合条件字符匹配,空值,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组COUNT(DISTINCT *) 统计元组个数统计元组个数 COUNT(DISTINCT ) 统计列值的个数统计列值的个数 SUM

51、(DISTINCT ) 计算计算数值型数值型列的总和列的总和 AVG(DISTINCT ) 计算计算数值型数值型列的平均值列的平均值 MAX(DISTINCT ) 求列的最大值求列的最大值 MIN(DISTINCT ) 求列的最小值求列的最小值如果指定如果指定DISTINCT,则在计算时要取消重复值。则在计算时要取消重复值。例例25 查询学生总人数。查询学生总人数。 SELECT COUNT(*) FROM Student例例26 查询选修了课程的学生人数。查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC例例27 计算计算1号课程的平均成绩。号课

52、程的平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno=1例例28 查询查询1号课程的最高分数。号课程的最高分数。 SELECT MAX(Grade) FROM SC WHERE Cno=1(4)使用集函数使用集函数:SQL用用集函数集函数进行统计查询,包括:进行统计查询,包括:第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行

53、。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值,组合条件字符匹配,空值,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组查询结果为:查询结果为: Cno (无列名无列名) 1 1 2 2 3 2思考:思考:下列语句正确吗?为什么?下列语句正确吗?为什么? SELECT Cno, Sno FROM SC GROUP BY Cno(5)对查询结果分组:对查询结果分组: 用用GROUP BY子句按列值相等的原子句按列值相等的原则对查询结果进行分组。则对查询结果进行分组。

54、例例29 查询各门课程的查询各门课程的课程号课程号及相应的及相应的选课人数选课人数。SELECT Cno, Sno FROM SCGROUP BY Cno中间结果中间结果Cno相同的元组分为一组相同的元组分为一组COUNT( )对每一组作用集函数对每一组作用集函数COUNT,求得选课人数。求得选课人数。CnoSno122339500195001950029500195002第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询选择列:指定列,所有列,计算列选择列:指定列

55、,所有列,计算列选择行选择行消除重复行消除重复行查询满足条件的行。查询条件:查询满足条件的行。查询条件:比较大小,确定范围,确定集合比较大小,确定范围,确定集合字符匹配,空值,组合条件字符匹配,空值,组合条件对查询结果排序对查询结果排序使用集函数使用集函数对查询结果分组对查询结果分组使用使用HAVING筛选组筛选组例例30 查询前查询前4位为位为“9500”且选修了且选修了1门以上课程的学号。门以上课程的学号。 (6)使用使用HAVING筛选组筛选组:只输出满足:只输出满足HAVING条件的组。条件的组。只有满足只有满足HAVING条件的组才会被选出来。条件的组才会被选出来。WHERE与与HA

56、VING的区别:的区别:作用对象不同作用对象不同。WHERE作用于作用于表表,选择,选择元组元组,不能,不能直接直接包含集函数。包含集函数。HAVING作用于作用于组组,选择,选择组组,常包含集函数。,常包含集函数。 SELECT Sno FROM SC WHERE Sno LIKE 9500%GROUP BY SnoHAVING COUNT(*)1中间结果中间结果学号相同的元组分为一组学号相同的元组分为一组挑选组挑选组Sno950019500195001950029500295003 单单表表查查询询单表查询单表查询小结小结选择列选择列(投影投影):指定列:指定列,所有列所有列( * ),计

57、算列计算列选择行选择行(选择选择):消除重复行消除重复行:DISTINCT查询满足条件的行查询满足条件的行。查询条件:。查询条件:比较大小比较大小:、:、 等比较运算符等比较运算符确定范围确定范围:NOT BETWEEN AND确定集合确定集合:NOT IN 字符串匹配字符串匹配:NOT LIKE 空值判断空值判断: IS NOT NULL组合条件组合条件:用:用AND、OR组合多个条件组合多个条件对查询结果排序:对查询结果排序:ORDER BY 子句子句使用集函数:使用集函数:SUM、COUNT、AVG、MAX、MIN对查询结果分组:对查询结果分组:GROUP BY子句子句使用使用HAVIN

58、G筛选组:筛选组:HAVING子句子句 对对多表查询多表查询仍适用。仍适用。 当不同表的列名相同时,在列名前加表名前缀:当不同表的列名相同时,在列名前加表名前缀:SC.Sno=Student.Sno; GROUP BY SC.Cno第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询连接条件连接条件的一般格式:的一般格式:连接字段连接字段:连接条件中的列名。:连接条件中的列名。 连接字段必须是连接字段必须是可比的可比的。种类:种类:等值、非等值、自身、外、复合等值、非

59、等值、自身、外、复合含义:含义:涉及多个表的查询。涉及多个表的查询。FROM后面涉及后面涉及多个表多个表WHERE 条件条件: 连接条件连接条件 and 普通条件普通条件. . and/or. . and/or. .第第3章章 关系数据库标准语言关系数据库标准语言SQL1. 查询概述查询概述2. 单表查询单表查询3. 连接查询连接查询4. 嵌套查询嵌套查询5. 集合查询集合查询3.3 查询查询等值连接等值连接非等值连接非等值连接自身连接自身连接外连接外连接复合条件连接复合条件连接广义笛卡儿积广义笛卡儿积自然连接自然连接特例特例3. 连接查询连接查询 等值连接等值连接:为为“=”的连接。的连接。

60、 非等值连接非等值连接: 不是不是“=”的连接。的连接。 连接过程连接过程:设:设表表1与与表表2连接连接 for (表表1中的每个元组中的每个元组t ) for (表表2中的每个元组中的每个元组s ) if ( t和和s使连接条件使连接条件成立成立 )(1) 等值连接与非等值连接等值连接与非等值连接表表1 表表2 结果表结果表 t. s. 成立成立?ts拼接拼接拼接拼接t和和s, 形成形成结果表结果表的一个元组的一个元组;涉及涉及Student与与SC两个表。将这两个表中学号相同的元两个表。将这两个表中学号相同的元组连接起来,是等值连接:组连接起来,是等值连接: SELECT Student

温馨提示

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

评论

0/150

提交评论