首页 > 代码库 > SQL学习之高级联结(自联结、自然联结、外联接)

SQL学习之高级联结(自联结、自然联结、外联接)

create table Customers(Id int identity(1000000,1),Company varchar(30) null,Name varchar(20) null)insert into Customers values(Fun4All,Tom)insert into Customers values(Alibaba,Tim)insert into Customers values(BaiDu,Jerry)insert into Customers values(G0ogle,Herry)insert into Customers values(Tencent,MaHuaTeng)insert into Customers values(Fun4All,Tom)

这是讲解所需要的sql脚本

1、自联结       代码如下:

select * from Customers

技术分享

现在有个需求,需要给Tom同一公司的所有会员发送一条邮件。

分析下基本思路,首先根据Tom找到其所在的公司名,在根据公司名找到其公司民下的所有会员。下面是解决代码:

select * from Customers where Company in(select Company from Customers where Name=Tom)

技术分享

ok,通过子查询轻松的完成需求!

但是这边有一个重点,你必须要知道,子查询虽然方便,但是大多数DBMS的处理子查询的速度比处理联结要慢的多,如果数据量少的话,几乎没什么影响,但是如果后期数据会很大的话,就应该使用自联结!

下面是使用自联结的解决代码:

select *from Customers c1,Customers c2where c1.Company=c2.Companyand c2.Name=Tom

技术分享

这个是两张表(实际是一张表)联结之后的结果图,ok完成需求!

通过联结的机制

 

SQL学习之高级联结(自联结、自然联结、外联接)