本文为本人学习书籍《MySQL必知必会》笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~
第15章 联结(join)表
关系表的设计就是要保证把信息分解成多个表,一类数据一个表。例如品牌表brand、商品表product、品类表product_category。各表通过某些常用的值(即关系设计中的关系relation)互相关联。品牌表brand的主键为ID,品牌表brand的主键又叫商品表product的外键,它将brand表和product表想关联。
15.1 外键(foreign key):
- 外键为某个表中的一列,它包含另一个表的主键值,定义了两个表的关系。
- 可伸缩性(Scale):能够适应增加的工作量而不失败,称为可伸缩性好。
- 联结使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行。
15.2 创建联结
SELECT product.Name AS product_name,
product_category.Name AS category_name,
Price1,
Model
FROM product,product_category
WHERE product.CategoryId=product_category.Id
ORDER BY product.Name
Limit 0,5;
所有联结都有WHERE子句。没有WHERE子句得出没有联结条件的结果,即笛卡儿积。
笛卡儿积(cartesian product):由没有联结条件的表关系返回的结果为笛卡儿积。
15.2.2 内部联结INNER JOIN…ON/等值联结:它基于两个表之间的相等测试。目前用的联结为等值联结。
INNER JOIN…ON:可实现上面例子同样的功能。
SELECT product.Name AS product_name,
product_category.Name AS category_name,
Price1,
Model
FROM product INNER JOIN product_category
ON product.CategoryId=product_category.Id
ORDER BY product.Name
Limit 0,5;
15.2.3 联结多个表
SELECT product.Name AS product_name,
product_category.Name AS category_name,
brand.Name AS brand_name,
Price1,
Model
FROM product,product_category,brand
WHERE product.CategoryId=product_category.Id
AND product.BrandId=brand.Id
AND product_category.Id=615432733113008653
AND brand.Id=-9014347894162505346
ORDER BY product.Name;
上例使用联结查询与14使用子查询可以同样实现#查找“小白熊”牌温奶器的商品有多少个。