网络编程
位置:首页>> 网络编程>> Asp编程>> SQL子查询全接触(2)

SQL子查询全接触(2)

作者:dnawo  发布时间:2007-08-20 10:51:00 

标签:sql,查询,子查询

 
二、子查询类型
 
1.带in的嵌套查询
 


select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal in (select sal from scott.emp where ename=’’WARD’’); 


 上述语句完成的是查询薪水和WARD相等的员工,也可以使用not in来进行查询。
 
2.带any的嵌套查询
 



select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal >any(select sal from scott.emp where job=’’MANAGER’’); 


 等价于下边两步的执行过程:
(1)执行“select sal from scott.emp where job=’’MANAGER’’”
(2)查询到3个薪水值2975、2850和2450,父查询执行下列语句:



select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal >2975 or sal>2850 or sal>2450;


3.带some的嵌套查询


select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal =some(select sal from scott.emp where job=’’MANAGER’’);


等价于下边两步的执行过程:
(1)子查询,执行“select sal from scott.emp where job=’’MANAGER’’”。
(2)父查询执行下列语句。

select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal =2975 or  sal=2850 or sal=2450;

 
带【any】的嵌套查询和【some】的嵌套查询功能是一样的。早期的SQL仅仅允许使用【any】,后来的版本为了和英语的【any】相区分,引入了【some】,同时还保留了【any】关键词。
 
4.带all的嵌套查询
 



select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal >all(select sal from scott.emp where job=’’MANAGER’’); 


等价于下边两步的执行过程:
(1)子查询,执行“select sal from scott.emp where job=’’MANAGER’’”。
(2)父查询执行下列语句。


select emp.empno,emp.ename,emp.job,emp.sal from scott.emp where sal >2975 and sal>2850 and sal>2450;


5.带exists的嵌套查询
 


select emp.empno,emp.ename,emp.job,emp.sal from scott.emp,scott.dept where exists (select * from scott.emp where scott.emp.deptno=scott.dept.deptno);


6.并操作的嵌套查询
 
并操作就是集合中并集的概念。属于集合A或集合B的元素总和就是并集。


(select deptno from scott.emp) union (select deptno from scott.dept); 


7.交操作的嵌套查询
 
交操作就是集合中交集的概念。属于集合A且属于集合B的元素总和就是交集。


(select deptno from scott.emp) intersect (select deptno from scott.dept); 


8.差操作的嵌套查询
 
差操作就是集合中差集的概念。属于集合A且不属于集合B的元素总和就是差集。


(select deptno from scott.dept) minus (select deptno from scott.emp);


 并、交和差操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com