16 高级联结

使用表别名:

  • 缩短SQL语句(例1);
  • 在单条selete语句中多次使用相同的表--自然联结

例:

selete cust_name.cust_contact
from 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;
说明:左、右联结可通过调整表的顺序互换。
使用联结:
应该总是提供条件,否则会得到笛卡尔积。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值