什么是联结表?
联结,用来在一条SELECT语句中关联表,因此称为联结。使用特殊语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行
什么时候使用联结?
当数据存储在多个表中,使用联结,用一条SELECT语句就检索出数据
如何创建联结
指定要联结所有表以及关联它们的方式:
a 表
id | name |
---|---|
1 | pen |
2 | book |
b 表
id | price |
---|---|
1 | $20 |
2 | $50 |
//创建联结
SELECT name,price FROM a,b WHERE a.id = b.id;
联结两个表,实际是将第一个表中的每一行与第二个表中的每一行配对,WHERE子句作为过滤条件,只包含那些匹配给定条件(联结条件)的行。
没有WHERE子句,第一个表中每一行与第二个表中每一行配对,不管它们逻辑上是否能配在一起
沒有WHERE子句,返回笛卡儿积联结,也称为叉联结
SELECT name,price FROM a,b;
笛卡儿积
由没有联结条件的表关系返回的结果为笛卡儿积,减少出的行的数目是第一个表中的行数乘以第二个表中的行数
内联结
内联结(inner join)称为等值联结
下面的SELECT语句返回与前面例子完全相同的数据,联结条件用特定ON子句而不是WHERE子句 。
SELECT name,price FROM a INNER JOIN b on a.id = b.id;
外联结(左外联结、右外联结、全外联结)
左外联结
左外联结就是保留左边表的所有数据,连接的表如果没有就是null
SELECT name,price FROM a LEFT OUTER JOIN b on a.id =b.id;
实例图
右外联结
右外联结就是保留左边表的所有数据,连接的表如果没有就是null
SELECT name,price FROM a RIGHT OUTER JOIN b on a.id =b.id;
实例图
全外联结(full outer join),包含两个表的不关联的行
SELECT name,price FROM a FULL OUTER JOIN b on a.id =b.id;
实例图