MySQL连接查询

数据准备

# 创建一个person表
create table person(
	id int,
    name varchar(20),
    card_id int
);

# 创建一个card表
create table card(
	id int,
    name varchar(20)
);

# 插入数据
insert into card values (1, '饭卡'), (2, '建行卡'), (3, '农行卡'), (4, '工商卡'), (5, '邮政卡');

insert into person values (1, '张三', 1), (2, '李四', 3), (3, '王五', 6);

inner join(内连接)

在这里插入图片描述

select * from person inner join card on card_id = card.id;

+------+--------+--------+------+-----------+
| id   | name   | card_id | id   | name      |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
+------+--------+--------+------+-----------+

# 内联查询 其实就是两个表中的数据,通过某个字段相等,查询出相关记录

left join(左外连接)

在这里插入图片描述

select * from person left join card on card_id = card.id;

+------+--------+--------+------+-----------+
| id   | name   | card_id | id   | name     |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
|    3 | 王五   |      6 | NULL | NULL      |
+------+--------+--------+------+-----------+

# 完整显示左边的表 ( person ) ,右边的表如果符合条件就显示,不符合则补 NULL 。

right join(右外连接)

在这里插入图片描述

select * from person right join card on card_id = card.id;

+------+--------+--------+------+-----------+
| id   | name   | card_id | id   | name     |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
| NULL | NULL   |   NULL |    2 | 建行卡    |
| NULL | NULL   |   NULL |    4 | 工商卡    |
| NULL | NULL   |   NULL |    5 | 邮政卡    |
+------+--------+--------+------+-----------+

# 完整显示右边的表 ( card ) ,左边的表如果符合条件就显示,不符合则补 NULL 。

full join(全外连接)

在这里插入图片描述

select * from person left join card on person.card_id = card.id
union
select * from person right join card on person.card_id = card.id;

+------+--------+--------+------+-----------+
| id   | name   | card_id| id   | name      |
+------+--------+--------+------+-----------+
|    1 | 张三   |      1 |    1 | 饭卡      |
|    2 | 李四   |      3 |    3 | 农行卡    |
|    3 | 王五   |      6 | NULL | NULL      |
| NULL | NULL   |   NULL |    2 | 建行卡    |
| NULL | NULL   |   NULL |    4 | 工商卡    |
| NULL | NULL   |   NULL |    5 | 邮政卡    |
+------+--------+--------+------+-----------+

# MySQL中全连接要使用union将两张表连接在一起,不符合的补NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值