[读书笔记]子查询

大部分子查询可以使用连接来编写,在可以使用连接的地方,一般首选连接。

---------------------------------------------------------------------------------------------------------------------------------------------------

 主题

嵌套子查询  关联子查询  派生表  使用EXISTS运算符

---------------------------------------------------------------------------------------------------------------------------------------------------

嵌套子查询

只在一个方向嵌套——返回在外部查询中使用的单个值,或者与IN运算符一起使用的一个完整的值列表。

例子:

SELECT * FROM Product WHERE OrderDate=(SELECT MIN(OrderDate) FROM SalesOrder);

SELECT * FROM Product WHERE ID IN (SELECT ID FROM SpecialProduct);

 

简单的理解就是外部查询的查询条件为内部查询的返回值,且内部查询不受外部查询的影响,区别关联子查询。

关联子查询

与嵌套子查询的区别在于信息传递时双向的,而不是单向的。

建议每个查询表格使用别名,否则有可能会出错。

外部查询看起来很像一个嵌套子查询,然后内部查询显示引用外部查询。

WHERE子句中的关联查询例子(也可以在SELECT列表中等):

SELECT soh.CustomerID,soh.SalesOrderID,soh.OrderDate

FROM Sales.SalesOrderHeader soh

WHERE soh.OrderDate=(

SELECT MIN(soh2.OrderDate)

FROM Sales.SalesOrderHeader soh2

WHERE soh2.CustomerID=soh.CustomerID)

ORDER BY soh.CustomerID;

派生表

作用:对于给定表的每个行,可能在子查询中有多个结果,但是需要比IN运算符提供更复杂的操作。

创建派生表要做的事情:

1.将生成结果集的查询使用小括号括起来;

2.给查询结果取别名,这样它可以作为表被引用

语法:

SELECT <select list>

FROM ( <query that returns a regular result set>) AS <alias name>

JOIN <some other base or derived table>

 

EXISTS运算符

返回简单的TRUEFALSE结果,当使用EXIST关键字时,SQL SERVER不需要执行一行一行的连接,而是寻找记录,知道找到第一个匹配的记录,然后停止在那里。只要有一个匹配,EXISTS就为TRUE,不需要继续查找。如果要测试的是TRUE值,SQL会查找到有true值停止。如果要测试的是FALSE值——NOT EXISTS()SQL会查找到FALSE值停止。

-------------------------------------------------------------------------------------------------------------------------------------

临时表

使用SELECT INTO创建临时表,保存存储过程结果集

 SELECT <select list>

INTO <#tempname>

FROM <table>

......do something........

DROP TABLE <#tempname>

 

ISNULL函数

接受一个变量或表达式,验证其是否是一个NULL值,如果是返回其它制定值,否返回原值:

ISNULL(<expression to test>,<replace value if null>)

 

IF <条件表达式>

BEGIN

<SQL语句>

END

ELSE

BEGIN

<SQL语句>

END

 

CAST函数

CAST(expression AS data_type) 

CONVERT函数

CONVERT(data_type,expression[,style])

区别:

CONVERT函数包含了CAST函数的所有功能,但只有CAST函数是ANSI兼容的。

原文地址:https://www.cnblogs.com/lsr-flying/p/4313086.html