all any 或 此运算符后面必须跟_any和all组合运算符用法区别
Any、All與>、<、=、組合和In的意義、用法的區別
SELECT * FROM ORDERS
WHERE EXISTS(SELECT *FORM ORDERS
WHERE NAME#='SB')
這樣會返回orders里面所有的值,而不是只有NAME#='SB'的值
改成
SELECT * FROM ORDERS O1
WHERE EXISTS(SELECT *FORM ORDERS O2
WHERE O1.NAME# = O2.NAME# and O2.NAME# = 'SB') 即可得到NAME#='SB'的記錄.
可以用 ALL 或 ANY 關鍵字修改引入子查詢的比較運算符。SOME 是與 ANY 等效的 SQL-92 標準。
通過修改的比較運算符引入的子查詢返回零個值或多個值的列表,并且可以包括 GROUP BY 或 HAVING 子句。這些子查詢可以用 EXISTS 重新表述。
以 > 比較運算符為例,>ALL 表示大于每一個值。換句話說,它表示大于最大值。例如,>ALL (1, 2, 3) 表示大于 3。>ANY 表示至少大于一個值,即大于最小值。因此 >ANY (1, 2, 3) 表示大于 1。
擴充:<all 表示小于集合或列表中所有值,也就是等價表示為小于最小值;
<any 表示小于集合或列表中任何值,也就是等價表示小于為最大值;
若要使帶有 >ALL 的子查詢中的行滿足外部查詢中指定的條件,引入子查詢的列中的值必須大于子查詢返回的值列表中的每個值。
同樣,>ANY 表示要使某一行滿足外部查詢中指定的條件,引入子查詢的列中的值必須至少大于子查詢返回的值列表中的一個(最小)值。
下面的查詢提供一個由 ANY 修改的比較運算符引入的子查詢的示例。它查找定價高于或等于任何產品子類別的最高定價的產品。
代碼:
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ListPrice >= ANY
(SELECT MAX (ListPrice)
FROM Production.Product
GROUP BY ProductSubcategoryID)
對于每個產品子類別,內部查詢查找最高定價。外部查詢查看所有這些值,并確定定價高于或等于任何產品子類別的最高定價的單個產品。如果 ANY 更改為 ALL,查詢將只返回定價高于或等于內部查詢返回的所有定價的那些產品。
如果子查詢不返回任何值,那么整個查詢將不會返回任何值。
=ANY 運算符與 IN 等效。例如,若要查找 Adventure Works Cycles 生產的所有輪子產品的名稱,可以使用 IN 或 =ANY。
代碼:
--Using =ANY
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID =ANY
(SELECT ProductSubcategoryID
FROM Production.ProductSubcategory
WHERE Name = 'Wheels')
--Using IN
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN
(SELECT ProductSubcategoryID
FROM Production.ProductSubcategory
WHERE Name = 'Wheels')
下面是任一查詢的結果集:
Name
--------------------------------------------------
LL Mountain Front Wheel
ML Mountain Front Wheel
HL Mountain F
總結
以上是生活随笔為你收集整理的all any 或 此运算符后面必须跟_any和all组合运算符用法区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android gridview行分割线
- 下一篇: iservice封装有哪些方法_总结We