1. 程式人生 > >一步一步學MySQL----14 奪標資料記錄查詢之外連線

一步一步學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員工的相應資訊。