本文主要介绍MySQL中的exists、in和any的基本用法。通过示例代码详细介绍,对大家的学习或工作有一定的参考学习价值。需要的朋友可以和边肖一起学习。
【1】存在
使用循环逐个查询外观,每次检查存在的条件语句。
当exists中的条件语句可以返回记录行时(不管记录行有多少,只要能返回),条件为真,返回当前循环记录。相反,如果exists中的条件语句不能返回记录行,并且条件为false,则当前循环记录将被丢弃。
exists条件类似于布尔条件,可以返回结果集时为1,不能返回结果集时为0。
语法格式如下:
从[不存在]的表_名称中选择*(选择唐山网络公司.);
例子如下:
从p_user_2中选择*
其中EXISTS(从p_user中选择id=12)
如果在p_user表中有一条id为12的记录,那么p_user_2表中的所有记录都将被返回。否则,返回记录为空。
如果它不存在,它就与上面相反。
一般来说,如果A表中有N条记录,那么exists查询就是把这N条记录一条一条的拿出来,然后N次判断存在条件
【2】在
语法格式如下:
从A中选择*其中列(从B中选择列);
需要注意的是,其中,列是的一列,对应于in的子查询语句返回一列多行的结果集。
请注意,中对应的select语句返回的结果必须是一列!可以是多行。
例子如下:
从p_user_2中选择*其中id[不]在(从p_user中选择id)
查询p_user表id集中id为p_user _ 2的记录。不在则相反。
【3】3之间的关系存在并在
sql更改后,它们可以实现相同的目标:
从p_user_2中选择*
其中id [not] in(从p_user中选择id);
从p_user_2中选择*
其中[not] EXISTS(从p_user中选择id,其中id=p_user_2.id)
那么什么时候用存在还是在?
* *如果查询中的两个表具有相同的大小,则in和exists之间几乎没有区别。**
* *如果两个表中的一个较小,另一个较大,则子查询表对较大的表使用,对较小的表使用:* *
例如:表a(小表),表b(大表)
(1)子查询表是表b:
从列表中选择*
其中抄送(从B中选择抄送)
//效率低下,使用a表上cc列的索引;
从列表中选择*
存在的地方(从B中选择cc,其中cc=A.cc)
//效率高,使用B表上cc列的索引。
子查询表为表a:
从B中选择*
抄送位置(从A中选择抄送)
//效率高,使用表b上cc列的索引;
从B中选择*
存在于(从A中选择cc,其中cc=B.cc)
//效率低,使用a表上cc列的索引。