Oracle-SQL04

子查询

  1. 嵌套在其他SQL中的一条查询语句,该查询语句就是子查询
  2. 子查询作用:当我们执行的SQL语句需要先从数据库中获取一些数据才能运行时,那么先期执行的这条SQL就是子查询,是为了要实际执行的SQL提供数据的
  3. 子查询常用于查询语句,但是也可以在DDL,DML中使用:DDL中使用 例:基于一个查询结果集快速创建一张表 CREATE TABLE 表名 AS 查询语句
  4. 子查询根据查询结果分为:单行单列子查询,多行单列子查询,多行多列子查询,其中单列的子查询多用在WHERE子句中,多列子查询通常用英语FROM中当做表看待
  5. EXISTS关键字:是用于WHERE中作为判断条件使用的,其后需要紧跟一个子查询, 只要该子查询能查询出至少一条记录,那么EXISTS表达式就返回真,可以使用NOT EXISTS表达相反效果
  6. 子查询也可以应用在SELECT子句中,可以实现外连接的效果

分页查询

  1. 当查询的数据量过度时,会导致一些情况:服务端响应慢,系统资源占用多,数据过剩,为了解决这些问题,通常我们会分批查询数据,这个过程就是分页查询,由于分页查询没有标准的SQL语法,所以不同的数据库对于分页的机制不一致
  2. ORACLE支持一个关键字ROWNUM,它是一个伪列,该列不存在于任何一张表中,但是每张表都可以查询该列,而该列在结果集中的值是结果集中每条记录的行号.ROWNUM 给结果集编号是在查询的过程中进行的,只要可以从表中查询出一条记录,该记录的行号就会作为这条记录ROWNUM字段的值,其从1开始递增.由于ROWNUM从1开始, 所以在第一次查询表中数据进行编号时,不要使用ROWNUM做大于1以上的数字判断,否则查询不到数据
  3. 页数:page 每页显示的条数:pageSize
    start=(page-1)*pageSize+1,end=pageSize*page

DECODE函数

  1. 可以实现类似Java中的分支结构
  2. DECODE另一种写法: CASE…WHEN…THEN
  3. 在GROUP BY中使用DECODE可以做到将字段值不同的记录看做一组,只要将需要看做一组的记录中该字段的值替换为相同的值即可
  4. 在ORDER BY中也可使用

排序函数

  1. 排序函数可以按照指定的字段分组,然后再按照指定的字段排序,最后为记录生成组内的编号
  2. ROW_NUMBER()函数:生成组内连续且唯一的数字
  3. SELECT ename,sal,deptno,
    ROW_NUMBER() OVER(PARTITION BY deptno ORDER BY sal DESC) rank FROM emp;
  4. DENSE_RANK()函数:生成组内连续不唯一的数字
  5. SELECT ename,sal,deptno,
    DENSE_RANK() OVER(PARTITION BY deptno ORDER BY sal DESC) rank FROM emp;
  6. RANK()函数:生成组内不连续不唯一的数字
  7. SELECT ename,sal,deptno,
    RANK() OVER(PARTITION BY deptno ORDER BY sal DESC) rank FROM emp;

集合操作

  1. UNION 并集 UNION ALL全并集
  2. INTERSECT 交集
  3. MINUS 差集

高级分组函数

  1. GROUP BY ROLLUP(a,b,c)等价于:
    GROUP BY a,b,c
    UNION GROUP BY a,b
    UNION GROUP BY a
    UNION ALL
    全表
  2. GROUPING SETS:该函数可以按照指定的分组方式进行分组,然后将结果集并在一起,
    其中每一个参数就是一种组合方式
  3. CUBE函数:会将每个参数的不同组合进行分组,然后将所有分组统计结果并在一起,
    分组次数是2的参数个数次方, GROUP BY CUBE (a,b,c)

你可能感兴趣的:(sql,数据库)