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
11231231
24564562
34564565
Person
1gX1USAFeizhou1
2lXJCHINAshijieNULL
SQL语句如下
SELECT P.LastName, P.FirstName, P.ID_P
FROM Person p
LEFT JOIN Order o
ON
p.ID_P=o.ID_P
输出
gX11
lXJNULL
问题:我在这里左连,条件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
输出
gX11
NULLNULLNULL
NULLNULLNULL
问题:我在这里右连,条件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
输出
gX11
问题:我在这里内连,条件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
又名等值连接,表示两个表的条件都满足的记录被显示出来,而无满足条件的记录不予以显示。。