第4章 关系数据库语言(1,3)_第1页
第4章 关系数据库语言(1,3)_第2页
第4章 关系数据库语言(1,3)_第3页
第4章 关系数据库语言(1,3)_第4页
第4章 关系数据库语言(1,3)_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

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

文档简介

1、1第四章第四章 关系数据库关系数据库SQL语言语言 第一节第一节 SQLSQL概述概述第二节第二节 SQLSQL的数据定义的数据定义第三节第三节 SQLSQL的数据查询的数据查询 第四节第四节 SQLSQL的数据更新的数据更新 第五节第五节 嵌入式嵌入式SQL SQL 2什么是数据库语言什么是数据库语言 数据库语言是数据库语言是DBMSDBMS提供的用户界提供的用户界面(接口),是用户和数据库管理员面(接口),是用户和数据库管理员用以完成数据的定义、查询、更新和用以完成数据的定义、查询、更新和控制的主要工具。控制的主要工具。 不同的数据模型对应不同的数据不同的数据模型对应不同的数据库语言。库语

2、言。 第一节第一节 SQLSQL概述概述3一、什么是关系数据库语言 基于关系数据模型的数据库语言称为基于关系数据模型的数据库语言称为关关系数据库语言系数据库语言。 分为两大类:分为两大类: (1)(1)基于关系代数基于关系代数的关系数据库语言的关系数据库语言 典型代表典型代表:ISBLISBL语言语言(Information (Information System Base Language), System Base Language),是由是由IBM IBM United Kingdom United Kingdom 研究中心研制,用于研究中心研制,用于 PRTV(Peterlee Rel

3、ational Test PRTV(Peterlee Relational Test Vehicle) Vehicle)实验系统。实验系统。 4(2)(2)基于谓词演算基于谓词演算的关系数据库语言的关系数据库语言 A.A.元组演算语言元组演算语言(Tuple Calculus VariableTuple Calculus Variable)典型代表典型代表:E.F.CoddE.F.Codd提出的提出的ALPHAALPHA语言语言,虽,虽 没实现,但没实现,但INGRESINGRES所用的所用的QUELQUEL 语言是参照语言是参照ALPHAALPHA语言研制的。语言研制的。B.B.域演算语言域

4、演算语言(Domain Calculus VariableDomain Calculus Variable) 典型代表典型代表:QBEQBE语言语言 ( (按例查询语言按例查询语言,Query-By-Example),Query-By-Example)51 1、什么是、什么是SQLSQL语言语言SQLSQL语言是结构化查询语言,语言是结构化查询语言,Structured Structured Query Language, Query Language, 简称简称SQLSQL。是介于关系。是介于关系代数和代数和 关系演算之间的语言,其功能不关系演算之间的语言,其功能不仅仅是查询,它是通用的、功

5、能极强的仅仅是查询,它是通用的、功能极强的关系数据库语言。关系数据库语言。 SQLSQL语言集数据语言集数据定义、查询、更新和定义、查询、更新和控制控制功能于一体。功能于一体。 6 (1)(1)19741974年年IBMIBM圣约瑟实验室的圣约瑟实验室的BoyceBoyce和和ChamberlinChamberlin为关系数据库管理系统为关系数据库管理系统System-RSystem-R设计的一种查询语言,当时称为设计的一种查询语言,当时称为SEQUELSEQUEL语言语言(Structured English QueryStructured English Query Language) L

6、anguage),后简称为后简称为SQLSQL; (2)(2)19811981年年IBMIBM推出关系数据库系统推出关系数据库系统SQL/DSSQL/DS,得到广泛应用;,得到广泛应用; (3)(3)著名的关系数据库管理系统中都陆续著名的关系数据库管理系统中都陆续实现实现SQLSQL语言;语言; 2 2、关系数据库语言标准、关系数据库语言标准-SQL-SQL语言语言7 (4)(4)19821982年年,ANSIANSI着手制定着手制定SQLSQL标准,标准,19861986年公布第一个年公布第一个SQLSQL标准标准-SQL86-SQL86; SQL86 SQL86主要内容:模式定义、数据操作

7、、主要内容:模式定义、数据操作、嵌入式嵌入式SQLSQL等内容。等内容。 (5)(5)19871987年年,ISOISO通过通过SQL86SQL86标准;标准; (6)(6)19891989年年,ISOISO制定制定SQL89SQL89标准;标准; SQL89SQL89标准在标准在SQL86SQL86基础上增补完整性描述基础上增补完整性描述 (7)(7)19901990年年,我国制定等同,我国制定等同SQL89SQL89的国家标的国家标准;准;8(8)(8)19921992年年,ISOISO制定制定SQL92SQL92标准,即标准,即SQL2SQL2; SQL2SQL2相当庞大分为三个级别:实

