
数据库系统概论第五版PPT第3章1.ppt
96页An Introduction to Database System数据库系统概论 An Introduction to Database Systemxx第三章第三章 关系数据库标准语言关系数据库标准语言SQLSQLAn Introduction to Database System第三章第三章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 学生学生-课程数据库课程数据库3.3 数据定义数据定义3.4 数据查询数据查询3.5 数据更新数据更新3.6 空值的处理空值的处理3.7 视图视图3.8 小结小结An Introduction to Database System3.1 SQL概述概述vSQL((Structured Query Language)) 结构化查询语言,是关系数据库的标准语言结构化查询语言,是关系数据库的标准语言vSQL是一个通用的、功能极强的关系数据库语言是一个通用的、功能极强的关系数据库语言An Introduction to Database SystemSQL概述(续)概述(续)3.1.1 SQL 的产生与发展的产生与发展3.1.2 SQL的特点的特点3.1.3 SQL的基本概念的基本概念An Introduction to Database SystemSQL标准的进展过程标准的进展过程标准标准大致页数大致页数 发布日期发布日期SQL/861986.10SQL/89((FIPS 127-1))120页页 1989年年SQL/92622页页1992年年SQL99((SQL 3))1700页页 1999年年SQL20033600页页 2003年年SQL20083777页页2006年年SQL20112010年年目前,没有一个数据库系统能够支持目前,没有一个数据库系统能够支持SQL标准的所有概念和特性标准的所有概念和特性An Introduction to Database System3.1 SQL概述概述3.1.1 SQL 的产生与发展的产生与发展3.1.2 SQL的特点的特点3.1.3 SQL的基本概念的基本概念An Introduction to Database System3.1.2 SQL的特点的特点v综合统一综合统一n集数据定义语言(集数据定义语言(DDL),数据操纵语言(),数据操纵语言(DML),),数据控制语言(数据控制语言(DCL)功能于一体。
功能于一体n可以独立完成数据库生命周期中的全部活动:可以独立完成数据库生命周期中的全部活动:l定义和修改、删除关系模式,定义和删除视图,插入数定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库据,建立数据库;l 对数据库中的数据进行查询和更新对数据库中的数据进行查询和更新;l 数据库重构和维护数据库重构和维护l数据库安全性、完整性控制,以及事务控制数据库安全性、完整性控制,以及事务控制l嵌入式嵌入式SQL和动态和动态SQL定义定义n用户数据库投入运行后,可根据需要随时逐步修改模用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据库的运行式,不影响数据库的运行n数据操作符统一数据操作符统一An Introduction to Database System2. 高度非过程化高度非过程化v非关系数据模型的数据操纵语言非关系数据模型的数据操纵语言“面向过程面向过程”,,必须指定存取路径必须指定存取路径vSQL只要提出只要提出“做什么做什么”,无须了解存取路径无须了解存取路径v 存取路径的选择以及存取路径的选择以及SQL的操作过程由系统自动的操作过程由系统自动完成An Introduction to Database System3. 面向集合的操作方式面向集合的操作方式v非关系数据模型采用面向记录的操作方式,操作对非关系数据模型采用面向记录的操作方式,操作对象是一条记录象是一条记录vSQL采用集合操作方式采用集合操作方式n 操作对象、查找结果可以是元组的集合操作对象、查找结果可以是元组的集合n 一次插入、删除、更新操作的对象可以是元组的集合一次插入、删除、更新操作的对象可以是元组的集合An Introduction to Database System4. 以同一种语法结构提供多种使用方式以同一种语法结构提供多种使用方式vSQL是独立的语言是独立的语言 能够独立地用于联机交互的使用方式能够独立地用于联机交互的使用方式vSQL又是嵌入式语言又是嵌入式语言 SQL能够嵌入到高级语言(例如能够嵌入到高级语言(例如C,,C++,,Java)程序中,供程序员设计程序时使用)程序中,供程序员设计程序时使用An Introduction to Database System5.语言简洁,易学易用语言简洁,易学易用vSQL功能极强,完成核心功能只用了功能极强,完成核心功能只用了9个动词。
个动词An Introduction to Database System3.1 SQL概述概述3.1.1 SQL 的产生与发展的产生与发展3.1.2 SQL的特点的特点3.1.3 SQL的基本概念的基本概念An Introduction to Database SystemSQL的基本概念(续)的基本概念(续)SQL视图视图2视图视图1基本表基本表2基本表基本表1基本表基本表3基本表基本表4存储文件存储文件2存储文件存储文件1外模式外模式模模 式式内模式内模式SQL支持关系数据库三级模式结构支持关系数据库三级模式结构An Introduction to Database SystemSQL的基本概念(续)的基本概念(续)v基本表基本表n本身独立存在的表本身独立存在的表nSQL中一个关系就对应一个基本表中一个关系就对应一个基本表n一个一个((或多个或多个))基本表对应一个存储文件基本表对应一个存储文件n一个表可以带若干索引一个表可以带若干索引An Introduction to Database SystemSQL的基本概念(续)的基本概念(续)v存储文件存储文件n逻辑结构组成了关系数据库的内模式逻辑结构组成了关系数据库的内模式n物理结构对用户是隐蔽的物理结构对用户是隐蔽的An Introduction to Database SystemSQL的基本概念(续)的基本概念(续)v视图视图n从一个或几个基本表导出的表从一个或几个基本表导出的表n数据库中只存放视图的定义而不存放视图对应的数据数据库中只存放视图的定义而不存放视图对应的数据n视图是一个虚表视图是一个虚表n用户可以在视图上再定义视图用户可以在视图上再定义视图An Introduction to Database System第三章第三章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 学生学生-课程数据库课程数据库3.3 数据定义数据定义3.4 数据查询数据查询3.5 数据更新数据更新3.6 空值的处理空值的处理3.7 视图视图3.8 小结小结An Introduction to Database System3.2 学生学生-课程课程 数据库数据库v学生学生-课程模式课程模式 S-T : 学生表:学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:学生选课表:SC(Sno,Cno,Grade) An Introduction to Database SystemStudent表表学号学号Sno姓名姓名Sname性性别别 Ssex年年龄龄 Sage所在系所在系 Sdept201215121李勇李勇男男20CS201215122刘晨刘晨女女19CS201215123王敏王敏女女18MA201215125张张立立男男19ISAn Introduction to Database SystemCourse表表课程号课程号Cno课程名课程名Cname先行课先行课Cpno学分学分Ccredit1数据库数据库542数学数学23信息系统信息系统144操作系统操作系统635数据结构数据结构746数据处理数据处理27PASCAL语言语言64An Introduction to Database SystemSC表表学学 号号Sno 课程号课程号 Cno 成绩成绩 Grade2012151211 92201215121 285201215121 388201215122290201215122380An Introduction to Database System第三章第三章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 学生学生-课程数据库课程数据库3.3 数据定义数据定义3.4 数据查询数据查询3.5 数据更新数据更新3.6 空值的处理空值的处理3.7 视图视图3.8 小结小结An Introduction to Database System3.3 数据定义数据定义 vSQL的数据定义功能的数据定义功能: n模式定义模式定义n表定义表定义n视图和索引的定义视图和索引的定义 An Introduction to Database System模式模式v现代关系数据库管理系统提供了一个层次化的数据现代关系数据库管理系统提供了一个层次化的数据库对象命名机制库对象命名机制n一个关系数据库管理系统的实例(一个关系数据库管理系统的实例(Instance)中可以建立)中可以建立多个数据库多个数据库n一个数据库中可以建立多个模式一个数据库中可以建立多个模式n一个模式下通常包括多个表、视图和索引等数据库对象一个模式下通常包括多个表、视图和索引等数据库对象数据库(有的系统称为目录)数据库(有的系统称为目录)模式模式表以及视图、索引等表以及视图、索引等An Introduction to Database System3.3 数据定义数据定义3.3.1 模式的定义与删除模式的定义与删除3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改3.3.3 索引的建立与删除索引的建立与删除An Introduction to Database System1. 定义模式定义模式 [例例3.1] 为用户为用户WANG定义一个学生定义一个学生-课程模式课程模式S-T CREATE SCHEMA “S-T” AUTHORIZATION WANG; [例例3.2] CREATE SCHEMA AUTHORIZATION WANG; 该语句没有指定该语句没有指定<模式名模式名>,,<模式名模式名>隐含为隐含为<用户名用户名>An Introduction to Database System定义模式(续)定义模式(续)v定义模式实际上定义了一个定义模式实际上定义了一个命名空间命名空间。
v在这个空间中可以定义该模式包含的数据库对象,在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等例如基本表、视图、索引等v在在CREATE SCHEMA中可以接受中可以接受CREATE TABLE,,CREATE VIEW和和GRANT子句 CREATE SCHEMA <模式名模式名> AUTHORIZATION <用户用户名名>[<表定义子句表定义子句>|<视图定义子句视图定义子句>|<授权定义子句授权定义子句>]An Introduction to Database System定义模式(续)定义模式(续)[例例3.3]为用户为用户ZHANG创建了一个模式创建了一个模式TEST,并且在其中定,并且在其中定义一个表义一个表TAB1CREATE SCHEMA TEST AUTHORIZATION ZHANG CREATE TABLE TAB1 ( COL1 SMALLINT, COL2 INT, COL3 CHAR(20), COL4 NUMERIC(10,3), COL5 DECIMAL(5,2) ); An Introduction to Database System2. 删除模式删除模式vDROP SCHEMA <模式名模式名>
则拒绝该删除语句的执行l仅当该模式中没有任何下属的对象时才能执行仅当该模式中没有任何下属的对象时才能执行An Introduction to Database System删除模式(续)删除模式(续)[例例3.4] DROP SCHEMA ZHANG CASCADE; 删除模式删除模式ZHANG 同时该模式中定义的表同时该模式中定义的表TAB1也被删除也被删除An Introduction to Database System3.3 数据定义数据定义3.3.1 模式的定义与删除模式的定义与删除3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改3.3.3 索引的建立与删除索引的建立与删除An Introduction to Database System3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改v定义基本表定义基本表CREATE TABLE <表名表名> (<列名列名> <数据类型数据类型>[ <列级完整性约束条件列级完整性约束条件> ] [,<列名列名> <数据类型数据类型>[ <列级完整性约束条件列级完整性约束条件>] ] … [,<表级完整性约束条件表级完整性约束条件> ] );n<表名表名>:所要定义的基本表的名字:所要定义的基本表的名字n<列名列名>:组成该表的各个属性(列):组成该表的各个属性(列)n<列级完整性约束条件列级完整性约束条件>:涉及相应属性列的完整性约束条件:涉及相应属性列的完整性约束条件n<表级完整性约束条件表级完整性约束条件>:涉及一个或多个属性列的完整性约:涉及一个或多个属性列的完整性约束条件束条件 n如果完整性约束条件涉及到该表的多个属性列,则必须定义如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
在表级上,否则既可以定义在列级也可以定义在表级 An Introduction to Database System学生表学生表Student[例例3.5] 建立建立“学生学生”表表Student学号是主码,姓名取值唯一学号是主码,姓名取值唯一 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件列级完整性约束条件,Sno是主码是主码*/ Sname CHAR(20) UNIQUE, /* Sname取唯一值取唯一值*/ Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20) ); 主码主码UNIQUE约束约束An Introduction to Database System课程表课程表Course [例例3.6 ] 建立一个建立一个““课程课程””表表CourseCREATE TABLE Course (Cno CHAR(4) PRIMARY KEY, Cname CHAR(40), Cpno CHAR(4), Ccredit SMALLINT,, FOREIGN KEY (Cpno) REFERENCES Course(Cno) ); 先修课先修课 Cpno是外码是外码 被参照表是被参照表是Course 被参照列是被参照列是CnoAn Introduction to Database System学生选课表学生选课表SC[例例3.7] 建立一个学生选课表建立一个学生选课表SC CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT,, PRIMARY KEY (Sno,Cno), /* 主码由两个属性构成,必须作为表级完整性进行定义主码由两个属性构成,必须作为表级完整性进行定义*/ FOREIGN KEY (Sno) REFERENCES Student(Sno), /* 表级完整性约束条件,表级完整性约束条件,Sno是外码,被参照表是是外码,被参照表是Student */ FOREIGN KEY (Cno)REFERENCES Course(Cno) /* 表级完整性约束条件,表级完整性约束条件, Cno是外码,被参照表是是外码,被参照表是Course*/ ); An Introduction to Database System2. 数据类型数据类型vSQL中域的概念用中域的概念用数据类型数据类型来实现来实现v定义表的属性时需要指明其数据类型及长度定义表的属性时需要指明其数据类型及长度 v选用哪种数据类型选用哪种数据类型 n取值范围取值范围 n要做哪些运算要做哪些运算 An Introduction to Database System数据类型(续)数据类型(续)数据数据类类型型含含义义CHAR(n),CHARACTER(n)长长度度为为n的定的定长长字符串字符串VARCHAR(n), CHARACTERVARYING(n)最大最大长长度度为为n的的变长变长字符串字符串CLOB字符串大字符串大对对象象BLOB二二进进制大制大对对象象INT,,INTEGER长长整数(整数(4字字节节))SMALLINT短整数(短整数(2字字节节))BIGINT大整数(大整数(8字字节节))NUMERIC(p,,d)定点数,由定点数,由p位数字(不包括符号、小数点)位数字(不包括符号、小数点)组组成,小数后面有成,小数后面有d位数字位数字DECIMAL(p, d), DEC(p, d)同同NUMERICREAL取决于机器精度的取决于机器精度的单单精度浮点数精度浮点数DOUBLE PRECISION取决于机器精度的双精度浮点数取决于机器精度的双精度浮点数FLOAT(n)可可选选精度的浮点数,精度至少精度的浮点数,精度至少为为n位数字位数字BOOLEAN逻辑逻辑布布尔尔量量DATE日期,包含年、月、日,格式日期,包含年、月、日,格式为为YYYY-MM-DDTIME时间,包含一日的时、分、秒,格式为时间,包含一日的时、分、秒,格式为HH:MM:SSTIMESTAMP时间时间戳戳类类型型INTERVAL时间间时间间隔隔类类型型An Introduction to Database System3. 模式与表模式与表v每一个基本表都属于某一个模式每一个基本表都属于某一个模式v一个模式包含多个基本表一个模式包含多个基本表v定义基本表所属模式定义基本表所属模式n方法一:在表名中明显地给出模式名方法一:在表名中明显地给出模式名 Create table"S-T".Student(......); /*模式名为模式名为 S-T*/Create table "S-T".Cource(......);Create table "S-T".SC(......); n方法二:在创建模式语句中同时创建表方法二:在创建模式语句中同时创建表 n方法三:设置所属的模式方法三:设置所属的模式 An Introduction to Database System模式与表(续)模式与表(续)v创建基本表(其他数据库对象也一样)时,若没有创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据指定模式,系统根据搜索路径搜索路径来确定该对象所属的来确定该对象所属的模式模式 v关系数据库管理系统会使用模式列表中关系数据库管理系统会使用模式列表中第一个存在第一个存在的模式的模式作为数据库对象的模式名作为数据库对象的模式名 v若搜索路径中的模式名都不存在,系统将给出错误若搜索路径中的模式名都不存在,系统将给出错误 n显示当前的搜索路径:显示当前的搜索路径: SHOW search_path; n搜索路径的当前默认值是:搜索路径的当前默认值是:$user,, PUBLIC An Introduction to Database System模式与表(续)模式与表(续)v数据库管理员用户可以设置搜索路径,然后定义数据库管理员用户可以设置搜索路径,然后定义基本表基本表 SET search_path TO "S-T",PUBLIC; Create table Student(......); 结果建立了结果建立了S-T.Student基本表。
基本表关系数据库管理系统发现搜索路径中第一个模式名关系数据库管理系统发现搜索路径中第一个模式名S-T,,就把该模式作为基本表就把该模式作为基本表Student所属的模式所属的模式An Introduction to Database System4. 修改基本表修改基本表ALTER TABLE <表名表名>[ ADD[COLUMN] <新列名新列名> <数据类型数据类型> [ 完整性约束完整性约束 ] ][ ADD <表级完整性约束表级完整性约束>][ DROP [ COLUMN ] <列名列名> [CASCADE| RESTRICT] ][ DROP CONSTRAINT<完整性约束名完整性约束名>[ RESTRICT | CASCADE ] ][ALTER COLUMN <列名列名><数据类型数据类型> ] ;An Introduction to Database System修改基本表(续)修改基本表(续)n<表名表名>是要修改的基本表是要修改的基本表nADD子句用于增加新列、新的列级完整性约束条件和新的子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件表级完整性约束条件nDROP COLUMN子句用于删除表中的列子句用于删除表中的列n如果指定了如果指定了CASCADE短语,则自动删除引用了该列的其他对象短语,则自动删除引用了该列的其他对象n如果指定了如果指定了RESTRICT短语,则如果该列被其他对象引用,关系短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列数据库管理系统将拒绝删除该列nDROP CONSTRAINT子句用于删除指定的完整性约束条子句用于删除指定的完整性约束条件件nALTER COLUMN子句用于修改原有的列定义,包括修改子句用于修改原有的列定义,包括修改列名和数据类型列名和数据类型An Introduction to Database System修改基本表(续)修改基本表(续)[例例3.8] 向向Student表增加表增加“入学时间入学时间”列,其数据类型为日期型列,其数据类型为日期型 ALTER TABLE Student ADD S_entrance DATE;不管基本表中原来是否已有数据,新增加的列一律为空值不管基本表中原来是否已有数据,新增加的列一律为空值 An Introduction to Database System修改基本表(续)修改基本表(续)[例例3.9] 将年龄的数据类型由字符型(假设原来的数据类型是将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
字符型)改为整数 ALTER TABLE Student ALTER COLUMN Sage INT;[例例3.10] 增加课程名称必须取唯一值的约束条件增加课程名称必须取唯一值的约束条件 ALTER TABLE Course ADD UNIQUE(Cname); An Introduction to Database System5. 删除基本表删除基本表 DROP TABLE <表名表名>[[RESTRICT| CASCADE]];vRESTRICT:删除表是有限制的:删除表是有限制的n欲删除的基本表不能被其他表的约束所引用欲删除的基本表不能被其他表的约束所引用n如果存在依赖该表的对象,则此表不能被删除如果存在依赖该表的对象,则此表不能被删除vCASCADE:删除该表没有限制:删除该表没有限制n在删除基本表的同时,相关的依赖对象一起删除在删除基本表的同时,相关的依赖对象一起删除 An Introduction to Database System删除基本表(续)删除基本表(续) [例例3.11] 删除删除Student表表 DROP TABLE Student CASCADE;n基本表定义被删除,数据被删除基本表定义被删除,数据被删除n表上建立的索引、视图、触发器等一般也将被删除表上建立的索引、视图、触发器等一般也将被删除 An Introduction to Database System删除基本表(续)删除基本表(续) [例例3.12 ]若表上建有视图,选择若表上建有视图,选择RESTRICT时表不能删除时表不能删除;选择选择CASCADE时可以删除表,视图也自动删除。
时可以删除表,视图也自动删除 CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS'; DROP TABLE Student RESTRICT; --ERROR: cannot drop table Student because other objects depend on it An Introduction to Database System删除基本表(续)删除基本表(续)[例例3.12续续]如果选择如果选择CASCADE时可以删除表,视图也自动时可以删除表,视图也自动被删除被删除 DROP TABLE Student CASCADE; --NOTICE: drop cascades to view IS_StudentSELECT * FROM IS_Student;--ERROR: relation " IS_Student " does not exist An Introduction to Database System删除基本表(续)删除基本表(续)序序号号 标标准及主流数据准及主流数据库库 的的处处理方式理方式依依赖赖基本表基本表的的对对象象SQL2011Kingbase ESOracle 12cMS SQLServer 2012RCRCC1索引索引无无规规定定√√√√√2视图视图×√×√√保留保留√保留保留√保留保留3DEFAULT,,PRIMARY KEY,,CHECK(只含(只含该该表表的列)的列)NOT NULL 等等约约束束√√√√√√√4外外码码FOREIGN KEY×√×√×√×5触触发发器器TRIGGER×√×√√√√6函数或存函数或存储过储过程程×√√保留保留√保留保留√保留保留√保留保留√保留保留DROP TABLE时,时,SQL2011 与与 3个个RDBMS的处理策略比较的处理策略比较R表示表示RESTRICT , C表示表示CASCADE '×'表示不能删除基本表,表示不能删除基本表,'√'表示能删除基本表,表示能删除基本表,‘保留保留’表示删除基本表后,还保留依赖对象表示删除基本表后,还保留依赖对象 An Introduction to Database System3.3 数据定义数据定义3.3.1 模式的定义与删除模式的定义与删除3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改3.3.3 索引的建立与删除索引的建立与删除3.3.4 数据字典数据字典An Introduction to Database System3.3.3 索引的建立与删除索引的建立与删除v建立索引的目的:加快查询速度建立索引的目的:加快查询速度v关系数据库管理系统中常见索引:关系数据库管理系统中常见索引:n顺序文件上的索引顺序文件上的索引nB+树索引(参见爱课程网树索引(参见爱课程网3.2节动画节动画《《B+树的增删改树的增删改》》))n散列(散列(hash)索引)索引n位图索引位图索引v特点:特点:nB+树索引具有动态平衡的优点树索引具有动态平衡的优点 nHASH索引具有查找速度快的特点索引具有查找速度快的特点An Introduction to Database System索索 引引v谁可以建立索引谁可以建立索引n数据库管理员数据库管理员 或或 表的属主(即建立表的人)表的属主(即建立表的人)v谁维护索引谁维护索引n关系数据库管理系统自动完成关系数据库管理系统自动完成 v使用索引使用索引n关关系系数数据据库库管管理理系系统统自自动动选选择择合合适适的的索索引引作作为为存存取取路路径,用户不必也不能显式地选择索引径,用户不必也不能显式地选择索引An Introduction to Database System1. 建立索引建立索引 v语句格式语句格式CREATE [UNIQUE] [CLUSTER] INDEX <索引名索引名> ON <表名表名>(<列名列名>[<次序次序>][,<列名列名>[<次序次序>] ]…);n<表名表名>::要建索引的基本表的名字要建索引的基本表的名字n索索引引::可可以以建建立立在在该该表表的的一一列列或或多多列列上上,,各各列列名名之之间间用用逗逗号分隔号分隔n<次次序序>::指指定定索索引引值值的的排排列列次次序序,,升升序序::ASC,,降降序序::DESC。
缺省值:缺省值:ASCnUNIQUE::此索引的每一个索引值只对应唯一的数据记录此索引的每一个索引值只对应唯一的数据记录nCLUSTER::表示要建立的索引是聚簇索引表示要建立的索引是聚簇索引An Introduction to Database System建立索引(续)建立索引(续)[例例3.13] 为为学学生生-课课程程数数据据库库中中的的Student,,Course,,SC三三个个表表建建立立索索引引Student表表按按学学号号升升序序建建唯唯一一索索引引,,Course表表按按课课程程号号升升序序建建唯唯一一索索引引,,SC表表按按学学号号升升序序和和课课程程号号降降序序建唯一索引建唯一索引 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); An Introduction to Database System2. 修改索引修改索引vALTER INDEX <旧索引名旧索引名> RENAME TO <新索新索引名引名>n[例例3.14] 将将SC表的表的SCno索引名改为索引名改为SCSnoALTER INDEX SCno RENAME TO SCSno;An Introduction to Database System3. 删除索引删除索引 vDROP INDEX <索引名索引名>;删除索引时,系统会从数据字典中删去有关该索引的删除索引时,系统会从数据字典中删去有关该索引的描述。
描述[例例3.15] 删除删除Student表的表的Stusname索引索引 DROP INDEX Stusname;An Introduction to Database System3.3 数据定义数据定义3.3.1 模式的定义与删除模式的定义与删除3.3.2 基本表的定义、删除与修改基本表的定义、删除与修改3.3.3 索引的建立与删除索引的建立与删除3.3.4 数据字典数据字典An Introduction to Database System数据字典数据字典v数据字典是关系数据库管理系统内部的一组系统数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有定义信息:表,它记录了数据库中所有定义信息:n关系模式定义关系模式定义n视图定义视图定义n索引定义索引定义n完整性约束定义完整性约束定义n各类用户对数据库的操作权限各类用户对数据库的操作权限n统计信息等统计信息等v关系数据库管理系统在执行关系数据库管理系统在执行SQL的数据定义语句的数据定义语句时,实际上就是在更新数据字典表中的相应信息时,实际上就是在更新数据字典表中的相应信息An Introduction to Database System第三章第三章 关系数据库标准语言关系数据库标准语言SQL3.1 SQL概述概述3.2 学生学生-课程数据库课程数据库3.3 数据定义数据定义3.4 数据查询数据查询3.5 数据更新数据更新3.6 空值的处理空值的处理3.7 视图视图3.8 小结小结An Introduction to Database System数据查询数据查询v语句格式语句格式 SELECT [ALL|DISTINCT] <目标列表达式目标列表达式>[,<目标列表达式目标列表达式>] … FROM <表名或视图名表名或视图名>[,<表名或视图名表名或视图名> ]…|(SELECT 语句语句) [AS]<别名别名>[ WHERE <条件表达式条件表达式> ][ GROUP BY <列名列名1> [ HAVING <条件表达式条件表达式> ] ][ ORDER BY <列名列名2> [ ASC|DESC ] ]; An Introduction to Database System数据查询数据查询nSELECT子句:指定要显示的属性列子句:指定要显示的属性列nFROM子句:指定查询对象子句:指定查询对象((基本表或视图基本表或视图))nWHERE子句:指定查询条件子句:指定查询条件nGROUP BY子子句句::对对查查询询结结果果按按指指定定列列的的值值分分组组,,该该属属性性列列值值相相等等的的元元组组为为一一个个组组。
通通常常会会在在每每组组中中作作用用聚聚集集函数nHAVING短语:只有满足指定条件的组才予以输出短语:只有满足指定条件的组才予以输出nORDER BY子句:对查询结果表按指定列值的升序或降子句:对查询结果表按指定列值的升序或降序排序序排序 An Introduction to Database System3.4 数据查询数据查询 3.4.1 单表查询单表查询3.4.2 连接查询连接查询3.4.3 嵌套查询嵌套查询3.4.4 集合查询集合查询3.4.5基于派生表的查询基于派生表的查询3.4.6 Select语句的一般形式语句的一般形式 An Introduction to Database System3.4.1 单表查询单表查询 v查询仅涉及一个表查询仅涉及一个表1.选择表中的若干列选择表中的若干列2.选择表中的若干元组选择表中的若干元组3.ORDER BY子句子句4.聚集函数聚集函数5.GROUP BY子句子句An Introduction to Database System1.选择表中的若干列选择表中的若干列v查询指定列查询指定列[例例3.16] 查询全体学生的学号与姓名。
查询全体学生的学号与姓名SELECT Sno,SnameFROM Student; [例例3.17] 查询全体学生的姓名、学号、所在系查询全体学生的姓名、学号、所在系SELECT Sname,Sno,SdeptFROM Student;An Introduction to Database System选择表中的若干列(续)选择表中的若干列(续)v查询全部列查询全部列n选出所有属性列:选出所有属性列:l在在SELECT关键字后面列出所有列名关键字后面列出所有列名 l将将<目标列表达式目标列表达式>指定为指定为 *[例例3.18] 查询全体学生的详细记录查询全体学生的详细记录SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student; 或或SELECT *FROM Student; An Introduction to Database Systemv查询经过计算的值查询经过计算的值 nSELECT子子句句的的<目目标标列列表表达达式式>不不仅仅可可以以为为表表中中的的属属性列,也可以是表达式性列,也可以是表达式[例例3.19] 查全体学生的姓名及其出生年份。
查全体学生的姓名及其出生年份SELECT Sname,2014-Sage /*假设当时为假设当时为2014年年*/FROM Student;输出结果:输出结果: Sname 2014-Sage 李勇李勇 1994 刘晨刘晨 1995 王敏王敏 1996 张立张立 1995 查询经过计算的值(续)查询经过计算的值(续)An Introduction to Database System[例例3.20] 查查询询全全体体学学生生的的姓姓名名、、出出生生年年份份和和所所在在的的院院系系,,要要求用小写字母表示系名求用小写字母表示系名SELECT Sname,'Year of Birth: ',2014-Sage,LOWER(Sdept)FROM Student;输出结果:输出结果: Sname 'Year of Birth:' 2014-Sage LOWER(Sdept) 李勇李勇 Year of Birth: 1994 cs 刘晨刘晨 Year of Birth: 1995 cs 王敏王敏 Year of Birth: 1996 ma 张立张立 Year of Birth: 1995 is 查询经过计算的值(续)查询经过计算的值(续)An Introduction to Database Systemv使用列使用列别名别名改变查询结果的列标题改变查询结果的列标题: SELECT Sname NAME,'Year of Birth:' BIRTH, 2014-Sage BIRTHDAY,LOWER(Sdept) DEPARTMENTFROM Student;输出结果:输出结果: NAME BIRTH BIRTHDAY DEPARTMENT 李勇李勇 Year of Birth: 1994 cs 刘晨刘晨 Year of Birth: 1995 cs 王敏王敏 Year of Birth: 1996 ma 张立张立 Year of Birth: 1995 is查询经过计算的值(续)查询经过计算的值(续)An Introduction to Database System3.4.1 单表查询单表查询 v查询仅涉及一个表查询仅涉及一个表::1.选择表中的若干列选择表中的若干列2.选择表中的若干元组选择表中的若干元组3.ORDER BY子句子句4.聚集函数聚集函数5.GROUP BY子句子句An Introduction to Database Systemv消除取值重复的行消除取值重复的行 如果没有指定如果没有指定DISTINCT关键词,则缺省为关键词,则缺省为ALL [例例3.21] 查询选修了课程的学生学号。
查询选修了课程的学生学号 SELECT Sno FROM SC;等价于:等价于:SELECT ALL Sno FROM SC;执行上面的执行上面的SELECT语句后,结果为:语句后,结果为: Sno2012151212012151212012151212012151222012151222. 选择表中的若干元组选择表中的若干元组An Introduction to Database System消除取值重复的行(续)消除取值重复的行(续)v指定指定DISTINCT关键词,去掉表中重复的行关键词,去掉表中重复的行 SELECT DISTINCT Sno FROM SC; 执行结果:执行结果: Sno201215121201215122An Introduction to Database System((2)查询满足条件的元组)查询满足条件的元组查查 询询 条条 件件谓谓 词词比比 较较=, >, <, >=, <=, !=, <>, !>, !<; NOT+上述比上述比较较运算符运算符确定范确定范围围BETWEEN AND, NOT BETWEEN AND确定集合确定集合IN, NOT IN字符匹配字符匹配LIKE, NOT LIKE空空 值值IS NULL, IS NOT NULL多重条件(逻辑运算)多重条件(逻辑运算)AND, OR, NOT表表3.6 常用的查询条件常用的查询条件An Introduction to Database System①① 比较大小比较大小[例例3.22] 查询计算机科学系全体学生的名单。
查询计算机科学系全体学生的名单 SELECT Sname FROM Student WHERE Sdept=‘CS’; [例例3.23]查询所有年龄在查询所有年龄在20岁以下的学生姓名及其年龄岁以下的学生姓名及其年龄 SELECT Sname,Sage FROM Student WHERE Sage < 20;[例例3.24]查询考试成绩有不及格的学生的学号查询考试成绩有不及格的学生的学号SELECT DISTINCT SnFROM SCWHERE Grade<60; An Introduction to Database System②② 确定范围确定范围v谓词谓词: BETWEEN … AND … NOT BETWEEN … AND …[例例3.25] 查询年龄在查询年龄在20~23岁(包括岁(包括20岁和岁和23岁)之间的学生的岁)之间的学生的姓名、系别和年龄姓名、系别和年龄 SELECT Sname, Sdept, SageFROM StudentWHERE Sage BETWEEN 20 AND 23; [例例3.26] 查询年龄不在查询年龄不在20~23岁之间的学生姓名、系别和年龄岁之间的学生姓名、系别和年龄 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23; An Introduction to Database System③③ 确定集合确定集合v谓词:谓词:IN <值表值表>, NOT IN <值表值表> [例例3.27]查询计算机科学系(查询计算机科学系(CS)、数学系()、数学系(MA)和信息系)和信息系((IS)学生的姓名和性别。
学生的姓名和性别SELECT Sname, SsexFROM StudentWHERE Sdept IN ('CS','MA’,'IS' );[例例3.28]查查询询既既不不是是计计算算机机科科学学系系、、数数学学系系,,也也不不是是信信息息系系的学生的姓名和性别的学生的姓名和性别SELECT Sname, SsexFROM Student WHERE Sdept NOT IN ('IS','MA’,'CS' );An Introduction to Database System④④ 字符匹配字符匹配v谓谓词词:: [NOT] LIKE ‘<匹匹配配串串>’ [ESCAPE ‘ <换换码字符码字符>’]<匹配串匹配串>可以是一个完整的字符串,也可以含有通配符可以是一个完整的字符串,也可以含有通配符%和和 _n% ((百分号百分号)) 代表任意长度(长度可以为代表任意长度(长度可以为0)的字符串)的字符串l例如例如a%b表示以表示以a开头,以开头,以b结尾的任意长度的字符串结尾的任意长度的字符串n_ ((下横线下横线)) 代表任意单个字符代表任意单个字符l例如例如a_b表示以表示以a开头,以开头,以b结尾的长度为结尾的长度为3的任意字符串的任意字符串An Introduction to Database System字符匹配(续)字符匹配(续)n匹配串为固定字符串匹配串为固定字符串[例例3.29] 查询学号为查询学号为201215121的学生的详细情况。
的学生的详细情况 SELECT * FROM Student WHERE Sno LIKE ‘201215121';等价于:等价于: SELECT * FROM Student WHERE Sno = ' 201215121 ';An Introduction to Database System字符匹配(续)字符匹配(续)n匹配串为含通配符的字符串匹配串为含通配符的字符串[例例3.30] 查询所有姓刘学生的姓名、学号和性别查询所有姓刘学生的姓名、学号和性别 SELECT Sname, Sno, Ssex FROM Student WHERE Sname LIKE '刘刘%';[例例3.31] 查询姓查询姓"欧阳欧阳"且全名为三个汉字的学生的姓名且全名为三个汉字的学生的姓名 SELECT Sname FROM Student WHERE Sname LIKE '欧阳欧阳__';An Introduction to Database System字符匹配(续)字符匹配(续)[例例3.32] 查询名字中第查询名字中第2个字为个字为"阳阳"字的学生的姓名和学号。
字的学生的姓名和学号 SELECT Sname,,Sno FROM Student WHERE Sname LIKE '__阳阳%';[例例3.33] 查询所有不姓刘的学生姓名、学号和性别查询所有不姓刘的学生姓名、学号和性别 SELECT Sname, Sno, Ssex FROM Student WHERE Sname NOT LIKE '刘刘%';An Introduction to Database System字符匹配(续)字符匹配(续)n 使用换码字符将通配符转义为普通字符使用换码字符将通配符转义为普通字符 [例例3.34] 查询查询DB_Design课程的课程号和学分课程的课程号和学分 SELECT Cno,,Ccredit FROM Course WHERE Cname LIKE 'DB\_Design' ESCAPE '\ ' ;[例例3.35] 查询以查询以"DB_"开头,且倒数第开头,且倒数第3个字符为个字符为 i的课程的的课程的详细情况。
详细情况 SELECT * FROM Course WHERE Cname LIKE 'DB\_%i_ _' ESCAPE '\ ' ; ESCAPE '\\' 表示表示“ \\” 为换码字符为换码字符 An Introduction to Database System⑤⑤ 涉及空值的查询涉及空值的查询v谓词:谓词: IS NULL 或或 IS NOT NULLn “IS” 不能用不能用 “=” 代替代替[例例3.36] 某些学生选修课程后没有参加考试,所以有选课某些学生选修课程后没有参加考试,所以有选课记录,但没记录,但没 有考试成绩查询缺少成绩的学生的学号和相有考试成绩查询缺少成绩的学生的学号和相应的课程号应的课程号 SELECT Sno,,Cno FROM SC WHERE Grade IS NULL[例例3.37] 查所有有成绩的学生学号和课程号查所有有成绩的学生学号和课程号 SELECT Sno,,Cno FROM SC WHERE Grade IS NOT NULL;An Introduction to Database System⑥⑥多重条件查询多重条件查询v逻辑运算符:逻辑运算符:AND和和 OR来连接多个查询条件来连接多个查询条件n AND的优先级高于的优先级高于ORn 可以用括号改变优先级可以用括号改变优先级[例例3.38] 查询计算机系年龄在查询计算机系年龄在20岁以下的学生姓名。
岁以下的学生姓名 SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20;An Introduction to Database System多重条件查询(续)多重条件查询(续)v改写改写[例例3.27][例例3.27] 查询计算机科学系(查询计算机科学系(CS)、数学系()、数学系(MA)和信息系)和信息系((IS)学生的姓名和性别学生的姓名和性别SELECT Sname, SsexFROM StudentWHERE Sdept IN ('CS ','MA ','IS')可改写为:可改写为:SELECT Sname, SsexFROM StudentWHERE Sdept= ' CS' OR Sdept= ' MA' OR Sdept= 'IS ';An Introduction to Database System3.4.1 单表查询单表查询 v查询仅涉及一个表:查询仅涉及一个表:1.选择表中的若干列选择表中的若干列2.选择表中的若干元组选择表中的若干元组3.ORDER BY子句子句4.聚集函数聚集函数5.GROUP BY子句子句An Introduction to Database System3.ORDER BY子句子句 vORDER BY子句子句n可以按一个或多个属性列排序可以按一个或多个属性列排序n升序:升序:ASC;降序:降序:DESC;缺省值为升序缺省值为升序v对对于于空空值值,,排排序序时时显显示示的的次次序序由由具具体体系系统统实实现现来来决定决定An Introduction to Database SystemORDER BY子句子句 (续)(续) [例例3.39]查查询询选选修修了了3号号课课程程的的学学生生的的学学号号及及其其成成绩绩,,查查询询结结果按分数降序排列。
果按分数降序排列 SELECT Sno, Grade FROM SC WHERE Cno= ' 3 ' ORDER BY Grade DESC;[例例3.40]查询全体学生情况,查询结果按所在系的系号升序查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列排列,同一系中的学生按年龄降序排列 SELECT * FROM Student ORDER BY Sdept, Sage DESC; An Introduction to Database System3.4.1 单表查询单表查询 v查询仅涉及一个表:查询仅涉及一个表:1.选择表中的若干列选择表中的若干列2.选择表中的若干元组选择表中的若干元组3.ORDER BY子句子句4.聚集函数聚集函数5.GROUP BY子句子句An Introduction to Database System4. 聚集函数聚集函数 v聚集函数:聚集函数:n统计元组个数统计元组个数 COUNT(*)n统计一列中值的个数统计一列中值的个数 COUNT([DISTINCT|ALL] <列名列名>)n计算一列值的总和(此列必须为数值型)计算一列值的总和(此列必须为数值型)SUM([DISTINCT|ALL] <列名列名>)n计算一列值的平均值(此列必须为数值型)计算一列值的平均值(此列必须为数值型)AVG([DISTINCT|ALL] <列名列名>)n求一列中的最大值和最小值求一列中的最大值和最小值 MAX([DISTINCT|ALL] <列名列名>) MIN([DISTINCT|ALL] <列名列名>)An Introduction to Database System聚集函数(续)聚集函数(续) [例例3.41] 查询学生总人数。
查询学生总人数 SELECT COUNT(*) FROM Student; [例例3.42] 查询选修了课程的学生人数查询选修了课程的学生人数 SELECT COUNT(DISTINCT Sno) FROM SC; [例例3.43] 计算计算1号课程的学生平均成绩号课程的学生平均成绩 SELECT AVG(Grade) FROM SC WHERE Cno= ' 1 ';An Introduction to Database System聚集函数聚集函数 (续)(续) [例例3.44] 查询选修查询选修1号课程的学生最高分数号课程的学生最高分数 SELECT MAX(Grade) FROM SC WHERE Cno='1'; [例例3.45 ] 查询学生查询学生201215012选修课程的总学分数选修课程的总学分数 SELECT SUM(Ccredit) FROM SC,Course WHERE Sno='201215012' AND SC.Cno=Course.Cno; An Introduction to Database System3.4.1 单表查询单表查询 v查询仅涉及一个表:查询仅涉及一个表:1.选择表中的若干列选择表中的若干列2.选择表中的若干元组选择表中的若干元组3.ORDER BY子句子句4.聚集函数聚集函数5.GROUP BY子句子句An Introduction to Database System5. GROUP BY子句子句 vGROUP BY子句分组:子句分组: 细化聚集函数的作用对象细化聚集函数的作用对象n 如果未对查询结果分组,聚集函数将作用于整个查询结果如果未对查询结果分组,聚集函数将作用于整个查询结果n 对查询结果分组后,聚集函数将分别作用于每个组对查询结果分组后,聚集函数将分别作用于每个组 n按指定的一列或多列值分组,值相等的为一组按指定的一列或多列值分组,值相等的为一组An Introduction to Database SystemGROUP BY子句(续)子句(续)[例例3.46] 求各个课程号及相应的选课人数。
求各个课程号及相应的选课人数 SELECT Cno,,COUNT(Sno) FROM SC GROUP BY Cno; 查询结果可能为:查询结果可能为: Cno COUNT(Sno) 1 22 2 34 3 44 4 33 5 48An Introduction to Database SystemGROUP BY子句(续)子句(续)[例例3.47] 查询选修了查询选修了3门以上课程的学生学号门以上课程的学生学号 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3; An Introduction to Database SystemGROUP BY子句(续)子句(续)[例例3.48 ]查询平均成绩大于等于查询平均成绩大于等于90分的学生学号和平均成绩分的学生学号和平均成绩下面的语句是不对的:下面的语句是不对的: SELECT Sno, AVG(Grade) FROM SC WHERE AVG(Grade)>=90 GROUP BY Sno;因为因为WHERE子句中是不能用聚集函数作为条件表达式子句中是不能用聚集函数作为条件表达式正确的查询语句应该是:正确的查询语句应该是: SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=90;An Introduction to Database SystemGROUP BY子句(续)子句(续)vHAVING短语与短语与WHERE子句的区别:子句的区别:n作用对象不同作用对象不同nWHERE子子句句作作用用于于基基表表或或视视图图,,从从中中选选择择满满足足条条件的元组件的元组nHAVING短语作用于组,从中选择满足条件的组。
短语作用于组,从中选择满足条件的组v参见爱课程网参见爱课程网 数据库系统概论数据库系统概论 数据查询节数据查询节 动画动画《《GROUP BY子句子句》》。












