标签:
大部分子查询可以使用连接来编写,在可以使用连接的地方,一般首选连接。
---------------------------------------------------------------------------------------------------------------------------------------------------
主题
嵌套子查询 关联子查询 派生表 使用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运算符
返回简单的TRUE或FALSE结果,当使用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兼容的。
标签:
原文地址:http://www.cnblogs.com/lsr-flying/p/4313086.html