SQL联接 Join
时间:2020-02-23 14:32:30 来源:igfitidea点击:
SQL Join根据其中的对应公共列将两个或者多个表组合在一起。
注意:以下提到的所有查询都是参照MySQL数据库执行的。
SQL连接的类型
- 内部联接
- 左外连接
- 右外连接
- 全外连接
- 自连接
1.内联(INNER JOIN)
SQL INNER JOIN基本上用作两个或者多个表的交集。
它返回两个表共有的元素。
SQL连接–内部连接
让我们使用下表来服务和了解SQL连接的目的。
表名:信息
Employee Id | Manager Id | Batch |
---|---|---|
1 | 1 | A |
2 | 2 | B |
3 | 5 | A |
表名称:Manager_Details
Manager Id | Name | City | Age |
---|---|---|---|
1 | Safa Mulani | Pune | 52 |
2 | Aman Mulani | Satara | 25 |
3 | Divya Trivedi | Mumbai | 24 |
语法:
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