一、外连接查询
### --- 左外连接
——> 左外连接 , 使用 LEFT OUTER JOIN , OUTER 可以省略
### --- 左外连接的特点
——> 以左表为基准, 匹配右边表中的数据,如果匹配的上,就展示匹配到的数据
——> 如果匹配不到, 左表中的数据正常展示, 右边的展示为null.
### --- 语法格式
SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件
-- 左外连接查询
SELECT * FROM category c LEFT JOIN products p ON c.`cid`= p.`category_id`;
### --- 左外连接, 查询每个分类下的商品个数
~~~ # 查询每个分类下的商品个数
/*
1.连接条件: 主表.主键 = 从表.外键
2.查询条件: 每个分类 需要分组
3.要查询的字段: 分类名称, 分类下商品个数
*/
SELECT
c.`cname` AS '分类名称',
COUNT(p.`pid`) AS '商品个数'
FROM category c LEFT JOIN products p ON c.`cid` = p.`category_id`
GROUP BY c.`cname`;
二、右外连接
### --- 右外连接
——> 右外连接 , 使用 RIGHT OUTER JOIN , OUTER 可以省略
### --- 右外连接的特点
——> 以右表为基准,匹配左边表中的数据,如果能匹配到,展示匹配到的数据
——> 如果匹配不到,右表中的数据正常展示, 左边展示为null
### --- 语法格式
SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件
-- 右外连接查询
SELECT * FROM products p RIGHT JOIN category c ON p.`category_id` = c.`cid`;
三、各种连接方式的总结
### --- 各种连接方式的总结
——> 内连接: inner join , 只获取两张表中 交集部分的数据.
——> 左外连接: left join , 以左表为基准 ,查询左表的所有数据, 以及与右表有交集的部分
——> 右外连接: right join , 以右表为基准,查询右表的所有的数据,以及与左表有交集的部分
四、sql语句
### --- sql语句
/*
外连接查询
左外连接
语法格式 关键字 left [outer] join
select 字段名 from 左表 left join 右表 on 连接条件
左外连接的特点
以左表为基准 匹配右表中的数据 如果能匹配上就显示
如果匹配不上, 左表中的数据正常显示,右表数据显示为null
右外连接
语法格式 关键字 right [outer] join
select 字段名 from 左表 right join 右表 on 条件
右外连接的特点
以右表为基准 匹配左表中的数据 如果能够匹配上 就显示
如果匹配不到 右表中的数据就正常显示 左表显示null
*/
-- 左外连接查询
SELECT
*
FROM category c
LEFT JOIN products p ON c.`cid` = p.`category_id`;
-- 查询每个分类下的商品个数
/*
1.查询的表
2.查询的条件 分组 统计
3.查询的字段 分类 分类下商品个数信息
4.表的连接条件
*/
SELECT
c.`cname`,
COUNT(p.`pid`)
FROM
-- 表连接
category c LEFT JOIN products p ON c.`cid` = p.`category_id`
-- 分组
GROUP BY c.`cname`;
-- 右外连接查询
SELECT * FROM products p RIGHT JOIN category c ON p.`category_id` = c.`cid`;