ORACLE结构化查询语言SQL培训介绍ppt课件

上传人:hs****ma 文档编号:569482336 上传时间:2024-07-29 格式:PPT 页数:65 大小:429KB
返回 下载 相关 举报
ORACLE结构化查询语言SQL培训介绍ppt课件_第1页
第1页 / 共65页
ORACLE结构化查询语言SQL培训介绍ppt课件_第2页
第2页 / 共65页
ORACLE结构化查询语言SQL培训介绍ppt课件_第3页
第3页 / 共65页
ORACLE结构化查询语言SQL培训介绍ppt课件_第4页
第4页 / 共65页
ORACLE结构化查询语言SQL培训介绍ppt课件_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《ORACLE结构化查询语言SQL培训介绍ppt课件》由会员分享,可在线阅读,更多相关《ORACLE结构化查询语言SQL培训介绍ppt课件(65页珍藏版)》请在金锄头文库上搜索。

1、* 主要内容 结构化查询语言结构化查询语言SQL一.结构化查询语言概述二.SELECT三.针对单表的查询四.对查询结果进行编辑五.多表连接查询六.1*一一. 结构化查询语言概述结构化查询语言概述SQL的全称为StructuredQueryLangauge(结构化查询语言)。它是数据库系统的通用语言,利用它,用户可以用几乎同样的语句在不同的数据库系统上执行同样的操作。SQL语言是一个综合的,功能强大又简单易学的语言,它集数据查询、数据操纵、数据定义和数据控制于一体。SQL语言按照功能可以分为4大类。2*按照指定的组合、条件表达式或排序检索已存在的数据库中的数据,但并不改变数据库中数据。命令动词有

2、SELECT。1.数据查询语言(DataQueryLanguage,DQL)创建、修改或删除数据库中各种对象,包括表、视图、索引等。命令动词有CREATE、ALTER、DROP。2.数据定义语言(DDL:DataDefinitionLanguage)3.数据操纵语言(DataManipulationLanguage,DML)对已经存在的数据库进行记录的插入、删除、修改等操作。命令动词有INSERT、UPADATE、DELETE。3*用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行监视。命令动词有GRANT、REMOVE等。5.数据控制语言(DataContro

3、lLanguage,DCL)4.事务控制语言(TransactionControlLanguage,TCL)事务是对数据库操作的逻辑单位,在一个事务中可以包含一条或多条DML(数据操纵语言)、DDL(数据定义语言)和DCL(数据控制语言)语句,这些语句组成一个逻辑整体。事务的执行只有两种结果:要么全部执行,把数据库带入一个新的状态;要么全部不执行,对数据库不做任何修改。事务是一个或多个SQL语句序列,在程序更新数据库时事务至关重要,因为必须维护数据的完整性,命令动词有SAVEPOINT,ROLLBACK,COMMIT。4*二二. SELECT查询查询 所谓查询,就是针对数据库中的数据按指定的条

4、件和特定的组合进行对数据表的检索。 SELECT FROM 表名 WHERE 查询条件 含义是:根据WHERE子句的查询条件,从FROM子句指定的表中找出满足条件记录,再按SELECT语句中指定的字段次序,筛选出记录中的指定字段值。若不设置查询条件,则表示被查询的表中所有记录都满足条件。 SELECT语句格式语句格式 SELECT查询语句基本格式是:查询语句基本格式是:5*SELECT ALL|DISTINCT INTO 新表名FROM WHERE GROUP BY HAVING ORDER BY ASC|DESC SELECT查询语句完整格式是:查询语句完整格式是:参数说明:(1)ALL|D

5、ISTINCT其中ALL表示查询满足条件的所有行;DISTINCT表示在查询的结果集中,消除重复的记录。(2):由被查询的表中的字段或表达式组成,指明要查询的字段信息。6*(3)INTO 新表名 表示在查询的时候同时建立一个新的表,新表中存放的数据来源于查询的结果。(4)FROM 指出针对那些表进行查询操作,可以是单个表,也可以是多个表,表名与表名之间用逗号隔开。(5)WHERE 用于指定查询的条件。该项是可选项,即可以不设置查询条件,但也可以设置一个或多个查询条件。(6)GROUP BY 对查询的结果按照指定的字段进行分组。(7)HAVING : 对分组后的查询结果再次设置筛选条件,最后的结

