在MySQL中使用子查詢和標(biāo)量子查詢的基本操作教程
MySQL 子查詢
子查詢是將一個(gè) SELECT 語句的查詢結(jié)果作為中間結(jié)果,供另一個(gè) SQL 語句調(diào)用。MySQL 支持 SQL 標(biāo)準(zhǔn)要求的所有子查詢格式和操作,也擴(kuò)展了特有的幾種特性。
子查詢沒有固定的語法,一個(gè)子查詢的例子如下:
SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)
對(duì)應(yīng)的兩個(gè)數(shù)據(jù)表如下:
article 文章表:

user 用戶表:

查詢返回結(jié)果如下所示:

在該例子中,首先通過子查詢語句查詢出所有 status=1 的 uid,實(shí)際的查詢類似于:
SELECT * FROM article WHERE uid IN(1,2)
MySQL 標(biāo)量子查詢
標(biāo)量子查詢是指子查詢返回的是單一值的標(biāo)量,如一個(gè)數(shù)字或一個(gè)字符串,也是子查詢中最簡(jiǎn)單的返回形式。
一個(gè)標(biāo)量子查詢的例子如下:
SELECT * FROM article WHERE uid = (SELECT uid FROM user WHERE status=1 ORDER BY uid DESC LIMIT 1)
在該例子中,子查詢語句:
SELECT uid FROM user WHERE status = 1 ORDER BY uid DESC LIMIT 1
返回的是單一的數(shù)字(如 2),實(shí)際的查詢語句為:
SELECT * FROM article WHERE uid = 2
使用子查詢進(jìn)行比較
可以使用 = > < >= <= <> 這些操作符對(duì)子查詢的標(biāo)量結(jié)果進(jìn)行比較,通常子查詢的位置在比較式的右側(cè):
SELECT * FROM t1 WHERE column1 = (SELECT MAX(column2) FROM t2)
提示
對(duì)于采用這些操作符之一進(jìn)行的比較,子查詢必須返回一個(gè)標(biāo)量。唯一的例外是 = 可以和行子查詢同時(shí)使用。
子查詢與表連接
在很多情況下,子查詢的效果與 JOIN 表連接很類似,但一些特殊情況下,是必須用子查詢而不能用表連接的,如:
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)
該例子要找出用戶發(fā)表了 2 篇文章的所有文章記錄。對(duì)應(yīng)的兩個(gè)數(shù)據(jù)表如下:
article 文章表:

user 用戶表:

查詢返回結(jié)果如下所示:

相關(guān)文章
mysql Key_buffer_size參數(shù)的優(yōu)化設(shè)置
mysql數(shù)據(jù)庫中有許多重要的參數(shù),其中mysql key_buffer_size是對(duì)MyISAM表性能影響最大的一個(gè)參數(shù),下面就讓我們一起來了解一下2014-12-12
mysql視圖之創(chuàng)建視圖(CREATE VIEW)和使用限制實(shí)例詳解
這篇文章主要介紹了mysql視圖之創(chuàng)建視圖(CREATE VIEW)和使用限制,結(jié)合實(shí)例形式詳細(xì)分析了mysql視圖創(chuàng)建于使用相關(guān)原理與操作注意事項(xiàng),需要的朋友可以參考下2019-12-12
Mysql啟動(dòng)中 InnoDB: Error: log file ./ib_logfile0 is of differe
對(duì)于使用了默認(rèn) my.cnf(一般教程都會(huì)教你使用support-files/my-medium.cnf)的Mysql服務(wù)來說如果中間使用了innodb的話,innodb默認(rèn)的log file大小是56M2011-05-05
mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情
這篇文章主要介紹了mysql如何刪除數(shù)據(jù)表和關(guān)聯(lián)的數(shù)據(jù)表刪除詳情,刪除數(shù)據(jù)表的時(shí)候,表的定義和表中所有的數(shù)據(jù)均會(huì)被刪除。因此,在進(jìn)行刪除操作前,最好對(duì)表中的數(shù)據(jù)做一個(gè)備份,以免造成無法挽回的后果2022-07-07

