1 子查询的实现方式有三种
1) in, not in
最好不要使用in,not in 。只有在in里面有固定的值得时候使用比较好。如:
1
2
3
4
5
|
SELECT [FirstName] ,[MiddleName]
,[LastName]
FROM [AdventureWorks].[Person].[Contact]
WHERE ContactID IN (25,33)
|
2)any 和all
any和all 关键字,在子查询使用的时候,效果如下:
如:
1
2
3
4
5
|
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字段可如下:
1
2
3
4
5
6
|
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实现。
相关子查询括号里面的查询条件和括号外面的字段比较。所以相关子查询括号里面的无法执行。如
1
2
3
|
(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
1
|
|