一步一步學MySQL----14 奪標資料記錄查詢之外連線
14.1 外連線之左連線
所謂左連線,就是指新關係中執行匹配條件時,以關鍵字left join左邊的表為參考表。
例如:執行SQL語句“left join on”,在資料庫company中,查詢每個員工的姓名、工種、領導姓名。由於名為Jones的員工已經是manager,所以沒有領導資訊,本例中要顯示名為Jones員工的資訊。
【例項分析】
(1) 確定需要查詢的表和所查詢欄位的來源
根據需求需要查詢兩張表:員工表和領導表,前者需要查詢出員工的姓名和工種,後者需要查詢出領導的姓名。
(2) 確定關聯匹配條件
eployee.mgno(員工表的領導工號)=employee.empno(領導表的領導工號)
【實現步驟】
第一步:查詢每一位員工的姓名和工種
mysql> select e.ename employeename,e.job from employee e;
第二步:引入領導表,同時新增一條消除笛卡爾積的匹配條件
mysql> select e.ename employeename,e.job,l.ename loadername from employee e left join employee l on e.mgno=l.empno;
14.2 外連線之右連線
所謂右連線,就是指新關係中執行匹配條件時,以關鍵字right join右邊的表為參考表。
在這裡我們先在employee表中新增一條記錄,如下:
mysql> insert into employee(empno,ename,job,mgno,Hiredate,salary,bonus,depno)values(1009,”Kuli”,”Research”,1004,2013-07-20,6000,4000,16);
我們注意到,新新增的這個員工所在部門16不在department當中。
例如:執行SQL語句 “right join on”,在資料庫company中,查詢每個員工的工號、姓名、工種、部門名稱、位置。由於名為Kuli的員工所在部門編號16在部門表department中不存在,所以該員工資訊沒有部門資訊,本例中要顯示出名為Kuli員工的資訊。
【例項分析】
(1) 確定需要查詢的表和所查詢欄位的來源
根據要求需要查詢兩張表,員工表和部門表,前者需要查詢出員工的工號、姓名、工種,後者需要查詢出部門名稱和位置。
(2) 確定關聯匹配條件
department.depno=employee.depno;
【實現步驟】
第一步:查詢每一位員工的工號、姓名、工種
mysql> select e.empno,e.ename,e.job from employee e;
第二步:引入部門表,同時新增一條消除笛卡爾積的匹配條件
mysql> select e.empno,e.ename,e.job,d.dname,d.location from department d right join employee e on d.depno=e.depno;
執行結果顯示了所有員工的工號、姓名、工種、部門名稱、部門位置,同時還顯示出了Kuli員工的相應資訊。