第6章数据库查询_第1页
第6章数据库查询_第2页
第6章数据库查询_第3页
第6章数据库查询_第4页
第6章数据库查询_第5页
已阅读5页,还剩95页未读 继续免费阅读

下载本文档

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

文档简介

1、.第六章第六章 数据库的查询数据库的查询 .本章重点本章重点lSELECT语句的使用语句的使用l使用使用SELECT语句进行简单的查询语句进行简单的查询l使用使用SELECT语句进行分组筛选和语句进行分组筛选和汇总计算汇总计算l使用使用SELECT语句进行连接查询语句进行连接查询l使用使用SELECT语句进行子查询语句进行子查询.本章难点本章难点l使用使用SELECT语句进行连接查询语句进行连接查询l使用使用SELECT语句进行连子查询语句进行连子查询lGROUP BY语句的使用语句的使用l使用使用HAVING子句对分组数据的进一步筛选子句对分组数据的进一步筛选.6.1 SELECT语句概述语

2、句概述lSELECT 从表中检索数据从表中检索数据 可以是简单或条件可以是简单或条件 SELECT 选择表中所有列的数据选择表中所有列的数据 SELECT * FROM table_name; 选择表中指定列的数据选择表中指定列的数据SELECT colname1, colname2, , colnamen FROM table_name; .6.1.2 SELECT语句的执行语句的执行l使用企业管理器使用企业管理器l使用查询分析器使用查询分析器 .6.2 简单查询简单查询l简单查询是按照一定的查询条件在单表简单查询是按照一定的查询条件在单表上查询数据,并对查询结果排序和保存上查询数据,并对查

3、询结果排序和保存1、选择表中指定的列使用SELECT语句选择一个表中的某些列进行查询,要在SELECT后写出要查询的字段名,并用逗号分隔,服务器将按照SELECT后给出的列的顺序显示满足查询条件的列。.6.2 简单查询简单查询例题6.1 查询XS数据库的XSDA表中所有学生的姓名、性别、系名和总学分。USE XSSELECT 姓名,性别,系名,总学分FROM XSDAGO.6.2 简单查询简单查询例题6.2 查询XSDA表中所有学生的所有列的信息。USE XSSELECT *FROM XSDAGO.6.2 简单查询简单查询2、指定列的别名(修改查询结果中的列标题)当希望查询结果中的某些列不显示

4、表结构中规定的列标题,而使用用户自己另外选择的列标题时,可以在列名之后用AS子句更改查询结果中列标题名。.6.2 简单查询简单查询例题6.3 查询XSDA表中所有学生的学号、姓名、查询结果中要求各列的标题分别指定为number和name.1、 别名 别名SELECT 学号 AS number,姓名 AS nameFROM XSDA2、 SELECT 学号 number,姓名 nameFROM XSDA 别名 别名3、 SELECT number=学号,name=姓名FROM XSDAGO.6.2 简单查询简单查询2、修改查询结果中的列标题注意:注意:当自定义的列标题中含有空格时,必须使用单引号

5、将标题括起来。例如:USE XSSELECT student number=学号,姓名 AS student nameFROM XSDAGO.6.2 简单查询简单查询3、查询导出列(计算列值)Select子句中的列表达式不仅可以是表中的属性列,也可以是通过计算得到的列,称为导出列。一般情况下,导出列是通过运算符和函数得到的表达式例题6.4 假设XSCJ表中所有学生的成绩均为期未考试成绩,计算总成绩时,只占80%,要求按照公式:期未成绩成绩0.8USE XSSELECT 学号,课程编号,期未成绩成绩0.8FROM XSCJGO.6.2 简单查询简单查询4.消除结果集中的重复行消除结果集中的重复行

6、对表只选择某些列时,可能会出现重复行,可对表只选择某些列时,可能会出现重复行,可以使用以使用DISTINCT关键字消除结果集中的重复关键字消除结果集中的重复行。行。.DISTINCT 子句子句l查找查找 employeestatistic 表中职位的唯一性列表表中职位的唯一性列表 S E L E C T D I S T I N C T p o s i t i o n F R O M employeestatistics l结果将显示为结果将显示为position-ManagerStaffEntry-level EmployeestatisticsEmployeeidnoSalaryBenefi

