mysql基本的查询命令为
//基本查询
select * from user where age > 20;
//where子查询
select * from user where age > (select avg(age) from user);
子查询就是在一个查询的条件中是一个完整的sql语句,
局部位置出现的select语句,就称为子查询;
相对的,外部的(整体的)select语句,就是主查询;
子查询的分类
1.表子查询
#一个子查询返回的结果理论上是“多行多列”的时候。
#此时可以当做一个“表”来使用,通常是放在from后面。
#形式举例:
select X1, X2, ... from (表子查询) as tab1 where id > 10;
2.行子查询 :
#一个子查询返回的结果理论上是“一行多列”的时候。此时可以当做一个“行”来使用,通常放在“行比较语法”中。
#形式举例:
select X1, X2, ... from 表1 where (edu, laizi) = (行子查询);
3.列子查询 :
#一个子查询返回的结果理论上是“多行一列”的时候。
#此时可以当做“多个值”使用,类似这种:(5, 17, 8, 22)。
#形式举例:
select X1, X2, ... from 表1 where edu in (列子查询);
4.标量子查询:
#一个子查询返回的结果理论上是“一行一列”的时候。
#此时可以当做“一个值”使用,
#类似这种:select 5 as c1;
#或select ...where a = 17,
#或select ... where b > 8;
#形式举例:
select X1, X2, ... from 表1 where age = (标量子查询);
按使用位置来分
1.作为主查询的结果数据:
select c1,(select f1 from tab2) as f11 from tab1;
#这里子查询应该只有一个数据(一行一列,标量子查询)
#用在主查询的select子句中;
2.作为主查询的条件数据:
select c1 from tab1 where c1 in (select f1 from tab2);
#这里子查询可以是多个数据(多行一列,列子查询)
#用在主查询的where或having子句中;
3.作为主查询的来源数据:
select c1 from (select f1 as c1, f2 from tab2) as t2;
#这里子查询可以是任意查询结果(表子查询)。
#用在主查询的from子句中
常见子查询及相关关键字
在比较运算符中使用子查询
形式:
where 字段 比较运算符 (标量子查询);
其中,比较运算符有:>
>=
<
<=
=
<>
使用in的子查询
形式:
where 字段名 in (列子查询)
使用any的子查询
形式:
where 字段 比较运算符 any (列子查询);
其中,比较运算符有:>
>=
<
<=
=
<>
说明:
其含义是:如果该列子查询所得的数据中,有任何一个满足该比较运算符的条件,就算符合了条件,结果为真(true)使用some的子查询
some是any的同义词!使用all的子查询
形式:
where 字段 比较运算符 all (列子查询);
其中,比较运算符有:>
>=
<
<=
=
<>
说明:
其含义是:如果该列子查询所得的数据中,全都满足该比较运算符的条件,才算符合了条件,结果才是真(true);使用exists的子查询
形式:
where exists(子查询)
说明:
exists表示的含义是:
该子查询的结果如果“有”数据,此时exists就代表“真”;
该子查询的结果如果“没有”数据,此时exists就代表“假”;实际应用中,通常是,在exists子查询的内部,使用主查询的某些字段,来让子查询的表,跟主查询的表建立一种隐蔽的“连接关系”,此时,就可以发挥一定的作用。
实用not exists的子查询
这个,exists子查询正好相反;