軟件測試最常用的 SQL 命令(二)


1、join 多表查詢簡介

先來看w3c上給出的一張解釋圖

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢


解釋:

  • INNER JOIN:如果表中有至少一個匹配,則返回行
  • LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
  • RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
  • FULL JOIN:只要其中一個表中存在匹配,則返回行

2、實操演示


2.1 表結構說明

現在有這樣一個公司部門人員各個信息的數據庫,包含了如下幾個表:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

departments 部門表字段:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

dept_emp 僱員部門表字段:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

dept_manager 領導部門表字段:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

employees 僱員表字段:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

salaries 薪資表字段:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

titles 崗位表字段:

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

2.2 INNER JOIN
  • INNER JOIN-取出一個員工的員工號、生日、部門名字

分析: 員工的員工號和生日在employees表中已經存在,想要獲取部門的名字dept_name就要靠部門的編號dept_no去departments表中去查找,但是employees表中只有員工的編號,這樣就需要通過employees表中的員工號emp_no來找到dept_emp表中對應的部門編號dept_no

先找出員工與部門對應的編號:

<code>select e.emp_no,e.birth_date,d.dept_no
from employees e
inner join dept_emp d
on e.emp_no=d.emp_no;/<code>


軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢


再以上述結果與dept_emp表進行鏈接查詢:


<code>select e.emp_no,e.birth_date,d.dept_no,n.dept_name
from employees e
inner join (dept_emp d,departments n)
on e.emp_no=d.emp_no and d.dept_no=n.dept_no
order by emp_no;/<code>


軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

2.3 LEFT JOIN
  • LEFT JOIN-取出一個員工的員工號、生日、部門名字,員工號和生日為必展示項 。

現在在 employees 表中有一個工號為10000,名為Allen Qin的員工,此員工還未分配崗位和部門,要將此員工在多表查詢中也展示出來就要使用left join

軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

<code>select e.emp_no,e.birth_date,d.dept_no,n.dept_name
from employees e
left join (dept_emp d,departments n)

on e.emp_no=d.emp_no and d.dept_no=n.dept_no
order by emp_no;/<code>
軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

2.4 RIGHT LEFT
  • RIGHT LEFT-將dept_emp和departments的數據合併展示,且部門表departments信息為必展示項。

現在departments表中有一個新建的部門DQA,部門編號為d010,此部門暫時還未招聘員工,要將此部門信息也展示出來就要使用right join

<code>select * from dept_emp d
right join departments n
on d.dept_no=n.dept_no
order by emp_no;/<code>
軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢

2.5 FULL JOIN
  • FULL JOIN-將dept_emp表和departments表的行全部合併返回

注:因為 MySQL 不支持 full join,所以想要實現此功能需要使用 left join union right join 的方法:

<code>select * from dept_emp d 

left JOIN departments n
on d.dept_no=n.dept_no
union
select * from dept_emp d
right join departments n
on d.dept_no=n.dept_no
order by emp_no limit 100;/<code>
軟件測試最常用的 SQL 命令(二) | 高級 Join 多表查詢



分享到:


相關文章: