16 创建高级联结

1 使用表别名

 SELECT vend_name,prod_name,prod_price FROM vendors AS v,products AS p 
WHERE v.vend_id=p.vend_id AND v.name=p.name

表别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机

2 使用不同类型的联结:之前是内部联结或等值联结

2.1自联结 :可以在单条SELECT语句中不止一次的引用相同的表
找出id=dtntr存在问题,想知道生成该物品的供应商生成的其他物品是否也存在这些问题

子查询

 SELECT id,name FROM products WHERE id =(SELECT id FROM products WHERE id='dtntr');

自联结

 SELECT p1.id,p1.name FROM products AS p1,products AS p2  WHERE
 p1.id =p2.id AND p2.id='dtntr';

2.2自然联结:排除列的多次出现,使每个列值返回一次
通配符 ( SELECT *)

SELECT P1.*,p1.id,p1.name FROM products AS p1,products AS p2  WHERE
 p1.id =p2.id AND p2.id='dtntr';

这个列子中通配符只对第一个表使用
我们所有使用的内部联结都是自然联结
2.3外部联结:需要包含不同表中没有关联行的那些行
简单内部联结

SELECT c.id,o.num FROM c INNER JOIN o ON c.id=0.id;

外部联结类似,需要检索所有的客户,包括那些没有订单的客户

   SELECT c.id,o.num FROM c LEFT OUTER JOIN o ON c.id=0.id; 

从左边的表选所有行

SELECT c.id,o.num FROM c RIGHT OUTER JOIN o ON c.id=0.id; 

从you边的表选所有行

3 使用带聚集函数的联结

  SELECT c.name,c.id,COUNT(o.num) AS num FROM c INNER JOIN o GROUP BY c.id;
 SELECT c.name,c.id,COUNT(o.num) AS num FROM c LEFT OUTER JOIN  o ON c.id=0.id GROUP BY c.id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值