详解mysql子查询(in,not in,any,!=any,all,!=all,some)等实例

 Mysql   高蒙   阅读(1722)   评论(0)   2016-04-05 20:54:54    mysql子查询 mysql in mysql not in 


在工作和学习中,我们经常使用到mysql子查询in,not in还有不常用的any,!=any,all,!=all,some等。今天刚好整理一下mysql子查询,便于后面查阅。

一、可以按照mysql子查询的类型划分。

111.png

1)、按照使用结构。

333.png

  1.     where子查询
  2.     from子查询
  3.     exists子查询

2)、按照返回结果。

222.png

  1.     标量子查询
  2.     列子查询
  3.     行子查询
  4.     表子查询

下面我们就按照返回结果的顺序讲解mysql子查询。

1、标量子查询

说明:子查询的返回值是一个标量。

例如:

    select * from table where filed = ( select max(filed1) from table1 where filed2 = 'filed2' );

注意:

    标量子查询中返回的是一个值,不能有多个值。

    这里可以使用 >,<,=,!=,<=,>=。

2、列子查询

集合运算符

一定要使用集合类的操作符来完成。

in (集合)  | not in(集合)

any(集合) 等于集合中的任何一个即可。等同于in  

!=any(集合) 不等于集合中的任意一个。只要与集合中的一些元素,不相等即可。

some 与 any 是同义词。用法语法都是一样的。

all(集合) 集合中的所有元素

!=all(集合) 不等于其中的所有元素,等同于not in。

例如:

    select * from table where filed not in ( select id from table1 where filed1 = 'filed1');

    select * from table where filed in ( select id from table1 where filed1 = 'filed1');

注意:

    这里出来in和not in外,其他的都可以使用 >,<,=,!=,<=,>=。

3、行子查询

在参与比较时,使用括号可以构建一行。

例如:

    select * from table where (filed1,filed2) = (select filed1,filed2 from table2 limit 1);

注意:

    1、这里一定要使用limit 1,只能获取到一行记录。否则不能实现行子查询的效果。

    2、值得注意的是,where后面的字段和子查询里面的查询的字段要一致,否则不行。

4、表子查询

例如:

    select * from (select filed1,filed2,filed3 from table where filed4='filed4') as temp where filed5 = 'filed5';

注意:

    如果用于from子查询子句内,from子句内,要求使用一个表,而不能是一个结果。所以应该给这个查询结果起别名。

exists子查询

为什么说它特殊了,因为他的执行流程不同。类似于双重循环。

select * from table where exists ( select * from table1 where table.id=id );

相等于

select * from table where id in ( select id from table1 );

每当查询table表里面的id,就去table1里面全部匹配一遍。

exists与in的区别。

主要区别与解决思路不一样。

ezists:先获得table表里面的每一条记录,然后再去获得table1表里面的记录,找到,则说明符合条件。

in : 先获得table1里面所有的id字段,再去检索table当前id,是否在id的集合内。

 



相关文章



我要评论


站长昵称:(*)

输入内容:


评论列表


高蒙

男,程序猿一枚

 

人生要是没有理想, 那跟一条咸鱼有什么分别。


关于我

  http://www.shuchengxian.com

高蒙个人博客是以PHP技术为主的程序员个人博客。博客主要发布php开发中遇到的问题以及解决办法,同时个人博客也分享网站模板素材,jquery插件等方面素材。


站点声明:相关侵权、举报、投诉及建议等,请发E-mail:936594075#qq.com(#替换成@)。

Copyright © 2018, www.shuchengxian.com, All rights reserved. 个人博客皖公网安备 34152302000022号 皖ICP备15015490号

关键词:个人博客,PHP博客,PHP博客程序,高蒙博客,高蒙个人博客,php程序员博客,程序员个人博客