7、tsPosition0107500015000Manager1056500015000Manager3004500010000Staff2445000012000Staff441280007500Entry-Level.DISTINCT 子句子句l与与DISTINCT相反,当使用关键字相反,当使用关键字ALL时,时,将保留结果集中的所有行。当将保留结果集中的所有行。当SELECT语语句中省略句中省略ALL与与DISTINCT时,默认值为时,默认值为ALL.DISTINCT 子句子句例例6.5 查询查询XSDA表中所有学生的性别和系名。表中所有学生的性别和系名。USE XSSELECT ALL

8、性别,系名性别,系名FROM XSDAGO或或USE XSSELECT 性别,系名性别,系名FROM XSDAGO.5.使用使用TOP n指定返回查询结果的前指定返回查询结果的前n行记录行记录l例例6.6:select TOP 4 * FROM sales6.2 简单查询简单查询.N是一个正整数,表示返回查询结果集的前是一个正整数,表示返回查询结果集的前N行。若带行。若带PERCENT关键字,则表示返回结果集的前关键字,则表示返回结果集的前n%行行TOP N PERCENT例题例题6.7 查询查询XSCJ表中所有学生的学号、课程编号和表中所有学生的学号、课程编号和成绩,只返回结果集的前成绩,只

9、返回结果集的前10%行。行。USE XSSELECT TOP 10 PERCENT 学号,课程编号,学号,课程编号,成绩成绩FROM XSCJGO6.2 简单查询简单查询.l使用使用 WHERE WHERE 子句来指定条件子句来指定条件 SELECT SELECT 语句,限制返回的数据行语句,限制返回的数据行lWHEREWHERE子句用于指定搜索条件,过滤不子句用于指定搜索条件,过滤不符合查询条件的数据记录,使用比较灵符合查询条件的数据记录,使用比较灵活而且复杂。可以使用的条件包括比较活而且复杂。可以使用的条件包括比较运算,逻辑运算,范围,模糊匹配以及运算,逻辑运算,范围,模糊匹配以及未知值等

10、未知值等6.2.2 WHERE子句子句.比较表达式作查询条件比较表达式作查询条件运算符运算符意义意义= =等于等于 小于小于= 大于大于=大于或等于大于或等于 或或 != !=不等于不等于使用比较运算符可以让表中的值与指定值或表达式使用比较运算符可以让表中的值与指定值或表达式作比较作比较.比较表达式作查询条件的示例比较表达式作查询条件的示例1 1、SELECT employeeidno FROM employeestatistics SELECT employeeidno FROM employeestatistics WHERE salary = 50000; WHERE salary =

11、50000; 2 2、WHEREWHERE描述语句称为条件。条件同样可用于文本列。例如描述语句称为条件。条件同样可用于文本列。例如SELECT employeeidno FROM employeestatistics WHERE position = SELECT employeeidno FROM employeestatistics WHERE position = Manager;Manager;3 3、语句中出现的的任何文本都要用单引号括起来。注意语句中出现的的任何文本都要用单引号括起来。注意WHEREWHERE子句中子句中ManagerManager的值是区分大小写的,需要和在表中存

12、储的方式相匹配的值是区分大小写的,需要和在表中存储的方式相匹配EmployeestatisticsEmployeeidnoSalaryBenefitsPosition0107500015000Manager1056500015000Manager3004500010000Staff2445000012000Staff441280007500Entry-Level.逻辑表达式作查询条件逻辑表达式作查询条件逻辑运算符优先顺序逻辑运算符优先顺序lNOTlANDlOR.逻辑运算符逻辑运算符 lAND AND 运算符运算符 连接两个或多个条件,显示满足所有条件的所连接两个或多个条件,显示满足所有条件的所

13、有行有行SELECT employeeidno FROM SELECT employeeidno FROM employeestatistics WHERE salary 40000 employeestatistics WHERE salary 40000 AND position = StaffAND position = StafflOR OR 运算符运算符 连接两个或多个条件,显示至少满足一个条件连接两个或多个条件,显示至少满足一个条件的所有行的所有行SELECT employeeidno FROM SELECT employeeidno FROM employeestatistics

14、 WHERE salary 40000 employeestatistics WHERE salary 40000 OR benefits 10000OR benefits =75.HAVING 子句子句l如果要查询购买的商品超过两件的购买者购买如果要查询购买的商品超过两件的购买者购买的商品数目,必须引入的商品数目,必须引入COUNT(item)2SELECT buyerid , COUNT(item) AS items FROM toys GROUP BY buyerid HAVING COUNT(item) 2 .分组筛选分组筛选l注意在注意在SELECT语句中,当语句中,当WHERE、G