8、现了对相当庞大分为三个级别:实现了对远程数据库访问的支持远程数据库访问的支持 A.A.初级初级SQL2SQL2:在:在SQL89SQL89增加了某些功能,增加了某些功能,如如SELECTSELECT中的中的ASAS语句为表达式命名。语句为表达式命名。 B.B.中级中级SQL2SQL2:在初级:在初级SQL2SQL2基础上扩充数基础上扩充数据类型、操作类型、有关完整性控制方面内据类型、操作类型、有关完整性控制方面内容,是容,是SQL2SQL2的最主要内容。的最主要内容。 C.C.完全完全SQL2SQL2:在中级:在中级SQL2SQL2基础上放宽某基础上放宽某些限制、增加些限制、增加BITBIT数

9、据类型等;数据类型等;9(9)(9)19991999年年,ANSIANSI制定制定SQL3SQL3标准,标准, 在在SQL2SQL2基础上扩充了面向对象功能,基础上扩充了面向对象功能,支持自定义数据类型、提供递归操作、支持自定义数据类型、提供递归操作、临时视图、更新一般的授权结构、嵌套临时视图、更新一般的授权结构、嵌套的检索结构、异步的检索结构、异步DMLDML等;等;103 3、SQLSQL语言应用情况语言应用情况 (1)(1)OracleOracle、SybaseSybase、InformixInformix、IngresIngres、DB2DB2、SQL ServerSQL Server

10、、RdbRdb等大型数据库管理等大型数据库管理系统实现了系统实现了SQLSQL语言;语言; (2)(2)DbaseDbase、FoxproFoxpro、AccessAccess等等PCPC机数据库机数据库管理系统部分实现了管理系统部分实现了SQLSQL语言;语言; (3)(3)可以在可以在HTML(Hypertext Markup HTML(Hypertext Markup Language, Language, 超文本链接标示语言超文本链接标示语言) )中嵌入中嵌入SQLSQL语句,通过语句,通过WWWWWW访问数据库;访问数据库; (4)(4)在在VCVC、VBVB、DEPHIDEPHI、

11、CBCB也可嵌入也可嵌入SQLSQL语语句。句。11 4 4、SQLSQL语言优点语言优点 (1)(1)功能强大功能强大, ,集数据集数据定义、查询、更新和控定义、查询、更新和控制制功能于一体。功能于一体。能够完成各种数据库操作;能够完成各种数据库操作; A.A. 能完成合并、求差、相交、乘积、能完成合并、求差、相交、乘积、投影、选择、连接等所有关系运算投影、选择、连接等所有关系运算 B.B. 可用于统计可用于统计 C.C. 能多表操作能多表操作 (2)(2)书写简单、使用方便;书写简单、使用方便; 12(3)(3)可作为交互式语言独立使用、也可作可作为交互式语言独立使用、也可作 为子语言嵌入

12、宿主语言中使用;为子语言嵌入宿主语言中使用;(4)(4)有利于各种数据库之间交换数据、有有利于各种数据库之间交换数据、有 利于程序的移植、有利于实现程序和利于程序的移植、有利于实现程序和 数据间的独立性;有利于实施标准化;数据间的独立性;有利于实施标准化; 135 5、SQLSQL语言性质语言性质 (1)(1)SQLSQL语言是一种关系数据库语言,提供语言是一种关系数据库语言,提供数据的定义、查询、更新和控制等功能。数据的定义、查询、更新和控制等功能。(2)(2)SQLSQL语言不是一个应用程序开发语言,语言不是一个应用程序开发语言, 只提供对数据库的操作能力,不能完成屏只提供对数据库的操作能

13、力,不能完成屏幕控制、菜单管理、报表生成等功能,幕控制、菜单管理、报表生成等功能, 可可成为应用开发语言的一部分;成为应用开发语言的一部分;(3)(3)SQLSQL语言不是一个语言不是一个DBMSDBMS,它属于,它属于DBMSDBMS语语言处理程序。言处理程序。14二、二、SQLSQL数据库的体系结构数据库的体系结构SQLSQL数据库的体系结构基本上也是三级结构,数据库的体系结构基本上也是三级结构,但术语与传统的关系模型术语不同。但术语与传统的关系模型术语不同。在在SQLSQL中,中,关系模式关系模式称为称为“基本表基本表” 存储模式存储模式称为称为“存储文件存储文件” 子模式子模式称为称为

