1、外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。通过外键查找:
SELECT vend_name, prod_name, prid_price FROM vendors, products WHERE vendors.vend_id = products.vend_id ORDER BY vend_name, prod_name;
在引用的列可能出现二义性,必须使用完全限定列名。
如果没有用WHERE子句进行条件过滤则返回的结果是笛卡尔积,即两个表行的乘积。
2、上条的语句所用的联结是等值联结,它基于两个表之间的相等测试,这种联结也成为内部联结。对于这种联结可以使用不同的语法:
SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;
ANSI SQL规范首先INNER JOIN语法。
3、SQL对一条SELECT语句中可以联结的表的数目没有限制,创建联结规则基本相同。
但MySQL在运行时关联指定的每个表以处理联结,这种处理可能很耗费资源,因此不要联结不必要的表,联结的表越多性能下降越厉害。
4、自联结
加入想查询ID为DTNTR的物品相同生产厂家的其他物品,可以采用子查询的方式:
SELECT prod_id, prod_name FROM products
WHERE vend_id = ( SELECT vend_id FROM products WHERE prod_id =‘DTNTR’);
也可以采用自联结的方式:
SELECT p1.prod_id, p1.prod_name FROM produc