-
自连接 通过别名 将一张表视为多张表
查看全部 -
where a.deptno(+)=b.deptno --右外连接 包含b.deptno 当连接条件不成立的时候,等号右边的表仍然被包含
where a.deptno=b.deptno(+) --左外连接
查看全部 -
group by 语句的增强
select deptno,job,sum(sal) from emp group by rollup(dept,job);
group by rollup(a,b)=group by a,b+group by a+group by null
查看全部 -
分组函数的嵌套 max(avg(sal))
查看全部 -
order by desc降序
查看全部 -
where/having都是按条件筛选
where 后面不能使用组函数 having都可以
从优化角度 尽量用where
having 先分组,后过滤
where 先过滤,后分组
查看全部 -
在select 列表中所有未包含在组函数中的列都应该包含在group by子句中
查看全部 -
avg(comm)=sum(comm)/count(comm)
avg(nvl(comm,0))=sum(comm)/count(*)
nvl(comm,0) 为空时返回0不为空时返回实际值
查看全部 -
select count(distinct deptno)from emp; --distinct 去除重复项
查看全部 -
多行子查询的空值问题:
--查询所有不是老板的员工
select * from emp where empno
not in -- 只要子查询中的结果集包含空值,不要使用not in 因为not in 等同与 <> all 比如: a not in (10,20,null) 这句话的意思是 a != 10 && a != 20 && a != null
(
select mgr from emp --员工表中的老板号
)
查看全部 -
nvl(comm,0),使组函数统计为空的条数,当comm为空时返回0,不为空时返回自己的值查看全部
-
desc tablename 可以查询表的结构查看全部
-
wm_concat行转列
select deptno 部门号,wm_concat(ename) 部门中员工的姓名 from emp group by deptno;
查看全部 -
去重 select count(distinct deptno) from emp;
查看全部 -
多表查询,与子查询,可以实现同样的结果,但是哪种效率高?
理论上,多表查询的效率高,因为只有一个from,读去一次数据库;但是,多表查询会产生笛卡尔集,如果数据量大,笛卡尔集很大,查询的效率可能比子查询要低,所以要根据实际情况选择到底是多表查询还是子查询;
查看全部
举报