0
点赞
收藏
分享

微信扫一扫

13 创建高级联结

一、使用表别名

优点:

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;

 

举报

相关推荐

0 条评论