1. 程式人生 > 其它 >mysql-內連線-外連線-笛卡爾積

mysql-內連線-外連線-笛卡爾積

一、笛卡爾積現象:

  • 兩張表進行連線查詢時,沒有限制條件會發生?
  • 最終查詢結果是:兩張表的條數乘積,這個現象稱為:笛卡爾積現象

二、連線方式:

1、內連線:inner(等值連線、非等值連線、自聯結)select....from....inner join....on...where...

  • 內連線:等值連線
  • 案例:查詢每個員工所在部門名稱,顯示員工名和部門名?
  • 分析:給表格起別名:emp e 和dept d 表進行連結。條件是:e.deptno = d.deptno
  •  select   e.ename,d.dname
  •  from    emp e
  •  inner join  dept d
  •  on  e.deptno = d.deptno;
  • 內連線:非等值連線:
  • 案例:找出每個員工的薪資等級,要求顯示員工名,薪資,薪資等級(先查詢總表,對照總表分析)
  • 分析:1、總表:select * from emp;2、等級表:select * from salgrade;
  • 表達邏輯:
  • select  e.ename, e.sal,s.grade
  • from   emp e
  • inner join   salgrade s
  • on   e.sal between s.losal and s.hisal;
  •  
  •  內連線:自連結:一張表看作兩張表
  • 案例:查詢員工上級領導,要求顯示員工名和對應的領導名字?
  • 分析:1、select empno,ename,mgr  from emp;(這裡查詢出來一張表)
  • 2、一張表看作兩張表:emp a員工;emp b領導表(這兩張表都是上面查詢出來的一張表一分為二)
  • 3、結果:
  • select          a.ename as '員工', b.ename as '領導'
  • from           emp a
  • inner join   emp b
  • on             a.mgr = b.empno;(這句話翻譯過來:員工的領導編號 = 領導的員工編號)

 

2、外連線:outer(左外連結、右外連結)

  • 外連線:right :表示將join關鍵字右邊的這張表看成主表,主要是為了將這張表的資料全部查詢出來,
  • 並關聯查詢左邊的表,在外連線中,兩張錶鏈接產生主次關係
  • 右外連線:案例:查詢每個員工所在的部門名稱?(思路:查詢整個表格,和所需要的部門表格,進行分析)
  • select  e.ename,d.dname
  • from    emp e
  • right  join  dept d
  • on     e.deptno = d.deptno;
  •  左外連線:案例:查詢每個員工上級領導,要求顯示所有員工名字和領導名字?
  • select       a.ename as '員工',b.ename as'領導'
  • from        emp a
  • left join   emp b
  • on        a.mgr = b.empno;