SQL 子查询

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

SQL 子查询

如:

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
  

SQL 子查询,布布扣,bubuko.com

SQL 子查询

上一篇:SQL 计算某月有多少天


下一篇:sql行转列和列转行(转)