美文网首页
chapter16:创建高级联结

chapter16:创建高级联结

作者: WeirdoSu | 来源:发表于2017-12-20 17:20 被阅读0次

    使用表别名

    SQL允许给表名起别名,理由如下:

    • 缩短SQL语句;
    • 允许在单挑SELECT语句中多次使用相同的表。
      例:
    SELECT cust_name, cust_contact
    FROM customers AS c, orders AS o, orderitems AS oi
    WHERE c.cust_id = 0.cust_id
      AND oi.order_num = o.order_num
      AND prod_id = 'TNT2';
    

    !:表别名可以用于WHERE、ORDER BY子句等;表别名只在查询执行中使用,不返回到客户机。

    使用不同类型的联结

    自联结

    例:假如你发现ID为DTNTR的物品存在问题,因此想知道生产该物品的供应商生产的其他物品是否也存在问题。

    下面是一种解决方法:

    SELECT prod_id, prod_name
    FROM products
    WHERE vend_id = (SELECT vend_id
                     FROM products
                     WHERE prod_id = 'DTNTR');
    

    使用联结:

    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 = 'DTNTR';
    

    !:处理自联结比子查询快得多。

    自然联结

    无论何时对表进行联结,应该至少有一个列出现在不止一个表中(被联结的列)。标准的联结返回所有数据,甚至相同的列出现多次。自然联结排除多次出现,使每个列只返回一次。

    你只能选择那些唯一的列,这一般是通过对表使用通配符(SELECT *),对所有其他表的列使用明确的子集完成。例:

    SELECT c.*, o.order_num, 0.order_date, oi.prod_id, oi.quantity, oi.item_price
    FROM customers AS c, orders AS o, orderitems AS io
    WHERE c.cust_id = o.cust_id
      AND oi.order_num = 0.order_num
      AND prod_id = 'FB';
    

    外部联结

    许多联结将一个表中的行与另一个表中的行相关联。但有时候会需要包含没有关联的那些行。

    一个简单的内部联结。检索所有客户及其订单:

    SELECT customers.cust_id, orders.order_num
    FROM customers INNER JOIN orders
      ON customers.cust_id = orders.cust_id
    

    外部联结语法类似。为了检索所有客户,包括那些没有订单的客户:

    SELECT customers.cust_id, orders.order_num
    FROM customers LEFT OUTER JOIN orders
      ON customers.cust_id = orders.cust_id;
    

    !:外部联结包括没有关联行的行。RIGHT指出的是OUTER JOIN右边的表,LEFT指出的是OUTER JOIN左边的表。

    使用带聚集函数的联结

    例:检索所有客户及每个客户所下的订单数,使用COUNT():

    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;
    

    相关文章

      网友评论

          本文标题:chapter16:创建高级联结

          本文链接:https://www.haomeiwen.com/subject/zwtnwxtx.html