MySQL数据库联合查询(select ... join)的三种方式示例

MySQL数据库联合查询的三种方式示例

1.内连接:inner join
2.左链接:left join
3.右链接:right join

–第一步:创建两个表person、car,并且插入测试数据。
create table person(
id_card varchar(18) unique key,
name varchar(32) not null
);
±---------±-------+
| id_card | name |
±---------±-------+
| ID000001 | 关羽 |
| ID000002 | 张飞 |
| ID000003 | 赵云 |
| ID000004 | 刘备 |
±---------±-------+

create table car(
person_id_card varchar(18),
brand varchar(10),
license varchar(8) not null unique
);
±---------------±----------±-----------+
| person_id_card | brand | license |
±---------------±----------±-----------+
| ID000002 | 比亚迪 | 京A333901 |
| ID000002 | 宝马 | 京B55555 |
| ID000003 | 吉利 | 沪A568239 |
| ID000003 | 奥迪 | 沪C22222 |
| ID000005 | 大众 | 津A99999 |
| ID000001 | 长城 | 鲁A126985 |
| ID000001 | 奔驰 | 鲁A66666 |
±---------------±----------±-----------+

–第二步:内联查询 - 查出的数据是两个表的重合部分。
select p., c.
from person as p
inner join car as c
on p.id_card = c.person_id_card;
±---------±-------±---------------±----------±-----------+
| id_card | name | person_id_card | brand | license |
±---------±-------±---------------±----------±-----------+
| ID000002 | 张飞 | ID000002 | 比亚迪 | 京A333901 |
| ID000002 | 张飞 | ID000002 | 宝马 | 京B55555 |
| ID000003 | 赵云 | ID000003 | 吉利 | 沪A568239 |
| ID000003 | 赵云 | ID000003 | 奥迪 | 沪C22222 |
| ID000001 | 关羽 | ID000001 | 长城 | 鲁A126985 |
| ID000001 | 关羽 | ID000001 | 奔驰 | 鲁A66666 |
±---------±-------±---------------±----------±-----------+

–第三步:左联查询 - 查出的数据是左表的全部,右表没有的数据显示NULL值。
select p., c.
from person as p
left join car as c
on p.id_card = c.person_id_card;
±---------±-------±---------------±----------±-----------+
| id_card | name | person_id_card | brand | license |
±---------±-------±---------------±----------±-----------+
| ID000002 | 张飞 | ID000002 | 比亚迪 | 京A333901 |
| ID000002 | 张飞 | ID000002 | 宝马 | 京B55555 |
| ID000003 | 赵云 | ID000003 | 吉利 | 沪A568239 |
| ID000003 | 赵云 | ID000003 | 奥迪 | 沪C22222 |
| ID000001 | 关羽 | ID000001 | 长城 | 鲁A126985 |
| ID000001 | 关羽 | ID000001 | 奔驰 | 鲁A66666 |
| ID000004 | 刘备 | NULL | NULL | NULL |
±---------±-------±---------------±----------±-----------+

–第三步:右联查询 - 查出的数据是右表的全部,左表没有的数据显示NULL值。
select p., c.
from person as p
right join car as c
on p.id_card = c.person_id_card;
±---------±-------±---------------±----------±-----------+
| id_card | name | person_id_card | brand | license |
±---------±-------±---------------±----------±-----------+
| ID000002 | 张飞 | ID000002 | 比亚迪 | 京A333901 |
| ID000002 | 张飞 | ID000002 | 宝马 | 京B55555 |
| ID000003 | 赵云 | ID000003 | 吉利 | 沪A568239 |
| ID000003 | 赵云 | ID000003 | 奥迪 | 沪C22222 |
| NULL | NULL | ID000005 | 大众 | 津A99999 |
| ID000001 | 关羽 | ID000001 | 长城 | 鲁A126985 |
| ID000001 | 关羽 | ID000001 | 奔驰 | 鲁A66666 |
±---------±-------±---------------±----------±-----------+

你可能感兴趣的:(mysql)