zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

mysql命令行基础模式 操作 查询 常用 语法
2023-09-14 09:04:42 时间
1、理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后。出现在from后的子查询结果通常是多行多列的,充当临时表;而出现在where后的子查询结果通常是单行单列,充当条件:
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的用法和in的效果是一样的; any是说要大于子查询结果集里的任意一个就可以,简单理解就是只要大于结果集中最小的那个就可以; any就是要小于子查询结果集里任意一个就可以,简单理解就是只要小于最大的一个就可以。因此这里 any是只要大于1就行,而 any则只要小于4就行。

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相同的数据时,主查询才有结果返回,只有一条数据。

涂宗勋 认真生活,快乐工作,保持理想!https://blog.csdn.net/tuzongxun