1. IN关键字的子查询
只有子查询返回的结果列包含一个值时,比较运算符才适用。假如一个子查询返回的结果集是值的列表,这时比较运算符就必须用IN运算符代替。
IN运算符可以检测结果集中是否存在某个特定的值,如果检测成功就执行外部的查询。
匹配子集中的任一元素
示例:带IN关键字的子查询。
SELECT * FROM tb_bookWHERE row_no IN (SELECT row_no FROM tb_row);
2. EXISTS关键字的子查询
使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。如果内层查询语句查询到满足条件的记录,就返回一个真值(true),否则,将返回一个假值(false)。当返回的值为true时,外层查询语句将进行查询;当返回的为false时,外层查询语句不进行查询或者查询不出任何记录。
说明:与EXISTS关键字刚好相反,使用NOT EXISTS关键字时,当返回的值是true时,外层查询语句不执行查询;当返回值是false时,外层查询语句将执行查询。
示例:带EXISTS关键字的子查询。
SELECT * FROM tb_bookWHERE EXISTS (SELECT row_no FROM tb_row WHERE row_no = 12);