14、“视图视图” 元组元组称为称为“行行” 属性属性称为称为“列列”15用户用户1 1用户用户2 2用户用户4 4用户用户3 3视图视图V1V1视图视图V2V2基本表基本表B1B1基本表基本表B2B2基本表基本表B3B3基本表基本表B4B4存储文存储文件件S1S1存储文存储文件件S2S2存储文存储文件件S4S4存储文存储文件件S3S316SQLSQL数据库的体系结构要点如下:数据库的体系结构要点如下:1. 1. 一个一个SQLSQL数据库是表的汇集,它用一个数据库是表的汇集,它用一个或多个或多个SQLSQL模式定义。一个模式定义。一个SQLSQL模式是表和模式是表和授权的静态定义。授权的静态定义。

15、2.2.一个一个SQLSQL表由行集组成,一行是列的序列,表由行集组成,一行是列的序列,每列对应一个数据项。每列对应一个数据项。3.3.一个一个SQLSQL表或是一个基本表,或是一个视表或是一个基本表,或是一个视图。基本表是实际存储在数据库中的表,图。基本表是实际存储在数据库中的表,而视图是由若干个基本表或其它视图构成而视图是由若干个基本表或其它视图构成的表的定义。的表的定义。174. 4. 一个基本表可以跨一个或多个存储文件,一个基本表可以跨一个或多个存储文件,一个存储文件也可以存放一个或多个基本表。一个存储文件也可以存放一个或多个基本表。每个存储文件与外部存储器上一个物理文件每个存储文件与

16、外部存储器上一个物理文件对应。对应。5.5.用户可以用用户可以用SQLSQL语句对基本表和视图进行查语句对基本表和视图进行查询等操作。在用户看来,视图和基本表一样,询等操作。在用户看来,视图和基本表一样,都是关系,即表格。都是关系,即表格。6.SQL6.SQL用户可以是应用程序,也可以是终端用用户可以是应用程序,也可以是终端用户。户。 SQLSQL语句可嵌入到宿主语言的程序中使语句可嵌入到宿主语言的程序中使用,也可作为独立的用户接口,供用户交互用,也可作为独立的用户接口,供用户交互使用。使用。18Types of Databases(SQL Server)System DatabasesUse

17、r Databases19101911019210202LabrieLabrieMartinAngelaEvaJosex19891x19433x21467SPFRFRHRKarlDHRKarlDHRAmyLAndersonAndersonBarr.Database Objectsintegerlongstringvarchar(20)char(6)char(2)longstringTriggerEmployeePhoneViewSELECT lastname, firstname, extensionFROM employeeStoredProcedureUpdatePhonePKFKChec

18、kx#20三、三、SQLSQL语言的分类语言的分类 SQLSQL语言的命令通常分为四类语言的命令通常分为四类 1 1、数据定义语言()、数据定义语言() 创建、修改或删除数据库中各种对象,创建、修改或删除数据库中各种对象,包括包括SQLSQL模式、基本表、视图、索引等。模式、基本表、视图、索引等。 命令:命令:SCHEMASCHEMATABLE TABLE VIEWVIEWINDEXINDEX(1 1)CREATE CREATE 21(2 2)ALTER TABLE ALTER TABLE 2 2、查询语言()、查询语言() 按照指定的组合、条件表达式或排序按照指定的组合、条件表达式或排序检索

19、已存在的数据库中数据,不改变数据检索已存在的数据库中数据,不改变数据库中数据。库中数据。 命令:命令:SELECTFROMWHERESELECTFROMWHERE(3 3)DROPDROPSCHEMASCHEMATABLE TABLE VIEWVIEWINDEXINDEX223 3、数据操纵语言()、数据操纵语言() 对已经存在的数据库进行元组的插入、对已经存在的数据库进行元组的插入、删除、修改等操作。删除、修改等操作。 命令:命令:INSERTINSERT、UPDATEUPDATE、DELETEDELETE4 4、数据控制语言()、数据控制语言() 用来授予或收回访问数据库的某种特用来授予或

