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 c2 where c1.Company=c2.Company and c2.Name=‘Tom‘
这个是两张表(实际是一张表)联结之后的结果图,ok完成需求!
通过联结的机制
原文:http://www.cnblogs.com/GreenLeaves/p/5824201.html