一、使用表别名
优点:
1, 缩短sql语句;
2,允许在一条select语句中多次使用相同的表;
例子可以改为:
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 = 'RGAN01';
注意:表别名不会返回到客户端。
二、使用不同类型的联结
目前学了:内联结或等值联结;
还有:自联结、自然联结和外联结;
1,自联结
通常用作外部语句。用来代替从相同表中检索数据的使用子查询语句。
例子:现在要找到和 Jim Jones 同一公司的所有顾客发送一封信件。
解决:首先要找出Jim Jones 工作的公司,然后找出在该公司工作的顾客。
方式一:子查询
SELECT cust_id, cust_name, cust_contact
FROM Customers
WHERE cust_name = (SELECT cust_name
FROM Customers
WHERE cust_contact = 'Jim Jones');
方式二:自联结
SELECT c1.cust_id, c1.cust_name, c1.cust_contact
FROM Customers AS c1, Customers AS c2
WHERE c1.cust_name = c2.cust_name
AND c2.cust_contact = 'Jim Jones'
2,自然联结
联结返回一个表中的所有列;
3,外联结
概念:联结返回了那些除了关联的行之外,还需要返回没有关联的行。
分类:左外联结、右外联结、全外联结(MySQL不支持);
左/右外联结的区别:获取哪边表中未关联的行;
例子: 返回所有顾客的订单数,包括那些没有订单的顾客;
SELECT Customers.cust_id, Orders.order_num
FROM Customers LEFT OUTER JOIN Orders
ON Customers.cust_id = Orders.cust_id;
4、使用带聚合函数的联结
概念:联结多个表来汇总数据;
SELECT Customers.cust_id, COUNT(Orders.order_num) AS num_ord
FROM Customers INNER JOIN Orders ON Customers.cust_id = Order.cust_id
GROUP BY Customers.cust_id;