MySQL入门(五)
多表查询简介
SELECT
*
FROM
表1,
表2;
首先看上述sql查询语句,它得到的结果是表1和表2中数据的笛卡尔积,也就是形如 <表1中数据,表2中数据> 的所有可能组合的数据对,那么为了实现理想的多表查询,我们就需要消除无效数据,可根据业务的需要使用不同的条件进行查询。
那么话说回来,多表查询分为连接查询和子查询,而链接查询又分为内连接和外连接,而外连接又分为左外链接和右外连接,接下来逐一讲解他们的概念。
内连接查询
基本语法
-- 隐式内连接
SELECT
字段列表
FROM
表1,
表2,
...
WHERE
条件;
-- 显示内连接
SELECT
字段列表
FROM
表1
INNER JOIN
表2
ON
条件;
内连接本质上相当于查询A、B交集数据。
显示内连接只能查询两个表的数据,将表1作为主表。
另外在多表查询时,由于字段名有可能重复,所以在字段列表中使用形如 表名.字段名 的形式。
以及,可以通过给表起别名的方式简化多表查询的写法,如下:
SELECT
t1.id,
t2.name
FROM
表1 t1,
表2 t2
WHERE
t1.id = t2.id;
外连接
基本语法
-- 左外连接
SELECT
字段列表
FROM
表1
LEFT OUTER JOIN
表2
ON
条件;
-- 右外连接
SELECT
字段列表
FROM
表1
RIGHT OUTER JOIN
表2
ON
条件;
左外连接相当于查询A表所有数据和交集部分数据。 右外连接相当于查询B表所有数据和交集部分数据。
外连接和内连接的区别在于,内连接是通过另一个表的数据来筛选数据,而外连接只是在查询主表的同时加上副表对应的数据。
子查询
子查询就是在查询中嵌套查询。
子查询根据查询结果的不同,作用不同。
-- 单行单列:作为条件值,使用= != > < 等进行条件判断,例如↓
SELECT
字段列表
FROM
表
WHERE
字段名 = (子查询);
-- 多行单列:作为条件值,使用in等关键字进行条件判断,例如↓
SELECT
字段列表
FROM
表
IN
(子查询);
-- 多行多列:作为虚拟表
SELECT
字段列表
FROM
(子查询)
WHERE
条件;
可以把子查询和连接查询一起使用。