SQL高级查询

本文详细介绍了SQL中的高级查询技术,包括子查询的应用,如在WHERE、HAVING、FROM子句中的使用,以及子查询的不同类型。此外,还讨论了分页查询,包括ROWNUM的使用、分页查询的注意事项和DECODE与CASE语句。最后,文章涵盖了排序函数(ROW_NUMBER、RANK、DENSE_RANK)以及集合操作(UNION、UNION ALL、INTERSECT、MINUS)和高级分组函数(ROLLUP、CUBE、GROUPING SETS)的用法。
摘要由CSDN通过智能技术生成
一、子查询:
     ♠ 子查询 --- 当我们需要执行某条 SQL语句时,需要某些查询的结果作为依据时,先去执行的这条查询语句就是子查询。除了可以用于 DQL , 还可以用于DML 和 DDL语句中。
     例1:SELECT ename, sal FROM emp_rs WHERE sal > (SELECT sal FROM emp_rs WHERE ename = 'CLARK')
     例2:在 DDL语句中使用 - 以子查询结果快速创建表
        CREATE TABLE myemployee AS SELECT e.empno, e.name, e,sal, d.deptno, d.dname, d.loc FROM emp e, dept d WHERE e.deptno = d.deptno
     例3:在 DML语句中使用-删除与 CLARK 相同部门的所有员工
        DELETE FROM emp WHERE deptno = (SELECT deptno FROM emp WHERE ename = 'CLARK')

     ♠ 子查询根据查询的结果不同应用也不完全一样。
  通常按照查询结果分为:
  单行单列子查询:查询结果为 1 个值
  多行单列子查询:查询结果为 1 个字段,但是有多条记录
  多行多列子查询:看起来结果集像一张表,也常当作表来使用

     ♠ 子查询在 WHERE 子句中:如果子查询返回多行,主查询中要使用多行比较操作符。
         (1) 在子查询中需要引用到主查询的字段数据,使用 EXISTS 关键字
         (2)  EXISTS 后边的子查询至少返回一行数据,则整个条件返回 true
               EXISTS 关键字 --- 其后要跟一个查询语句,只要该查询能查询出至少一条数据, EXISTS 表达式就返回真
          例如:查看有员工的部门信息
          SELECT deptno, dname FROM dept_rs d WHERE EXISTS (SELECT * FROM emp_rs e WHERE d.deptno = e.deptno)

     ♠ 子查询在 HAVING 子句中:
          例如:查看部门的最低薪水,前提是该部门最低的薪水要高于 30 号部门的最低薪水
          SELECT MIN(sal) FROM emp_rs GROUP BY deptno HAVING MIN(sal) >(SELECT MIN(sal) FROM emp_rs WHERE deptno = '30')

     ♠ 子查询在FROM 子句中:
          例如:查看工资高于本部门平均工资的员工信息
          SELECT e.ename,e.sal,e.deptno FROM emp_rs e,(SELECT AVG(sal) avg_sal,deptno FROM emp_rs GROUP BY deptno) s WHERE e.deptno = s.deptno
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值