首頁  >  文章  >  資料庫  >  mysql子查詢是什麼

mysql子查詢是什麼

青灯夜游
青灯夜游原創
2019-06-01 14:29:428858瀏覽

MySql的子查詢是多表查詢的一個重要組成部分,常常和連接查詢一起使用,是多表查詢的基礎。以下這篇文章就來帶大家了解一下子查詢,希望對你們有幫助。

mysql子查詢是什麼

什麼是子查詢?

子查詢,又叫內部查詢。當一個查詢是另一個查詢的條件時,稱之為子查詢。子查詢可以使用幾個簡單命令建構功能強大的複合命令。子查詢最常用於SELECT-SQL指令的WHERE子句中。

子查詢是一個 SELECT 語句,它嵌套在 SELECT、SELECT…INTO 語句、INSERT…INTO 語句、DELETE 語句、或 UPDATE 語句或嵌套在另一個子查詢中。

二、子查詢分類

子查詢分為以下幾類: 

1、標量子查詢:回傳單一值的標量,最簡單的形式。 

2、 列子查詢:傳回的結果集合是 N 行一列。 

3、行子查詢:傳回的結果集是一行 N 欄。 

4、 表子查詢:傳回的結果集合是 N 行 N 欄位。

可以使用的運算子:= > 6d267e5fab17ea8bc578f9e7e5e1570b= 0b10350feb89d12111457853bf8dfc21 ANY IN SOME ALL EXISTS

##一個子查詢會回傳一個標量(就一個值)、一個行、一個列或一個表,這些子查詢稱為標量、行、列和表子查詢。

如果子查詢回傳一個標量值(就一個值),那麼外部查詢就可以使用:=、>、f539a70d3ea090bac4faa80192f58ccc=、d689b422a82bd2829054940788b79b49符號來比較判斷;如果子查詢傳回的不是一個標量值,而外部查詢使用了比較符和子查詢的結果進行了比較,那麼就會拋出異常。

1、 標量子查詢:

是指子查詢傳回的是單一值的標量,如一個數字或一個字串,也是子查詢中最簡單的返回形式。可以使用

= > 6d267e5fab17ea8bc578f9e7e5e1570b= 0b10350feb89d12111457853bf8dfc21 這些運算子對子查詢的標量結果進行比較,通常子查詢的位置在比較式的右邊 

#範例:

SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1)
SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)
SELECT * FROM article AS t WHERE 2 = (SELECT COUNT(*) FROM article WHERE article.uid = t.uid)

2、MySQL 列子查詢:

#指子查詢傳回的結果集是N 行一列,該結果通常來自對錶的某個字段查詢傳回。

可以使用

= > af912d6815ea2e46d3e4fa3d45f85905= 1bf0893f64eef4fc7565c4591de6bdf5 這些運算子對子查詢的標量結果進行比較,通常子查詢的位置在比較式的右側 

可以使用

INANYSOMEALL 運算子,不能直接使用 = > 6d267e5fab17ea8bc578f9e7e5e1570b= 0b10350feb89d12111457853bf8dfc21 這些比較標量結果的運算子。 

範例:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)
SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)

NOT IN 是 a8093152e673feb7aba1828c43532094 ALL 的別名,二者相同。

特殊情況:

如果table2 為空表,則ALL 後的結果為TRUE; 

如果子查詢回傳如(0,NULL,1) 這種儘管s1 比回傳結果都大,但有空行的結果,則ALL 後的結果為UNKNOWN 。

注意:對於table2 空表的情況,下面的語句都傳回NULL:

SELECT s1 FROM table1 WHERE s1 > (SELECT s2 FROM table2)
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT MAX(s1) FROM table2)

3、MySQL 行子查詢:

#。指子查詢傳回的結果集是一行N 列,該子查詢的結果通常是對資料表的某行資料進行查詢而傳回的結果集。

範例:

SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2)
//注:(1,2) 等同于 row(1,2)
SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)

4、MySQL 表子查詢:

指子查詢傳回的結果集是N 行N 列的一個表數據。 

範例:

SELECT * FROM article WHERE (title,content,uid) IN (SELECT title,content,uid FROM blog)

以上是mysql子查詢是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn