MySQL多表查询

1、多表查询的分类:
(1)内连接:join,inner join
(2)外连接:left join,left outer join,right join,right outer join,union
(3)交叉连接:cross join

2、实例:
两张表a,b:
表a:这里写图片描述
表b:这里写图片描述
(1)内连接查询,查询公共部分

SELECT
    a.*, b.*
FROM
    a
JOIN b ON a.id = b.id

查询结果:这里写图片描述
(2)外连接查询,分为很多种情况:
A、left join和left outer join:

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

这里写图片描述
查询a表的全部数据,其中b表中和a表id重叠的部分被查询到,b表中没有的部分以Null填充

B、right join和right outer join:

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

这里写图片描述
两种查询方式类似,这个是查询b表的全部内容,a表没有的部分用Null填充
另外有一种情况是查询a表或b表的属于自己独有的数据,这时候只要加上where a.id is null 或者where b.id is null 如:

SELECT
    a.*, b.*
FROM
    a
RIGHT JOIN b ON a.id = b.id
WHERE
    a.id IS NULL

这里写图片描述

C、union
查询全部数据,可以避免笛卡尔积现象,如

SELECT
    a.*, b.*
FROM
    a,b

这里写图片描述
会造成笛卡尔积现象
使用union可以避免这种现象:

SELECT
    a.*, b.*
FROM
    a
LEFT JOIN b ON a.id = b.id
UNION
    SELECT
        a.*, b.*
    FROM
        a
    RIGHT JOIN b ON a.id = b.id

这里写图片描述
如果想查询两张表公共部分之外的内容可以使用where来实现,如:

SELECT
    a.*, b.*
FROM
    a
LEFT JOIN b ON a.id = b.id
WHERE
    b.id IS NULL
UNION
    SELECT
        a.*, b.*
    FROM
        a
    RIGHT JOIN b ON a.id = b.id
    WHERE
        a.id IS NULL

这里写图片描述
(3)交叉连接cross join ,查询笛卡尔积,如:

SELECT
    a.*, b.*
FROM
    a
CROSS JOIN b

这里写图片描述
使用cross join时也可以使用on进行条件限制,和使用where的效果一样

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值