20、收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、权、控制数据操纵事务的发生时间及效果、对数据库进行监视。对数据库进行监视。 命令:命令:GRANTGRANT、REVOKEREVOKE、 COMMITCOMMIT、ROLLBACKROLLBACK23第三节第三节 SQLSQL的数据查询的数据查询 一、语句结构一、语句结构 动词动词 操作内容操作内容 结束符结束符 SQLSQL的查询语句语法结构:的查询语句语法结构: SELECT- FROM- WHERESELECT- FROM- WHERE基本结构块:基本结构块: SELECT SELECT A A1 1,A,A2 2,A,An n

21、 FROM FROM R R1 1,R,R2 2,R,Rn n WHERE WHERE 24SELECT SELECT 语句完整的句法:语句完整的句法:SELECTSELECT 列名表列名表( (逗号隔开逗号隔开) ) FROMFROM 基本表或视图序列基本表或视图序列 WHEREWHERE 条件表达式条件表达式 ( (此为和条件子句此为和条件子句) ) GROUP BYGROUP BY 列名序列列名序列 ( (分组子句分组子句) ) HAVINGHAVING 组条件表达式组条件表达式 ( (组条件子句组条件子句) ) ORDER BYORDER BY列名列名ASC|DESC. (ASC|DE

22、SC. (排序子句排序子句) ) 25功能功能 SELECT SELECT用于检索和统计数据用于检索和统计数据( (结果:结果:产生一个新表产生一个新表) )。 功能:检索、统计功能:检索、统计 使用方式:交互式使用、嵌入式使用使用方式:交互式使用、嵌入式使用 分类分类 1 1)单表查询)单表查询 2 2)多表查询)多表查询 A. A.连接查询连接查询 B. B.子查询子查询 一般子查询一般子查询 相关子查询相关子查询26二、单表查询二、单表查询 例例1 1:查看所有学生信息:查看所有学生信息 select sno,sn,age,sex select sno,sn,age,sex from s

23、from s; 或:或: select select * * from s from s; 27 select sno,sn,age select sno,sn,age from sfrom s where sex=F where sex=F; 例例3 3:查询所有年龄大于查询所有年龄大于1818岁的女生的学号岁的女生的学号和姓名。和姓名。 select sn,sno select sn,sno from sfrom s where age18 and sex=Fwhere age18 and sex=F; 例例2 2:查询所有女生的学号、姓名和年龄。:查询所有女生的学号、姓名和年龄。28 s

24、elect sno,snselect sno,sn from sfrom s where sn like where sn like 赵赵% order by ageorder by age例例4 4:查询所有姓赵的学生的学号和:查询所有姓赵的学生的学号和 姓名姓名, ,并按年龄升序排列。并按年龄升序排列。29 select sno,snselect sno,sn from sfrom s where age between 17 and 18where age between 17 and 18 order by ageorder by age例例5 5:查询所有年龄在:查询所有年龄在171

25、7到到1818岁之间的学岁之间的学生的学号和姓名生的学号和姓名, ,并按年龄升序排列。并按年龄升序排列。30 select sno,snselect sno,sn from sfrom s where where age not between 17 and 18 age not between 17 and 18 order by ageorder by age所表达的含义为:所表达的含义为:查询所有年龄小于查询所有年龄小于1717或或大于大于1818岁的学生的学号和姓名岁的学生的学号和姓名, ,并按年龄并按年龄升序排列。其中不包括年龄等于升序排列。其中不包括年龄等于1717或等于或等于18

26、18岁的学生。岁的学生。31 select s.sno,snselect s.sno,sn from sfrom s,scsc where s.sno=sc.sno where s.sno=sc.sno and g is null and g is null 例例6 6:查询选修了课程但没参加考试:查询选修了课程但没参加考试 的学生的学号和姓名。的学生的学号和姓名。32三、三、SQL中操作符的使用中操作符的使用定义:操作符是保留的字或字符,主要用于比定义:操作符是保留的字或字符,主要用于比 较和算术运算。较和算术运算。分类:比较操作符,逻辑操作符和算术运算符。分类:比较操作符,逻辑操作符和算术

