MySQL中的子查詢是指在一個查詢語句里面嵌套另一個查詢語句,被嵌套的查詢語句被稱為子查詢。子查詢通常出現在SELECT、FROM、WHERE、HAVING、IN和EXISTS等語句的子句中。
最常使用子查詢的場景是在WHERE語句中進行條件篩選,比如選出一張表中滿足某個條件的記錄:
SELECT * FROM table_name WHERE column_name = (SELECT column_name FROM another_table WHERE condition);
上面的查詢語句中,先查詢another_table中滿足某個條件的column_name,再在table_name中選擇column_name等于該值的記錄。
除了使用比較運算符=外,子查詢還可以與其他運算符一起使用,比如IN、NOT IN、ALL、ANY和EXISTS等:
SELECT * FROM table_name WHERE column_name IN (SELECT column_name FROM another_table WHERE condition); SELECT * FROM table_name WHERE column_name NOT IN (SELECT column_name FROM another_table WHERE condition); SELECT * FROM table_name WHERE column_name >ALL (SELECT column_name FROM another_table WHERE condition); SELECT * FROM table_name WHERE column_name< ANY (SELECT column_name FROM another_table WHERE condition); SELECT * FROM table_name WHERE EXISTS (SELECT column_name FROM another_table WHERE condition);
需要注意的是,子查詢語句返回的結果只能是單行單列,否則會報錯。同時,如果需要在查詢語句中使用多個子查詢,最好將其從內向外進行嵌套,以保證查詢效率。