1 子查询的实现方式有三种
1) in, not in
最好不要使用in,not in 。只有在in里面有固定的值得时候使用比较好。如:
SELECT [FirstName] ,[MiddleName] ,[LastName] FROM [AdventureWorks].[Person].[Contact] WHERE ContactID IN (25,33)
2)any 和all
any和all 关键字,在子查询使用的时候,效果如下:
如:
SELECT * FROM AdventureWorks.HumanResources.Employee WHERE SickLeaveHours>ANY (SELECT SickLeaveHours FROM AdventureWorks.HumanResources.Employee WHERE SickLeaveHours>68)
not in 和 <> all等价。
3) join,left join,right join,full join
join 和 inner join 一样是内连接
full join是 列出后面所有on 字段相关的列,过滤on字段可如下:
select case when t1.id1 is null then t2.id2 else t1.id1 end as id, name1,name2 from t1 full join t2 on t1.id1=t2.id2
union 会过滤掉根据查询的列过滤掉重复的
union all 会依次将所有的列数据列出来
参考资料 :http://www.w3school.com.cn/sql/sql_union.asp
http://www.cnblogs.com/lgzslf/archive/2012/10/18/2729316.html
4)以上为无关子查询,相关子查询也叫重复子查询用exits实现。
相关子查询括号里面的查询条件和括号外面的字段比较。所以相关子查询括号里面的无法执行。如
(SELECT * FROM [AdventureWorks].[HumanResources].[Employee] e WHERE c.ContactID=e.ContactID AND e.SickLeaveHours>68)
参考资料:http://www.cnblogs.com/CareySon/archive/2011/07/18/2109406.html