mysqld的四种连接查询
– 创建数据库
create database testJoin;
– 创建两个表
– person表
1 2 3 4 5 6 7 8
|
create table person( id int, name varchar(20), cardId int );
|
– card表
1 2 3 4 5 6
|
create table card( id int, name varchar(20) );
|
– 插入数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| insert into card values(1, '饭卡'); insert into card values(2, '建行卡'); insert into card values(3, '农行卡'); insert into card values(4, '工商卡'); insert into card values(5, '邮政卡');
insert into person values(1, '张三', 1); insert into person values(2, '李四', 3); insert into person values(3, '王五', 6);
select * from person; + | id | name | cardId | + | 1 | 张三 | 1 | | 2 | 李四 | 3 | | 3 | 王五 | 6 | +
select * from card; + | id | name | + | 1 | 饭卡 | | 2 | 建行卡 | | 3 | 农行卡 | | 4 | 工商卡 | | 5 | 邮政卡 | +
|
一. 内连接
inner join
或join
查询
内联查询,其实就是两张表中的数据,通过某个字段相等,查询出相关记录数据.
1 2 3 4 5 6 7 8 9 10 11
| select * from person inner join card on person.cardId = card.id; + | id | name | cardId | id | name | + | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | +
select * from person join card on person.cardId = card.id;
|
二. 外连接
1. 左连接 left join
或者left outer join
左外连接,会把左边的表里面的所有数据取出来,而右边表中的数据,如果有相等的,就显示出来,如果没有,就会补 NULL
1 2 3 4 5 6 7 8 9 10 11 12
| select * from person left join card on person.cardId = card.id; + | id | name | cardId | id | name | + | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | | 3 | 王五 | 6 | NULL | NULL | +
select * from person left outer join card on person.cardId = card.id;
|
2. 右连接right join
或者right outer join
右外连接,会把右边的表里面的所有数据取出来,而左边表中的数据,如果有相等的,就显示出来,如果没有,就会补 NULL
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| select * from person right join card on person.cardId = card.id; + | id | name | cardId | id | name | + | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | | NULL | NULL | NULL | 2 | 建行卡 | | NULL | NULL | NULL | 4 | 工商卡 | | NULL | NULL | NULL | 5 | 邮政卡 | +
select * from person right outer join card on person.cardId = card.id;
|
3. 完全外连接full join
或者full outer join
1 2 3
| select * from person full join card on person.cardId = card.id; ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
select * from person left join card on person.cardId = card.id union select * from person right join card on person.cardId = card.id; + | id | name | cardId | id | name | + | 1 | 张三 | 1 | 1 | 饭卡 | | 2 | 李四 | 3 | 3 | 农行卡 | | 3 | 王五 | 6 | NULL | NULL | | NULL | NULL | NULL | 2 | 建行卡 | | NULL | NULL | NULL | 4 | 工商卡 | | NULL | NULL | NULL | 5 | 邮政卡 | +
|
参考资料:
- B站视频“一天学会 MySQL 数据库”
- 大佬笔记1
- 大佬笔记2