SQL 子查询

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 关键字,在子查询使用的时候,效果如下:

image

如:

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

 
原文地址:https://www.cnblogs.com/brucetie/p/3579808.html