子查询 (也是连表查询)
select *[1] from[2] user where [3]
- 以上句子中,一共有三个地方可以插入select语句,分别为1,2,3
select 子查询
- select *,(select…) from student
- 相当于一个自定义的列
from子查询
- select * from(select * from users where uid >10)
此处添加select子查询,相当于将 select * from users where uid >10 查出的结果相当于一张虚拟表表, > 然后再从这个虚拟表中进行查询
where子查询
- select * from users where 指定一个字段和后边的结果集做比较 (select * from student)
此处添加select子查询,相当于将select * from student作为一个比较, 比较某一个字段和查询出来结果集的>关系
- 在这顶的字段后边可以使用比较运算符
> >= < <= !=
- 还可以使用
① IN
一个查询语句的结果可能落在另一个查询语句里
查询订单表里的所有商品名称:
select goods_name from goods where gid in(select goods_id from order_goods);
② ANY
ANY关键字表示满足其中任一条件
当外层条件字段满足内层查询结果的任何一个值,就可以通过该条件进行查询
通常和比较运算符一起使用
返回商品表的库存字段,然后将品牌表的id字段与库存结果数据比较,只要品牌id大于其中的任何一个字段,就是符合查询条件结果
select brand_id from brand where brand_id <ANY(select goods_number from goods);
③ ALL
ALL关键字表示满足所有条件
使用ALL关键字时,只有内层满足条件,才能执行外层查询
例如:返回商品表中库存量比品牌id都大的商品名称
select goods_name from goods where goods_number>ALL(select brand_id from brand);
④ 比较运算符
查询商品表中除了最多库存量的其他商品名称
select max(goods_number) from goods;
select goods_name from goods where goods_number <(select max(goods_number) from goods);
⑤ EXISTS
使用EXISTS关键字时,内层查询不返回查询的值,而是返回真假值,当返回的值为真时,外层语句进行查询,返回值为假时,外层语句不进行查询
例如:当有品牌id为11的数据时再进行外层查询:
select * from goods where exists (select * from brand where brand_id=11);