在本教學中,您將學習如何使用Oracle ANY
運算子將值與列表或子查詢進行比較。
Oracle ANY
運算子用於將值與子查詢返回的值或結果集列表進行比較。下面舉例說明ANY
運算子與列表或子查詢一起使用時的語法:
operator ANY ( v1, v2, v3)
operator ANY ( subquery)
在這個語法中:
ANY
運算子前面必須有一個運算子,例如:=
,!=
,>
,>=
,<
,<=
。使用ANY
運算子將值與列表進行比較時,Oracle將初始條件擴充套件到列表的所有元素,並使用OR
運算子將它們組合,如下所示:
SELECT
*
FROM
table_name
WHERE
c > ANY (
v1,
v2,
v3
);
Oracle將上述查詢轉換為以下內容:
SELECT
*
FROM
table_name
WHERE
c > v1
OR c > v2
OR c > v3;
如果使用ANY
運算子將一個值與子查詢返回的結果集進行比較,則Oracle使用EXISTS運算子將查詢轉換為等效的查詢,而不使用ANY
運算子。 例如,以下語句返回列表價格大於類別編號:1
中產品的任何標價的所有產品:
SELECT
product_name,
list_price
FROM
products
WHERE
list_price > ANY(
SELECT
list_price
FROM
products
WHERE
category_id = 1
)
ORDER BY
product_name;
由於查詢與ANY
運算子一起使用子查詢,因此Oracle執行了單個轉換,如下所示:
SELECT
product_name,
list_price
FROM
products p1
WHERE
EXISTS(
SELECT
list_price
FROM
products p2
WHERE
category_id = 1
AND p1.list_price > p2.list_price
)
ORDER BY
product_name;
請注意,如果子查詢不返回任何行,則以下條件的計算結果為false
:
operator ANY (subquery)
因此,整個查詢不返回行:
SELECT
*
FROM
table_name
WHERE
col operator ANY(subquery);
在Oracle中,SOME
和ANY
的行為完全相同,因此它們完全可以互換。
如果子查詢返回行或列表具有值,則以下語句適用於ANY
運算子:
如果col
在列表中匹配一個或多個值,則表示式的計算結果為true
,例如:
SELECT
product_name,
list_price
FROM
products
WHERE
list_price = ANY(
2200,
2259.99,
2269.99
)
AND category_id = 1;
執行上面範例程式碼,得到以下結果 -
如果列與列表中的一個或多個值不匹配,則表示式的計算結果為true
。參考以下查詢語句 -
SELECT
product_name,
list_price
FROM
products
WHERE
list_price != ANY(
2200,
2259.99,
2269.99
)
AND category_id = 1
ORDER BY
list_price DESC;
執行上面範例程式碼,得到以下結果 -
如果col
大於列表中的最小值,則表示式的計算結果為true
。
SELECT
product_name,
list_price
FROM
products
WHERE
list_price > ANY(
2200,
2259.99,
2269.99
)
AND category_id = 1
ORDER BY
list_price DESC;
執行上面範例程式碼,得到以下結果 -
如果col
大於或等於列表中的最小值,則表示式的計算結果為true
。參考以下查詢語句 -
SELECT
product_name,
list_price
FROM
products
WHERE
list_price >= ANY(
2200,
2259.99,
2269.99
)
AND category_id = 1
ORDER BY
list_price DESC;
執行上面範例程式碼,得到以下結果 -
如果col
小於列表中的最大值,則表示式的計算結果為true
。
SELECT
product_name,
list_price
FROM
products
WHERE
list_price < ANY(
2200,
2259.99,
2269.99
)
AND category_id = 1
ORDER BY
list_price DESC;
執行上面範例程式碼,得到以下結果 -
如果col
小於或等於列表中的最大值,則表示式的計算結果為true
。
SELECT
product_name,
list_price
FROM
products
WHERE
list_price <= ANY(
2200,
2259.99,
2269.99
)
AND category_id = 1
ORDER BY
list_price DESC;
執行上面範例程式碼,得到以下結果 -
在本教學中,您已學習如何使用Oracle ANY
運算子將值與列表或子查詢進行比較。