用SQL进行嵌套查询.doc_第1页
用SQL进行嵌套查询.doc_第2页
用SQL进行嵌套查询.doc_第3页
用SQL进行嵌套查询.doc_第4页
用SQL进行嵌套查询.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

用SQL进行嵌套查询在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块WHERE字句或者HAVING短语的条件中的查询中称为嵌套查询。上层的查询块称为外层查询或者父查询,下层的查询块称为内层查询或者子查询。子查询可以嵌套多层,即一个查询中还可以嵌套其他的查询。子查询中不能有Order BY分组语句,该语句只能对最终的查询结果进行排序。1.简单嵌套查询语句范例 :select 单价表.客户, 单价表.产品名, 单价表.单价;from 单价表;where 单价表.产品名 = (select 产品表.产品名;from 产品表 ;where 产品表.产品ID = 102-5000)说明:查询得到单价表里满足产品名为产品表里产品ID为“102-5000”的产品的相关信息2.带【in】的嵌套查询 在嵌套的查询中,子查询的结果往往是一个集合,所以谓词in是嵌套查询中最长使用的谓词。语句范例 :1. 查询与刘晨同在一个计算机系的学生。-select Sno,Sname,Sage from Student where Sdept in (select Sdept from Student where Sname=刘晨)2.查询选修了课程名为信息系统的学生的学号和姓名。-select Sno,Sname from Student where Sno in - (select Sno from SC where Cno in - (select Cno from Course where Cname=信息系统)select 雇员表.雇员编号, 雇员表.姓名, 雇员表.职位, 雇员表.薪水;from 雇员表 ;where 薪水 in (select 薪水 from 雇员表 where 姓名=张三)说明:查询得到雇员表里满足薪水符合姓名为张三的薪水的所有雇员的相关信息,比如 in(1000,1500,2000)表示薪水=1000或1500或2000的情况。注:此语句完成的查询薪水和张三相等的职员,也可以使用【not in】来进行相反的查询3.带【any】的嵌套查询子查询返回单值时可以用比较运算符,但是当返回多个值时,需要用ANY(有的系统用SOME)或ALL谓词的修饰符。而使用ANY,ALL谓词是必须使用比较运算符。其语意为:查询其他系中比计算机系某一学生年龄小的学生年龄和姓名。Select Sname,Sage from Student where Sage any (select 薪水 from 雇员表 where 职务=工程师)说明:查询得到薪水比职务为工程师的薪水都要高的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为薪水2000 or 薪水1500 or 薪水10004.带【some】的嵌套查询语句范例 :select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水;from 雇员表;where 薪水= some (select 薪水 from 雇员表 where 职务=工程师)说明:查询得到薪水和职务为工程师的薪水一样的职员信息,也就是和任意一个工程师的薪水相等的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为薪水=2000 or 薪水=1500 or 薪水=1000。带【any】的嵌套查询和【some】的嵌套查询功能是一样的。早期的SQL仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留了【any】关键词。5.带【all】的嵌套查询语句范例 :select 雇员表.雇员编号,雇员表.姓名, 雇员表.职务, 雇员表.薪水;from 雇员表;where 薪水 all (select 薪水 from 雇员表 where 职务=工程师)说明:查询得到薪水比任一工程师薪水都要高的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为薪水2000 and 薪水1500 and 薪水1000。6.带【exists】的嵌套查询Exists 代表存在谓词 。带有exists谓词的子查询不返回任何数据,只产生逻辑值”true”或逻辑值“false”。 例:查询选修了全部课程的学生姓名。 SQL中没有全称量词(FOR ALL)。但是,我们总是可以把带有全称量词的谓词转换成为等价的带有存在量词的: 由于没有全称量词,可以将题目中的意思转换成等价的用存在量词的形式:查询这样的学生,没有一门课程是他不选修的。其SQL语句为: select Sno,Sname from Student where not exists(select * from Course where not exists (select * from SC where Sno=Student.Sno and Cno=Course.Cno) )语句范例 :select 雇员表.雇员编号, 雇员表.姓名, 雇员表.职务, 雇员表.薪水;from 雇员表, 部门表 ;where exists (select * ;from 雇员表 ;where 雇员表.部门编号 = 部门表.部门编号)说明:查询得到雇员表和部门表的部门编号相匹配的所有雇员信息。7.并操作【union】的嵌套查询语句范例 :(select 部门编号 from 雇员表) union (select 部门编号 from 部门表)说明:并操作就是集合中并集的概念。属于集合A或集合B的元素的总和就是并集。注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。8.交操作【intersect】的嵌套查询语句范例 :(select 部门编号 from 雇员表) intersect (select 部门编号 from 部门表)说明:交操作就是集合中交集的概念。属于集合A且属于集合B的元素的总和就是交集。注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。9.差操作【minus】的嵌套查询语句范例 :(select 部门

温馨提示

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

评论

0/150

提交评论