標籤:blog exists com 轉換 product src category desc 技術
在本教程中,您將學習如何使用Oracle ANY運算子將值與列表或子查詢進行比較。
Oracle ANY運算子簡介
Oracle ANY運算子用於將值與子查詢返回的值或結果集列表進行比較。下面舉例說明ANY運算子與列表或子查詢一起使用時的文法:
operator ANY ( v1, v2, v3)operator ANY ( subquery)
在這個文法中:
ANY運算子前面必須有一個運算子,例如:=,!=,>,>=,<,<=。
- 列表或子查詢必須用圓括弧包圍。
使用ANY運算子將值與列表進行比較時,Oracle將初始條件擴充到列表的所有元素,並使用OR運算子將它們組合,如下所示:
SELECT *FROM table_nameWHERE c > ANY ( v1, v2, v3 );
Oracle將上述查詢轉換為以下內容:
SELECT *FROM table_nameWHERE c > v1 OR c > v2 OR c > v3;
如果使用ANY運算子將一個值與子查詢返回的結果集進行比較,則Oracle使用EXISTS運算子將查詢轉換為等效的查詢,而不使用ANY運算子。 例如,以下語句返回列表價格大於類別編號:1中產品的任何標價的所有產品:
SELECT product_name, list_priceFROM productsWHERE list_price > ANY( SELECT list_price FROM products WHERE category_id = 1 )ORDER BY product_name;
由於查詢與ANY運算子一起使用子查詢,因此Oracle執行了單個轉換,如下所示:
SELECT product_name, list_priceFROM products p1WHERE 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_nameWHERE col operator ANY(subquery);
在Oracle中,SOME和ANY的行為完全相同,因此它們完全可以互換。
Oracle ANY運算子的例子
如果子查詢返回行或列表具有值,則以下語句適用於ANY運算子:
1. col = ANY ( list )
如果col在列表中匹配一個或多個值,則運算式的計算結果為true,例如:
SELECT product_name, list_priceFROM productsWHERE list_price = ANY( 2200, 2259.99, 2269.99 ) AND category_id = 1;
執行上面範例程式碼,得到以下結果 -
2. col != ANY(list)
如果列與列表中的一個或多個值不匹配,則運算式的計算結果為true。參考以下查詢語句 -
SELECT product_name, list_priceFROM productsWHERE list_price != ANY( 2200, 2259.99, 2269.99 ) AND category_id = 1ORDER BY list_price DESC;
執行上面範例程式碼,得到以下結果 -
3. col > ANY (list)
如果col大於列表中的最小值,則運算式的計算結果為true。
SELECT product_name, list_priceFROM productsWHERE list_price > ANY( 2200, 2259.99, 2269.99 ) AND category_id = 1ORDER BY list_price DESC;
執行上面範例程式碼,得到以下結果 -
3. col >= ANY (list)
如果col大於或等於列表中的最小值,則運算式的計算結果為true。參考以下查詢語句 -
SELECT product_name, list_priceFROM productsWHERE list_price >= ANY( 2200, 2259.99, 2269.99 ) AND category_id = 1ORDER BY list_price DESC;
執行上面範例程式碼,得到以下結果 -
5. col < ANY (list)
如果col小於列表中的最大值,則運算式的計算結果為true。
SELECT product_name, list_priceFROM productsWHERE list_price < ANY( 2200, 2259.99, 2269.99 ) AND category_id = 1ORDER BY list_price DESC;
執行上面範例程式碼,得到以下結果 -
6. col <= ANY (list)
如果col小於或等於列表中的最大值,則運算式的計算結果為true。
SELECT product_name, list_priceFROM productsWHERE list_price <= ANY( 2200, 2259.99, 2269.99 ) AND category_id = 1ORDER BY list_price DESC;
執行上面範例程式碼,得到以下結果 -
在本教程中,您已學習如何使用Oracle ANY運算子將值與列表或子查詢進行比較。
Oracle Any/Some運算子