15、ROUP BY与与HAVING子名同时被使用子名同时被使用时,要注意它们的作用和执行顺序:时,要注意它们的作用和执行顺序:WHERE用于筛选由用于筛选由FROM指定的数据对指定的数据对象,即从象,即从FROM指定的基表或视图中检指定的基表或视图中检索满足条件的记录;索满足条件的记录;GROUP BY 用于用于WHERE的筛选结果进行分组;的筛选结果进行分组;HAVING则是对使用则是对使用GROUP BY分组以后的数据分组以后的数据进行过滤。进行过滤。.分组筛选分组筛选l例例6.15 查找选修课超过查找选修课超过3门,并且成绩在门,并且成绩在90分以上的学生的学号。分以上的学生的学号。USE

16、XSSELECT 学号学号FROM XSCJ WHERE 成绩成绩90GROUP BY 学号学号HAVING COUNT( * )3GO注:注:1 1、goup by goup by 是对是对wherewhere条件筛选后的结果进行条件筛选后的结果进行分组,所以分组,所以group bygroup by放放在在wherewhere后面后面2 2、havinghaving是对分组后的是对分组后的结果进行筛选,所以结果进行筛选,所以having having 出现在出现在group bygroup by后面后面.计算与汇总计算与汇总l计算与汇总是生成合计作为附加的汇总行出现计算与汇总是生成合计作为

17、附加的汇总行出现在结果集的最后。在结果集的最后。l例例6.16 查找信息系所有男生的学号、姓名、查找信息系所有男生的学号、姓名、性别和系名,并产生一个学生总人数行。性别和系名,并产生一个学生总人数行。USE XSSELECT 学号学号,姓名姓名,性别性别,系名系名FROM XSDAWHERE 系名系名=信息信息 AND 性别性别1COMPUTE CONUNT(学号学号).计算与汇总计算与汇总l例例6.17 将学生按系名排序,并汇总各系将学生按系名排序,并汇总各系的人数和总学分的平均值。的人数和总学分的平均值。USE XSSELECT 学号学号,姓名姓名,系名系名,总学分总学分FROM XSDA

18、ORDER BY 系名系名COMPUTE COUNT(学号学号), AVG(总总学分学分) BY 系名系名GO.计算与汇总计算与汇总l注意注意lCOMPUTE或或COMPUTE BY子句中的表达式,子句中的表达式,必须出现在选择列表中,并且必须将其指定必须出现在选择列表中,并且必须将其指定为与选择列表中的某个表达式完全一样,不为与选择列表中的某个表达式完全一样,不能使用在选择列表中指定的列的别名。能使用在选择列表中指定的列的别名。COMPUTE或或COMPUTE BY子句中,不能指子句中,不能指定为定为ntext、text、image数据类型。数据类型。.计算与汇总计算与汇总l如果使用如果使用

19、COMPUTE BY,则必须也使用,则必须也使用ORDER BY子句。表达式必须与在子句。表达式必须与在ORDER BY后列出的子后列出的子句相同或是其子集,并且必须按相同的序列。例如,句相同或是其子集,并且必须按相同的序列。例如,如果如果ORDER BY子句是子句是ORDER BY a,b,c ,则,则COMPUTE子句可以是下面的任意一个(或全部);子句可以是下面的任意一个(或全部);lCOMPUTE BY a,b,c lCOMPUTE BY a,b lCOMPUTE BY a l在在SELECT INTO 语句中不能使用语句中不能使用COMPUTE。因。因此,任何由此,任何由COMPUT

20、E生成的计算结果不出现在用生成的计算结果不出现在用SELECT INTO语句创建的新表内语句创建的新表内.连接查询连接查询l连接查询是关系数据库中最主要的查询方式,连接查询是关系数据库中最主要的查询方式,连接查询的目的是通过加载连接字段条件将多连接查询的目的是通过加载连接字段条件将多个表连接起来,以便从多个表中检索用户所需个表连接起来,以便从多个表中检索用户所需要的数据。要的数据。l在在T-SQL语句中,连接查询有两个大类表示形语句中,连接查询有两个大类表示形式,一类是符合式,一类是符合SQL标准连接谓词的表示形式,标准连接谓词的表示形式,另一类是另一类是T-SQL扩展使用的关键字扩展使用的关

