oracle 默认隔离等级是:读已提交。
查询锁定,防止另外用户更新:
select * from books for update;
当前用户更新之后,另外用户可以更改。
01、表连接
假定from子句中从左到右两个表分别为A,B表。
内连接:选取A、B表的完全匹配的集合,两表交集:
select empno,ename,emp.deptno A,dept.deptno B,dname from emp inner join dept on emp.deptno=dept.deptno;
左外连:选取A表全部以及A、B表交集
select dname,dept.deptno A,emp.deptno B,empno,ename from dept left join emp on dept.deptno=emp.deptno;
右外连:选取B表全部以及A、B表交集
select empno,ename,emp.deptno A,dept.deptno B,dname from emp right join dept on emp.deptno=dept.deptno;
02、表联合
整合结果集并消除重复行:
select empno,ename from emp
union
select deptno,dname from dept;
03、空值
select empno,ename,nvl(comm,0) from emp; --正确,comm与0类型相同
select empno,ename,nvl(comm,'空值') from emp; --错误,comm与'空值'类型不同
select empno,ename,comm from emp where comm is null;
select empno,ename,comm from emp where comm is not null;
04、排序
select * from emp order by empno,asc;
select * from dept order by deptno desc;
05、消除重复数据
select distinct deptno from emp;
06、模糊查询
select ename from emp where ename like '%K';
_表示一个字符,%表示一个或多个字符
07、分组
select deptno, avg(sal) from emp group by deptno; --分组求出平均薪水
select deptno, avg(sal) from emp group by deptno, job; --组合分组
select deptno, avg(sal) from emp group by deptno having avg(sal) > 2000;
group by 后面的字段,可以不出现在select后面;
select 后面的字段,如果没有出现在聚集函数里,就必须出现在group by后面。
group by 分组过滤要使用having。
08、聚集函数
select ename, max(sal) from emp;
这条语句错误:max只能有一个值,只能选取一行,但是等于max值的记录可能有好几个,无法正确匹配,所以应该使用子查询:
select ename from emp where sal = (select max(sal) from emp);
聚集函数不能做为条件出现在where子句的后边:
select deptno,sum(sal) from emp where sum(sa