6、果集中只包含满足条件的分组。必须与GROUP BY子句一起使用。(8)ORDER BY ASC|DESC 对查询的结果按照指定的字段进行排序,其中ASC|DESC用来指明排序的方式。ASC为升序;DESC为降序。7* 整个整个SELECTSELECT语句的含义:语句的含义: 根据WHERE子句的筛选条件,从FROM子句指定的表中找出满足条件记录,再按SELECT语句中指定的字段次序,筛选出记录中的字段值构造一个显示结果表。 如果有GROUP BY子句,则将结果按group by后面的“字段名”的值进行分组,该字段中值相等的元组为一个组; 如果GROUP BY子句带有短语HAVING,则只有满足

7、短语指定条件的分组才会输出。 如果有ORDER BY子句,则结果表要按照order by后面的的值进行升序和降序排列。 SELECT ALL|DISTINCT实现的是对表的投影操作,WHERE 中实现的是选择操作。 8* 三三. 针对单表的查询针对单表的查询1. 查询指定的字段查询指定的字段【例例1 1】查询student表中学生的学号、姓名以及家庭住址。 用户往往需要了解表中部分字段信息或者全部字段信息,通过对SELECT语句中“字段列表”的控制即可满足用户的需求。SELECT student_id, student_name, addressFROM student1.1 查询部分字段查询

8、部分字段9* 方法一:列举法,即把表中所有字段在SELECT子句中的“字段列表”中列举出来; 方法二:通配符法,即使用通配符“*”来代替表中所有的字段。1.21.2 查询全部字段查询全部字段【例例2 2】查询student表中所有学生的所有字段信息。SELECT student_id, student_name, class_id, sex, SELECT student_id, student_name, class_id, sex, born_date, address, tel, resumeborn_date, address, tel, resumeFROM studentFROM

9、student方法一:列举法SELECT *FROM student方法二:通配符法10* 当用户只需要了解表中部分记录的信息时,这就应该在查询的时候使用WHERE子句设置筛选条件,把满足筛选条件的记录查询出来。 设置查询条件的SELECT查询语句基本格式是:1.3 查询满足条件的记录查询满足条件的记录SELECT SELECT FROM FROM 表名表名WHERE WHERE 查询条件查询条件查询条件可以是关系表达式、逻辑表达式和特殊表达式。11*用关系运算符号将两个表达式连接在一起的式子称为关系表达式,其返回值为逻辑真(TRUE)或逻辑假(FALSE),关系表达式的格式为: 2常用的关系

10、运算符如下表所示。运算符号含义=等于小于大于=大于或等于!=或不等于关系表达式关系表达式12*【例例3】查询所有男学生的学号、姓名、性别和出生日期。SELECT student_id, student_name, sex, born_dateFROM studentWHERE sex=男男13*用逻辑运算符号将两个表达式连接在一起的式子称为逻辑表达式,其返回值为逻辑真(TRUE)或逻辑假(FALSE),逻辑表达式的格式为:2常用的逻辑运算符下图所示。运算符号含义OR逻辑或AND逻辑与NOT逻辑否 逻辑表达式逻辑表达式14*(1)逻辑与运算ANDAND所有条件都成立时,返回结果才为真。【例例4】

11、查询所有1989年以后出生所有女学生的基本信息。SELECT * FROM studentWHERE born_date1989-12-31 AND sex=女女【例例5】查询课程表中非公共课的课程信息。(2)逻辑否运算NOTSELECT *FROM courseWHERE NOT (c_type =公共课公共课)15*(3)逻辑或运算OR所有条件中只要有一个条件成立,返回结果即为真。【例例5】查询学生表中来自广州市的学生或来自其他地方的女学生的学号、姓名、班级编号、家庭住址和备注信息SELECT student_id, student_name, class_id, address, res

12、umeFROM studentWHERE address=广州市广州市 OR sex=女女16*特殊表达式在比较运算中有一些特殊的作用。常用的特殊运算符号如下图所示。特殊表达式特殊表达式 运算符号含义%通配符,包含0个或多个字符的任意字符串通配符,表示任意单个字符指定范围或集合中的任意单个字符BETWEEN.AND定义一个区间范围ISNOTNULL检测字段值为空或不为空LIKE字符匹配操作符NOTIN检查一个字段值属于或不属于一个集合EXISTS检查某一字段是否存在值17* LIKE LIKE关键字的作用是用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是charchar、textt