27、运算符。 1、比较操作符、比较操作符 包括:包括:=,, , , =。 2、算术运算符、算术运算符 包括:包括:+,-,*,/等,与数学运算规则一致。等,与数学运算规则一致。注意比较双方的数据类型要一致。注意比较双方的数据类型要一致。333、逻辑操作符、逻辑操作符 IS NULL(是否为空)(是否为空) BETWEEN(在某两个值之间)(在某两个值之间) IN(一系列值中)(一系列值中) LIKE(相似值的比较)(相似值的比较) EXITS(是否存在符合条件的数据)(是否存在符合条件的数据) UNIQUE(是否唯一)(是否唯一) ALL/ANY(一组数据的所有(一组数据的所有/其中的任何一个)

28、其中的任何一个) AND/OR(逻辑与(逻辑与/或)或)34IS NULL / IS NOT NULL WHERE salary IS NULL 工资为空值工资为空值。 WHERE salary = NULL 工资中含有工资中含有NULL字符。字符。 例:例: SELECT emp_id, emp_nameFROM employee_tblWHERE emp_phone IS NULL35BETWEEN WHERE salary BETWEEN 200 and 300工资在工资在200到到300之间,包括之间,包括200和和300。IN WHERE salary IN (200,300,400

29、)工资必须是工资必须是200,300,400之中的值。之中的值。36LIKE 使用匹配符将一个值同其相似的值比较。使用匹配符将一个值同其相似的值比较。 匹配符包括:匹配符包括:- 代表一个字符。代表一个字符。 % 代表多个字符。代表多个字符。 如:如:WHERE salary LIKE -00查找查找00作为后两位数的值。作为后两位数的值。WHERE salary LIKE 200%查找查找200作为前三位数的值。作为前三位数的值。37EXISTS 查询在指定表中是否存在一行符合某种条件查询在指定表中是否存在一行符合某种条件的数据。的数据。 WHERE EXISTS (SELECT emplo

30、yee_idFROM employee_tblWHERE employee_id = 3333)38UNIQUE 在特定的表中搜索每一行是否唯一。在特定的表中搜索每一行是否唯一。 WHERE UNIQUE(SELECT salary FROM employee_tbl WHERE employee_id = 3333)测试满足条件的工资是否有重复数据。测试满足条件的工资是否有重复数据。39ALL/ANY 与某个数据集中所有数据与某个数据集中所有数据 / 任何一个进行比较。任何一个进行比较。 WHERE salary all(SELECT salary FROM employee_tbl WHE

31、RE city = INDIAN)40AND/OR AND连接的条件必须都满足。连接的条件必须都满足。 OR连接的条件至少满足一个。连接的条件至少满足一个。 如:如:SELECT * FROM products_tbl WHERE cost 10 and cost 30 如:如:SELECT * FROM products_tbl WHERE prod_id = 7725 or prod_id = 234541四库函数四库函数函数通常是列名或表达式相连系函数通常是列名或表达式相连系的命令。的命令。1、统计函数、统计函数2、字符函数、字符函数3、算术函数、算术函数421、统计函数、统计函数 统计

32、函数:用于提供统计信息,如:累加、统计函数:用于提供统计信息,如:累加、总和、平均值。总和、平均值。 主要的统计函数:主要的统计函数: COUNT:统计行数或不为:统计行数或不为NULL的列数。的列数。 SUM:求和。:求和。 MAX:求最大值。:求最大值。 MIN:求最小值。:求最小值。 AVG:求平均值。:求平均值。43COUNT语法:语法:COUNT(*)|(DISTINCT|ALL|COLUMN NAME)注意:注意:DISTINCT统计唯一的行;统计唯一的行; DISTINCT不能用于不能用于COUNT(*),只能用),只能用 于于COUNT(column_name)44举例:SEL

33、ECT COUNT(*)FROM EMPLOYEE_TBL统计雇员表中所有行数统计雇员表中所有行数SELECT COUNT(EMP_ID)FROM EMPLOYEE_TBL统计所有雇员身份证号统计所有雇员身份证号SELECT COUNT(DISTINCT SALARY)FROM EMPLOYEE_PAY_TBL统计唯一行数统计唯一行数45SUM:仅用于数字类型。:仅用于数字类型。语法:语法: SUM( DISTINCT COLUMN NAME)举例:举例:SELECT SUM (SALARY)FROM EMPLOYEE_PAY_TBL计算工资总和计算工资总和SELECT SUM (DISTIN

34、CT SALARY)FROM EMPLOYEE_PAY_TBL计算没有重复工资总和计算没有重复工资总和46AVG:确定一组数据的平均值确定一组数据的平均值语法:语法:AVG(DISTINCT COLUMN NAME)举例:举例:SELECT AVG(SALARY)FROM EMPLOYEE_PAY_TBL计算工资的平均值计算工资的平均值SELECT AVG(DISTINCT SALARY)FROM EMPLOYEE_PAY_TBL计算唯一的工资平均值计算唯一的工资平均值47MAX和MIN语法:语法:MAX( DISTINCT COLUMN NAME )MIN ( DISTINCT COLUMN

35、 NAME )举例:举例:SELECT MAX(SALARY)FROM EMPLOYEE_PAY_TBL计算最高的工资计算最高的工资SELECT MAX(DISTINCT SALARY)FROM EMPLOYEE_PAY_TBL计算最高的工资计算最高的工资48例:表例:表DTUDENT_TBL 数学平均值数学平均值 总成绩最高值总成绩最高值 语文成绩最低值语文成绩最低值 数学成绩总和数学成绩总和 表中的数据行数表中的数据行数s_idnamemathscomptotal9810021王明67801479820201李春56721289810089赵芳78901689820067顾青5358111

