MySQL的几种连接查询(join,left join,right join,union,cross join)

一 连接查询介绍

mysql有以下几种连接查询,如下

  • 内连接:join, inner join
  • 外连接:left join, right join, left outer join, right outer join, union
  • 交叉连接(笛卡尔积):cross join

二 实例说明

需要创建两张表,如下
在这里插入图片描述
在这里插入图片描述

1. join和inner join

join和inner join是等价的,都是内连接,内连接也叫等值连接。

SELECT a.*,b.*
FROM my_products AS a JOIN my_orders AS b
ON a.product_id = b.goods_id;
#或者
SELECT a.*,b.*
FROM my_products AS a INNER JOIN my_orders AS b
ON a.product_id = b.goods_id

在这里插入图片描述
可以看到,只有满足关键字ON后的条件的记录才被筛选出来,满足条件的记录同时也是两个表的关联部分,所有也叫内部连接或者等值连接。

2. left join和left outer join

left join和 left outer join是等价的,称为左外连接。左外连接是以join左边的表为基准查询左表所有数据,以及join右边表相关联的数据,如果右表没有,就以NULL补齐。如下

SELECT a.*,b.*
FROM my_products AS a LEFT JOIN my_orders AS b
ON a.product_id = b.goods_id;
#或者
SELECT a.*,b.*
FROM my_products AS a LEFT OUTER JOIN my_orders AS b
ON a.product_id = b.goods_id

在这里插入图片描述

3. right join和right outer join

left join和 left outer join是等价的,称为右外连接。右外连接是以join右边的表为基准查询右表所有数据,以及join左边表相关联的数据,如果左表没有,就以NULL补齐。如下

SELECT a.*,b.*
FROM my_products AS a RIGHT JOIN my_orders AS b
ON a.product_id = b.goods_id;
#或者
SELECT a.*,b.*
FROM my_products AS a RIGHT OUTER JOIN my_orders AS b
ON a.product_id = b.goods_id

在这里插入图片描述

4. union

union的作用是把两个结果集拼接在一起,默认自动去掉重复的行,如果不想去掉重复的行可在union后面加一个all关键字,即union all。如下

#不去重
SELECT product_id,product_name,product_number
FROM my_products 
WHERE product_number > 20
UNION ALL
SELECT product_id,product_name,product_number
FROM my_products 
WHERE product_number <= 28;

在这里插入图片描述

#去重
SELECT product_id,product_name,product_number
FROM my_products 
WHERE product_number > 20
UNION
SELECT product_id,product_name,product_number
FROM my_products 
WHERE product_number <= 28;

在这里插入图片描述
注意:在用union或者union进行组合查询时每个select语句返回的列名必须相同。

5. cross join

cross join是进行交叉查询,也称笛卡尔积,即A表里的每条数据都要与B表里每条数据进行组合。如下

SELECT *
FROM my_products CROSS JOIN my_orders
ORDER BY product_id

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值