【MySQL】什么是联结join?

目录

什么是联结?内部联结?

表的别名

自联结

外部联结

1、内部联结

2、外部联结(left join)

3、 外部联结(right join)


什么是联结?内部联结?

联结或者说关联,指的就是在数据检索查询时,将多个表的数据联系起来,完成共同的查询。

比如这样进行搜索:

select vend_name,prod_name,prod_price from vendors,products
 where vendors.id=products.id order by vend_name,prod_name;

在这个句子里面,发现from后面跟着两个表:vendors和products,连结的条件是:vendors.id=products.id。返回的字段中vend_name是属于vendors表的,而prod_name和prod_price是属于products表的,这就是将两个表的数据联合起来查询。

需要注意这里的条件where后面的字段,必须是字段的完全限定列名,即“表名.列名”。

这种联结方式基于两个表里面2个字段的值相等,我们把这种联结叫做等值联结,或者“内部联结”。

但是更为标准的写法是:

select  vend_name,prod_name,prod_price from vendors inner join products on vendors.id=products.id ;

这其实也是我们更常见的写法,现在需要联结的表以及联结的条件由inner join 以及on来给出。


表的别名

比如:

select c.cust_name,c.cust_contact from customers AS c,orders AS o,
orderitems AS oi where c.cust_id = o.cust_id AND oi.order_num=o.order_num AND 
prod_id='TNT2' ORDER BY  c.cust_name; 

这里就给2个表起了2个别名:c和o。使用别名可以缩短SQL语句,以及允许在单次的select语句中多次使用相同的表。


自联结

之前谈到了给表起别名,那么可能有人奇怪,什么叫:“允许在单次的select语句中多次使用相同的表”???

这里举一个例子:

比如一个产品表里面id=wenti(问题的拼音)的产品都有问题,然后想找到这个产品对应的生产商生产的其他的产品,在这个生产表里面的位置, 那么就可以写成下面这样:

select p1.prod_id ,p1.prod_name from products as p1,product as p2 where
 p1.vend_id=p2.vend_id and p1.prod_id='wenti';

这里就是相同的一个表:produtc,但是要使用2次,因此就起了2个不同的别名。


外部联结

如果说内部联结只返回两个表之间关联的数据,那么外部联结,除了返回关联的数据,还返回剩下的数据。比如统计顾客下了哪些订单的时候,还会加上没下订单的客户。

比如有下面的订单表,a表是用户表(字段分别是用户的id和姓名),b表是订单表(字段分别是订单的id和内容)。

table_a表id

table_a表name

table_b表id

table_a表content

1

A000101

1

B000201

2

A000102

2

B000202

3

A000103

3

B000203

4

A000104

6

B000204

5

A000105

7

B000205

8

A000106

9

B000206

1、内部联结

就是下面这样:

 查询语句:

SELECT a.*,b.*  FROM table_a a  INNER JOIN table_b b  ON a.id=b.id

返回的结果:

 

2、外部联结(left join)

 查询:

SELECT a.*,b.*  FROM table_a a  LEFT JOIN table_b b  ON a.id=b.id

返回结果:

3、 外部联结(right join)

 查询:

SELECT a.*,b.*  FROM table_a a RIGHT JOIN table_b b  ON a.id=b.id

返回的结果:

1

A000101

1

B000201

2

A000102

2

B000202

3

A000103

3

B000203

(null)(null)6

B000204

(null)(null)7

B000205

(null)(null)9

B000206

参考:

《MySQL必知必会》

简书网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值