多表查询
多表查询的结果是一个笛卡尔乘积(一个集合中的每一条数据和另一个集合的每一条集合结合叫笛卡尔乘积)
详解SQL join
SQL join
学习准备
- 创建products表
1 | sql复制代码CREATE TABLE `products` ( |
- 创建brand表
1 | sql复制代码CREATE TABLE `brand` ( |
products表通过brand_id引用brand表
多表查询SQL学习-SQL join
left join
- 查询所有手机(包括没有品牌信息的手机)以及对应的品牌信息:
SELECT * FROM products LEFT JOIN brand ON products.brand_id = brand.id;
- 查询没有对应品牌数据的产品:
SELECT * FROM products LEFT JOIN brand ON products.brand_id = brand.id where brand.id IS NULL;
right join
- 查询所有的品牌以及品牌对应的产品信息:
SELECT * FROM products RIGHT JOIN brand ON products.brand_id = brand.id;
- 查询没有对应产品的品牌信息
SELECT * FROM products RIGHT JOIN brand ON products.brand_id = brand.id WHERE products.brand_id IS NULL;
inner join
- 查询产品信息并且该产品有对应的品牌信息:
SELECT * FROM products JOIN brand ON products.brand_id = brand.id;
等价于:
SELECT * FROM products, brand WHERE products.brand_id = brand.id;
full outer join
MySQL不支持
FULL JOIN
关键字,full out join
相当于left join
unionright join
- 查询产品及品牌信息
1 | sql复制代码(SELECT * FROM products LEFT JOIN brand ON products.brand_id = brand.id) UNION |
full outer join excluding inner join
1 | sql复制代码(SELECT * FROM products LEFT JOIN brand ON products.brand_id = brand.id WHERE brand.id IS NULL) UNION |
本文转载自: 掘金