mysql子查詢 -exists,not exists

來源:互聯網
上載者:User


(1)實現讓結果集A-結果集B:--利用not
exists,合并則可用union

exists,not
exists:用於判斷且擷取結果集A是否存在地結果集B中!



==========結果集A:
SELECT
d.Device_ID,d.Device_Name,a.App_ID,a.App_Name
               FROM
T_Device_BaseInfo d ,T_App_Spce_R_Info da ,T_App_Info a
              
WHERE d.Spec_Code=da.Spec_Code AND da.App_ID=a.App_ID and 
d.Device_ID=01;
+-----------+-------------+--------+----------------+
|
Device_ID | Device_Name | App_ID | App_Name       |
+-----------+-------------+--------+----------------+
|
01        | coship01    | 01     | maliao         |
| 01        |
coship01    | 02     | maliao         |
| 01        | coship01    |
03     | red alert      |
| 01        | coship01    | 05     |
COD            |
| 01        | coship01    | 08     | flashplayer    |
|
01        | coship01    | 09     | flashplayer6.0 |
+-----------+-------------+--------+----------------+  
6 rows in set (0.00 sec)

==========結果集B:
mysql> select * from T_Device_App_R_Info
where Device_ID=01;
+----+-----------+--------+------+------------+
|
ID | Device_ID | App_ID | Opr  | Setup_Date |
+----+-----------+--------+------+------------+
|
64 | 01        | 01     | 2    | NULL       |
| 65 | 01        |
03     | 2    | NULL       |
+----+-----------+--------+------+------------+       
2 rows in set (0.00 sec)
 
==========結果集A-結果集B:
SELECT
d.Device_ID,d.Device_Name,a.App_ID,a.App_Name
       FROM
T_Device_BaseInfo d ,T_App_Spce_R_Info da ,T_App_Info a
       WHERE
d.Spec_Code=da.Spec_Code AND da.App_ID=a.App_ID  and  d.Device_ID=01
      
and
NOT EXISTS(select * from T_Device_App_R_Info tt where
tt.Device_ID=d.Device_ID and a.App_ID=tt.App_ID);
+-----------+-------------+--------+----------------+
|
Device_ID | Device_Name | App_ID | App_Name       |
+-----------+-------------+--------+----------------+
|
01        | coship01    | 02     | maliao         |
| 01        |
coship01    | 05     | COD            |
| 01        | coship01    |
08     | flashplayer    |
| 01        | coship01    | 09     |
flashplayer6.0 |
+-----------+-------------+--------+----------------+  
4 rows in set (0.00 sec)

若要擷取只有結果集中存在的,只須將not exists改為exists即可。
 
(2)使用ALL進行子查詢--MySql資料庫



ALL關鍵詞必須後面接一個比較操作符。
ALL的意思是“對比於子查詢返回的列中的所有值,如果比較結果為TRUE,則返回
TRUE。”例如:
SELECT s1 FROM t1 WHERE s1 > ALL (SELECT s1 FROM t2);
假設表1中有一
行包含(10)。
如果表t2包含(-5,0,+5),則運算式為TRUE,因為10比t2中的所有三個值都大。
如果表t2包含
(12,6,NULL,-100),則運算式為FALSE,因為表t2中有一個值12大於10。
如果表t2包含(0,NULL,1),則運算式為
unknown。
NOT IN是<> ALL的別名。因此,以下兩個語句是相同的:
SELECT s1 FROM t1 WHERE s1
<> ALL (SELECT s1 FROM t2);
SELECT s1 FROM t1 WHERE s1 NOT IN
(SELECT s1 FROM t2);
 
(3)使用ANY進行子查詢--MySql資料庫



ANY關鍵詞必須後面接一個比較操作符(即>,<,=等)。ANY關鍵詞的意思是“對於在子查詢返回的列中的任一數值,例如:
SELECT s1 FROM t1 WHERE s1 > ANY (SELECT s1 FROM t2);
假設表t1中有
一行包含(10)。如果表t2包含(21,14,7),則運算式為TRUE,因為t2中有一個值為7,該值小於10。如果表t2包含(20,10),或者
如果表t2為空白表,則運算式為FALSE。如果表t2包含(NULL, NULL, NULL),則運算式為UNKNOWN。
詞語IN是"=ANY"的別名。因此,這兩個語句是一樣的:
SELECT s1 FROM t1 WHERE s1 = ANY (SELECT s1 FROM t2);
SELECT s1
FROM t1 WHERE s1 IN    (SELECT s1 FROM t2);
 
(4)mysql的比較符:=  >  <  >=  <=  <>,應該也可以用!=。



但不用於多條件的限制查詢,查詢結果會是錯誤的。如:
       
SELECT d.Device_ID,d.Device_Name,a.App_ID,a.App_Name,a.App_Memo
              
FROM T_Device_BaseInfo d ,
                    T_App_Spce_R_Info da ,
                   
T_App_Info a ,
                    T_Device_App_R_Info tt
              
WHERE d.Spec_Code=da.Spec_Code
                AND
da.App_ID=a.App_ID
                and d.Device_ID=01
                and d.Device_ID!=tt.Device_ID and
a.App_ID!=tt.App_ID (此處);




本文出自 “Changes we need !

部落格,請務必保留此出處http://shenzhenchufa.blog.51cto.com/730213/269152

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.