SQL join用法

在说join之间,我们必须对where有一个清晰的认识。

WHERE 子句

有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
如果只希望选取居住在城市 “Beijing” 中的人,我们需要向 SELECT 语句添加 WHERE 子句:

LastNameFirstNameAddressCityYear
AdamsJohnOxford StreetLondon1970
BushGeorgeFifth AvenueNew York 1975
CarterThomasChangan StreetBeijing1980
GatesBillXuanwumen 10Beijing1985
SELECT * FROM Persons WHERE City='Beijing'

注:SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,请不要使用引号。

SELECT * FROM Persons WHERE FirstName='Bush'

SELECT * FROM Persons WHERE Year>1965

Join

join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing
Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

谁订购了产品,并且他们订购了什么产品?
1. 我们可以通过引用两个表的方式,从两个表中获取数据:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 

2.使用join

常用的join有四种,inner join, left outer join, right outer join, full outer join,关键字OUTER是可选择的,取决于具体语言,在实现上它们都是遵循标准的,因此FULL JOIN和FULL OUTER JOIN是一样的。我们一一介绍。

INNER JOIN

INNER JOIN跟JOIN是一样的,一般INNER关键字可以省略。

INNER JOIN将只会返回相匹配的元素项,即不会返回结果为NULL的数据项。

在表中存在至少一个匹配时,inner join 返回行。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName

为了方便理解,我们可以把表当成类,行当成一个对象。
总的来说,四种JOIN的使用/区别可以描述为:

left join 会从左表那里返回所有的记录,即使在右表中没有匹配的行。

right outer join 右连接,返回右表中的所有记录,即使在左表中没有记录与它匹配

full outer join 全连接,返回左右表中的所有记录

Set "A"    Set "B"

 AA         BB
--------   --------
 Item 1     Item 3
 Item 2     Item 4
 Item 3     Item 5
 Item 4     Item 6

LEFT OUTER JOIN

SELECT * FROM A LEFT OUTER JOIN B ON AA = BB
AA         BB
--------   --------
 Item 1
 Item 2
 Item 3     Item 3
 Item 4     Item 4

左连接(LEFT OUTER JOIN)会输出左边的表中的所有结果,如果右边的表中有相应项,则会输出,否则为NULL。

RIGHT OUTER JOIN

如果使用右连接,结果将会输出BB中所有的数据项和AA中相应的匹配项(注意你现在是获取了右边的表中的所有数据项):

SELECT * FROM A RIGHT OUTER JOIN B ON AA = BB

 AA         BB
--------   --------
 Item 3     Item 3
 Item 4     Item 4
            Item 5
            Item 6

FULL OUTER JOIN

如果想要取得所有的元素项,则可以使用FULL JOIN:

SELECT * FROM A FULL JOIN B ON AA = BB

 AA         BB
--------   --------
 Item 1            <-----+
 Item 2                  |
 Item 3     Item 3       |
 Item 4     Item 4       |
            Item 5       +--- empty holes are NULL's
            Item 6       |
   ^                     |
   |                     |
   +---------------------+

缺失的数据项的值是NULL。

INNER JOIN

INNER JOIN跟JOIN是一样的,一般INNER关键字可以省略。INNER JOIN将只会返回相匹配的元素项,即不会返回结果为NULL的数据项。

SELECT * FROM A INNER JOIN B ON AA = BB

 AA         BB
--------   --------
 Item 3     Item 3
 Item 4     Item 4

这里写图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值