(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. laravel 登录后跳转原来浏览的页面

    方法 1.修改一下文件/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RedirectsUsers.php 修改内容如下: 没有的加入 ...

  2. JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 2.什么时候 ...

  3. python的logging日志模块

    1. 简单的将日志打印到屏幕 import logging logging.debug('This is debug message') logging.info('This is info mess ...

  4. Ubuntu17安装MySql5.7

    安装: sudo apt-get update sudo apt-get install mysql-server 配置远程访问: vi /etc/mysql/mysql.conf.d/mysqld. ...

  5. python自动化之excel

    import openpyxl wb=openpyxl.load_workbook(r'C:\Users\Administrator\Desktop\sl.xlsx') type(wb) wb.get ...

  6. 【bzoj5118】Fib数列2 费马小定理+矩阵乘法

    题目描述 Fib定义为Fib(0)=0,Fib(1)=1,对于n≥2,Fib(n)=Fib(n-1)+Fib(n-2) 现给出N,求Fib(2^n). 输入 本题有多组数据.第一行一个整数T,表示数据 ...

  7. PHP内核-代码的执行(二)

    学习来源:http://www.php-internals.com/book/?p=chapt02/02-00-overview 最开始学习PHP的时候感觉上手真的好容易,噼里啪啦一个回车 “Hell ...

  8. C++11 & C++14 & C++17新特性

    C++11:C++11包括大量的新特性:包括lambda表达式,类型推导关键字auto.decltype,和模板的大量改进. 新的关键字 auto C++11中引入auto第一种作用是为了自动类型推导 ...

  9. SQL Server 2012中LEAD函数简单分析

    LEAD函数简单点说,就是把下一行的某列数据提取到当前行来显示,看示例更能解释清楚,先看测试用脚本 DECLARE @TestData TABLE( ID INT IDENTITY(1,1), Dep ...

  10. Tomcat——Linux下的安装和配置

    Tomcat在Linux上的安装与配置 以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54. 1.下载JD ...