查看錶結構:
desc 表名;
distinct取消重複列。
set timing on;開啟顯示操作時間
insert into users(userid,username,userpass) select * from users;
insert into student (xh,xm,sex,birthday,sal,classid) select * from student; 複製自身原有資料
內容區分大小寫
算術運算式直接用即可,當運算中存在null的列,則最終結果為空白。
nvl(comm,0);如果是空則為0。
萬用字元
%:0-N 個字元
_:任意單個字元
select * from emp where empno in(123,456,789);in效率很高。
select max(sal),min(sal) from emp;
select * from emp where sal=(select max(sal) from emp);顯示工資最高的那人的資訊
select avg(sal),deptno from emp group by deptno;顯示每個部門的平均工資
select avg(sal),deptno from emp group by deptno having avg(sal)>2000;
分組函數只能出現在選擇列、having和order by後,不可以出現在where後。
多表查詢需要排除笛卡爾集,條件數應該不小於表的數量-1,結果才可能正確;
select * from dept,emp where dept.deptno=emp.deptno and emp.deptno=10;
select * from salgrade,emp where emp.sal between salgrade.losal and salgrade.hisal;
自串連:
select * from emp b,emp a where a.empno=b.mgr;
查詢時從右至左執行。
子查詢
單行子查詢:只返回一條資料的子查詢
如何顯示與SMITH同一部門的員工?
select * from emp where deptno=(select deptno from emp where ename='SMITH');
多行子查詢:
如何查詢和 部門10下的員工工作相同的僱員的資訊?
select * from emp where job in(select job from emp where deptno=10);
如何顯示工資比部門30的所有員工的工資高的員工資訊?
all
select * from emp where sal>all(select sal from emp where deptno=30);
select * from emp where sal>(select max(sal) from emp where deptno=30);本條效率高。
如何顯示工資比部門30的任意一個員工的工資高的員工的資訊?
any
select * from emp where sal>any(select sal from emp where deptno=30);
select * from emp where sal>(select min(sal) from emp where deptno=30);
多列子查詢:
如何查詢與SMITH的部門和崗位完全相同的所有僱員?
select * from emp where job=(select job from emp where ename='SMITH') and deptno=(select deptno from emp where ename='SMITH');
select * from emp where (job,deptno)=(select job,deptno from emp where ename='SMITH');多列子查詢
如何查詢高於 自己部門 平均工資的員工的資訊?
select * from emp a,(select deptno,avg(sal) mysal from emp group by deptno) b where a.deptno=b.deptno and sal>mysal;為表指定別名的時候不可加as
分頁查詢
1、rownum分頁:rownum為Oracle分配的行號
select * from (select a.*, rownum rn from (select * from emp) a where rownum<=10) where rn>=6;
select * from (select a.*, rownum rn from (select * from emp) a where rownum<=10) b where b.rn>=6;
如指定查詢列數、排序等資訊只需修改最裡層的子查詢。
2、rowid--執行效率最高
select * from emp where rowid in(select rid from(select rownum rn,rid from (select rowid rid,sal from emp order by sal desc) where rownum<10) where rn>5) order by sal desc;
3、按分析函數查--效率最低
select * from (select t.*,row_number() over(order by sal desc) rk from emp t) where rk<10 and rk>5;
用查詢結果建立一張新表
create table mytable(ename,sal) as select ename,sal from emp;
合并查詢
union:列數必須一致;取消重複行
該操作符用於取得兩個結果集的並集。當使用該操作符時會自動去掉結果集裡 的重複行。
select * from emp where sal>2000 union select * from emp where job='MANAGER';
select * from emp where sal>2000 or job='MANAGER';
union all:不取消重複行
intersect:取交集
minus:取差集,顯示第一個結果中存在而在第二個結果中不存在的記錄。