前言
本文使用的数据库是:MySQL
今天这篇文章主要是和大家聊聊数据库的多表查询,这也在往期文章中答应大家补充的一个技能点,闲言少叙,进入正题。
精髓:多表查询是用各种方法把多表合并成单表再进行单表查询
一、多表查询是什么?
在绝大多数工程中我们所需要的数据(字段)并不在某一个数据表中储存。比如:在某商城网站项目会存在商品表、用户表、订单表等等。当我们需要某些数据时就不能在某一张表中找到,而是要通过表之间的关联关系把所需要的数据查询出来这就是多表查询。
二、多表查询的几种情况
1.交叉查询
交叉查询的结果是两张表的笛卡尔积, 即: 表A的总数 * 表B的总数。
格式: select * from A, B;
例子:select * from music, song;
解释:music 音乐表 song 歌曲表 温馨提示:下面还会用到!!!
2.连接查询
2.1 内连接查询
内连接查询结果是:两张表的交集。
显示内连接格式:
select * from A inner join B on 关联条件 where ......;
例子:
select * from music m join song s on m.m_id = s.sid; 其中inner可以省略不写.
隐式内连接格式:
select * from A, B where 关联条件......;
例子:
select * from music m, song s where m.m_id = s.sid;
2.2 外连接查询
左外连接: 表A的全集 + 两张表的交集,无交集部分用Null填充。
格式:
select * from A left outer join B on 关联条件 where ......;
例子:
select * from music m left join song s on m.m_id = s.sid; # 其中outer可以省略不写.
右外连接: 表B的全集 + 两张表的交集.
格式:
select * from A right outer join B on 关联条件 where ......;
例子:
select * from music m right join song s on m.m_id = s.sid; # 其中outer可以省略不写.
3.子查询
某个SQL语句的查询需要依赖另一个SQL语句的查询结果这就是子查询。其中里边的查询叫子查询,外边的查询叫父查询(主查询)。
格式:
select * from 表名 where 列名 in (select 列名 from 表名...);
例子:
select * from music where m_id = (select sid from song where sname = '《逍遥*》');
4.自关联查询
等同于内连接和外连接,只不过是自己和自己关联。例如:省级=>市级=>县级
# 找到所有的 省, 市, 县区及其对应的关系.
select
province.id, province.title, # 省的信息
city.id, city.title, # 市的信息
county.id, county.title # 县区的信息
from
areas as province
join
areas as city on city.pid = province.id # 市的父id = 省的id
join
areas as county on county.pid = city.id; # 县区的父id = 市的id
总结
以上就是本次要和大家聊的内容,本文介绍了多表查询的几种情况。我们要根据不同情况采取不同的方式去操作数据表。还记得开头提到的精髓吗?现在体会一下是不是感觉“任督二脉”已打通?好了就聊到这儿,先Bye-Bye啦。。。。。。