gil*_*drv 19
基本的INNER JOIN易于实现.下列:
SELECT L.XCol, R.YCol
FROM LeftTable AS L
INNER JOIN RightTable AS R
ON L.IDCol=R.IDCol;
Run Code Online (Sandbox Code Playgroud)
相当于:
SELECT L.XCol, R.YCol
FROM LeftTable AS L, RightTable AS R
WHERE L.IDCol=R.IDCol;
Run Code Online (Sandbox Code Playgroud)
为了将其扩展为LEFT/RIGHT/FULL OUTER JOIN,您只需要将没有匹配的行与正确列中的NULL一起UNION到先前的INNER JOIN.
对于LEFT OUTER JOIN,添加:
UNION ALL
SELECT L.XCol, NULL /* cast the NULL as needed */
FROM LeftTable AS L
WHERE NOT EXISTS (
SELECT * FROM RightTable AS R
WHERE L.IDCol=R.IDCol)
Run Code Online (Sandbox Code Playgroud)
对于RIGHT OUTER JOIN,添加:
UNION ALL
SELECT NULL, R.YCol /* cast the NULL as needed */
FROM RightTable AS R
WHERE NOT EXISTS (
SELECT * FROM LeftTable AS L
WHERE L.IDCol=R.IDCol)
Run Code Online (Sandbox Code Playgroud)
对于FULL OUTER JOIN,添加以上两者.
这里是一个较旧的过时的SQL语法,它允许你加入不使用JOIN
关键字..但我个人觉得它比任何排列比较混乱JOIN
我见过的运营商.这是一个例子:
SELECT A.CustomerName, B.Address1, B.City, B.State, B.Zip
FROM dbo.Customers A, dbo.Addresses B
WHERE A.CustomerId = B.CustomerId
Run Code Online (Sandbox Code Playgroud)
在旧方法中,您可以通过用逗号分隔表并在WHERE子句中指定JOIN条件来加入.就个人而言,我更喜欢JOIN
语法:
SELECT A.CustomerName, B.Address1, B.City, B.State, B.Zip
FROM dbo.Customers A
JOIN dbo.Addresses B
ON A.CustomerId = B.CustomerId
Run Code Online (Sandbox Code Playgroud)
你应该回避这种旧式连接的原因是清晰度和可读性.当您只是将一个表连接到另一个表时,很容易弄清楚发生了什么.当您在六个(或更多)表中组合多种类型的连接时,这种较旧的语法变得非常难以管理.
获取JOIN运算符句柄的最佳方法是使用它.以下是不同JOIN所做的一个不错的视觉示例:
http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/
更多信息:
https://sqlblog.org/2009/10/08/bad-habits-to-kick-using-old-style-joins