SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
将其应用于我们的样本表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
结果将是
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
LEFT JOIN
Note :将给出TableA中的所有选定行,以及TableB中任何常用的选定行 .
句法
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
将其应用于我们的样本表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
结果
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
RIGHT JOIN
Note :将给出TableB中的所有选定行,以及TableA中任何常用的选定行 .
句法
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
将其应用于我们的样本表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
结果
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Note :它将返回两个表中的所有选定值 .
句法
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
将其应用于我们的样本表中:
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
结果
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
3 回答
INNER JOIN 根据外键获取两个表之间通用的所有记录
LEFT JOIN 获取LEFT链接表中的所有记录,但如果您从RIGHT表中选择了一些列,如果没有相关记录,则这些列将包含NULL
RIGHT JOIN 与上面类似,但获取RIGHT表中的所有记录
FULL JOIN 从两个表中获取所有记录,并将NULL放在相对表中不存在相关记录的列中
SQL中有不同类型的连接:
INNER JOIN :当两个表中都匹配时返回行 .
LEFT JOIN :返回左表中的所有行,即使右表中没有匹配项也是如此 .
RIGHT JOIN :返回右表中的所有行,即使左表中没有匹配项也是如此 .
FULL JOIN :它结合了左外连接和右外连接的结果 .
连接表将包含两个表中的所有记录,并填写任何一侧缺少匹配项的NULL .
SELF JOIN :用于将表连接到自身,就像表是两个表一样,在SQL语句中临时重命名至少一个表 .
CARTESIAN JOIN :返回两个或多个连接表中记录集的笛卡尔积 .
我们可以在详细信息中采用前四个连接:
我们有两个具有以下值的表 .
TableA
TableB
.................................................. ..................
INNER JOIN
Note :它给出了两个表的交集,即它们在TableA和TableB中共有的行
句法
将其应用于我们的样本表中:
结果将是
LEFT JOIN
Note :将给出TableA中的所有选定行,以及TableB中任何常用的选定行 .
句法
将其应用于我们的样本表中:
结果
RIGHT JOIN
Note :将给出TableB中的所有选定行,以及TableA中任何常用的选定行 .
句法
将其应用于我们的样本表中:
结果
FULL JOIN
Note :它将返回两个表中的所有选定值 .
句法
将其应用于我们的样本表中:
结果
Interesting Fact
对于INNER加入,订单无关紧要
对于(LEFT,RIGHT或FULL)OUTER连接,顺序很重要
最好去看看 Link 它会给你有关加入顺序的有趣细节
阅读 The Code Project 上的这篇原创文章将对你有所帮助:Visual Representation of SQL Joins .
另请查看这篇文章:SQL SERVER – Better Performance – LEFT JOIN or NOT IN? .
找到原始的:Difference between JOIN and OUTER JOIN in MySQL .