36、9810125雷蕾8069149491. SELECT AVG(maths)FROM STUDENT_TBL2. SELECT MAX(total)FROM STUDENT_TBL3. SELECT MIN(comp)FROM STUDENT_TBL4. SELECT SUM(maths)FROM STUDENT_TBL5. SELECT COUNT(*)FROM STUDENT_TBL502、字符函数、字符函数 UPPER(character string):将指定字符):将指定字符串中的小写字母换成大写字母。串中的小写字母换成大写字母。 LOWER (character string):)

37、: 将指定字将指定字符串中的大写字母换成小写字母。符串中的大写字母换成小写字母。 SUBSTRING (colunm name,startposition,length) 从指定字符串中取从指定字符串中取字符字符。51例:例:SELECT UPPER(CITY)FROM EMPLOYEE_TBLSELECT LOWER (CITY)FROM EMPLOYEE_TBLSELECT SUBSTRING(EMP_ID,1,3)FROM EMPLOYEE_TBLSELECT SUBSTRING(EMP_ID,5,3)FROM EMPLOYEE_TBL523、算术函数、算术函数 ABS(绝对值)、(绝对

38、值)、SIN、COS、TAN、EXP(指数)、(指数)、SQRT(开方)、(开方)、POWER(幂)(幂) 语法:函数名(表达式)语法:函数名(表达式) 例:例:SELECT SQRT(MATHS) * 10 FROM STUDENT_TBL53实验二SQLServer 2000的安装和使用 数据库管理系统的基本环境 数据库服务器的注册 数据库服务器中的基本对象 熟悉样例库Northwind 练习单表查询语句54完成下列操作并给出结果(交此查询命令及结果)、查询出city名为Dallas和Boston的Customer的姓名。、统计出Customers表中城市的个数。55五、多表查询五、多表查

39、询 1 1、多表的连接查询、多表的连接查询 例例7 7:查询有一门课程成绩等于查询有一门课程成绩等于9595分的学号、分的学号、 姓名、课程号和成绩。姓名、课程号和成绩。 select s.sno,sn,cno,gselect s.sno,sn,cno,g from s, scfrom s, sc where s.sno=sc.sno and g=95 where s.sno=sc.sno and g=95from from 子句中有多个表名。子句中有多个表名。56Sno,Sn,GSno,Sn,G sex=Fsex=F (S (S SC)SC) 解:解: SELECT SELECT S.SNO

40、,SN,GS.SNO,SN,G FROM FROM S, SC S, SC WHERE WHERE S.SNO=SC.SNO S.SNO=SC.SNO AND SEX=F AND SEX=F 保留字不能用作表名、列名等保留字不能用作表名、列名等 例例8 8:查询女学生的成绩:查询女学生的成绩:57 select s.sno,snselect s.sno,sn from from s s,scsc wherewhere s.sno=sc.sno s.sno=sc.sno and cno=c2 and cno=c2 or cno=c4 or cno=c4 ;例例9 9:查询选修:查询选修c2c2或

41、或c4c4课程的学生学号课程的学生学号 和姓名。和姓名。58 select s.snoselect s.sno,snsn from from s , sc s , sc ,c c wherewhere s.sno=sc.sno s.sno=sc.sno and o=o and o=o and =DB and =DB ;例例1111:查询选修课程名为:查询选修课程名为DBDB的学生学的学生学 号和姓名。号和姓名。 59 2 2、一般子查询(不相关子查询)、一般子查询(不相关子查询) 例例7:7:查询有一门课程成绩等于查询有一门课程成绩等于9595分的分的 学号和姓名。学号和姓名。 (1) (1)

42、 使用多表连接查询使用多表连接查询: select s.sno,snselect s.sno,sn from s, scfrom s, sc where s.sno=sc.sno and g=95 where s.sno=sc.sno and g=95where where 子句中包含另一个子句中包含另一个能独立运能独立运行行查询语句。查询语句。60select snoselect sno,snsn from sfrom s where sno in where sno in ( select sno ( select sno from scfrom sc where g = 95)where

43、 g = 95); (2)(2)例例7 7的的一般子查询一般子查询613 3、相关子查询、相关子查询例例1212:查询选修:查询选修c2c2课程的学生学号和姓名。课程的学生学号和姓名。 ExistsExists的用法:若内层查询结果非空,则外层查的用法:若内层查询结果非空,则外层查询的询的wherewhere后的条件为真,否则为假。后的条件为真,否则为假。wherewhere exists exists只有两个值,或真或假。若要为只有两个值,或真或假。若要为真,当且仅当其后的真,当且仅当其后的selectselect语句查询结果非空。语句查询结果非空。 select sno,snselect

44、sno,sn from from s s wherewhere exists exists (select (select * * from scfrom sc where s.sno=sc.snowhere s.sno=sc.sno and cno=c2) and cno=c2);62执行过程:执行过程:首先找外层查询中首先找外层查询中S S表的表的第一行,根据它的第一行,根据它的snosno值处理内层查值处理内层查询,若查询结果非空,则询,若查询结果非空,则 existsexists为为真,就把真,就把S S表的第一行的表的第一行的snsn值取出放值取出放入查询结果的结果集中;然后找入查询

45、结果的结果集中;然后找S S表表的第二行、第三行、的第二行、第三行、重复上述过重复上述过程,直到程,直到S S表中所有行均被检索过为表中所有行均被检索过为止。止。63sno snagesexs1丁岩 19Ms2王爽 17Fs3李红 18Fs4赵立 21MSsnocnoGs1c179s1c385s2c160s2c283s2c390s3c195s3c280s4c175s4c285SCselect sno,snselect sno,sn fromfrom s swherewhere exists exists (select (select * * from scfrom sc where s.sn

46、o=sc.snowhere s.sno=sc.sno and cno=c2) and cno=c2);64sno sns2王爽s3李红s4赵立结果集为:结果集为:65 select snoselect sno,sn sn from sfrom s where existwhere exist ( select ( select * * from scfrom sc where where s.sno=sc.snos.sno=sc.sno and g = 95) and g = 95);(3)(3)例例7 7的相关子查询的相关子查询:查询有一门课程成绩等于查询有一门课程成绩等于9595分的学生学

47、号分的学生学号和姓名。和姓名。66sno snagesexs1丁岩 19Ms2王爽 17Fs3李红 18Fs4赵立 21MSsnocnoGs1c179s1c385s2c160s2c283s2c390s3c183s3c295s4c175s4c295SCselect snoselect sno,sn sn from sfrom s where existwhere exist ( select ( select * * from scfrom sc where where s.sno=sc.snos.sno=sc.sno and g = 95) and g = 95);67 select sno

48、select sno,snsn from sfrom s where not existwhere not exist ( select ( select * * from scfrom sc where s.sno=sc.sno and g60)where s.sno=sc.sno and g60);例例1313:查询所有课程成绩均及格的学:查询所有课程成绩均及格的学 生学号和姓名。生学号和姓名。68select snoselect sno,snsn from sfrom swhere not existwhere not exist ( select ( select * * from s

49、cfrom sc where s.sno=sc.sno where s.sno=sc.sno and g60) and g60);sno snagesexs1丁岩 19Ms2王爽 17Fs3李红 18Fs4赵立 21MSsnocnoGs1c179s1c385s2c183s2c256s2c390s3c195s3c280s4c185s4c255SC69 select snoselect sno,snsn from sfrom s where 90 ALLwhere 90 ALL ( select g ( select g from sc from sc wherewhere s.sno=sc.sn

50、o)s.sno=sc.sno);例例1414:查询所有课程成绩均大于:查询所有课程成绩均大于9090分的学分的学 生学号和姓名。生学号和姓名。70sno snagesexs1丁岩 19Ms2王爽 17Fs3李红 18Fs4赵立 21MSsnocnoGs1c179s1c385s2c160s2c283s2c390s3c195s3c293s4c175s4c285SCselect snoselect sno,snsn from sfrom s where 90 ALLwhere 90 ALL ( select g ( select g from scfrom sc wherewhere s.sno=s

51、c.sno)s.sno=sc.sno);71 select sno,snselect sno,sn from from s s wherewhere not exists not exists (select (select * * from scfrom sc where where s.sno=sc.snos.sno=sc.sno and cno=c2) and cno=c2); 特点特点: : 子查询不能独立运行。子查询不能独立运行。 子查询多次运行。子查询多次运行。 例例1515:查询没选修:查询没选修c2c2课程的学生学号和姓名。课程的学生学号和姓名。72例例1616:检索学习全部课

