php mysql exists语句_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=01and

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关键词必须后面接一个比较操作符(即>,

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=01and d.Device_ID!=tt.Device_ID and a.App_ID!=tt.App_ID (此处);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值