13、ext、datetimedatetime等数据类型,返回逻辑值。LIKELIKE表达式的格式为: 字符表达式字符表达式1 NOT LIKE 1 NOT LIKE 字符表达式字符表达式2 2 若省略NOT,则表示字符表达式1与字符表达式2相匹配时才返回逻辑真。 若选择NOT,则表示字符表达式1与字符表达式2不匹配时才返回逻辑真。(1)字符匹配操作符LIKELIKE18*【例例6 6】查询姓刘的学生的基本情况。SELECT * FROM studentSELECT * FROM studentWHERE student_name LIKE WHERE student_name LIKE 刘刘% %

14、【例例7 7】查询所有姓张和姓刘学生的基本情况。SELECT *SELECT * FROM studentFROM studentWHERE student_name LIKE WHERE student_name LIKE 张,刘张,刘%说明:在使用通配符“%”或“_”时,就只能用字符匹配操作符LIKE,不能使用=运算符19*判断所指定的值是否在给定的区间,返回逻辑值。格式为:表达式表达式 NOT BETWEEN NOT BETWEEN 表达式表达式1 AND 1 AND 表达式表达式2 2“表达式1”是区间的下限,“表达式2”是区间的上限。若省略NOT,则表示表达式的值在指定的区间内即返回

15、逻辑真。若选择NOT,则表示表达式的值不在指定的区间内即返回逻辑真。(2)区间控制运算符BETWEEN.ANDBETWEEN.AND【例例8 8】查询出1990年1月1日至1991年12月31日出生的学生的学号、姓名、出生日期。SELECT student_id, student_name, born_dateFROM studentWHERE born_date BETWEEN 1990-1-1 AND 1991-12-3120*IS NULLIS NULL用来测试字段值是否为空值,返回逻辑值,格式为: 表达式表达式 IS NOT NULLIS NOT NULL若省略NOT,则表示表达式的值

