(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 (此处);

mysql子查询 exists,not exists,all和any的更多相关文章

  1. MySQL 子查询 EXISTS 和 NOT EXISTS(转)

    MySQL EXISTS 和 NOT EXISTS 子查询 MySQL EXISTS 和 NOT EXISTS 子查询语法如下: SELECT ... FROM table WHERE EXISTS ...

  2. [慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

    案例梳理时间:2013-9-25 写在前面的话: 在慢查优化1和2里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, ...

  3. Mysql子查询、关联查询

    mysql中update.delete.install尽量不要使用子查询 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组).orde ...

  4. mysql子查询慢的问题

      当你在用explain工具查看sql语句的运行计划时.若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了.你已经掉入了mysql子查询慢 ...

  5. MySQL子查询,派生表和通用表达式

    一:子查询 1.介绍 在另一个查询(外部查询)中嵌套另一个查询语句(内部查询),并使用内部查询的结果值作为外部查询条件. 2.子查询在where中 SELECT customerNumber, che ...

  6. MySQL子查询慢现象的解决

    当你在用explain工具查看sql语句的执行计划时,若select_type 字段中出现“DEPENDENT SUBQUERY”时,你要注意了,你已经掉入了mysql子查询慢的“坑". 相 ...

  7. MySQL子查询有哪五种形式?

    MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品.MySQL是最流行的关系型数据库管理系统之一,在web应用方面,MySQL是最好的RDBMS(Rela ...

  8. MySQL 子查询(一)

    源自MySQL 5.7 官方手册 13.2.10 Subquery Syntax 〇.MySQL子查询介绍 子查询指的是嵌套在某个语句中的SELECT语句. MySQL支持标准SQL所要求的所有子查询 ...

  9. 第09章 MySQL子查询

    第09章 MySQL子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入. SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要 ...

  10. Mysql子查询IN中使用LIMIT

    学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...

随机推荐

  1. 累计进度条 PSP

    每周例行报告 本周PSP 类别 任务 开始时间 结束时间 被打断时间 总计工作时间    11月16日 代码 参与团队项目 10:05 12:12 15 112min 写博客 进度统计 21:52 2 ...

  2. Java中String直接赋字符串和new String的区别 如String str=new String("a")和String str = "a"有什么区别?

    百度的面试官问 String A="ABC"; String B=new String("ABC"); 这两个值,A,B 是否相等,如果都往HashSet里面放 ...

  3. cxf 动态调用.

    import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache ...

  4. idea的激活

    参考网址:https://blog.csdn.net/qq_34273222/article/details/78810799 侵删 1.进到文件夹中:C:\Windows\System32\driv ...

  5. python day4 ---------------文件的基本操作

    1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' str3 = ' '.joi ...

  6. BZOJ2303 APIO2011方格染色(并查集)

    比较难想到的是将题目中的要求看做异或.那么有ai,j^ai+1,j^ai,j+1^ai+1,j+1=1.瞎化一化可以大胆猜想得到a1,1^a1,j^ai,1^ai,j=(i-1)*(j-1)& ...

  7. oracle 每个类别取几条的语法怎么写

    select *from (select t.*,row_number() over(partition by t.公司名 order by 1) rn  from t)where rn<=10

  8. 【题解】 [POI2012]FES-Festival (差分约束)

    懒得复制题面,戳我戳我 Question: (因为网上找不到好的翻译,这里简单复述一下) 告诉你\(m1+m2\)个约束条件,然后要你找出\(X_1-X_n\)这些数字,求满足要求的数列中不同的数字个 ...

  9. 【BZOJ1560】[JSOI2009]火星藏宝图(贪心,动态规划)

    [BZOJ1560][JSOI2009]火星藏宝图(贪心,动态规划) 题面 BZOJ 洛谷 题解 既然所有的位置的权值都大于\(0\),那么就可以直接贪心,按照行为第一关键字,列为第二关键字,来转移. ...

  10. BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

    链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...