21、键字JOIN的表示的表示形式。形式。.连接谓词连接谓词l可以在可以在SELCET语句的语句的WHERE子句中使用比较运算符子句中使用比较运算符给出连接条件对表进行连接,这种表示形式被称为连给出连接条件对表进行连接,这种表示形式被称为连接谓词表示形式。接谓词表示形式。l例例6.18 查找查找XS数据库中每个学生的情况以及选修的课数据库中每个学生的情况以及选修的课程情况。程情况。SELECT 学生档案学生档案.*,学生成绩学生成绩.*FROM 学生档案学生档案, 学生成绩学生成绩WHERE 学生档案学生档案.学号学号=学生成绩学生成绩.学号学号.连接谓词连接谓词SELECT 学生成绩学生成绩.学号

22、学号,姓名姓名,分数分数FROM 学生档案学生档案, 学生成绩学生成绩WHERE 学生档案学生档案.学号学号=学生成绩学生成绩.学号学号.连接谓词连接谓词l注意:连接谓词中的两个列(即字段)称为连注意:连接谓词中的两个列(即字段)称为连接字段,他们必须是可比的。例如,本例中连接字段,他们必须是可比的。例如,本例中连接谓词中的两个字段分别是接谓词中的两个字段分别是XSDA表和表和XSCJ表中的学号字段。表中的学号字段。l连接谓词中的比较运算符可以是连接谓词中的比较运算符可以是“”、“”、“=”、“!=”、“”、“!”,当比较运算符是当比较运算符是“=”时,就是等值连接。时,就是等值连接。若在目标

23、列中去除相同的字段名,则为自然连若在目标列中去除相同的字段名,则为自然连接。接。.连接谓词连接谓词l例例6.19 对例对例6.28进行自然连接查询进行自然连接查询USE XSSELECT XSDA.*, XSCJ.课程编号课程编号,XSCJ.成绩成绩FROM XSDA,XSCJWHERE XSDA.学号学号=XSCJ.学号学号GO.连接谓词连接谓词l例例6.20 查找选修软件工程课程并且成绩优秀的查找选修软件工程课程并且成绩优秀的学生的姓名及成绩。学生的姓名及成绩。SELECT 姓名姓名,分数分数 FROM 学生档案学生档案,学生成绩学生成绩WHERE 学生档案学生档案.学号学号=学生成绩学生

24、成绩.学号学号 AND 课程课程=软件工程软件工程 AND 分数分数=90.连接谓词连接谓词l例例6.21 查找选修了查找选修了“计算机文化基础计算机文化基础”课程并课程并且成绩优秀的学生的学号、姓名、课程名称及且成绩优秀的学生的学号、姓名、课程名称及成绩。成绩。USE XSSELECT XSDA.学号学号,姓名姓名,课程名称课程名称,成绩成绩FROM XSDA,KCXX,XSCJWHERE XSDA,学号学号=XSCJ.学号学号 AND KCXX.课程编号课程编号=XSCJ.课程编号课程编号 AND 课程名课程名称称=计算机文化基础计算机文化基础 AND 成绩成绩=90GO.JOIN关键字指

25、定的连接关键字指定的连接lT-SQL扩展使用的关键字扩展使用的关键字JOIN指定连接的表示方式,指定连接的表示方式,使表的连接运算能力得到增强。以使表的连接运算能力得到增强。以JOIN关键字指定的关键字指定的连接有以下连接有以下3种类型。种类型。l内连接内连接l内连接是按照内连接是按照ON所指定的连接条件合并两个表,所指定的连接条件合并两个表,返回满足条件的行。返回满足条件的行。l例例6.22 查找查找XS数据库中每个学生的情况以及选修的课数据库中每个学生的情况以及选修的课程情况。程情况。USE XSSELECT *FROM XSDA INNER JOIN XSCJ ON XSDA.学号学号=

