外观
子查询
子查询就是一个SELECT语句查询另一个SELECT语句的附属。MySQL中支持嵌套多个查询,在里面查询的结果可以作为外面查询的条件。
带关键字IN的子查询
只有在子查询返回至少一个结果时才可以使用带IN关键字的子查询。IN关键字用于检测结果集中是否存在某个特定的值,若检测成功则执行外部查询。
在下面的例子中,我们每次可以执行查询book_borrow表中id字段的所有值,然后再执行查询book_list表中bookid字段含有id字段的可能取值来查询被借阅的书的信息,但是book_borrow中字段的值随时会发生改变,因此我们可以一次使用子查询简化操作。
select * from book_list where bookid in (select id from book_borrow);
带比较运算符的子查询
如下方代码代表查询张三借阅的书的信息:
select * from book_list where book_list.bookid=(select id from book_borrow where borrower='张三');
带EXISTS关键字的子查询
此情况子查询不返回查询的记录而是返回一个真假值。当内层查询语句查询到满足条件的记录就返回真值(true),否则返回假值(false);当值为真值时外层查询语句开始查询,所以查询的条件一般在内查询实现。
如下面的语句查询李四是否借阅了且没有归还的书,若有就输出:
select * from book_list where exists (select * from book_borrow where borrower='李四' and isback='0' and book_list.bookid=book_borrow.id);
NOT EXISTS关键字与EXISTS关键字相反,当返回值:为true时外查询不查询。
带ANY关键字的子查询
通常与比较运算符一起使用,它代表若内查询中的条件有一个满足就执行外查询,语法如下:
列名 比较运算符 ANY(内查询语句)如果比较运算符是“<”,则表示小于子查询结果集中的某一个值,如果是“>”,则表示至少大于子查询结果集中的任何一个值。
如下面查找比一年三班最低分高的全部学生信息:
select * from tb_student where score>any(select score from tb_student where class='1.3');带ALL关键字的子查询
表示满足所有条件。语法如下
列名 比较运算符 ALL(子查询)如下面查找是否有比一年三班最高分高的全部学生信息:
select * from tb_student where score>all(select score from tb_student where class='1.3');