• mysql子查询 exists,not exists,all和any


    (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 anda.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 (此处);
  • 相关阅读:
    day9文件处理
    day8字符编码
    js小数乘法精确率问题
    webstorm上传vue代码至git
    vue项目关闭eslint检查
    MongoDB相关操作
    Redis持久化存储
    Redis 数据类型
    linux常用命令
    初识NoSQL
  • 原文地址:https://www.cnblogs.com/wang1204/p/6617820.html
Copyright © 2020-2023  润新知