# 创建一个person表createtable person(
id int,
name varchar(20),
card_id int);# 创建一个card表createtable card(
id int,
name varchar(20));# 插入数据insertinto card values(1,'饭卡'),(2,'建行卡'),(3,'农行卡'),(4,'工商卡'),(5,'邮政卡');insertinto person values(1,'张三',1),(2,'李四',3),(3,'王五',6);
inner join(内连接)
select*from person innerjoin card on card_id = card.id;+------+--------+--------+------+-----------+| id | name | card_id | id | name |+------+--------+--------+------+-----------+|1| 张三 |1|1| 饭卡 ||2| 李四 |3|3| 农行卡 |+------+--------+--------+------+-----------+# 内联查询 其实就是两个表中的数据,通过某个字段相等,查询出相关记录
left join(左外连接)
select*from person leftjoin 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 rightjoin 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 leftjoin card on person.card_id = card.id
unionselect*from person rightjoin 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