oracle--多表查詢

多表查詢

笛卡爾積:

笛卡爾積.PNG

笛卡爾積會在下面條件下產(chǎn)生:

省略連接條件
連接條件無效
所有表中的所有行互相連接

為了避免笛卡爾積荣回,可以在where加入有效的連接條件
在實際運行環(huán)境下涣雕,應(yīng)避免使用笛卡爾全集异旧。

連接的類型:

oracle的連接

等值連接
不等值連接
外連接
自連接

SQL99的連接

Cross joins
Natural joins
Using clause
Full or two sided outer joins

等值連接:

SQL> --等值連接
SQL> --查詢員工信息: 員工號 姓名 月薪 部門名稱
SQL> set linesize 80
SQL> desc dept
 名稱                                      是否為空? 類型
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                    NOT NULL NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)

SQL> select e.empno,e.ename,e.sal,d.dname
  2  from emp e,dept d
  3  where e.deptno=d.deptno;

     EMPNO ENAME             SAL DNAME                                          
---------- ---------- ---------- --------------                                 
      7369 SMITH             800 RESEARCH                                       
      7499 ALLEN            1600 SALES                                          
      7521 WARD             1250 SALES                                          
      7566 JONES            2975 RESEARCH                                       
      7654 MARTIN           1250 SALES                                          
      7698 BLAKE            2850 SALES                                          
      7782 CLARK            2450 ACCOUNTING                                     
      7788 SCOTT            3000 RESEARCH                                       
      7839 KING             5000 ACCOUNTING                                     
      7844 TURNER           1500 SALES                                          
      7876 ADAMS            1100 RESEARCH                                       

     EMPNO ENAME             SAL DNAME                                          
---------- ---------- ---------- --------------                                 
      7900 JAMES             950 SALES                                          
      7902 FORD             3000 RESEARCH                                       
      7934 MILLER           1300 ACCOUNTING 

不等值連接:

SQL> --不等值連接
SQL> --查詢員工信息: 員工號 姓名 月薪 工資級別
SQL> select * from salgrade;

     GRADE      LOSAL      HISAL                                                
---------- ---------- ----------                                                
         1        700       1200                                                
         2       1201       1400                                                
         3       1401       2000                                                
         4       2001       3000                                                
         5       3001       9999                                                

SQL> select e.empno,e.ename,e.sal,s.grade
  2  from emp e,salgrade s
  3  where e.sal between s.losal and s.hisal;

     EMPNO ENAME             SAL      GRADE                                     
---------- ---------- ---------- ----------                                     
      7369 SMITH             800          1                                     
      7900 JAMES             950          1                                     
      7876 ADAMS            1100          1                                     
      7521 WARD             1250          2                                     
      7654 MARTIN           1250          2                                     
      7934 MILLER           1300          2                                     
      7844 TURNER           1500          3                                     
      7499 ALLEN            1600          3                                     
      7782 CLARK            2450          4                                     
      7698 BLAKE            2850          4                                     
      7566 JONES            2975          4                                     

     EMPNO ENAME             SAL      GRADE                                     
---------- ---------- ---------- ----------                                     
      7788 SCOTT            3000          4                                     
      7902 FORD             3000          4                                     
      7839 KING             5000          5   

外連接:

連接n個表凡恍,至少需要n-1個連接條件。

SQL> --外連接
SQL> --按部門統(tǒng)計員工人數(shù):部門號 部門名稱 人數(shù)
SQL> select d.deptno 部門號,d.dname 部門名稱,count(e.empno) 人數(shù)
  2  from emp e,dept d
  3  where e.deptno=d.deptno
  4  group by d.deptno,d.dname;

    部門號 部門名稱             人數(shù)                                            
---------- -------------- ----------                                            
        10 ACCOUNTING              3                                            
        20 RESEARCH                5                                            
        30 SALES                   6                                            

SQL> select * from dept;

    DEPTNO DNAME          LOC                                                   
---------- -------------- -------------                                         
        10 ACCOUNTING     NEW YORK                                              
        20 RESEARCH       DALLAS                                                
        30 SALES          CHICAGO                                               
        40 OPERATIONS     BOSTON                                                

SQL> select * from emp where deptno=40;

未選定行

希望: 對于某些不成立的記錄点额,任然希望包含在最后的結(jié)果中

使用外連接:

左外連接:當(dāng)where e.deptno=d.deptno不成立的時候咪啡,等號左邊的表任然被包含
寫法:where e.deptno=d.deptno(+)

右外連接:當(dāng)where e.deptno=d.deptno不成立的時候,等號右邊的表任然被包含
寫法: where e.deptno(+)=d.deptno

例:

