关闭

mysql常用基础操作语法(十)~~子查询【命令行模式】

标签: mysqlmysql子查询
12114人阅读 评论(0) 收藏 举报
分类:
mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询。

1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:


2、where后作为条件的子查询多与“=”、“!=”、“>”、“<”等比较运算符一起使用。结果虽然通常是单行单列,但是有的时候也会用单行多列,而且有的时候还会返回多行单列。如果是多行单列的情况,则多与in、any、all、exists结合使用:
in和not in:


其中in表示包含于后边子查询结果集里的任意一个,not in表示不包含于后边结果集里的任意一个。上图子查询的结果中,返回depart_id为1、2、4,因此第一个查询就会查出emp中所有depart_id是1或2或4的,第二个就会查出既不是1也不是2也不是4的。

any:


=any的用法和in的效果是一样的;>any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以;<any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里>any是只要大于1就行,而<any则只要小于4就行。

all:


>all就是说要大于子查询结果集里所有的,简单理解就是要比最大的那个还大;<all就是要小于结果集里所有的,简单理解就是要比最小的还小。因此上边的第一个查询就是要大于4,第二个就是要小于1。

exists:


exists和not exists只关心后边的子查询是否有结果,而不关心子查询的结果是什么;对于exists,如果后边的子查询有结果,那么它的值就是true,反之如果没有查到结果,则为false,而not exists正好和这个情况相反,有值为false,无值为true。当他们的值为true时,前边查询到的结果成立,会被加入到主查询的结果集,否则不会被加入主查询的结果集。
在上便的查询中,查询语句会先从emp中查询一条数据,然后拿这条数据的depart_id和company中的depart_id比较,当存在两个id相同的数据时,就会有结果返回,然后最终返回6条数据,而第二个查询一样的道理,当不存在两个id相同的数据时,主查询才有结果返回,只有一条数据。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

mysql常用基础操作语法(五)--对数据的简单条件查询【命令行模式】

1、单条件查询:select 字段名 from tablename where 条件;2、简单多条件查询,使用&&或者between and等:3、is null和is not null查询,这里要注...
  • tuzongxun
  • tuzongxun
  • 2016-06-15 23:26
  • 12514

MySQL必知必会——命令行使用MySQL图文教程

——Navicat等数据库辅助软件的出现极大地方便了我们使用MySQL、Oracle、SQL Server等数据库,但是作为一名有实力、有逼格的后台开发工程师,不会使用命令行操作数据库是说不过去的,下...
  • zhangliangzi
  • zhangliangzi
  • 2016-05-31 18:30
  • 2198

mysql常用基础操作语法(九)~~外连接查询【命令行模式】

1、左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样:左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必须...
  • tuzongxun
  • tuzongxun
  • 2016-06-22 21:18
  • 11958

mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】

1、使用order by对查询的结果进行排序,asc升序,desc降序:也可以在order by后指定多个字段名和排序方式进行多级排序:2、使用limit限制查询结果的数量:上图中的0,代表查询的开始...
  • tuzongxun
  • tuzongxun
  • 2016-06-19 22:15
  • 12339

mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】

注:文中所有的。。。代表多个。1、使用count统计条数:select count(字段名。。。) from tablename;2、使用avg计算字段的平均值:select avg(字段名) fro...
  • tuzongxun
  • tuzongxun
  • 2016-06-20 22:25
  • 13894

mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】

1、使用union合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2;注意这个操作必须保证两张表字段相同,字段数据...
  • tuzongxun
  • tuzongxun
  • 2016-06-21 23:34
  • 10165

mysql常用基础操作语法(十一)~~字符串函数【命令行模式】

注:sql的移植性比较强,函数的移植性不强,一般为数据库软件特有,例如mysql有mysql的函数,oracle有oracle的函数。1、concat连接字符串:从上图中可以看出,直接使用select...
  • tuzongxun
  • tuzongxun
  • 2016-06-25 23:02
  • 8626

mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】

1、修改表名:alert table oldtablename rename newtablename; 或者alert table oldtablename rename to newtablena...
  • tuzongxun
  • tuzongxun
  • 2016-06-14 22:43
  • 5877

mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】

1、插入单条数据:insert into tablename(字段名1,字段名2,...) values(值1,值2,...);从图中可以看出,插入时不需要每个字段都有值(在没有相关的约束前提下),但...
  • tuzongxun
  • tuzongxun
  • 2016-06-14 23:53
  • 6734

mysql常用基础操作语法(一)~~对库的操作【命令行模式】

1、创建数据库:create Database databaseName;例如需要创建mysqlTest数据库,create Database mysqlTest; 由此还可以看出,这里的名称是...
  • tuzongxun
  • tuzongxun
  • 2016-06-06 21:59
  • 2986
    有问题要问?点击QQ联系我!
    有需要,qq联系我
    1160569243
    公告栏
    个人资料
    • 访问:787084次
    • 积分:9966
    • 等级:
    • 排名:第2029名
    • 原创:229篇
    • 转载:38篇
    • 译文:0篇
    • 评论:408条