26、XSCJ.学号学号GO.1 1、内联接、内联接l学生表学生表:学号学号姓名姓名性别性别出生时间出生时间班级编号班级编号1汪萍汪萍女女78-09-0112刘一章刘一章男男79-02-2313马迎春马迎春女女79-09-1214刘志清刘志清男男78-09-1215刘力刘力女女79-05-121班级编号班级编号班级名称班级名称学院学院人数人数专业专业1网络网络1计算机计算机32网络网络2计算机计算机1计算机计算机32计算机计算机l班级表班级表:.1 1、内联接、内联接lSELECT 学号学号, 学生姓名学生姓名, 性别性别, 出生时间出生时间, 班级名称班级名称, 所在学所在学院院, 专业名称专业名

27、称 FROM 学生学生,班级班级 WHERE 学生学生.班级编号班级编号=班班级级.班级编号班级编号 .1 1、内联接、内联接l这是这是JOIN最常见用法最常见用法,称为内连接称为内连接,在运行后在运行后,上面的语句会变成如下格式上面的语句会变成如下格式,系统会自动增加系统会自动增加部分语句部分语句: SELECT 学号学号, 学生姓名学生姓名, 性别性别, 出生时间出生时间, 班班级名称级名称, 所在学院所在学院, 专业名称专业名称 FROM 学生学生 INNER JOIN 班级班级 ON 学生学生.班级编号班级编号=班级班级.班级编号班级编号l内连接是仅当至少有一个同属于两表的数据行内连接

28、是仅当至少有一个同属于两表的数据行符合连接条件时符合连接条件时,才返回数据行才返回数据行.内连接消除了内连接消除了与另一张表中的任何不匹配的行与另一张表中的任何不匹配的行.2、左外连接、左外连接左外连接左外连接(LEFT OUTER JOIN):返回参与联接查询返回参与联接查询的表中所有匹配的行和所有来自左表(第一张表)的表中所有匹配的行和所有来自左表(第一张表)的不符合指定条件的行的不符合指定条件的行左外连接的步骤:左外连接的步骤: 1、取出第一张表和第二张表所有匹配的行、取出第一张表和第二张表所有匹配的行 2、取出存在于第一张表中但与第二张表中的记录、取出存在于第一张表中但与第二张表中的记

29、录没有匹配关系的记录,第二张表中没有匹配的列用没有匹配关系的记录,第二张表中没有匹配的列用NULL填充(取出第一张表中剩下的所有记录,第填充(取出第一张表中剩下的所有记录,第二张表的字段用二张表的字段用NULL填充)填充) .2、左外连接、左外连接.2、左外连接、左外连接ANSI语法实现语法实现SELECT 学生学生.学生姓名学生姓名,学学生生.性别性别,班级班级.班级名称班级名称FROM 学生学生 where学生学生.班级编号班级编号*=班级班级.班级编号班级编号.2、左外连接、左外连接Program Student .2、左外连接、左外连接用用SQL语句说明语句说明Left Outer J

30、OINSELECT gram_name, program.course_no, program.grade_points, student.student_name, student.course_no FROM program left outer join student on program.course_no=student.course_no.3、右外连接、右外连接 (RIGHT OUTER JOIN):返回参与联接查询的表中所有返回参与联接查询的表中所有匹配的行和所有来自右表(第二张表)的不符合指定匹配的行和所有来自右表(第二张表)的不符合指定条件的行条件的行

31、右外连接的步骤:右外连接的步骤: 1、取出第一张表和第二张表所有匹配的行、取出第一张表和第二张表所有匹配的行 2、取出存在于第二张表中但与第一张表中的记录没、取出存在于第二张表中但与第一张表中的记录没有匹配关系的记录,第一张表中没有匹配的列用有匹配关系的记录,第一张表中没有匹配的列用NULL填充(取出第二张表中剩下的所有记录,第一填充(取出第二张表中剩下的所有记录,第一张表的字段用张表的字段用NULL填充)填充) .3、右外连接、右外连接.3、右外连接、右外连接.3、右外连接、右外连接Program Student .3、右外连接、右外连接l用用SQL语句说明语句说明Right Outer J

32、OINSELECT gram_name, program.course_no, program.grade_points, student.student_name, student.course_no FROM program right outer join student on program.course_no=student.course_no.4、完全外连接、完全外连接l根据根据 JOIN 条件中指定的基于值的等价条条件中指定的基于值的等价条件,将第一张表中的记录与第二张表中的件,将第一张表中的记录与第二张表中的记录进行映射记录进行映射 l这个这个 JOIN

