Oracle(sql)文盲大掃除思維導圖系列(三)——多表串連查詢子查詢

來源:互聯網
上載者:User

標籤:

繼續

一些demo

--通過串連運算子可以實現多個表查詢,串連是關聯式資料庫模型的主要特點。--在FROM子句中指出串連時有助於將串連操作與WHERE子句中的搜尋條件區分開來。--一般來說,串連查詢比巢狀查詢的效率高一點。所以,在Transact-SQL中推薦使用這種方法。select * from emp;select * from dept;select * from salgrade;--先來看內串連,內串連是最典型和最常用的串連運算,內串連通常通過串連謂詞或運算子(如join on,natural join,cross join,=,>=,<=,in,not in,等)--將兩張表的列組合在一起,產生新的結果表。--內串連包括:等值串連、非等值串連、自然串連、交叉串連(笛卡爾積串連A*B)--等值串連,表之間的串連是通過相等的欄位值串連起來的查詢稱為等值串連查詢--SQL1992,在where子句中進行多表串連select ename,dname from emp,dept where emp.deptno = dept.deptno;--SQL1999,使用join ... on ..的方式進行表串連 select ename,dname from emp join dept on (emp.deptno = dept.deptno);--非等值串連,在等值查詢的串連條件中不使用等號,而使用其它比較子就構成了非等值串連查詢。--可以使用的比較子有:> 、>、=、 <、 <=、 !=, 還可以使用BETWEEN…AND 之類的謂詞--SQL1992,在where子句中進行多表串連select ename,grade from emp,salgrade where sal between losal and hisal;select ename,grade from emp,salgrade where sal >= losal and sal <= hisal;--SQL1999,使用join ... on ..的方式進行表串連select ename,grade from emp join salgrade on (sal between losal and hisal);select ename,grade from emp join salgrade on (sal >= losal and sal <= hisal);--自然串連,自然串連是在兩張表中尋找那些資料類型和列名都相同的欄位,然後自動地將他們串連起來,並返回所有符合條件按的結果。select emp.ename,dept.dname from emp natural join dept;--這裡我們並沒有指定串連的條件,實際上oracle為我們自作主張的將,emp中的deptno和dept中的deptno做了串連,--類似等值串連,區別在於自然串連會去重,而等值串連則不。--交叉串連,交叉串連即返回這兩個表的笛卡爾積select * from emp cross join dept;--外串連,外串連和內串連的主要區別在於:內串連只查詢滿足串連條件的記錄,而外串連則將不能產生串連的資料也查詢出來--外串連可依據串連表保留左表, 右表或全部表的行而進一步分為左外串連, 右外串連和全串連--右外串連,保留右邊表不能產生串連的記錄(多餘的記錄)select ename, dname from emp e right join dept d on (e.deptno = d.deptno);--左外串連,保留左邊表不能產生串連的記錄(多餘的記錄)select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);--全外連結,把左邊右邊沒不能產生串連的記錄都查詢出來select ename, dname from emp e full join dept d on (e.deptno = d.deptno);--自串連,為同一張表起不同的別名,然後當成兩張表來用。自串連既可以用內串連,也可以用外串連。select e1.ename,e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);select e1.ename,e2.ename from emp e1 right join emp e2 on (e1.mgr = e2.empno);select e1.ename,e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);--不用組函數,用自串連實現求最高薪水--(1)先求出每一個員工比他薪水薪水少的員工select e1.ename,e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal);--(2)去重select distinct e1.ename,e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal);--(3)不在(2)中查詢的結果中的就是最高薪水select distinct sal from emp where sal not in    (select distinct e1.sal from emp e1   join emp e2 on (e1.sal < e2.sal));--子查詢,子查詢本質上是嵌套進其他SELECT,UPDATE,INSERT,DELETE語句的一個被限制的SELECT語句select max(sal) from emp;select ename,sal from emp where sal =(select max(sal) from emp);select t1.ename,t1.deptno from emp t1 join (select deptno,max(sal) max_sal from emp group by deptno) t2on(t1.deptno = t2.deptno and t1.sal = t2.max_sal)

 

今天先到這裡。

 

Oracle(sql)文盲大掃除思維導圖系列(三)——多表串連查詢子查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.