你真的会玩SQL吗?内连接、外连接
作者:网络转载 发布时间:[ 2015/10/30 14:22:02 ] 推荐标签:数据库
完整外部联接
包括所有联接表中的所有行,不论它们是否匹配。
例:
SELECT titles.title_id, titles.title, publishers.pub_name
FROM titles FULL OUTER JOIN publishers
ON titles.pub_id = publishers.pub_id
练习:
此后用到的用例数据库是SQL2008里面的
用例数据库文件:链接:http://pan.baidu.com/s/1qW1QxA0 密码:dqxx
/*返回值2007年2月12日下过订单的客户,以及他们的订单。同时也返回在2007年2月12日没有下过订单的客户。
涉及到表:Sales.Customers表和Sales.Orders表。
期望的输出(按简略格式显示):
*/
custid companyname orderid orderdate
----------- --------------- ----------- -----------------------
Customer AHPOP NULL NULL
Customer AHXHT NULL NULL
Customer AZJED NULL NULL
Customer BSVAR NULL NULL
Customer CCFIZ NULL NULL
...
Customer FVXPQ NULL NULL
Customer GCJSG NULL NULL
Customer GLLAG NULL NULL
Customer GYBBY NULL NULL
Customer HFBZG NULL NULL
Customer HGVLZ 10444 2007-02-12 00:00:00.000
Customer IAIJK NULL NULL
Customer IBVRG NULL NULL
Customer IRRVL NULL NULL
Customer JMIKW NULL NULL
Customer JUWXK NULL NULL
...
Customer KIDPX NULL NULL
Customer KSLQF NULL NULL
Customer KZQZT NULL NULL
Customer LCOUJ NULL NULL
Customer LCYBZ NULL NULL
Customer LHANT 10443 2007-02-12 00:00:00.000
Customer LJUCA NULL NULL
Customer LOLJO NULL NULL
Customer LVJSO NULL NULL
Customer LWGMD NULL NULL
Customer MDLWA NULL NULL
...
参考SQL:
--answer:
select c.custid,c.companyname,o.orderid,o.orderdate
from Sales.Customers as c
left join Sales.Orders as o
on c.custid=o.custid
and o.orderdate='2007-2-12'
/*
1.将表Sales.Customers别名为c和表Sales.Orders别名为o应用ON筛选器以custid和o.orderdate='2007-2-12'为条件左外连接,生成虚拟表VT1,
2.添加外部行,外部行中非保留表中的属性被赋值为NULL,生成虚拟表VT2
3.处理select列表,从虚拟表VT2中查找出c.custid,c.companyname,o.orderid,o.orderdate生成虚拟表VT3
*/
注意
and o.orderdate='2007-2-12' 改成 where o.orderdate='2007-2-12',请注意这个结果又是什么呢?
/*返回没有下过订单的客户。
涉及的表:Sales.Customers表和Sales.Orders表。
期望的输出:
*/
custid companyname
----------- ---------------
Customer DTDMN
Customer WVAXS
参考SQL:
--answer:
select c.custid,c.companyname
from Sales.Customers as c
left join Sales.Orders as o
on c.custid=o.custid
where o.orderid is null
/*
1.将表Sales.Customers别名为c和表Sales.Orders别名为o应用ON筛选器以custid为条件左外连接,生成虚拟表VT1,
2.添加外部行,外部行中非保留表中的属性被赋值为NULL,生成虚拟表VT2
3.应用where筛选器选出o.orderid 为 null的数据生成虚拟表VT3
4.处理select列表,查找出c.custid,c.companyname生成虚拟表VT4
*/
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。

sales@spasvo.com