天天看點

mysql in any all_MySQL中子查詢IN,EXISTS,ANY,ALL,SOME,UNION介紹

1.ANY關鍵字

假設any内部的查詢語句傳回的結果個數是三個,如:result1,result2,result3,那麼,

select ...from ... where a > any(...);

->

select ...from ... where a > result1 or a > result2 or a > result3;

2.ALL關鍵字

ALL關鍵字與any關鍵字類似,隻不過上面的or改成and。即:

select ...from ... where a > all(...);

->

select ...from ... where a > result1 and a > result2 and a > result3;

3.SOME關鍵字

some關鍵字和any關鍵字是一樣的功能。是以:

select ...from ... where a > some(...);

->

select ...from ... where a > result1 or a > result2 or a > result3;

4.IN關鍵字

IN運算符用于WHERE表達式中,以清單項的形式支援多個選擇,文法如下:

WHERE column IN (value1,value2,...)

WHERE column NOT IN (value1,value2,...)

當 IN 前面加上 NOT運算符時,表示與 IN 相反的意思,即不在這些清單項内選擇。代碼如下:

查詢

SELECT ID,NAME FROM A WHERE ID IN (SELECT AID FROM B) //查詢B表中AID的記錄

SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B) //意思和上面相反

删除

delete from articles where id in (1,2,3); //删除id=1,id=2,id=3的記錄

delete from articles where id not in (1); //删除id!=1的記錄

詞語IN是"=ANY"的别名。是以,這兩個語句是一樣的:

SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);

SELECT s1 FROM t1 WHERE s1 IN (SELECT s1 FROM t2);

5.EXISTS關鍵字

MySQL EXISTS 和 NOT EXISTS 子查詢文法如下:

SELECT ... FROM table WHERE EXISTS (subquery)

該文法可以了解為:将主查詢的資料,放到子查詢中做條件驗證,根據驗證結果(TRUE 或 FALSE)來決定主查詢的資料結果是否得以保留。

mysql> SELECT * FROM employee

-> WHERE EXISTS

-> (SELECT d_name FROM department WHERE d_id=1004);

Empty set (0.00 sec)

此處内層循環并沒有查詢到滿足條件的結果,是以傳回false,外層查詢不執行。

NOT EXISTS剛好與之相反

當然,EXISTS關鍵字可以與其他的查詢條件一起使用,條件表達式與EXISTS關鍵字之間用AND或者OR來連接配接,如下:

mysql> SELECT * FROM employee

-> WHERE age>24 AND EXISTS

-> (SELECT d_name FROM department WHERE d_id=1003);

提示:

?EXISTS (subquery) 隻傳回 TRUE 或 FALSE,是以子查詢中的 SELECT * 也可以是 SELECT 1 或其他,官方說法是實際執行時會忽略 SELECT 清單,是以沒有差別。

?EXISTS 子查詢的實際執行過程可能經過了優化而不是我們了解上的逐條對比,如果擔憂效率問題,可進行實際檢驗以确定是否有效率問題。

?EXISTS 子查詢往往也可以用條件表達式、其他子查詢或者 JOIN 來替代,何種最優需要具體問題具體分析

6.UNION關鍵字

MySQL UNION 用于把來自多個 SELECT 語句的結果組合到一個結果集合中。文法為:

SELECT column,... FROM table1

UNION [ALL]

SELECT column,... FROM table2

...

在多個 SELECT 語句中,對應的列應該具有相同的字段屬性,且第一個 SELECT 語句中被使用的字段名稱也被用于結果的字段名稱。

UNION 與 UNION ALL 的差別

當使用 UNION 時,MySQL 會把結果集中重複的記錄删掉,而使用 UNION ALL ,MySQL 會把所有的記錄傳回,且效率高于 UNION。

mysql> SELECT d_id FROM employee

-> UNION

-> SELECT d_id FROM department;

+------+

| d_id |

+------+

| 1001 |

| 1002 |

| 1004 |

| 1003 |

+------+

合并比較好了解,也就是将多個查詢的結果合并在一起,然後去除其中的重複記錄,如果想儲存重複記錄可以使用UNION ALL語句。

原文:https://www.cnblogs.com/Taeyang/p/9016134.html