sql基础
Miss_SquarePants
这个作者很懒,什么都没留下…
展开
-
Oracle子查询空指问题
案例:查询不是老板的员工那么只需要查出员工号不在管理员号范围内select * from emp where empno not in (select MGR from emp);结果原因:子查询结果集出现了空值–只要子查询中返回值包含null值,不要使用not in,因为not in 等同与<> ALL(不等于所有值),就包括<>null ,然后不管是=null还是<>null 都是否,因为判断为空用is null,is not null比如,a not原创 2021-09-05 23:27:13 · 505 阅读 · 0 评论 -
相关子查询
相关子查询:将主查询中的值作为参数传递给子查询:Oracle执行顺序:子查询一般先执行子查询,再执行主查询,相关子查询例外,本质上来说还是先执行了子查询,只不过顺序是 子-主-子而已例子:找到员工表中薪水大于本部门平均薪水的员工的员工号、姓名、薪水、本部门平均薪水...原创 2021-09-05 22:54:08 · 385 阅读 · 0 评论 -
自连接存在的问题
(1)自连接不适合操作大表,也就是记录多的表,原因是自连接至少有两张表参与,并进行笛卡尔全集,连接之后的记录数就是单张表记录数的平方(笛卡尔积行数是两张表行数的乘积),如果有三张表记录数就是原来的三次方,如果原来的表包含的记录数过多,连接之后的结果就会很大,所以自连接不适合操作大表。解决办法:层次查询。注意层次查询是单表查询,不存在第二张表!因为只有在一张表的情况下才不会产生笛卡尔积,才能解决这个问题。层次查询在某些情况下可以替代自连接,本质上是单表查询。例子:查询员工和老板的姓名自连接查询:原创 2021-09-05 22:09:45 · 268 阅读 · 0 评论 -
Oracle外连接
按部门统计员工人数,要求显示:部门号,部门名称,人数相当于(右外连接在等号左边添加“(+)”,左外连接是在等号右边添加“(+)”)(1)左外连接:当连接条件不成立的时候,等号左边的表仍然被包含(2)右外连接:当连接条件不成立的时候,等号右边的表仍然被包含...原创 2021-09-05 21:45:37 · 1501 阅读 · 0 评论 -
Oracle多表不等值连接
查询员工信息,要求显示:员工号,姓名,月薪,薪水级别原创 2021-09-05 21:30:32 · 233 阅读 · 0 评论 -
oracle分组函数的rollup
group by rollup(a,b)相当于 group by a,b + group by a + group by null 例:select deptno,job,sum(sal) from emp group by rollup(deptno,job); 先按照不同部门不同职位查出薪资总和显示(deptno,job,sum(sal)) 再按照不同部门查出薪资总和显示(deptno,sum(sal)) 再查原创 2021-09-05 21:16:35 · 123 阅读 · 0 评论 -
分组函数的嵌套
示例:求部门平均工资的最大值1、通过AVG函数求出每个部门的平均工资2、嵌套MAX函数求出部门平均工资的最大值select max(avg(sal)) from emp group by deptno;等于select max(avgsal) from (select deptno,avg(sal) avgsal from emp group by emp.deptno)...原创 2021-09-05 21:14:02 · 158 阅读 · 0 评论 -
having 和where的区别
1.where 条件中不能使用组函数,having 可以。2.在输入顺序上,where先过滤后分组(比如select deptno,avg(sal)from empwhere deptno=10group by deptno;),having先分组再过滤,(比如select deptno,avg(sal)from empgroup by deptnohaving deptno=10;)要根据实际情况选择3.如果两个可以通用,从sql优化的角度上看,尽量使用where.(where先过原创 2021-09-05 21:00:13 · 78 阅读 · 0 评论 -
使用分组函数空指问题
分组函数的空值count(*)与count(comm)区别,*是指所有记录,comm有空值的时候count(comm)不计数select count(nvl(comm,0)) from emp;注意:sum(comm)/count(*):统计的是所有人的平均值(含该项为null的人员)sum(comm)/count(comm)&avg(comm)是统计comm非空的人员平均数null会导致计算错误,需要使用nvl函数转为非空值...原创 2021-09-05 20:50:08 · 148 阅读 · 0 评论