-
常用分组函数
avg
sum
min
max
count
wm_concat:行转列
查看全部 -
分组函数概念及其使用
查看全部 -
如何用mysql来解决这个最后一个的联系查看全部
-
rollup(deptno,job)查看全部
-
having用在分组函数中,用于过滤查看全部
-
oracle的分组函数会过滤空值,建议➕NVL赋值查看全部
-
wm_concat行转列查看全部
-
当一个结果有两种解法,就是实现一个功能可以是多种sql语句时,可以通过执行计划查看哪个的效率更高 -----
explain plan for sql语句;
select * from table (dbm_xplan.display);
查看全部 -
示例一
rownum 只能使用<,<=,不能使用> , >=
行号的生成机制:oracle数据库是一个行式数据库(即:取了第一行才能取第二行,取了第二行才能取第三行,以此类推)
oracle实现分页查询是通过嵌套子查询实现的
--分页查询,先排序,每页4行,查询第二页(就是行号从5~8)
select r,empno,sal
from (select rownum r,empno,ename,sal
from (select rownum,empno,ename,sal from emp order by sal desc) e1
where rownum<=8) e2
where r>=5;
查看全部 -
多行子查询中的null值问题
One of the values returned by the inner query is a null value,and hence the entire query returns no rows.The reason is that all conditions that compare a null value result in a null.So whenever null values are likely to be part of the results set of a subquery,do not use the not in operator.The NOT IN operator is quivalent to <>ALL.
Notice that the null value as part of the results set of a subquery is not a problem if you use the IN operator.The IN operator is equivalent to =ANY.For example,to display the employees who have subordinates,use the following SQL statement:
SELECT * FROM emp WHERE empno IN (SELECT mgr FROM EMP);
Alternatively,a WHERE clause can be included in the subquery to display all employees who do not have any subordinates:
SELECT * FROM emp WHERE empno NOT IN (SELECT mgr FROM emp WHERE mgr IS NOT NULL);
-----如果多行子查询出现null值,再使用not in进行多行子查询,将查不到任何记录,因为此时相当于不等于所有(<>all),所以在子查询中必须先在where条件中,把null值过滤掉,再使用not in
查看全部 -
子查询注意的10个问题
子查询语法中的小括号
子查询的书写风格
可以使用子查询的位置:where,select,select,having,from (在select后的子查询必须是一个单行子查询---即,子查询返回的结果集只有一条记录)
不可以使用子查询的位置:group by
强调:from 后面的子查询
主查询和子查询可以不是同一张表
一般不在子查询中,使用排序;但在Top-N分析问题中,必须对子查询排序
一般先执行子查询,再执行主查询;但相关子查询例外
单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
注意:子查询中是null值问题
查看全部 -
子查询概述
子查询使用
子查询类型
查看全部 -
自连接:当显示结果需要通过自连接实现,则需要给表一个别名,虚拟两张表进行连接查询。
自连接优点:显示结果清晰明了 缺点:多表连接查询会产生笛卡尔积
层次查询可以解决自连接查询产生的问题
层次查询本质是一个单表查询
相邻两层的上一层的员工号,用关键字prior实现
connect by(connect by表示连接) 上一层的员工号=老板号(条件)
start with empno=7839; ---从哪个节点开始找,此处可以从任意一个节点开始
level为层次查询的伪列,要显示层次查询中的数据,必须显示加上level关键字
总语句:
select level,empno,ename,sal,mgr from emp
connect by prior empno=mgr start with empno=7839;
查看全部 -
笛卡尔集=列数相加,行数相乘
目的:找到连接条件
查看全部 -
group by语句的增强
group by语句的增强用在报表中会非常有用
select deptno,job,sum(sal) from emp group by rollup(deptno,job);
查看全部
举报