【Oracle】表的查詢

來源:互聯網
上載者:User

查看錶結構:
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:取差集,顯示第一個結果中存在而在第二個結果中不存在的記錄。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.