sqlserver left join查询数据第一条_数据库查询join的知识总结

作者: topEngineerray

来源:CSDN

在sql当中,有下面这些join类型:

(INNER)JOIN:返回两个表中具有匹配值的记录

LEFT(OUTER)JOIN:返回左侧表中的所有记录,以及右侧表中的匹配记录

RIGHT (OUTER) JOIN:从右表返回所有记录,并从左表返回匹配的记录

FULL(OUTER)JOIN:当左表或右表中存在匹配项时,返回所有记录

分别如下图所示:

213cc928f75bedcf217c823e0763d612.png

Inner join

INNER JOIN和JOIN是一个意思。

INNER JOIN选择两个表中具有匹配值的记录:

一个INNER JOIN的例子如下:

SELECT column_name(s)FROM table1INNER JOIN table2ON table1.column_name = table2.column_name;

示例database如下:

以下是Orders表中的一些数据:

4b6d2620d594bbc6b8bb9c056ac80768.png

下面是Customers表中的一些数据:

fdf573cb98a46e76360b853bc357ba99.png

以下SQL语句选择所有包含客户信息的订单:

SELECT Orders.OrderID, Customers.CustomerNameFROM OrdersINNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;

该查询的查询结果为

678664db16dae61a365dc10380ea3c64.png

再来看另一个例子,假设我们现在有如下的database:

Persons表如下:

35f671752d1c5aa166b41c03c1e34977.png

Orders表如下:

1d3076594f1d0afb06c31862c09c094c.png

我们希望查出所有人的订单,使用inner join查询如下:

ec0c0f2c95e9e9a9233ab696037b8a5d.png

则其查询结果为:

56114feadb66121bfbe7cf7a47131fac.png

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

LEFT JOIN

LEFT JOIN关键字从左表(表1)返回所有记录,并从右表(表2)返回匹配的记录。 如果不匹配,则右侧结果为NULL。

示例database如下:

下面是Customers表中的一些数据:

fc04b2cec3dc46c15d6108775287e49c.png

下面是Orders表中的数据:

ca2c54f6428da8476c9dd0920f599a01.png

下面是一个LEFT JOIN的例子:

300bc188a5e2311f377128ef9d9d857d.png

上面的查询结果为:

581e156a0dee54046a798e7528870d30.png

LEFT JOIN 关键字会从左表 (Customers) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

RIGHT JOIN

在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN, RIGHT JOIN的写法如下:

f9b88ec1e0c7005e15ebfa7601cde453.png

示例database如下:

下面是orders表中的一些数据:

f50282fe3d050634ad51c717b0421ef3.png

下面是Employees表中的一些数据:

69f1ec036781913e319fec5693dcbe5c.png

一个right join的例子为:

90ad64108b0f5c5eed6e1cf5be6c6a02.png

上面查询的查询结果为:

87b2df6d3446d06c590d15ca899f54aa.png

RIGHT JOIN 关键字会从右表 (Employees) 那里返回所有的行,即使在左表 (orders) 中没有匹配的行

FULL JOIN

full join的语法如下:

cca213fa8d3896896f3b10115fc6e6a2.png

示例database如下:

下面是Customers表中的一些数据:

3e1e67dcac3abb58802b49848bd4f6d3.png

下面是Orders表中的一些数据:

f29340bc7c8a435fffaff8a2eaaeaab6.png

使用full join查询的sql如下:

8612f137c890c02f551cd66c0f04c90f.png

其查询结果为:

3e1c52d2b49afdd014abcd75decb33f6.png

再来看另一个例子

Person表如下:

982a050201a09f869e5991d15df58a86.png

Orders表如下:

c2fb26820fce6a3fbcf83416594256c1.png

现有full join如下:

c6c27ae9dff7ef222bcfeb22aa30349a.png

则其查询结果为:

cb6eea6a9177a1f18ddb7f4044677f2b.png

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。

-----------------------------

最后,我自己是一名从事了多年开发的JAVA老程序员,辞职目前在做自己的java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的java学习干货,可以送给每一位喜欢java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:交流,即可免费获取。


5125ac9eb25eef1591d6bfdbb4857b0c.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值