Mysql基本命令之子查询

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子查询正好相反;

猜你喜欢

转载自blog.csdn.net/ithover/article/details/78629266