MySQL子查询(嵌套查询)
一、子查询 1、子查询允许把一个查询嵌套在另一个查询当中(也就是嵌套查询)
2、子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、 limit、join和union等,但是对应的外部查询必须是以下语句之一:select、insert、update、delete、set或者do
二、子查询的分类 1、表子查询: ------返回的结果集是 N 行 N 列
2、标量子查询: ------返回单一值的标量,最简单的形式
3、列子查询: ------返回的结果集是 N 行 1 列
4、行子查询: ------返回的结果集是 1 行 N 列
可以使用的操作符: = , >, =, , < ,>=, ANY (SELECT s2 FROM table2);
SELECT s1 FROM table1 WHERE s1>ALL (SELECT s2 FROM table2);
4、行子查询 : 指子查询返回的结果集是: 1 行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集
SELECT * FROM article WHERE (title,content,uid)=(SELECT title, content,uid FROM blog WHERE bid=2);
四、EXISTS谓词 EXISTS是一个非常牛叉的谓词,它允许数据库高效地检查指定查询是否产生某些行
select * from t1 where city='shanghai' and EXISTS(select * from t2 where t1.cid=t2.cid);
例如: 查询 x1 表中 name 字段下是否有 zhangsan,若有则查询 x1 表中的记录,否则不查询
select * from x1 where EXISTS(select name from fruits where name='zhangsan');
查询 x1 表中是否存在 num=7 的记录,若存在,则查询 x1 表中 success 大于 80 的记录
select * from x1 where success>80 and EXISTS (select num from x1 where num=7);
相反,可以使用 not exists 查询不存在(用法相同)