详解MySQL的多表连接查询

版权声明:如果转载或使用本博客,请标明出处 https://blog.csdn.net/Black1499/article/details/82686999

前期准备工作

在这里我准备了一个简单的省市县的mysql数据库,进行简单的案例分析

create table province(
    pro_id int primary key,
    pro_name varchar(10)
);
insert into province values(1,'广东省'),(2,'广西省'),(3,'河南省'),(4,'河北省');

create table city(
    city_id int primary key,
    pro_id int references province(pro_id),
    city_name varchar(10)
);
insert into city values(1,1,'珠海市'),(2,1,'广州市'),
(3,3,'郑州市'),(4,3,'洛阳市');

create table district(
    dis_id int primary key,
    city_id int references city(city_id),
    dis_name varchar(10)
);
insert into district values(1,1,'斗门区'),(2,1,'金湾区'),(3,1,'香洲区'),
(4,3,'二七区'),(5,3,'中原区'),(6,3,'新郑区'),(7,3,'巩义区'),
(8,5,'天河区'),(9,5,'白云区');

一、内连接

SQL中的join用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。inner join是从多个表中返回满足join条件的所有行,返回连接的表中字段匹配的相关记录。inner join可以把inner省略掉,只使用join的效果是一样的。

select p.pro_name,c.city_name,d.dis_name from province p 
inner join city c on p.pro_id = c.pro_id
inner join district d on d.city_id = c.city_id;

结果:

二、外连接

1. left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。如果右表没有对应匹配的记录则返回null。

select p.pro_name,c.city_name,d.dis_name from province p 
left join city c on p.pro_id = c.pro_id
left join district d on d.city_id = c.city_id;

结果

2. right join(右连接):用于获取右表所有记录,即使左表没有对应匹配的记录。如果左表没有对应匹配的记录则返回null。

select p.pro_name,c.city_name,d.dis_name from province p 
right join city c on p.pro_id = c.pro_id
right join district d on d.city_id = c.city_id;

结果

ps:MySQL不支持全连接(full join)和交叉连接(across join)

三、UNION的使用

1. union用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中,将不同表中相同列中查询的数据展示出来;(不包括重复数据)

select p.pro_name,c.city_name,d.dis_name from province p 
inner join city c on p.pro_id = c.pro_id
inner join district d on d.city_id = c.city_id
union 
select p.pro_name,c.city_name,null from province p
inner join city c on p.pro_id = c.pro_id;

结果

2. union all 用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

select p.pro_name,c.city_name,d.dis_name from province p 
inner join city c on p.pro_id = c.pro_id
inner join district d on d.city_id = c.city_id
union all
select p.pro_name,c.city_name,d.dis_name from province p 
inner join city c on p.pro_id = c.pro_id
inner join district d on d.city_id = c.city_id;

结果

猜你喜欢

转载自blog.csdn.net/Black1499/article/details/82686999
今日推荐