日期:2014-05-17  浏览次数:20413 次

SQL 基础语法问题(左连、右连、内连)
我有2张表
1:Person

2:Order

1:
Create Table Order
(
OrderID int identity(1,1),
OrderNo varchar(50),
ID_P int
)
2:
Create Table Person
(
PersonID int identity(1,1),
LastName varchar(50),
FirstName varchar(50),
AddRess varchar(50),
City varchar(50),
ID_P int
)
里面数据
Order
1 123123 1
2 456456 2
3 456456 5
Person
1 g X1 USA Feizhou 1
2 l XJ CHINA shijie NULL

SQL语句如下
SELECT P.LastName, P.FirstName, P.ID_P
FROM Person p
LEFT JOIN Order o
ON
p.ID_P=o.ID_P
输出
g X1 1
l XJ NULL
问题:我在这里左连,条件p.ID_P=o.ID_P 为什么我在这里已经限制了(Order.ID_P=Person.ID_P)应该显示1条,为什么会显示2条
详细点解释和介绍

SELECT P.LastName, P.FirstName, P.ID_P
FROM Person p
RIGHT JOIN Order o
ON
p.ID_P=o.ID_P
输出
g X1 1
NULL NULL NULL
NULL NULL NULL
问题:我在这里右连,条件p.ID_P=o.ID_P 为什么我在这里已经限制了(Order.ID_P=Person.ID_P)应该显示1条,为什么会显示2条
详细点解释和介绍


SELECT P.LastName, P.FirstName, P.ID_P
FROM Person p
INNER JOIN Order o
ON
p.ID_P=o.ID_P
输出
g X1 1
问题:我在这里内连,条件p.ID_P=o.ID_P 为什么我在这里已经限制了(Order.ID_P=Person.ID_P)应该显示1条,为什么会显示2条
详细点解释和介绍

详细点啊!!



------解决方案--------------------
1.由于是做连接,所以会显示Person的2条记录。

2.是右连接,那么会显示order表的记录,但由于你的select子句中是: P.LastName, P.FirstName, P.ID_P,由于按照ID_P字段关联,所以只有为1的ID_P关联了出来,其他两天都没关联上,所以person表的字段,就都是null了

3.内连接,就是2个表都有的数据,才出来,所以就显示了那个ID_P为1的记录
------解决方案--------------------
1.左连接left join
就是满足左边表的条件的所有记录都显示出来,而右边无显示的以NULL显示
2.右连接right join
就是满足右边表的条件的所有记录都显示出来,而左边无显示的以NULL显示
3.内连接inner join
又名等值连接,表示两个表的条件都满足的记录被显示出来,而无满足条件的记录不予以显示。。