16、为空时即返回逻辑真。若选择NOT,则表示表达式的值不为空时即返回逻辑真。(3)空值判断运算符IS NULLIS NULL【例例9 9】查询备注内容为空的学生的学号、姓名与备注。SELECT student_id, student_name,resumeSELECT student_id, student_name,resumeFROM studentFROM studentWHERE resume is nullWHERE resume is null21* 判断表达式的值是否属于某一个给定的集合。返回逻辑值,格式为: 表达式表达式 NOT IN NOT IN (表达式(表达式1 1 ,.n.

17、n)若省略NOT,则表示表达式的值属于给定集合时即返回逻辑真。若选择NOT,则表示表达式的值不属于给定的集合时即返回逻辑真。(4)集合判断运算符ININ【例例1010】查询来自长沙和广州市学生的姓名、班级编号和来自的城市。SELECT student_name, class_id,addressSELECT student_name, class_id,addressFROM studentFROM studentWHERE address in (WHERE address in (长沙市, ,广州市) )22*四四. .对查询结果进行编辑对查询结果进行编辑 1.1.对查询的字段进行说明对查

18、询的字段进行说明【例例1111】查询学生表中学生的姓名和来自的城市,并分别用中文对其进行说明。 在SELECT语句中,可以在一个字段的前面加上一个单引号字符串,对后面的字段起说明作用。SELECT SELECT 姓名姓名, student_name, , student_name, 城市城市, address, addressFROM studentFROM student23*为了能让人更容易了解字段的内容,可以为字段指定别名,并显示在结果集中,方法有3种:方法一:字段名方法一:字段名 AS AS 别名;别名;方法二:字段名方法二:字段名 别名别名方法三:别名方法三:别名= =字段名字段名2

19、.2.对查询的字段使用别名对查询的字段使用别名【例例12】查询学生表中的学生的student_name和born_date信息,并用中文“姓名”和“出生日期”来显示字段名。SELECT student_name AS 姓名姓名, born_date AS 出生日期出生日期 FROM student24* SELECT子句后面可以是字段名,也可以是表达式。 3.3.显示表达式的值显示表达式的值【例例1313】查询学生表中所有女学生的姓名和年龄。SELECT student_name , SELECT student_name , year(getdate()-year(born_date) ye

20、ar(getdate()-year(born_date) 年龄年龄FROM studentFROM studentWHERE sex=WHERE sex=女女 25* SELECT子句中有一个可选项:ALL|DISTINCT,其中DISTINCT的作用就是用来消除结果集中重复的记录,内容相同的记录只显示一条。4.4.消除结果集中重复的记录消除结果集中重复的记录【例例1414】查询学生表学生所来自的城市。查询学生表学生所来自的城市。SELECT DINSTINCT addressSELECT DINSTINCT addressFROM studentFROM student26* 查询语句中还可

21、以指定表中返回的行数,格式如下:SELECT TOP n SELECT TOP n 字段列表字段列表FROM FROM 其中,TOP n用于指定查询结果返回的行数,其返回的结果一定从上往下的n行信息。5.5.返回指定的行数返回指定的行数【例例1515】查询学生表前3位学生的学号和姓名。SELECT TOP 3 student_id, student_name, class_idFROM student27*6.6.6.6.聚合函数聚合函数聚合函数聚合函数SQLSERVER提供的聚合函数,用来完成一定的统计功能.能对集合中的一组数据进行计算,并返回单个计算结果.常与SELECT和GROUPBY子

22、句一起使用.常用聚合函数函数功能含义说明COUNT统计统计满足条件的记录数MAX求最大值求某一集合中的最大值MIN求最小值求某一集合中的最小值AVG求平均值计算某一数值集合中的平均值SUM求和计算某一数值集合中的总和28* MAX和MIN函数分别用于查找指定集合中的最大值和最小值。格式为: MAX MAXMINMIN(ALL | DISTINCT ALL | DISTINCT 表达式)表达式) 其中,ALL表示对所有值进行聚合函数运算,DISTINCT表示如果有多个重复的值,则这些重复值只计算一次,默认为ALL。表达式可以是涉及一个列或多个列的算术表达式。6.16.1 MAXMAX和和MINM

23、IN函数函数【例例1616】查找成绩表中1001号课程的最高分和最低分。SELECT max(grade)SELECT max(grade)最高分最高分, min(grade), min(grade)最低分最低分 FROM scoreFROM scoreWHERE course_id=1001WHERE course_id=100129*该函数用于计算查询到的数据值的总和。语法格式为: SUM(ALL | DISTINCT 表达式)表达式)【例例17】计算号学生总成绩。6.2 SUM函数函数SELECTsum(grade)总分FROMscoreWHEREstudent_id=080110130

24、*用于计算查询结果的平均值。语法格式为: AVG(ALL | DISTINCT 表达式)表达式)6.3 AVG函数函数【例例18】计算号学生平均成绩。SELECT AVG(grade)平均分平均分FROM scoreWHERE student_id=080110131*用于统计查询结果集中记录的数目。语法格式为: COUNT COUNT(ALL | DISTINCT ALL | DISTINCT 表达式)表达式) 如果COUNT函数使用字段名做为参数,则只统计内容不为空的行的数目。 如果执行COUNT(*),即使用“*”作为参数,则统计所有行(包括空值的行)。6.4 COUNT函数函数【例例1

25、9】统计学生表中学生的总数。统计学生表中学生的总数。SELECT COUNT(student_id)学生总数学生总数FROM student32*GROUP BY子句将查询结果表按某一列或多列值分组,值相等的为一组。一般与SQL的聚合函数一起使用,对分组后的每一组数据分别进行统计。格式:SELECTFROMGROUPBYHAVING6.5 对查询结果进行分组和筛选对查询结果进行分组和筛选【例例20】统计各个班学生的总人数。统计各个班学生的总人数。SELECT class_id , count(student_id)FROM studentGROUP BY class_id33*【例例21】统计

26、成绩表中每个学生的总分和平均分。SELECT student_id , sum(grade)总分总分, avg(grade)平均分平均分FROM scoreGROUP BY student_id34*6.6 6.6 对分组后还要求按一定的条件对这些分组进行筛选,最终只输出满足指定条件的对分组后还要求按一定的条件对这些分组进行筛选,最终只输出满足指定条件的分组,则用分组,则用HAVINGHAVING短语指定筛选条件。短语指定筛选条件。【例例2222】在例在例2121中,只输出总分大于中,只输出总分大于150150的学生的学号、总分和平均分。的学生的学号、总分和平均分。SELECT student

