联结表
创建联结
select 字段1,字段2,字段3,……
from 表1,表2 从两个表中选取的所需指标名
where 表1中的字段1=表2中的字段1 通过两表的主键/外键联结(字段名前要加表名进行完全限定,否则会分不清是哪个表中的字段)
order by 字段1,字段2,…… 排序规则
selcet vend_name,prod_name,prod_price
from vendors,products
where vendors.vend_id=products.vend_id
order by vend_name,prod_name;
where子句的重要性
使用where子句类似于excel的vlookup函数,只匹配两个列表中都存在的字段1的值,如果不使用where子句,将会出现笛卡尔积
笛卡尔积
由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的中的行数
内部联结
前面的联结称为等值联结,它基于两个表之间的相等测试,这种联结也称为内部联结
对于这种联结可以使用稍微不同的语法来明确的指定联结的类型。
select vend_name,prod_name,prod_price
from vendors inner join products
on vendors.vend_id=products.vend_id;
此语句中的select与前面的select语句相同,但是from子句不同。这里,两个表之间的关系是from子句的组成部分,以inner join指定。
联结多个表
SQL对一条select语句中可以联结的表的数目没有限制
创建联结的基本规则也相同。首先列出所有表,然后定义表之间的关系
select prod_name,vend_name,prod_price,quantity
from orderitems,products,vendors
where products.vend_id=vendors.vend_id
and orderitmes.prod_id=products.prod_id
and order_num =20005
select cust_name,cust_contact
from customers
where cust_id in (select cust_id from orders where order_num in (select order_num from orderitems where prod_id ='TNT2'))