【MySQL必知必会(十三)】【创建高级联结】

上一篇:【MySQL必知必会(十二)】【联结表】

+++++++++++++开始线++++++++++++++++

一、 使用表别名

mysql> SELECT cust_name, cust_contact
    -> FROM customers AS c, orders AS o, orderitems AS oi
    -> WHERE c.cust_id = o.cust_id
    -> AND oi.order_num = o.order_num
    -> AND prod_id = 'TNT2';

在这里插入图片描述

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

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

二、 使用不同类型的联结

还有自联结、自然联结和外部联结

2.1 自联结

ID为DTNTR存在问题,查询生产该物品的供应商生产的其他物品是否也存在这些问题

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

在这里插入图片描述

使用联结的相同查询

mysql> 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';

在这里插入图片描述

2.2 自然联结

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

在这里插入图片描述

2.3 外部联结

检索所有客户及其订单(内部联结)

mysql> SELECT customers.cust_id, orders.order_num
    -> FROM customers INNER JOIN orders
    -> ON customers.cust_id = orders.cust_id;

外部联结

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

在这里插入图片描述

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

检索所有客户及每个客户所下的订单数

mysql> 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;

在这里插入图片描述

四、 使用联结和联结条件

1.注意所使用的联结类型
2.保证所使用正确的联结条件
3.应该总是提供联结条件
4.在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型

+++++++++++++结束线++++++++++++++++

下一篇:【MySQL必知必会(十四)】【组合查询】

猜你喜欢

转载自blog.csdn.net/qq_42893334/article/details/108829548