内联结和外联结

--创建高级联结

--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 或者RIGHTLEFT 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必知必会》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值