33、是是 Left Outer JOIN 和和 Right Outer JOIN 的组合的组合 l包括不满足基于等价条件的所有记录包括不满足基于等价条件的所有记录 .4、完全外连接、完全外连接.4、完全外连接、完全外连接.4、完全外连接、完全外连接staff_name.4、完全外连接、完全外连接l用用SQL语句说明语句说明Left Outer JOINSELECT gram_name, program.course_no, program.grade_points, student.student_name, student.course_no FROM program fu

34、ll outer join student on program.course_no= student.course_no.交叉连接交叉连接l交叉连接没有交叉连接没有ON子句,也不允许带有子句,也不允许带有WHERE子句,它返回查询对象中所有行的笛卡尔积,子句,它返回查询对象中所有行的笛卡尔积,查询结果的数据行数为每个查询对象所含数查询结果的数据行数为每个查询对象所含数据行的乘积据行的乘积.自连接自连接l连接操作不仅可以在不同的表上进行,也可以连接操作不仅可以在不同的表上进行,也可以在同一张表内进行自身连接,即将同一个表的在同一张表内进行自身连接,即将同一个表的不同行连接起来。自连接可以看作一

35、张表的两不同行连接起来。自连接可以看作一张表的两个副本之间的连接。若要在一个表中查找具有个副本之间的连接。若要在一个表中查找具有相同列值的行,则可以使用自连接,使用自连相同列值的行,则可以使用自连接,使用自连接时需要为表指定两个别名,使之逻辑上成为接时需要为表指定两个别名,使之逻辑上成为两张表。对所有列的引用均要用别名限定。两张表。对所有列的引用均要用别名限定。.自连接自连接l例例 6.23 在表中查找出与学号为在表中查找出与学号为09w1在同一个班在同一个班的学生的姓名和学号的学生的姓名和学号SELECT XSDA1.姓名姓名,XSDA1.学号学号 FROM 学生信息学生信息 AS XSDA

36、1 JOIN 学生信息学生信息 AS XSDA2 ON XSDA1.班级号班级号=XSDA2.班级号班级号 WHERE XSDA2.学号学号=09w1 and XSDA1.学号学号XSDA2.学号学号 .6.5嵌套查询嵌套查询(子查询子查询)l嵌套查询概述嵌套查询概述 一个SELECT-FROM-WHERE语句称为一个查询块 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询 . SELECT 姓名姓名外层查询外层查询/父查询父查询 FROM 学生档案学生档案 WHERE 学号学号 IN (SELECT 学号学号 内层查询内层查询/子查询子查询 FROM

37、 班级信息班级信息 WHERE 班级号班级号= w2 ););6.5嵌套查询嵌套查询(子查询子查询).6.5嵌套查询嵌套查询l不相关子查询不相关子查询子查询的查询条件不依赖于父查询l相关子查询相关子查询子查询的查询条件依赖于父查询分类:.l不相关子查询不相关子查询是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。6.5嵌套查询嵌套查询.v 子查询子查询 1、带有、带有IN运算符的子查询运算符的子查询操作符操作符IN用于用于WHERE子句中时,通常用来确定某子句中时,通常用来确定某个属性列的值是否包含在一个表达式或者常量的集合中个属性列的值是否包含

38、在一个表达式或者常量的集合中。同样,操作符。同样,操作符IN也可以用于子查询,用来确定某个列也可以用于子查询,用来确定某个列值是否在内部查询的结果集中。值是否在内部查询的结果集中。在带有在带有IN运算符的子查询中,子查询的结果是一个运算符的子查询中,子查询的结果是一个结果集。结果集。6.5嵌套查询嵌套查询.v 子查询子查询 1 1、带有、带有ININ运算符的子查询运算符的子查询在执行包含子查询的在执行包含子查询的selectselect语句时,系统先执行子查询,产语句时,系统先执行子查询,产生一个结果表,在执行外层查询。生一个结果表,在执行外层查询。例例6.24:查找选修了:查找选修了软件工程

39、软件工程课程的学生情况。课程的学生情况。此查询要求可以分步来完成此查询要求可以分步来完成 确定选修了软件工程课程学生的学号确定选修了软件工程课程学生的学号 SELECT 学号学号 FROM 学生成绩学生成绩 where 课程课程=软件工程软件工程 6.5.1带有带有IN谓词的子查询谓词的子查询运行结果:学号学号14.SELECT * FROM学生档案学生档案 WHERE 学号学号 IN(SELECT 学号学号 FROM 学学生成绩生成绩 where 课程课程=软件软件工程工程)6.5.1带有带有IN谓词的子查询谓词的子查询 SELECT * FROM 学生档案学生档案 WHERE 学号学号 I