SQL> select d.deptno 部門號,d.dname 部門名稱,count(e.empno) 人數(shù)
  2  from emp e,dept d
  3  where e.deptno(+)=d.deptno
  4  group by d.deptno,d.dname;

    部門號 部門名稱             人數(shù)                                            
---------- -------------- ----------                                            
        10 ACCOUNTING              3                                            
        40 OPERATIONS              0                                            
        20 RESEARCH                5                                            
        30 SALES                   6  

自連接:

SQL> --自連接
SQL> select e.ename 員工姓名,b.ename 老板姓名
  2  from emp e,emp b
  3  where e.mgr=b.empno;

員工姓名   老板姓名                                                                                                                                                                                     
---------- ----------                                                                                                                                                                                   
FORD       JONES                                                                                                                                                                                        
SCOTT      JONES                                                                                                                                                                                        
JAMES      BLAKE                                                                                                                                                                                        
TURNER     BLAKE                                                                                                                                                                                        
MARTIN     BLAKE                                                                                                                                                                                        
WARD       BLAKE                                                                                                                                                                                        
ALLEN      BLAKE                                                                                                                                                                                        
MILLER     CLARK                                                                                                                                                                                        
ADAMS      SCOTT                                                                                                                                                                                        
CLARK      KING                                                                                                                                                                                         
BLAKE      KING       

SQL> select count(*)
  2  from emp e, emp b;

  COUNT(*)                                                                                                                                                                                              
----------                                                                                                                                                                                              
       196   

自連接不適合操作大表:使用層次查詢

層次查詢.PNG
SQL> select level,empno,ename,mgr
  2  from emp
  3  connect by prior empno=mgr
  4  start with mgr is null
  5  order by 1;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市驻龟,隨后出現(xiàn)的幾起案子温眉,更是在濱河造成了極大的恐慌,老刑警劉巖翁狐,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件类溢,死亡現(xiàn)場離奇詭異,居然都是意外死亡露懒,警方通過查閱死者的電腦和手機闯冷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來懈词,“玉大人蛇耀,你說我怎么就攤上這事∏账” “怎么了蒂窒?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長荞怒。 經(jīng)常有香客問我洒琢,道長,這世上最難降的妖魔是什么褐桌? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任衰抑,我火速辦了婚禮,結(jié)果婚禮上荧嵌,老公的妹妹穿的比我還像新娘呛踊。我一直安慰自己,他們只是感情好啦撮,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布谭网。 她就那樣靜靜地躺著,像睡著了一般赃春。 火紅的嫁衣襯著肌膚如雪愉择。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天织中,我揣著相機與錄音锥涕,去河邊找鬼。 笑死狭吼,一個胖子當(dāng)著我的面吹牛层坠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刁笙,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼破花,長吁一口氣:“原來是場噩夢啊……” “哼谦趣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旧乞,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔚润,失蹤者是張志新(化名)和其女友劉穎磅氨,沒想到半個月后尺栖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡烦租,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年延赌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叉橱。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挫以,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窃祝,到底是詐尸還是另有隱情掐松,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布粪小,位于F島的核電站大磺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏探膊。R本人自食惡果不足惜杠愧,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逞壁。 院中可真熱鬧流济,春花似錦、人聲如沸腌闯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姿骏。三九已至糖声,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間工腋,已是汗流浹背姨丈。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留擅腰,地道東北人蟋恬。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像趁冈,于是被迫代替她去往敵國和親歼争。 傳聞我的和親對象是個殘疾皇子拜马,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • SQL多表查詢 等值和不等值連接查詢 從多個表中獲取數(shù)據(jù):如果在查詢的時候,直接從多個表中獲取數(shù)據(jù)沐绒。沒有添加條件判...
    MPPC閱讀 1,753評論 0 16
  • 在探討機會之前,先復(fù)習(xí)一下兩點: 第一蹋肮,感受經(jīng)濟的定義:生產(chǎn)力高度發(fā)展出刷,商品經(jīng)濟發(fā)展到大多數(shù)產(chǎn)品達(dá)到買方市場,特別...
    Yeny愛生活閱讀 286評論 0 0
  • 最近感觸很多坯辩,說說我心目中的好老師形象馁龟! 小學(xué)的事我已經(jīng)記不清了,所以這段只能跳過去了漆魔。 初中我一共換了兩個班坷檩,所...
    飛云冉冉閱讀 340評論 0 6
  • 相信世界上永遠(yuǎn)不拋棄我的男人,除了我爸改抡,還有我的干弟弟矢炼。 我和他沒有血緣關(guān)系,卻沉淀了親姐弟一樣的感情雀摘。在家家戶戶...
    靈犀傻丫頭閱讀 1,276評論 5 2