【MySQL必知必会】第十六章 创建高级联结

1、使用表别名

  好处:

  a、缩短SQL语句。

  b、允许在单条SELECT语句中多次使用相同的表。

  输入:

  SELECT  cust_name,cust_contact

  FROM  customers AS c,orders AS o,orderitems AS io

  WHERE  c.cust_id = o.cust_id

        AND  io.order_num = o.order_num

        AND  prod_id = ‘TNT2’;

  注:

  a、表别名不仅能用在WHERE子句,还可以用在SELECT的列表、ORDER BY子句,以及语句的其他部分。

  b、表别名和列别名不一样,它不会返回到客户机。

3、自联结  

  如果你知道某样物品存在问题(物品名为DTNT),你想知道该物品的供应商提供的其他物品是什么,以便于检测,你可以这么做:

  输入:

  SELECT  p1.prod_id,p1.prod_name

  FROM  products AS p1,products AS p2

  WHERE  p1.vend_id = p2.vend_id

        AND p2.prod_id = ‘DTNT’;

  输出:

  prod_id    prod_name

  DTNT      Detonator

  FB        Bird seed

  分析:这里使用两张同名的表是合法的。

4、自然联结

  输入:

  SELECT  c.* , o.order_num , o.order_date , io.prod_id

  FROM  customers AS c, orders AS o, orderitems AS oi

  WHERE  c.cust_id = o.order_num

      AND  oi.order_num = o.order_num

      AND  prod_id = 'FB';

  分析:自然联结不会出现重复的列,每个列都只出现一次,通过对表使用通配符(SELECT *)来实现,对其他表的列使用明确的子集来完成。

5、外部联结

  联结包含了那些在相关表中没有关联行的行。

  输入:SELECT customers.cust_id,orders.order_num

     FROM customers LEFT OUTER JION orders

     ON customers.cust_id = orders.cust_id;

  输出:

     cust_id  order_num

     10001   2005

     10001   2009

     10003   null

     10005   2008

  分析:LEFT OUTER的意思就是它左边的表有一些行可以对应其他表的空值。RIGHT OUTER说的是右边的表的行可以对应空值。

6、使用带聚集函数的联结

  输入:

  SELECT  customers.cust_name,

        customers.cust_id,

        COUNT(orders.order_num) AS num_ord

  FROM  customers  INNER  JOIN  orders

  ON  customers.cust_id = orders.cust_id;

  GROUP BY  customers.cust_id;

  输出:

  cust_name    cust_id    num_ord

  Coyote      101      3

  Wsad       105      2

  分析:该例检索所有客户,以及每个客户所下的订单数。

转载于:https://www.cnblogs.com/Hystudio-lzu/p/6892181.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值