tft每日頭條

 > 圖文

 > mysql中自連接怎麼用

mysql中自連接怎麼用

圖文 更新时间:2024-12-21 17:04:44
關聯查詢

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)1

作用:從2張或多張表中,取出有關聯的數據.

關聯查詢一共有幾種情況:

内連接:INNER JOIN 、CROSS JOIN

外連接:左外連接(LEFT OUTER JOIN)、右外連接(RIGHT OUTER JOIN)、全外連接(FULL OUTER JOIN)

自連接:當table1和table2本質上是同一張表,隻是用取别名的方式虛拟成兩張表以代表不同的意義

說明:

(1)連接 n個表,至少需要 n-1個連接條件。 例如:連接三個表,至少需要兩個連接條件。

(2)當兩個關聯查詢的表如果有字段名字相同,并且要查詢中涉及該關聯字段,那麼需要使用表名前綴加以區分

(3)當如果表名比較長時,可以給表取别名,簡化SQL語句

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)2

笛卡爾積

定義:将兩(或多)個表的所有行進行組合,連接後的行數為兩(或多)個表的乘積數.

在MySQL中如下情況會出現笛卡爾積,主要是因為缺少關聯條件或者關聯條件不準确

注:外連接必須寫關聯條件,否則報語法錯誤

#笛卡爾積#查詢員工姓名和所在部門名稱SELECT ename,dname FROM t_employee,t_department;SELECT ename,dname FROM t_employee INNER JOIN t_department;SELECT ename,dname FROM t_employee CROSS JOIN t_department;SELECT ename,dname FROM t_employee JOIN t_department;

關聯條件

表連接的約束條件可以有三種方式:WHERE, ON, USING

WHERE:适用于所有關聯查詢

ON:隻能和JOIN一起使用,隻能寫關聯條件。雖然關聯條件可以并到WHERE中和其他條件一起寫,但分開寫可讀性更好。

USING:隻能和JOIN一起使用,而且要求兩個關聯字段在關聯表中名稱一緻,而且隻能表示關聯字段值相等

#關聯條件#把關聯條件寫在where後面SELECT ename,dname FROM t_employee,t_department WHERE t_employee.dept_id=t_department.did;#把關聯條件寫在on後面,隻能和JOIN一起使用SELECT ename,dname FROM t_employee INNER JOIN t_department ON t_employee.dept_id=t_department.did;SELECT ename,dname FROM t_employee CROSS JOIN t_department ON t_employee.dept_id=t_department.did;SELECT ename,dname FROM t_employee JOIN t_department ON t_employee.dept_id=t_department.did;#把關聯字段寫在using()中,隻能和JOIN一起使用#而且兩個表中的關聯字段必須名稱相同,而且隻能表示=#查詢員工姓名與基本工資SELECT ename,basic_salary FROM t_employee INNER JOIN t_salary USING(eid);#n張表關聯,需要n-1個關聯條件#查詢員工姓名,基本工資,部門名稱SELECT ename,basic_salary,dname FROM t_employee,t_department,t_salaryWHERE t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;SELECT ename,basic_salary,dname FROM t_employee INNER JOIN t_department INNER JOIN t_salaryON t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;

内連接(INNER JOIN)

有兩種,顯式的和隐式的,返回連接表中符合連接條件和查詢條件的數據行

格式:

隐式:

SELECT [cols_list] from 表1,表2 where [condition]

顯式:

SELECT [cols_list] from 表1 INNER JOIN 表2 ON [關聯條件] where [其他篩選條件]

SELECT [cols_list] from 表1 CROSS JOIN 表2 ON [關聯條件] where [其他篩選條件]

SELECT [cols_list] from 表1 JOIN 表2 ON [關聯條件] where [其他篩選條件]

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)3

#内連接#查詢員工姓名和所在部門名稱SELECT ename,dname FROM t_employee,t_department WHERE t_employee.dept_id=t_department.did;SELECT ename,dname FROM t_employee INNER JOIN t_department ON t_employee.dept_id=t_department.did;SELECT ename,dname FROM t_employee CROSS JOIN t_department ON t_employee.dept_id=t_department.did;SELECT ename,dname FROM t_employee JOIN t_department ON t_employee.dept_id=t_department.did;#查詢員工姓名,基本工資,部門名稱SELECT ename,basic_salary,dname FROM t_employee,t_department,t_salaryWHERE t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;SELECT ename,basic_salary,dname FROM t_employee INNER JOIN t_department INNER JOIN t_salaryON t_employee.dept_id=t_department.did AND t_employee.eid=t_salary.eid;

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)4

