子查询
sql操作的dml语句中出现嵌套了select语句,这个select语句就是子查询;
总结:
1.select子查询放在括号当中
2.select、where、having的右边
3.子查询可以嵌套
4.子查询里不能有order by,外层的查询可以有order by
5.单行比较运算符,多行比较运算符
a.子查询分类
2.1 单行子查询 返回单行单列
2.2 多行子查询 返回一行记录以上
b.关联子查询和非关联子查询
sql操作的dml语句中出现嵌套了select语句,这个select语句就是子查询;
总结:
1.select子查询放在括号当中
2.select、where、having的右边
3.子查询可以嵌套
4.子查询里不能有order by,外层的查询可以有order by
5.单行比较运算符,多行比较运算符
a.子查询分类
2.1 单行子查询 返回单行单列
2.2 多行子查询 返回一行记录以上
b.关联子查询和非关联子查询
/**
子查询:嵌套在dml(insert,update,delete,select)
操作中的select语句
1.出现在括号里的查询;
2.子查询可以嵌套子查询
3.子查询的位置可以在 select/from/where/having的右边
*/
--分页查询
SELECT ROWNUM,e.* FROM emp e WHERE ROWNUM<8
MINUS
SELECT ROWNUM,e.* FROM emp e WHERE ROWNUM<3;
SELECT * FROM
(SELECT ROWNUM n,e.* FROM emp e)
WHERE n>2 AND n<8;
SELECT * FROM
(SELECT ROWNUM n,e.* FROM emp e WHERE ROWNUM<8)
WHERE n>2;
--子查询可以出现在select中
SELECT ename,
(SELECT dname FROM dept d WHERE d.deptno = e.deptno)
FROM emp e;
--单行子查询:子查询返回的结果是单行单列
--单行比较操作:=,<>,>,<,>=,<=
--部门名称为SALES的员工信息
SELECT * FROM emp WHERE deptno=
(SELECT deptno FROM dept
WHERE dname='SALES');
SELECT * FROM emp WHERE deptno IN
(SELECT deptno FROM dept
WHERE dname='SALES');
--多行子查询:
--多行比较运算:in, not in, exists,not exists,all,any
--部门所在地在DALLAS和NEW YORK的员工信息
SELECT * FROM emp WHERE deptno IN
(SELECT deptno FROM dept
WHERE loc = 'DALLAS'
OR loc = 'NEW YORK');
SELECT * FROM emp WHERE EXISTS
(SELECT * FROM dept
WHERE (loc = 'DALLAS'
OR loc = 'NEW YORK')
AND emp.deptno = dept.deptno);
SELECT * FROM emp WHERE EXISTS
(SELECT * FROM dept
WHERE loc IN ('DALLAS', 'NEW YORK')
AND emp.deptno = dept.deptno);
--大于部门20所有员工薪水的员工
-- >all 大于最大的
SELECT * FROM emp WHERE sal >ALL
(SELECT sal FROM emp WHERE deptno = 20);
-- <all 小于最小的
SELECT * FROM emp WHERE sal <ALL
(SELECT sal FROM emp WHERE deptno = 20);
-- >any 大于最小的
SELECT * FROM emp WHERE sal >ANY
(SELECT sal FROM emp WHERE deptno = 20);
-- <any 小于最大的
SELECT * FROM emp WHERE sal <ANY
(SELECT sal FROM emp WHERE deptno = 20);
--非关联子查询:子查询可以单独运行
--关联子查询: 子查询不可以单独运行
/**
如何选择in和exists?
大表 in 小表
小表 exsist 大表
*/

被折叠的 条评论
为什么被折叠?