52、程的学生姓名:检索学习全部课程的学生姓名select snselect sn from from s swherewhere not exists not exists ( select ( select * * from cfrom c where not existswhere not exists (select select * * from scfrom sc where s.sno=sc.snowhere s.sno=sc.sno and o=o)and o=o);73sno snagesexs1丁岩 19Ms2王爽 17Fs3李红 18Fs4赵立 21Mcno cnTc1DBli

53、c2Maths liuc3DSzhangCsnocnoGs1c179s1c385s2c160s2c283s2c390s3c195s3c280s4c175s4c285SCS74sno sns2王爽结果集为:结果集为:75例例1717:检索所学课程包含学生:检索所学课程包含学生S3S3所学课程的所学课程的学生学号学生学号select distinct x.snoselect distinct x.sno fromfrom sc as x sc as xwherewhere not exists not exists ( select ( select * * from sc as y from s

54、c as y where y.sno=s3 and not where y.sno=s3 and not existsexists (select select * * from sc as z from sc as z where x.sno=z.snowhere x.sno=z.sno and o=o)and o=o);76sno cno Gs1c179s1c385s2c160s2c283s2c390s3c195s3c280s4c175s4c285sno cno Gs1c179s1c385s2c160s2c283s2c390s3c195s3c280s4c175s4c285sno cno G

55、s1c179s1c385s2c160s2c283s2c390s3c195s3c280s4c175s4c285xyz77 4 4、谓词、谓词 1)1)inin: inin 例例7 7:查询有一门课程成绩等于查询有一门课程成绩等于9595分的分的学生学号和姓名。学生学号和姓名。 select snoselect sno,snsn from sfrom s where sno in where sno in ( select sno ( select sno from sc from sc where g = 95)where g = 95);78select sno,snselect sno,sn

56、 from from s swherewhere sno in sno in (select sno (select sno from scfrom sc where where cno=c2)cno=c2); select sno,snselect sno,sn from from s s wherewhere exists (select exists (select * * from scfrom sc where where s.sno=sc.snos.sno=sc.sno and cno=c2) and cno=c2);回顾例回顾例12:12:查询选修查询选修c2c2课程的学生学号和

57、姓名。课程的学生学号和姓名。 可改写为:可改写为:79 some some 例例7 7:查询有一门课程成绩等于查询有一门课程成绩等于9595分的学分的学 生学号和姓名。生学号和姓名。 select snoselect sno,sn sn from s from s where sno= some where sno= some ( select sno from sc ( select sno from sc where g = 95)where g = 95);2)2)some(any )some(any ):80 select snoselect sno,snsn from sfrom s

58、 where 90 ALLwhere 90 ALL ( select g ( select g from sc from sc wherewhere s.sno=sc.sno)s.sno=sc.sno);3)3)allall: all all 回顾例回顾例1414:查询所有课程成绩均大于:查询所有课程成绩均大于9090分分 的学生学号和姓名。的学生学号和姓名。 81select snoselect sno,snsnfrom sfrom s where sex=m and age where sex=m and age ALLALL ( select age ( select age from

59、sfrom s wherewhere sex=F)sex=F);例例1818:查询比所有女同学年龄大的男同学的:查询比所有女同学年龄大的男同学的学号和姓名。学号和姓名。82 allall等价于等价于 not innot in =some =some等价于等价于 inin =all =all、somesome没有意义没有意义83A=10Aall(12,10,34) ( F ) Aall(12,16,34) (T)A=all(12,10,34) 没意义没意义A=all(12,10,34) ( F ) A=all(12,10,34) (T)A=some(12,10,34) (T) Asome(6,1

60、6,34) (T)Asome(12,16,34)没意义没意义84 select sno,snselect sno,sn from from s s wherewhere sno in sno in (select sno (select sno from scfrom sc where cno=c2)where cno=c2);可改写为可改写为 select sno,snselect sno,sn from from s s wherewhere sno = some sno = some (select sno (select sno from scfrom sc where cno=c2)

温馨提示

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

评论

0/150

提交评论