外連接(OUTER JOIN)

外連接分為:

左外連接(LEFT OUTER JOIN),簡稱左連接(LEFT JOIN)

右外連接(RIGHT OUTER JOIN),簡稱右連接(RIGHT JOIN)

全外連接(FULL OUTER JOIN),簡稱全連接(FULL JOIN)。

左連接(LEFT JOIN)

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)5

返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。

返回左邊中行在右表中沒有匹配行的記錄

#左連接

#查詢所有部門信息以及該部門員工信息

SELECT did,dname,eid,ename

FROM t_department LEFT OUTER JOIN t_employee

ON t_department.did = t_employee.dept_id;

#查詢部門信息,僅保留沒有員工的部門信息

SELECT did,dname,eid,ename

FROM t_department LEFT OUTER JOIN t_employee

ON t_department.did = t_employee.dept_id

WHERE t_employee.dept_id IS NULL;

#“從表外鍵列”是NULL

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)6

#查詢所有員工信息,以及員工的部門信息

SELECT eid,ename,did,dname

FROM t_employee LEFT OUTER JOIN t_department

ON t_employee.dept_id = t_department.did ;

#查詢員工信息,僅保留沒有分配部門的員工

SELECT eid,ename,did,dname

FROM t_employee LEFT OUTER JOIN t_department

ON t_employee.dept_id = t_department.did

WHERE t_employee.dept_id IS NULL;

#“從表外鍵列”是NULL

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)7

右外連接(RIGHT JOIN)

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)8

恰與左連接相反,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。

返回右表中在左表沒有匹配行的記錄

#查詢所有部門信息以及該部門員工信息

SELECT did,dname,eid,ename

FROM t_employee RIGHT OUTER JOIN t_department

ON t_department.did = t_employee.dept_id;

#查詢部門信息,僅保留沒有員工的部門信息

SELECT did,dname,eid,ename

FROM t_employee RIGHT OUTER JOIN t_department

ON t_department.did = t_employee.dept_id

WHERE t_employee.dept_id IS NULL;

#“從表外鍵列”是NULL

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)9

#查詢所有員工信息,以及員工的部門信息

SELECT eid,ename,did,dname

FROM t_department RIGHT OUTER JOIN t_employee

ON t_employee.dept_id = t_department.did ;

#查詢員工信息,僅保留沒有分配部門的員工

SELECT eid,ename,did,dname

FROM t_department RIGHT OUTER JOIN t_employee

ON t_employee.dept_id = t_department.did

WHERE t_employee.dept_id IS NULL;

#“從表外鍵列”是NULL

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)10

外連接(FULL JOIN)

mysql不支持FULL JOIN,但是可以用 left join union right join代替

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)11

#查詢所有部門信息和員工信息

SELECT did,dname,eid,ename

FROM t_department LEFT OUTER JOIN t_employee

ON t_department.did = t_employee.dept_id

UNION

SELECT did,dname,eid,ename

FROM t_department RIGHT OUTER JOIN t_employee

ON t_department.did = t_employee.dept_id;

#查詢所有沒有員工的部門和沒有分配部門的員工

SELECT did,dname,eid,ename

FROM t_department LEFT OUTER JOIN t_employee

ON t_department.did = t_employee.dept_id

WHERE t_employee.dept_id IS NULL

UNION

SELECT did,dname,eid,ename

FROM t_employee LEFT OUTER JOIN t_department

ON t_department.did = t_employee.dept_id

WHERE t_employee.dept_id IS NULL;

mysql中自連接怎麼用(Mysql中的關聯查詢内連接)12

自連接

當table1和table2本質上是同一張表,隻是用取别名的方式虛拟成兩張表以代表不同的意義。然後兩個表再進行内連接,外連接等查詢

#自連接#查詢員工姓名以及領導姓名,僅顯示有領導的員工SELECT emp.ename,mgr.enameFROM t_employee AS emp, t_employee AS mgrWHERE emp.mid = mgr.eid;#查詢員工姓名以及領導姓名,僅顯示有領導的員工SELECT emp.ename,mgr.enameFROM t_employee AS emp INNER JOIN t_employee AS mgrON emp.mid = mgr.eid;#查詢所有員工姓名及其領導姓名SELECT emp.ename,mgr.enameFROM t_employee AS emp LEFT JOIN t_employee AS mgrON emp.mid = mgr.eid;


相關閱讀:

MySQL之MYCAT讀寫分離

MySQL的使用情況詳解

如何和MySQL進行通信

MySQL常見的運算符以及使用

Mysql的邏輯架構與存儲引擎

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved