本节内容:
SQL嵌套查询的综合实例。
在SELECT查询语句里可以嵌入SELECT查询语句,称为嵌套查询。
有些书上将内嵌的SELECT语句称为孒查询,子查询形成的结果又成为父查询的条件。
子查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。
子查询中不能有Group BY分组语句。
1.简单嵌套查询
范例 :
说明:
查询得到单价表里满足产品名为产品表里产品ID为“102-5000”的产品的相关信息
2.带【in】的嵌套查询
范例 :
说明:
查询得到雇员表里满足薪水符合姓名为张三的薪水的所有雇员的相关信息,比如 in(1000,1500,2000)表示薪水=1000或1500或2000的情况。
注:此语句完成的查询薪水和张三相等的职员,也可以使用【not in】来进行相反的查询
3.带【any】的嵌套查询
范例 :
说明:
查询得到薪水比职务为工程师的薪水要高的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为"薪水>2000 or 薪水>1500 or 薪水>1000"
4.带【some】的嵌套查询
范例 :
说明:
查询得到薪水和职务为工程师的薪水一样的职员信息,也就是和任意一个工程师的薪水相等的职员信息。
例如,子查询结果为(2000,1500,1000),父查询的条件为"薪水=2000 or 薪水=1500 or 薪水=1000"。
带【any】的嵌套查询和【some】的嵌套查询功能是一样的。早期的SQL仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留了【any】关键词。
5.带【all】的嵌套查询
范例 :
说明:
查询得到薪水比任一工程师薪水都要高的职员信息。例如子查询结果为(2000,1500,1000),父查询的条件为"薪水>2000 and 薪水>1500 and 薪水>1000"。
6.带【exists】的嵌套查询
范例 :
说明:
查询得到雇员表和部门表的部门编号相匹配的所有雇员信息。
7.并操作【union】的嵌套查询
范例 :
说明:
并操作就是集合中并集的概念。属于集合A或集合B的元素的总和就是并集。
注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。
8.交操作【intersect】的嵌套查询
范例 :
说明:
交操作就是集合中交集的概念。属于集合A且属于集合B的元素的总和就是交集。
注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。
9.差操作【minus】的嵌套查询
范例 :
说明:
差操作就是集合中差集的概念。属于集合A(前一个孒查询结果)且不属于集合B(后一个孒查询结果)的元素的总和就是差集。
注:该操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。