使用表别名:
- 缩短SQL语句(例1);
- 在单条selete语句中多次使用相同的表--自然联结;
例:
selete cust_name.cust_contactfrom customers as c,orders as o,ordertimes as oi
wherec.cust_id=o.cust_id
andoi.order_num=o.order_num
and prod_id='TNT2';
注:表别名只在查询执行中使用,和列别名不同,表别名不返回到客户机。
不同类型的联结
自然联结和子查询:
- 自然联结作为外部语句,替换“从相同表中检索数据”时使用的子查询语句;
- 有时候自然联结相比子查询要快。
例:某物品(ID为DTNTR)存在问题,想知道生产该物品的供应商生产的其他物品是否也有问题。
先由物品ID得到供应商ID,然后找到该供应商生产的全部物品
子查询的方式
:
selete prod_id,prod_name
fromproducts
where vend_id=(seletevend_id
from products//从相同表检索--自然连接
where prod_id='DTNTR');
自然连接方式:
selete prod_id,prod_name
fromproducts p1,products,p2
where p1.vend_id=p2.vend_id
and p2.prod_id='DTNTR';
说明:where子句联结两个相同的表p1,p2,并过滤出p1.vend_id=p2.vend_id且p2.prod_id='DTNTR的行。
自然联结参考:http://blog.csdn.net/pacosonswjtu/article/details/51396622
自然联结和内部联结:
迄今为止建立的自然联结都是内部联结。
外联结:outer join
- 包含那些没有关联的行
- 必须使用right或left来指定表(right是outer join右边的表,left是outer join左边的表)
例:
selete customer.cust_id,orders.order_num
fromcustomer left outer join orders
oncustomer.cust_id=orders.cust_id;
说明:左、右联结可通过调整表的顺序互换。
使用联结:
应该总是提供条件,否则会得到笛卡尔积。