(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
分享到:
相关推荐
计算机后端-PHP视频教程. php与mysql加强- 07. php加强21-exists型子查询.wmv
在SQL查询中,EXISTS谓词是一个非常关键的子句,用于判断子查询是否返回至少一行数据。这个知识点对于数据库查询优化和复杂条件筛选至关重要。本文将深入探讨EXISTS谓词的工作原理、用法以及其与IN和JOIN操作符的...
MySQL子查询是数据库查询中的一个重要概念,它允许在SQL语句内部嵌套其他查询,用于检索、比较或操作数据。子查询可以理解为一个独立的查询结果,它被用作外部查询的一部分,提供了灵活的数据处理能力。在本篇文章中...
MySQL中的`EXISTS`子句是SQL查询语句中一种重要的条件判断操作,它用于测试子查询是否返回至少一行数据。在理解`EXISTS`的使用时,我们需要深入探讨其工作原理、优缺点以及与其他查询操作(如`IN`、`JOIN`)的对比。...
mysql exists与not exists...也就是要得到类似以下语句的效果(not in 效果不完全等同于 not exists , 如果子查询中出现空记录, 则整个查询语句不会返回数据) SELECT a.* FROM tableA a WHERE a.column1 not in
MySQL 子查询是一种在SQL查询语句中嵌套其他查询的方法,它允许我们在一个查询中使用另一个查询的结果。子查询可以作为SELECT语句的一部分,也可以出现在FROM或WHERE子句中,甚至可以在HAVING子句中使用。它们为...
在SQL查询中,`EXISTS`和`NOT EXISTS`是两个非常重要的子查询操作符,它们主要用于判断子查询是否返回结果。本篇文章将详细介绍这两个关键字的用法,并通过实例进行解析。 首先,`EXISTS`的语法是:主查询中的条件...
此外,MySQL 子查询还支持其他类型的操作符,例如 EXISTS、ANY、SOME、ALL 等。这些操作符可以根据实际情况选择使用。 在 MySQL 中,子查询可以在 SELECT、FROM、WHERE、HAVING 等子句中使用。例如 `SELECT * FROM ...
MySQL中的`IN`查询和`EXISTS`查询都是在处理子查询时常用的操作,它们各自有不同的特性和适用场景。理解两者的区别对于优化SQL查询性能至关重要。 ### `IN`查询 `IN`查询通常用于检查某列的值是否在特定的值列表中...
通常,`NOT EXISTS` 与 `NOT IN` 类似,但当子查询返回大量数据时,`NOT EXISTS` 可能更高效,因为它停止检查子查询中的每个元素一旦找到匹配项。而`LEFT JOIN` 则在处理大量数据时可能更为昂贵,因为它需要构建一个...
`NOT EXISTS`是SQL中的一个条件子句,它用于检查子查询的结果集是否为空。如果子查询没有返回任何行,则`NOT EXISTS`返回`TRUE`,否则返回`FALSE`。在`INSERT`语句中结合`NOT EXISTS`,我们可以先查询是否有相同的...
- **使用存在子查询**:有时候可以利用 `EXISTS` 或 `NOT EXISTS` 来代替 `IN` 或 `NOT IN`,这可能会带来更好的性能。 - **避免使用嵌套子查询**:尽量减少子查询的层级,过多的嵌套可能会导致性能下降。 - **考虑...
在MySQL查询优化中,`EXISTS` 和 `IN` 子句是两种常用的子查询方式。`EXISTS` 子句用于检查子查询返回是否存在至少一条满足条件的记录,而 `IN` 子句则比较一个值是否在子查询返回的结果集中。一般情况下,对于大量...
在子查询中,NOT IN子句将执行一个内部的排序和合并,无论在哪种情况下,NOT IN都是最低效的(因为它对子查询中的表执行了一个全表遍历)。为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT ...
MySQL数据库中的相关子查询是一种高级查询技术,它在处理复杂的数据检索时非常有用。相关子查询的特点在于,其内部查询的执行与外部查询是紧密关联的,子查询的执行依赖于外部查询的某个属性值。这与嵌套子查询形成...
- **Not exists**:MySQL对查询进行了LEFT JOIN优化。 - **range checked for each record (index_map:**#):MySQL未发现好的索引使用方式。 通过以上分析,我们可以了解到查询优化的具体细节,这对于提升MySQL的...
MySQL的EXISTS和NOT EXISTS子查询用于检查子查询是否返回至少一行数据。它们不关心返回的具体值,只关注结果集是否为空。EXISTS子句的基本语法如下: ```sql SELECT ... FROM table WHERE EXISTS (subquery) ``` ...
### 两种MySQL递归Tree查询效率分析 #### 一、背景与目的 在数据库操作中,经常需要处理具有层级结构的数据。例如,在处理组织结构、文件系统或是地区划分时,通常会采用递归的方式来查询这些层级关系。MySQL作为...