首页 > 代码库 > T-SQL之JOIN关键字详解

T-SQL之JOIN关键字详解

这几天由于工作的需要,写了一个业务逻辑较复杂的存储过程,其中多次用到了JOIN、LEFT JOIN、RIGHT JOIN在处理表之间的逻辑的作用被渲染的淋漓尽致。说明一下,之前少处理数据库后台的经验,特别是没有好好的研究SQL的知识细节。不过也简单的学习了,自以为看明白了。就懂了。现在想来那时就是浅尝辄止。用了之后,对它的理解更深了。现在及时总结下。以备忘和日后查看。下面示例的demo代码是来自W3School。接下来直入主题。

JOIN

 

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 INNER JOIN Orders
4 ON Persons.Id_P = Orders.Id_P
5 ORDER BY Persons.LastName
View Code

下面是查询结果:

LEFT JOIN

 

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 LEFT JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName
View Code

 

下面是查询结果:

RIGHT JOIN

 

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 RIGHT JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName
View Code

 

下面是查询结果:

FULL JOIN

 

1 SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
2 FROM Persons
3 FULL JOIN Orders
4 ON Persons.Id_P=Orders.Id_P
5 ORDER BY Persons.LastName
View Code

 

下面是查询结果:

从上面的这张查询结果,我们可以看到它们几个之间的关系(我觉得W3School上面的这个例子十分经典,它顺着一条线下来,很清晰、很明了)。

1.取上面4条数据就是A [INNER]JOIN B

2.取上面的5条数据就是A LEFT JOIN B

3.取上面的4条和最后一条数据就是 A RGHT JOIN B

4.将这些数据联合起来计时A FULL JOIN B.

5.如果现在有一个需求是:取出A中的数据必须在B中存在的,就是上面例子中的RIGHT JOIN 语句后面加一个条件: WHERE Persons.Id_P IS NOT NULL

6.如果现在有一个需求是:取出B中的数据必须在A中存在的,就是上面例子中的LEFT JOIN 语句后面加一个条件: WHERE Orders.Id_P IS NOT NULL

呵呵,写得不好,希望各位朋友指正。我好学习进步。