连接查询又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
select 字段1,字段2
from 表1,表2,...;
select 字段1,字段2
from 表1,表2,...
where 连接条件;
例子SELECT name,boyname
FROM boys,beauty
WHERE beauty.boyfriend_id=boys.id;
select 查询列表
from 表1 别名,表2 别名
where 表1.key=表2.key
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
特点:select 查询列表
from 表1 别名,表2 别名
where 非等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
select 查询列表
from 表 别名1,表 别名2
where 等值的连接条件
【and 筛选条件】
【group by 分组字段】
【having 分组后的筛选】
【order by 排序字段】
select 查询列表
from 表1 别名 [连接类型]
join 表2 别名
on 连接条件
[where 筛选条件]
[group by 分组列表]
[having 分组后的筛选]
[order by 排序列表]
[limit 子句];
/*
内连接:连接类型是inner
外连接:
左外:left [outer]
右外:right [outer]
全外:full [outer]
交叉连接: cross
*/
select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件
[where 筛选条件]
[group by 分组列表]
[having 分组后的筛选]
[order by 排序列表]
[limit 子句];
SELECT last_name,department_name
FROM departments d
INNER JOIN employees e
on e.department_id = d.department_id
SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.manager_id=m.employee_id;
USE girls;
SELECT b.name,bo.*
FROM beauty b
LEFT OUTER JOIN boys bo
ON b.boyfriend_id=bo.id
WHERE bo.id IS NULL;
/*
或者按下面等价的方式
USE girls;
SELECT b.name,bo.*
FROM boys bo
RIGHT OUTER JOIN beauty b
ON b.boyfriend_id=bo.id
WHERE bo.id IS NULL;
*/
select 查询列表
from 表1 别名
cross join 表2 别名;
功能 | 可读性 | 推荐 | |
---|---|---|---|
sql92 | 少 | 一般 | 不推荐 |
sql99 | 多 | 实现了连接条件和筛选条件的分离,可读性较高 | 推荐 |
原文:https://www.cnblogs.com/sanmujun/p/12638341.html