使用表别名
之前已经介绍过使用别名来引用被检索的表列,别名除了用于列名和计算字段之外,SQL还允许给表起别名。例如:
SELECT cust_name,cust_contact FROM customers AS c,order AS o,orderitems AS oi WHERE c.cust_id = o.cust_id AND oi.order_num = o.order_num AND prod_id = 'TNT2';
使用不同类型的联结
1、自联结
输入
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 prod_id,prod_name FROM products WHERE vend_id = (SELECT vend_id FROM products WHERE prod_id = 'DTNTR');
输出
自联结通常作为外部语句用来代替从相同表中检索数据时使用的子查询语句。虽然最终的结果是相同的,但有时候联结处理远比子查询快得多。
2、自然联结
3、外部联结
使用带聚集函数的联结
如果要检索所有客户及每个客户所下的订单数:
输入
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;
输出