+++++++++++++开始线++++++++++++++++
一、 使用表别名
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.在一个联结中可以包含多个表,甚至对于每个联结可以采用不同的联结类型
+++++++++++++结束线++++++++++++++++