--创建高级联结
--1.1使用表别名
SELECT RTRIM(vend_name)+'('+RTRIM(vend_country)+')'
AS vend_title
FROM Vendors
ORDER BY vend_name
--实例:使用表别名,表别名只在查询执行中使用,不返回到客户端,而列别名返回到客户端
SELECT cust_name,cust_address,cust_contact
FROM Customers AS C
INNER JOIN Orders AS O
ON O.cust_id=C.cust_id
INNER JOIN OrderItems AS Ord
ON Ord.order_num=O.order_num
WHERE prod_id='RGAN01'
--使用不同类型的联结
--1.自联结(self-join)
SELECT cust_name,cust_id,cust_contact
FROM Customers
WHERE cust_name=(SELECT cust_name
FROM Customers
WHERE cust_contact='Jim Jones')
--使用自联结查询
SELECT c1.cust_name,c1.cust_id,c1.cust_contact
FROM Customers AS c1
INNER JOIN Customers AS c2
ON c1.cust_name=c2.cust_name
WHERE c2.cust_contact='Jim Jones'
--分析:此查询中需要查询的两个表实际上是相同的表
--自联结用处:自联结通常作为外部语句,用来替代从相同表中检索数据的使用子查询语句
--自联结优点:DBMS处理联结远比处理子查询快得多
--2.外联结
--2.1外联结:许多联结将一个表中的行与另一个表中的行相关联,但有时候需要包含没有关联行的那些行,称为外联结.
SELECT Customers.cust_id,Orders.order_num
FROM Orders
RIGHT OUTER JOIN Customers
ON Customers.cust_id=Orders.cust_id
--要点:使用外联结要指明LEFT 或者RIGHT,LEFT OUTER JOIN 指出的是OUTER JOIN 左边的表,RIGHT OUTER JOIN指出的是OUTER JOIN 右边的表
--2.2 全外联结:全联结包含两个表的不关联的行(MYSQL不支持)
SELECT Customers.cust_id,Orders.cust_id
FROM Customers
FULL OUTER JOIN Orders
ON Customers.cust_id=Orders.cust_id
--3.使用带聚集函数的联结
SELECT C.cust_id,COUNT(O.order_num) AS num_ord
FROM Customers AS C
LEFT OUTER JOIN Orders AS O
ON C.cust_id=O.cust_id
GROUP BY C.cust_id --按顾客分组数据
--总结:使用联结和联结条件
--1.一般使用内联结,但使用外联结也有效
--2.应该根据实际使用的DBMS(数据库查询系统)选择正确的查询语法
--3.应该总是提供联结条件并保证使用正确的联结条件
--4.应该在使用多个联结前分别测试每个联结,提高故障排除的效率.
–学习于《SQL必知必会》