1、讲义三 关系数据库标准语言SQL 1 SQL1 SQL简介简介 2 SQL2 SQL定义语言定义语言 3 SQL3 SQL操作语言操作语言 4 SQL4 SQL查询语言查询语言 5 SQL5 SQL的基本语言元素的基本语言元素 6 SQL6 SQL的操作符的操作符 7 SQL7 SQL表达式表达式 8 SQL8 SQL条件条件 9 SQL9 SQL函数函数 10 SQL10 SQL查询与子查询查询与子查询 总结总结3.1 SQL3.1 SQL简介简介 Structure Query Language(SQL)Structure Query Language(SQL)的历史的历史19701970
2、年年,Prof Codd Prof Codd 提出著名的关系数据模型提出著名的关系数据模型SQLSQL语言由语言由IBM Research LabIBM Research Lab首先开发创建首先开发创建System RSystem R时使用时使用19791979年年,关系软件公司关系软件公司(Oracle)Oracle)首先开发出实首先开发出实用的商业用的商业SQLSQL版本版本SQL SQL 是高级的非过程化编程语言。是高级的非过程化编程语言。3.1 SQL3.1 SQL简介简介 SQLSQL标准标准SQL-86SQL-86是第一个是第一个SQLSQL标准标准SQL-89SQL-89、SQL
3、-92(SQL2)SQL-92(SQL2)、SQL-99(SQL3)SQL-99(SQL3)关系型商业数据库遵守的查询语言规范关系型商业数据库遵守的查询语言规范各种通行的数据库系统在其实践过程中都对各种通行的数据库系统在其实践过程中都对 SQL SQL 规范作了某些编改和扩充规范作了某些编改和扩充 3.1 SQL3.1 SQL简介简介 SQLSQL的使用的使用直接使用直接使用 交互式查询工具(交互式查询工具(MS sql server:Transact-sqlMS sql server:Transact-sql)直接键入直接键入SQLSQL命令对数据库进行操作命令对数据库进行操作 由由DBMS
4、DBMS进行解释进行解释嵌入式嵌入式SQL(Embedded SQL)SQL(Embedded SQL)嵌入到高级编程语言嵌入到高级编程语言 使应用程序充分利用使应用程序充分利用SQLSQL访问数据库的能力、宿主访问数据库的能力、宿主语言的过程处理能力。语言的过程处理能力。需要将嵌入的需要将嵌入的SQLSQL语句转化为宿主语言编译器能处语句转化为宿主语言编译器能处理的语句理的语句3.1 SQL3.1 SQL简介简介 SQLSQL语句分类语句分类数据定义语言(数据定义语言(Data DefinitionData Definition)createcreate alteralter dropdro
5、p数据操作语言(数据操作语言(Data ManipulationData Manipulation)insertinsert updateupdate deletedelete数据查询语言数据查询语言 selectselect数据控制语言数据控制语言(Data Control)(Data Control)grantgrant rolerole revokerevoke3.5.1 3.5.1 数据类型数据类型 常用的数据类型常用的数据类型数据类型数据类型描述描述CHAR(size)CHAR(size)存储最长为存储最长为n n个字节的定长字符串个字节的定长字符串VARCHAR(size)VARC
6、HAR(size)存储最长为存储最长为n n个字节的变长字符串个字节的变长字符串NUMERIC(P,S)NUMERIC(P,S)存储任何类型的数字存储任何类型的数字DATETIMEDATETIME存储日期时间存储日期时间INTINT长整形长整形SMALLINTSMALLINT短整形短整形FLOAT(n)FLOAT(n)浮点数,精度至少为浮点数,精度至少为n n位数字位数字3.1 SQL3.1 SQL简介简介 数据定义语句格式数据定义语句格式1 1 创建表创建表 CREATE TABLE CREATE TABLE (列完整性约束条件列完整性约束条件,列完整性约束条件列完整性约束条件,列完整性约束
7、条件列完整性约束条件,););3.1 SQL3.1 SQL简介简介 数据定义语句格式数据定义语句格式2 2 更改表更改表 ALTER TABLE ALTER TABLE ADD ADD 列完整性约束条件列完整性约束条件,DROP DROP,MODIFY MODIFY ;3 3 删除表删除表 DROP TABLE DROP TABLE;3.1 SQL3.1 SQL简介简介 数据操作语句格式数据操作语句格式1 1 插入操作插入操作 INSERT INTO INSERT INTO (,1,)n)VALUES(VALUES(,2,);n);3.1 SQL3.1 SQL简介简介 数据操作语句格式数据操作
8、语句格式2 2 修改操作修改操作 UPDATE UPDATE SET SET=,=WHERE WHERE;3 3 删除操作删除操作 DELETEDELETE FROM FROM WHERE WHERE;3.1 SQL3.1 SQL简介简介 数据查询语句:数据查询语句:数据查询是数据库的核心操作数据查询是数据库的核心操作SELECTSELECT语句的格式为:语句的格式为:SELECT ALL|DISTINCT ALL|DISTINCT 别名别名 ,别名别名 FROM 别名别名,别名别名 WHERE GROUP BY 1 HAVING ORDER BY ASC|DESC,ASC|DESC,3 AS
9、C|DESCASC|DESC;3.1 SQL3.1 SQL简介简介 数据控制语句:授权数据控制语句:授权SQLSQL语言用语言用GRANTGRANT语句向用户授予操作权限,语句向用户授予操作权限,GRANTGRANT语句的一般格式为:语句的一般格式为:GRANT GRANT,ON ON TO TO,WITH GRANT OPTION;WITH GRANT OPTION;3.1 SQL3.1 SQL简介简介 数据控制语句:收回权限数据控制语句:收回权限授予的权限用授予的权限用REVOKEREVOKE语句收回,语句收回,REVOKEREVOKE语句语句的一般格式为:的一般格式为:REVOKE RE
10、VOKE,ON ON FROM FROM,;3.1 SQL3.1 SQL简介简介 数据控制语句:角色数据控制语句:角色创建角色创建角色 CREATE ROLE CREATE ROLE;分配角色:分配角色:GRANT GRANT TO TO;3.2 SQL3.2 SQL定义语言定义语言表、视图是数据库中的主体。表、视图是数据库中的主体。SQLSQL提供数据定提供数据定义语句对这些主体进行管理义语句对这些主体进行管理 SQLSQL的数据定义语句的数据定义语句 操作对象操作对象操操 作作 方方 式式创创 建建删删 除除修修 改改表表CREATE TABLEDROP TABLEALTER TABLE视
11、视 图图CREATE VIEWDROP VIEW3.2.1 3.2.1 表定义表定义1 表的创建SQLSQL语言使用语言使用CREATE TABLECREATE TABLE语句定义表,其一语句定义表,其一般格式如下:般格式如下:CREATE TABLE CREATE TABLE (列级完整性约束条件列级完整性约束条件 ,列级完整性约束条件列级完整性约束条件 ),);3.2.1 3.2.1 表定义表定义1 表的创建(1 1)实体完整性)实体完整性 例例 建立建立StudentStudent表,表,SnoSno作为主码。作为主码。CREATE TABLE StudentCREATE TABLE S
12、tudent (Sno CHAR(7)PRIMARY KEY,(Sno CHAR(7)PRIMARY KEY,Sname CHAR(8),Sname CHAR(8),Ssex CHAR(2),Ssex CHAR(2),Sage SMALLINT,Sage SMALLINT,Sdept CHAR(20);Sdept CHAR(20);3.2.1 3.2.1 表定义表定义1 表的创建(1 1)实体完整性)实体完整性 例例 建立建立SCSC表,表,SnoSno和和CnoCno是主码。是主码。CREATE TABLE SCCREATE TABLE SC (Sno CHAR(7),(Sno CHAR(7
13、),Cno CHAR(4),Cno CHAR(4),Grade SMALLINT,Grade SMALLINT,PRIMARY KEY(Sno,Cno);PRIMARY KEY(Sno,Cno);3.2.1 3.2.1 表定义表定义1 表的创建(2)参照完整性)参照完整性例例 建立建立SC表,表,Sno和和Cno是主码,且是主码,且Sno和和Cno也是外码,分别引也是外码,分别引用用Student表的表的Sno列和列和Course表的表的Cno列。列。CREATE TABLE SC (Sno CHAR(7),Cno CHAR(4),Grade SMALLINT,PRIMARY KEY(Sno,
14、Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno),FOREIGN KEY(Cno)REFERENCES Course(Cno);3.2.1 3.2.1 表定义表定义1 表的创建(3)属性值约束)属性值约束 非空值限制非空值限制 指定允许的取值范围指定允许的取值范围当往表中插入元组或修改属性的值时,当往表中插入元组或修改属性的值时,数据库管理系统就检查属性上的限制是否数据库管理系统就检查属性上的限制是否被满足,如果不满足则操作被拒绝执行。被满足,如果不满足则操作被拒绝执行。3.2.1 3.2.1 表定义表定义1 表的创建(3 3)属性值约束)属性值约束例例
15、 当学生的性别是男时,其名字不能以当学生的性别是男时,其名字不能以Ms.打头。打头。CREATE TABLE Student (Sno CHAR(7)PRIMARY KEY,Sname CHAR(8)NOT NULL,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),CHECK(Ssex=女女 OR Sname NOT LIKE Ms.%);3.2.1 3.2.1 表定义表定义2 修改表一般格式为:一般格式为:ALTER TABLE ADD 完整性约束完整性约束 DROP MODIFY ;3.2.1 3.2.1 表定义表定义2 2 修改表修改表例例 向向Stu
16、dent表增加表增加“入学时间入学时间”列,其数据列,其数据类型为日期型。类型为日期型。ALTER TABLE Student ADD Scome DATE;不论表中原来是否已有数据,新增加的列一不论表中原来是否已有数据,新增加的列一律为空值。律为空值。例例 删除学生姓名不能取空值的约束。删除学生姓名不能取空值的约束。ALTER TABLE Student DROP NOT NULL(Sname);3.2.1 3.2.1 表定义表定义3、删除表、删除表当某个表不再需要时,可以使用当某个表不再需要时,可以使用DROP TABLE语句删除它。其一般格式为:语句删除它。其一般格式为:DROP TAB
17、LE 例例 删除删除Student表。表。DROP TABLE Student;3.2.2 3.2.2 试图定义试图定义1、视图的作用、视图的作用(1)视图能够简化用户的操作)视图能够简化用户的操作(2)视图可以减少冗余数据)视图可以减少冗余数据(3)视图对重构数据库提供了一定程度的逻)视图对重构数据库提供了一定程度的逻辑独立性辑独立性(4)视图能够对机密数据提供安全保护)视图能够对机密数据提供安全保护3.2.2 3.2.2 试图定义试图定义2、视图创建、视图创建SQL语言用语言用CREATE VIEW命令建立视命令建立视图,其一般格式为:图,其一般格式为:CREATE VIEW (,)AS
18、WITH CHECK OPTION;3.2.2 3.2.2 试图定义试图定义2 试图创建试图创建例例 建立计算机系学生的视图。建立计算机系学生的视图。CREATE VIEW Student_CSAS3.2.2 3.2.2 试图定义试图定义 2 试图创建试图创建例例 建立英语课(建立英语课(1156)成绩单的视图。)成绩单的视图。CREATE VIEW English_Grade(Sno,Sname,Grade)AS3.2.2 3.2.2 试图定义试图定义2 试图创建试图创建例例 建立英语课的成绩在建立英语课的成绩在80分以上的学生分以上的学生的视图。的视图。CREATE VIEW Englis
19、h_Grade_80AS3.2.2 3.2.2 试图定义试图定义3 删除视图删除视图当不再需要一个视图时,可以删除它,当不再需要一个视图时,可以删除它,语句格式为:语句格式为:DROP VIEW 例例 删除视图删除视图Student_CSDROP VIEW Student_CS;3.3 SQL3.3 SQL操作语言操作语言1 插入操作插入操作2 修改操作修改操作3 删除操作删除操作3.3.1 3.3.1 插入操作插入操作1、插入操作、插入操作插入语句的格式是:插入语句的格式是:INSERTINTO (,)VALUES(,);3.3.1 3.3.1 插入操作插入操作例例 将学生王林的信息插入到将
20、学生王林的信息插入到Student表中。表中。INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage)VALUES(2000012,王林王林,男男,计算机计算机,19);INTO子句指定子句指定Student表和要赋值的列,表和要赋值的列,VALUES子句对元组的各列赋值。子句对元组的各列赋值。3.3.1 3.3.1 插入操作插入操作例例 在表在表Course中增加课程离散数学的信中增加课程离散数学的信息。息。INSERTINTO Course(Cno,Cname,Cpno,Ccredit)VALUES(1136,离散数学离散数学,NULL,4);符号符号N
21、ULL的含义是赋予该列的值是空的含义是赋予该列的值是空值。值。3.3.2 3.3.2 修改操作修改操作2、修改操作、修改操作修改操作又称为更新操作,语句的一般修改操作又称为更新操作,语句的一般格式是:格式是:UPDATE SET=,=WHERE;3.3.2 3.3.2 修改操作修改操作例例 将学号为将学号为2000012的学生的年龄改为的学生的年龄改为18岁。岁。UPDATE StudentSET Sage=18WHERE Sno=2000012;例例6 将所有学生的年龄增加将所有学生的年龄增加1岁。岁。UPDATE StudentSET Sage=Sage+1;3.3.3 3.3.3 删除操
22、作删除操作3、删除操作、删除操作 语句的一般格式为:语句的一般格式为:DELETE FROM WHERE;3.3.3 3.3.3 删除操作删除操作例例 删除学号为删除学号为2000012的学生记录。的学生记录。DELETEFROM StudentWHERE Sno=2000012;例例 删除所有的学生选课记录。删除所有的学生选课记录。DELETEFROM SC;3.4 SQL3.4 SQL查询语音查询语音 1.1.查询基本结构概述查询基本结构概述 2.2.查询子句概述查询子句概述 3.SELECT 3.SELECT 列表列表 4.FROM4.FROM子句子句 5.WHERE5.WHERE子句子
23、句3.4.1 查询基本结构概述 查询基本结构概述:查询基本结构概述:SELECT 列表:指定列列表:指定列 FROM 指定表指定表 WHERE 指定行指定行 语义:语义:Select Select 子句中的属性列表,对上述结果作投子句中的属性列表,对上述结果作投影(影()操作。)操作。From From 子句:对指定关系,作笛卡儿积(子句:对指定关系,作笛卡儿积()Where Where 子句:进行选择(子句:进行选择()运算,找出符)运算,找出符合条件的元组。合条件的元组。3.4.2 查询子句概述 SELECT SELECT 子句指定您要检索的列。子句指定您要检索的列。FROM FROM 子
24、句指定从中请求列的表。在所有从表中检索数据子句指定从中请求列的表。在所有从表中检索数据的查询中都需要该子句。的查询中都需要该子句。ON ON 子句指定子句指定 FROM FROM 子句中的表将如何进行连接。该子句子句中的表将如何进行连接。该子句只用于多表查询。只用于多表查询。WHERE WHERE 子句指定表中您要查看的行。子句指定表中您要查看的行。GROUP BY GROUP BY 子句用于集合数据。子句用于集合数据。HAVING HAVING 子句指定要在其上收集集合数据的行。子句指定要在其上收集集合数据的行。ORDER BY ORDER BY 子句对结果集中的行进行排序。子句对结果集中的
25、行进行排序。3.4.3 SELECT 列表1从表中选择所有列 SELECT distinct SELECT distinct*FROM table-expression FROM table-expression2从表中选择特定的列 SELECT dept_id,dept_name FROM departmentSELECT dept_id,dept_name FROM department3重命名查询结果中的列 SELECT column-namecolumn-name AS aliasalias SELECT column-namecolumn-name aliasalias4查询结果中显
26、示字符串 select the firstname is as“”,first_name from employees;select the firstname is as“”,first_name from employees;5计算 SELECT 列表中的值 SELECT first_name,salary-10 AS salary after tax FROM SELECT first_name,salary-10 AS salary after tax FROM employees;employees;3.4.4 FROM子句 直接使用表名 FROM table_name 使用相关名
27、您可以赋予表名一个相关名以减少需要键入的字符。您可以在 FROM 子句中指派相关名,方法是在表名之后键入该相关名,如下所示:SELECT d.dept_id,d.dept_name FROM Department d FROM 子句包括链接两个或多个表的表名3.4.5 WHERE 子句比较 WHERE salary 50000 范围 WHERE salary BETWEEN 40000 AND 60000 列表 WHERE station IN(beijing,shanghai,jinan)字符匹配 WHERE phone LIKE 415%未知值 WHERE first_name is no
28、t NULL组合组合 WHERE salary 50000 AND first_name like A%3.5 SQL3.5 SQL的基本语言元素的基本语言元素 数据类型数据类型 数值常量数值常量 数据格式化数据格式化 空值空值3.5.1 3.5.1 数据类型数据类型 数据类型自动转换规则数据类型自动转换规则INSERTUPDATEINSERTUPDATE语句中语句中,数据值按照字段的类型进行转数据值按照字段的类型进行转换换SELECTSELECT语句中语句中,字段值按照定义的变量类型转换字段值按照定义的变量类型转换比较字符数值与数字数值时比较字符数值与数字数值时,将字符数值转换为数字将字符数
29、值转换为数字比较字符数值与日期数值时比较字符数值与日期数值时,将字符数值转换为日期将字符数值转换为日期赋值语句中赋值语句中,一般将等号右边的变量转换为左边的数据一般将等号右边的变量转换为左边的数据类型类型 3.5.1 3.5.1 数据类型数据类型 字符自动转换字符自动转换 SELECT salary+10 FROM employees;SELECT last_name FROM employees WHERE employee_id=200;SELECT last_name FROM employees WHERE hiredate=1982-01-23;3.5.2 3.5.2 数值常量数值常
30、量 字符常量字符常量 Hello ORACLE 09-MAR-98 数字常量数字常量 25+6.34 0.5 25e-03-13.5.3 3.5.3 数据格式化数据格式化 字符串格式化字符串格式化CAST(CAST(expressionexpression AS AS data_type data_type)CONVERT(CONVERT(data_type data_type (length length),),expressionexpression ,style style )日期格式化日期格式化字符串转日期字符串转日期 Select cast(2009-01-01 as datetim
31、e)Select cast(2009-01-01 as datetime)日期格式转换日期格式转换 Select CONVERT(varchar(100),GETDATE(),Select CONVERT(varchar(100),GETDATE(),0)0)3.5.4 NULL(3.5.4 NULL(空空)Null:Null:表明记录的字段中不包含任何值表明记录的字段中不包含任何值(空空)目前将目前将等同于等同于Null Null(ORACLE)ORACLE)条件中的条件中的NULLNULL If A is:Condition Evaluates to:10 a IS NULL FALSE
32、10 a IS NOT NULL TRUE NULLa IS NULL TRUE NULL a IS NOT NULL FALSE 10 a=NULL UNKNOWN 10 a!=NULL UNKNOWN3.6 SQL3.6 SQL的操作符的操作符 操作符介绍操作符介绍一元操作符一元操作符二元操作符二元操作符多元操作符多元操作符 算术运算符算术运算符 连接运算符连接运算符 组合操作符组合操作符3.6.1 3.6.1 算数运算符算数运算符 运算符运算符举例举例+-+-SELECT*FROM WHERE quantity=-1;SELECT hire_date FROM employees WHE
33、RE convert(int,GETDATE()-hire_date,1)365;*/UPDATE employees SET salary=salary*1.1;3.6.2 3.6.2 连接运算符连接运算符 连接运算符连接运算符:+:+Example:CREATE TABLE tab1(col1 VARCHAR(6),col2 CHAR(6),col3 VARCHAR(6),col4 CHAR(6);INSERT INTO tab1(col1,col2,col3,col4)VALUES(abc,def,ghi,jkl);SELECT col1+col2+col3+col4 Concatena
34、tion FROM tab1;-Abcdef ghijkl3.6.3 3.6.3 组合操作符组合操作符 将两个或多个查询的结果组合到一个结果将两个或多个查询的结果组合到一个结果集中集中 操作符 返回结果 UNION 组合组合查询的结果(不重复)查询的结果(不重复)UNION ALL 组合查询的全部结果组合查询的全部结果 INTERSECT 组合查询的共有结果组合查询的共有结果 MINUS对第一个查询取唯一记录,对共对第一个查询取唯一记录,对共有记录不返回有记录不返回3.6.3 3.6.3 组合操作符组合操作符 举例:举例:create table a1(t1 char(1),t2 char(2
35、);create table a2(t01 char(1),t02 char(2);insert into a1(t1,t2)values(1,11);insert into a1(t1,t2)values(2,22);insert into a2(t01,t02)values(2,22);insert into a2(t01,t02)values(3,33);select t01,t02 from a2 Union select t1,t2 from a1;3.7 SQL3.7 SQL表达式表达式 SQLSQL表达式的应用范围表达式的应用范围Select exprSelect expr、wh
36、ere exprwhere expr、having exprhaving exprOrder by expr Order by expr insert insert 的的values()values()、update update 的的set exprset expr SQLSQL表达式的形式表达式的形式简单表达式、复合表达式、简单表达式、复合表达式、CASECASE表达式表达式DatetimeDatetime表达式、间隔表达式表达式、间隔表达式变量表达式、表达式列表变量表达式、表达式列表3.7.1 SQL3.7.1 SQL简单表达式简单表达式 举例举例Select Select Employ
37、ees.first_name from from EmployeesEmployeesSelect Select 1 from Employees where from Employees where first_name=first_name=w wSelect Select any string from Employees from Employees where where 3.7.2 SQL3.7.2 SQL复合表达式复合表达式 举例举例(CLARK+SMITH)LEN(MOOSE)*57 SQRT(144)+723.7.3 CASE3.7.3 CASE表达式表达式 CASECASE
38、表达式让你可以在表达式让你可以在SQLSQL中使用中使用IFIFELSEELSEEND IF END IF 的逻辑的逻辑 ExampleExample SELECT sno,CASE WHEN grade 85 THEN high WHEN grade,=,=,=2500;ANY,SOMESELECT*FROM employees WHERE salary=ANY(SELECT salary FROM employees WHERE department_id=30);ALLSELECT*FROM employees WHERE salary=ALL(1400,3000);3.8.2 3.8.
39、2 逻辑条件逻辑条件逻辑类型逻辑类型ExampleExampleNOTSELECT*FROM employees WHERE NOT(job_id IS NULL);SELECT*FROM employees WHERE NOT(salary BETWEEN 1000 AND 2000);ANDORSELECT*FROM employees WHERE job_id=PU_CLERK ANDOR department_id=30;3.8.3 3.8.3 成员条件成员条件类型类型ExampleExampleINSELECT*FROM employees WHERE job_id IN(PU_CL
40、ERK,SH_CLERK);SELECT*FROM employees WHERE salary IN(SELECT salary FROM employees WHERE department_id=30);NOT INSELECT*FROM employeesWHERE job_id NOT IN(PU_CLERK,SH_CLERK);3.8.4 3.8.4 范围条件范围条件 类型类型ExampleExamplenot between X and y SELECT*FROMemployees WHERE salary BETWEEN 2000 AND 3000;3.8.5 NULL条件条件
41、 类型类型ExampleExample IS NOT IS NOTSELECT last_name NULL FROM employeesWHERE salaryIS NULL;3.8.6 LIKE条件条件 举例:举例:SELECT ename FROM emp WHERE ename LIKE A_L%ESCAPE;类型X not LIKE yescape z3.8.7 3.8.7 复合条件复合条件 通过()、通过()、not not、and and、or or 复合各类简单复合各类简单的条件的条件 ExampleExampleSelect first_name from employees
42、 Select first_name from employees Where first_name like Where first_name like m%m%and and(salary=2000 or department_id in(salary=2000 or department_id in(10,20);(10,20);3.9 3.9 功能函数功能函数 内部函数内部函数单行函数单行函数聚集函数聚集函数 用户自定义函数用户自定义函数3.9 3.9 功能函数功能函数 常用的单行函数常用的单行函数数值函数数值函数 absabs、sqrtsqrt、roundround、modmod字符
43、函数字符函数 lowerlower、upperupper、lenlen、trimtrim、substrsubstr日期函数日期函数 Day,month,year,getdate,weekday,todayDay,month,year,getdate,weekday,today转换函数转换函数 ConvertConvert、castcast3.9 3.9 功能函数功能函数 常用的聚集函数常用的聚集函数 求平均:求平均:AVG 总计:总计:COUNT 最大值:最大值:MAX 最小值:最小值:MIN 求总和:求总和:SUM3.10 SQL3.10 SQL查询和子查询查询和子查询 1.1.SQLSQL
44、查询举例查询举例 2.2.SQLSQL子查询子查询子查询简介子查询简介子查询的作用子查询的作用WHEREWHERE子句中的子查询子句中的子查询FROMFROM子句中的子查询子句中的子查询HAVINGHAVING子句中的子查询子句中的子查询3.10.1 SQL3.10.1 SQL汇总、分组与排序汇总、分组与排序 SQLSQL汇总:汇总:应用了集合函数的每一组行生成一个值应用了集合函数的每一组行生成一个值 举例:举例:SELECT avg(salary+1)FROM SELECT avg(salary+1)FROM SELECT count(distinct id)FROM SELECT coun
45、t(distinct id)FROM SELECT sum(salary)FROM SELECT sum(salary)FROM SELECT max(salary)FROM SELECT max(salary)FROM 3.10.2 SQL3.10.2 SQL汇总、分组与排序汇总、分组与排序 SQLSQL分组:分组:GROUP BY GROUP BY 字句,将表的输出划分为若干个字句,将表的输出划分为若干个组组举例:举例:SELECT employee_id,avg(salary)FROM SELECT employee_id,avg(salary)FROM employees GROUP
46、BY employee_id;employees GROUP BY employee_id;3.10.2 SQL3.10.2 SQL汇总、分组与排序汇总、分组与排序 WHEREWHERE子句与子句与HAVINGHAVING子句:子句:Where Where 决定哪些元组被选择参加运算,作用于关系决定哪些元组被选择参加运算,作用于关系中的元组。中的元组。Having Having 决定哪些分组符合要求,作用于分组。决定哪些分组符合要求,作用于分组。聚合函数的条件关系必须用聚合函数的条件关系必须用HavingHaving,WhereWhere中不应出中不应出现聚合函数。现聚合函数。举例:举例:SE
47、LECT department_id,MIN(salary),MAX(salary)FROM employees GROUP BY department_id HAVING MIN(salary)(WHERE salary (SELECT avg(e.salary)from employees e);3.10.5 3.10.5 子查询子查询 定义一个查询表定义一个查询表 SELECT a.department_id Department,a.num_emp/b.total_count%_Employees,a.sal_sum/b.total_sal%_SalaryFROM(SELECT dep
48、artment_id,COUNT(*)num_emp,SUM(salary)sal_sumFROM employeesGROUP BY department_id)a,(SELECT COUNT(*)total_count,SUM(salary)total_salFROM employees)b;总结总结1.1.SQLSQL是关系数据库的标准语言。从功能上可以是关系数据库的标准语言。从功能上可以划分为划分为DDLDDL(CREATECREATE和和DROPDROP)、)、DMLDML(INSERTINSERT、UPDATEUPDATE、DELETEDELETE、SELECTSELECT)、)、
49、DCLDCL(GRANTGRANT和和REVOKEREVOKE)。)。2.2.查询语句查询语句SELECTSELECT是是SQLSQL中常使用的语句。由中常使用的语句。由SELECTSELECT、FROMFROM、WHEREWHERE、GROUP BYGROUP BY、HAVINGHAVING和和ORDER BYORDER BY子句构成。子句构成。SELECTSELECT和和FROMFROM子句在每子句在每个个SQLSQL语句中都必须出现,其它子句可以根据语句中都必须出现,其它子句可以根据实际情况选用。实际情况选用。总结总结3.SELECT3.SELECT语句的基本功能是经过横向和纵向操作,语
50、句的基本功能是经过横向和纵向操作,从一个表构造出另外一个新表,这个新表是查从一个表构造出另外一个新表,这个新表是查询的结果,是一个临时表。询的结果,是一个临时表。4.4.聚集函数的自变量的值不是单值,而是一个集聚集函数的自变量的值不是单值,而是一个集合。合。SQLSQL提供的聚集函数有提供的聚集函数有COUNTCOUNT、MAXMAX、MINMIN、SUMSUM、AVGAVG。特别要注意的是,除了。特别要注意的是,除了COUNT(COUNT(*)函函数以外,其它的聚集函数对空值忽略不计。数以外,其它的聚集函数对空值忽略不计。总结总结5.5.分组是将在分组列上有相同值的元组分配到同分组是将在分组