SQL联接 Join

时间:2020-02-23 14:32:30  来源:igfitidea点击:

SQL Join根据其中的对应公共列将两个或者多个表组合在一起。

注意:以下提到的所有查询都是参照MySQL数据库执行的。

SQL连接的类型

  • 内部联接
  • 左外连接
  • 右外连接
  • 全外连接
  • 自连接

1.内联(INNER JOIN)

SQL INNER JOIN基本上用作两个或者多个表的交集。
它返回两个表共有的元素。

SQL连接–内部连接

让我们使用下表来服务和了解SQL连接的目的。

表名:信息

Employee IdManager IdBatch
11A
22B
35A

表名称:Manager_Details

Manager IdNameCityAge
1Safa MulaniPune52
2Aman MulaniSatara25
3Divya TrivediMumbai24

语法:

SELECT Column_Names
FROM Table1
INNER JOIN Table2
ON Table1.Column_Name = Table2.Column_Name;

例:

SELECT Information.Employee_Id, Manager_details.Manager_Id, Manager_details.Name
FROM Information
INNER JOIN Manager_details ON Information.Manager_Id = Manager_details.Manager_Id;

输出:

1	1	Safa Mulani
2	2	Aman Mulani

2.左外连接(LEFT OUTER JOIN)

SQL LEFT OUTER JOIN返回左表(即Table1)中的所有元素和右表(即Table2)中的对应匹配元素。

如果找不到合适的匹配项,则它为不匹配的右表列值返回NULL值。

SQL连接–左连接

语法:

SELECT Column_Names
FROM Table1
LEFT JOIN Table2
ON Table1.Column_Name = Table2.Column_Name;

例:

SELECT Information.Employee_Id, Manager_details.Manager_Id, Manager_details.Name
FROM Information
LEFT JOIN Manager_details ON Information.Manager_Id = Manager_details.Manager_Id;

输出:

1	1	Safa Mulani
2	2	Aman Mulani
3	NULL	NULL

3.右外连接(RIGHT OUTER JOIN)

SQL RIGHT OUTER JOIN返回右表(即Table2)中的所有元素以及左表(即Table1)中对应的匹配元素。

如果找不到合适的匹配项,则它为左表中未匹配的列值返回NULL值。

SQL连接–右连接

语法:

SELECT Column_Names
FROM Table1
RIGHT JOIN Table2
ON Table1.Column_Name = Table2.Column_Name;

例:

SELECT Information.Employee_Id, Manager_details.Manager_Id, Manager_details.Name
FROM Information
RIGHT JOIN Manager_details ON Information.Manager_Id = Manager_details.Manager_Id;

输出:

1	1	Safa Mulani
2	2	Aman Mulani
NULL	3	Divya Trivedi

4.完整的外部连接(FULL OUTER JOIN)

SQL FULL JOIN基本上表示与左表或者右表中的元素匹配的所有元素。

如果两个表中的任何一个表的行都不匹配,则仍将使用NULL值来表示元素。

SQL联接–完全联接

语法:

SELECT Column_Names
FROM Table1
FULL OUTER JOIN Table2
ON Table1.Column_Name = Table2.Column_Name;

大多数数据库,例如SQLite,MySQL等,都不支持FULL OUTER Joins。

为了达到目的,我们需要修改查询并使用UNION子句来提供FULL OUTER JOIN的功能。

语法:

SELECT Column_Names
FROM Table1
LEFT OUTER JOIN Table2
ON Table1.Column_Name = Table2.Column_Name
UNION
SELECT Column_Names
FROM Table1
RIGHT OUTER JOIN Table2
ON Table1.Column_Name = Table2.Column_Name;

例:

SELECT Information.Employee_Id, Manager_details.Manager_Id, Manager_details.Name
FROM Information
LEFT OUTER JOIN Manager_details ON Information.Manager_Id = Manager_details.Manager_Id
UNION
SELECT Information.Employee_Id, Manager_details.Manager_Id, Manager_details.Name
FROM Information
RIGHT OUTER JOIN Manager_details ON Information.Manager_Id = Manager_details.Manager_Id;

输出:

1	1	Safa Mulani
2	2	Aman Mulani
3	NULL	NULL
NULL	3	Divya Trivedi

5.自连接( SELF JOIN)

SQL SELF JOIN表示自身的联接。
即,它重命名表,为对应的表提供别名。

语法:

SELECT Column_Name
FROM Table1 A, Table1 B
WHERE condition;

在此,A和B是赋予同一表1的别名。

例:

SELECT  a.Manager_Id, b.Name, a.City    
FROM Manager_details a, Manager_details b
WHERE a.Age > 24 AND b.Age > 24;

输出:

1	Safa Mulani	Pune
2	Safa Mulani	Satara
1	Aman Mulani	Pune
2	Aman Mulani	Satara