27、_id, sum(grade)SELECT student_id, sum(grade)总分总分, , avg(grade) avg(grade)平均分平均分 FROM gradeFROM gradeGROUP BY student_idGROUP BY student_idHAVING sum(grade)150HAVING sum(grade)15035*6.7 对查询结果集进行排序对查询结果集进行排序在SELECT查询语句中。使用ORDERBY子句对查询输出结果进行排序。排序的方式有两种:ASC(升序)和DESC(降序)。【例例23】统计成绩表中每个学生的总分和平均分,把查询结果按总分的

28、降序排列输出。SELECT student_id , sum(grade)总分总分, avg(grade)平均分平均分FROM gradeGROUP BY student_idORDER BY 总分总分 DESC36* 通过INTO子句,可以创建一个新表并将查询到的结果插入到新表中。6.8 6.8 把查询结果插入新的表把查询结果插入新的表【例例2424】查询学生表中学生的学号、姓名和班级编号,并把查询结果插入到新的表student_class中。然后针对student_class表进行查询操作,验证新表student_class是否建立成功且被插入了记录。SELECT student_id,

29、student_name, class_idSELECT student_id, student_name, class_idINTO student_classINTO student_classFROM student FROM student 说明:新表的所包含的字段与数据类型与SELECT语句的字段列表一致。如果要创建的临时表,则只要在表名前加上“#或#”即可37* 五五. 多连接表查询多连接表查询 连接查询分两大类,一是使用连接谓词进行连接;二是使用关键字JHON进行连接。 使用连接谓词连接表的基本格式为:SELECT FROM 表表1,表,表2 ,.nWHERE 连接谓词连接谓词连

30、接字段:必须是可比较的连接谓词包括:=、=、!=、等,当比较符是=时称为等值连接。38*当连接谓词是“=”时的连接,称为等值连接。当连接谓词是不等运算符时的连接,称为不等连接。【25】查询学生的基本信息和成绩信息。SELECT student.* , score.*FROM student , scoreWHERE student.student_id=score.student_id1等值连接和不等连接等值连接和不等连接39*2. 自然连接自然连接 在针对多表进行查询时。如果所引用的列为被查询的表所共有,则引用列时必须用表名来指定列是来源于哪个表,指定方法为:表名.列名。反之,不一定需要表名

31、来指定来源。【例例26】查询学生的基本信息和成绩信息,在输出结果中相同的字段只保留一个。SELECT student.student_id, student_name, class_id, sex, born_date, address, tel, resume, course_id, gradeFROM student , scoreWHERE student.student_id=score.student_id若在等值连接中把输出字段列表中重复的字段只保留一个的连接称为自然连接。40*3. 复合条件连接复合条件连接含有多个连接条件称为复合条件连接。【例例27】查询学生的学号、姓名、所学课

32、程的名称和成绩信息。查询学生的学号、姓名、所学课程的名称和成绩信息。SELECT student.student_id,student_name,course_name,gradeFROM student, score, courseWHERE student.student_id=score.student_id AND score.course_id=course.course_id41* 一个表与自身进行连接称为自连接。 在同一个表中查找具有相同字段值的行,则可以使用自连接。在使用自连接时需要为表指定两个别名,且对所有引用的列均要用别名来指定其来源。4. 自连接自连接 【例例28】查找同

33、一课程成绩相同的学生的学号、课程号和成绩。SELECT a.student_id,b.student_id,a.course_id,a.gradeFROM score a, score bWHERE a.grade=b.grade AND a.student_idb.student_idAND a.course_id=b.course_id42*以以JOIN关键字连接关键字连接 以JOIN关键字来连接表的方式,增强了表的连接能力和连接的灵活性。 使用JOIN关键字连接表的的基本格式为:SELECT FROM 表名表名1 表名表名2 ON 表名表名3 ON .参数说明:1)表名1,表名2,表名3

34、等用来指明需要连接的表。2)连接类型有: INNER | LEFT | RIGHE | FULL OUTER JOIN。其中INNER JOIN表示内连接;OUTER JOIN表示外连接,外连接又分:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。3)ON:用来指明连接条件。43* 等值连接、不等连接和自然连接属于内连接。以JOIN关键字来实现内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。1 1内连接(内连接(INNER JOININNER JOIN) 【例例2929】查询学生的基本信息和成绩信

35、息SELECT student.* , score.*SELECT student.* , score.*FROM student INNER JOIN score FROM student INNER JOIN score ON student.student_id=score.student_id ON student.student_id=score.student_id44* 在内连接中,INNER可以省略,使用内连接后仍然可以使用WHERE子句对连接后的记录进行筛选。【例例30】查询学号为学生的基本信息和成绩信息。SELECT student.student_id, student_

36、name, class_id, sex, born_date, address, tel, resume, course_id, gradeFROM student INNER JOIN score ON student.student_id=score.student_idWHERE student.student_id= 080110145* 外连接返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。2外连接外连接(OUTER JOIN)(1)左外连接)左外连接 查询输出结果中显示符合条件的数据行及左边数据

37、表中不符合条件的数据行。左外连接的连接格式为:【例例31】查找所有学生的学号、姓名以及他们所学的课程编号和成绩,没有课程成绩的学生信息也要显示。FROM 左表名左表名 LEFT OUTER JOIN 右表名右表名 ON 连接条件连接条件SELECT student.student_id, student_name, course_id, gradeFROM student LEFT OUTER JOIN score ON student.student_id=score.student_id46* 查询输出结果中显示符合条件的数据行及右边数据表中不符合条件的数据行。右外连接的连接格式为:(2)

38、右外连接)右外连接FROM 左表名左表名 RIGHT OUTER JOIN 右表名右表名 ON 连接条件连接条件【例例32】查询学生的学号、所在的班级编号和班级名称,班级表中没有连接成功的记录也要显示。SELECT student.student_id, class.class_id, class_nameFROM student RIGHT OUTER JOIN class ON student.class_id=class.class_id47*(3)全外连接)全外连接 查询输出结果中显示符合条件的数据行右边及左边数据表中不符合条件的数据行。全外连接的格式为:FROM 左表名左表名 FUL

39、L OUTER JOIN 右表名右表名 ON 连接条件连接条件【例例33】查询学生的学号、所学课程名称及成绩,两表中没有连接成功的记录均要显示(采用全外连接)。SELECT student_id, course_name, gradeFROM score FULL OUTER JOIN course ON score.course_id=course.course_id48*3.交叉连接交叉连接 交叉连接也叫非限制连接,它将两个表不加任何约束地组合起来。在数学上,就是两个表的笛卡尔积。交叉连接后得到的结果集的行数是两个被连接表的行数的乘积。【例例34】查询学生的基本信息及其成绩信息(使用交叉连

40、接)。SELECT *FROM student CROSS JOIN score49* 六.子查询子查询 子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句中的WHERE 或 HAVING 子句内,或嵌套在其他子查询中的SELECT查询。 子查询可以嵌套,它能将比较复杂的查询分解为几个简单的查询。一个SELECTFROMWHERE语句称为一个查询块查询块。将一个查询块嵌套在另一个WHERE子句或HAVING短语的条件中的查询称为嵌套查询嵌套查询。50* SELECT class_name外部查询外部查询 FROM class WHERE class_id IN

41、 ( SELECT class_id 内部查询内部查询 FROM student (子查询)(子查询) WHERE student_name=张小云 ) 嵌套查询的执行顺序是:首先执行最底层的内部查询(即子查询),它的查询结果并不显示,而是传递给外层查询,用来做外外部查询的查询条件。即按照由里向外的顺序执行。 51*可以使用子查询的地方有: 在使用 IN 或NOT IN的集合查询中。在UPDATE、DELETE和INSERT语句中。在使用比较运算符时使用 ANY 或 ALL时。使用 EXISTS或NOT EXISTS 引入的存在测试时。在有表达式的地方。子查询的使用52* IN子查询是把子查询

42、的结果做为外部查询的条件。判断外部查询中的某个值是否属于子查询的结果集合。带谓词带谓词IN或或NOT IN的子查询的子查询【例例35】查找选修了1002号课程的学生的学号、姓名和班级编号。格式: NOT IN (子查询)SELECT student_id, student_name, class_idFROM studentWHERE student_id IN (SELECT student_id FROM score WHERE course_id=1002)53*当子查询返回的是单值时,子查询可以由一个比较运算符(=、=、!=或)引入。当子查询可能返回多个值时则应把比较运算符与ALL和A

43、NY结合使用。格式为:表达式 比较运算符 ALL|ANY (子查询) ALL:表示表达式要与子查询的结果集中的所以值进行比较,当表达式与每个值都满足比较关系时,才返回TRUE,否则返回FALSE。 ANY:表示表达式只要与子查询的结果集中的某个值满足比较关系时,就返回TRUE,否则返回FALSE。带有比较运算符的子查询带有比较运算符的子查询54*55*【例例36】查询选修了1001号课程且成绩比号学生1001号课程成绩高的学生的学号、课程编号和成绩。SELECT student_id, course_id, gradeFROM scoreWHERE course_id=1001 AND gra

44、de(SELECT grade FROM score WHERE student_id=0801103 AND course_id=1001)56* INSERT、DELETE和和UPDATE语句中的子查询语句中的子查询 子查询可以嵌套在INSERT、DELETE和UPDATE语句中,把子查询的结果插入到新表中或用来设置删除和修改记录的条件。 INSERT和SELECT语句结合起来,可以往指定的表中插入批量的记录。带子查询的插入操作的格式为:1带子查询的插入操作带子查询的插入操作INSERT INTO (,)SELECT (,)FROM WHERE57*2.带子查询的修改操作带子查询的修改操作

45、子查询与UPDATE嵌套,子查询用来指定修改的条件。【例例38】将08011班学生1001号课程的成绩增加5分。 UPDATE score SET grade=grade+5 WHERE student_id in (SELECT student_id FROM student WHERE class_id=08011)58*3.带子查询的删除操作带子查询的删除操作子查询与DELETE嵌套,子查询用来指定删除的条件。【例例39】删除没有选修1001号课程的学生记录。DELETE studentWHERE student_id not in (SELECT student_id FROM sco

46、re WHERE course_id=1001 )59* 允许引用外部查询中的任何表的子查询称为相关子查询 相关子查询在执行时,要使用到外部查询的数据。外部查询首先选择数据提供给子查询,然后子查询对数据进行比较,执行结束后再将查询结果返回到它的外部查询中。 相关子查询通常使用关系运算符与逻辑运算符(EXISTS、AND、SOME、ANY、ALL)。 EXISTS 代表存在。带有EXISTS量词的子查询不返回任何实际数据,它只产生逻辑真值TRUE或逻辑假值FALSE。若子查询结果非空,则外层的WHERE子句返回真值,否则返回假值。 EXISTS也与NOT结合使用,即NOT EXISTS,其返回值

47、与EXISTS刚好相反。 格式为:NOT EXISTS (子查询)相关子查询相关子查询60*【例例40】查询查询1001号课程的成绩小于该课程平均成绩的学生的学号和成绩。号课程的成绩小于该课程平均成绩的学生的学号和成绩。SELECT student_id, gradeFROM score aWHERE grade( SELECT AVG(grade) FROM score b WHERE a.course_id=b.course_id AND course_id= 1001 )61* UNION操作符操作符 UNION运算可以将两个或多个查询结果组合成一个结果集。使用UNION运算符组合的结果

48、集都必须具有相同的结构,他们输出的列的数目必须相同,并且相应的结果集列的数据类型必须兼容。语法格式为:SELECT 输出列表1 FROM 表名1UNION ALLSELECT 输出列表2 FROM 表名262* UNION的结果集列名与UNION运算符中第一个SELECT语句结果集中的列名相同。 在默认情况下,UNION运算符将从结果集中删除重复的行。如果使用ALL关键字,那么结果集中将包含所有行而不删除重复行。 如果使用UNION运算符,那么各个SELECT语句不能包含他们自己的ORDER BY或COMPUTE子句,而只能在最后一个SELECT语句的后面使用一个ORDER BY或COMPUTE子句;该子句适用于最终的组合结果集。63*【例例41】分别查询所有学生的分别查询所有学生的1001和和1002号课程的成绩,然后联合输出,并按号课程的成绩,然后联合输出,并按成绩的降序排列。成绩的降序排列。SELECT student_id, course_id, gradeFROM scoreWHERE course_id=1001UNION SELECT student_id, course_id, gradeFROM scoreWHERE course_id=1002ORDER BY grade DESC64*谢谢谢谢!65

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号