40、N( 1, 4)l显示学生的详细信息,将第一步查询嵌入到第二步查询的条件中显示学生的详细信息,将第一步查询嵌入到第二步查询的条件中等价于等价于.select * from xsdawhere 学号学号 not in(select 学号学号FROM xscj)布置学生思考:查询未选修任何课程的学生情况布置学生思考:查询未选修任何课程的学生情况6.5.1带有带有IN谓词的子查询谓词的子查询P275 4.P275 4.如何按照上例写代码。如何按照上例写代码。.例例6.25 查询选修了课程名为查询选修了课程名为“数据结构数据结构”的学生学号和姓名的学生学号和姓名 SELECT 学号学号,姓名姓名 最后

41、在最后在xsda关系中关系中 FROM xsda 取出学号和姓名取出学号和姓名WHERE 学号学号 IN (SELECT 学号学号 然后在然后在xscj关系中找出选关系中找出选 FROM xscj 修了修了104号课程的学生学号号课程的学生学号 WHERE 课程编号课程编号 IN (SELECT 课程编号课程编号 首先在首先在kcxx关系中找出关系中找出“数据结数据结构构 FROM kcxx”的课程号,结果为的课程号,结果为104 WHERE 课程名称课程名称= 数据结构数据结构)6.5.1带有带有IN谓词的子查询谓词的子查询.v带有比较运算符的子查询带有比较运算符的子查询 在带有比较运算符的

42、子查询中,子查询的结在带有比较运算符的子查询中,子查询的结果是一个单值。父查询通过比较运算符将果是一个单值。父查询通过比较运算符将“父查父查询询”中的表达式与子查询结果(单值)进行比较中的表达式与子查询结果(单值)进行比较,如果相等运算的结果为,如果相等运算的结果为TRUE,否则返回,否则返回FALSE。常用的比较运算符有:常用的比较运算符有: ,= , ,= ,= , ,!= ,! ,!(select avg(成绩成绩) from xscj where 课程编号课程编号=104)列出选修了列出选修了104号课程,且成绩高于该课程号课程,且成绩高于该课程平均分的学生信息。?平均分的学生信息。?

43、.谓词语义谓词语义ANY:任意一个值:任意一个值ALL:所有值:所有值使用使用ANY 或或ALL 运算符时,必须同时使用比较运算符。在运算符时,必须同时使用比较运算符。在带有带有ANY 或或ALL运算符的子查询中,子查询的结果是一个运算符的子查询中,子查询的结果是一个结果集。父查询通过结果集。父查询通过ANY(或或ALL)运算符将运算符将“父查询父查询”中中的一个表达式与子查询结果集中的每一个值进行比较,如的一个表达式与子查询结果集中的每一个值进行比较,如果相等运算后结果为果相等运算后结果为TRUE,否则返回,否则返回FALSE。带有带有ANY或或ALL谓词的子查询谓词的子查询6.5.2比较子

44、查询比较子查询.需要配合使用比较运算符 ANY大于子查询结果中的某个值大于子查询结果中的某个值 ALL大于子查询结果中的所有值大于子查询结果中的所有值 ANY小于子查询结果中的某个值小于子查询结果中的某个值 = ANY大于等于子查询结果中的某个值大于等于子查询结果中的某个值 = ALL大于等于子查询结果中的所有值大于等于子查询结果中的所有值= ANY小于等于子查询结果中的某个值小于等于子查询结果中的某个值 = ALL小于等于子查询结果中的所有值小于等于子查询结果中的所有值= ANY等于子查询结果中的某个值等于子查询结果中的某个值 =ALL等于子查询结果中的所有值(通常没有实际意义)等于子查询结果中的所有值(通常没有实际意义)!=(或(或)ANY不等于子查询结果中的某个值不等于子查询结果中的某个值!=(或(或)ALL不等于子查询结果中的任何一个值不等于子查询结果中的任何一个值6.5.2比较子查询比较子查询带有带有ANY或或ALL谓词的子查询谓词的子查询.带有带有ANY 或或ALL运算符的

温馨提示

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

评论

0/150

提交评论