国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL中列子查詢與行子查詢操作的學(xué)習(xí)教程

2024-07-24 13:08:17
字體:
供稿:網(wǎng)友
這篇文章主要介紹了MySQL中列子查詢與行子查詢操作的學(xué)習(xí)教程,子查詢是MySQL入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
 

MySQL 列子查詢及 IN、ANY、SOME 和 ALL 操作符的使用
MySQL 列子查詢
列子查詢是指子查詢返回的結(jié)果集是 N 行一列,該結(jié)果通常來自對(duì)表的某個(gè)字段查詢返回。
一個(gè)列子查詢的例子如下:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=1)

列子查詢中使用 IN、ANY、SOME 和 ALL 操作符

由于列子查詢返回的結(jié)果集是 N 行一列,因此不能直接使用 = > < >= <= <> 這些比較標(biāo)量結(jié)果的操作符。在列子查詢中可以使用 IN、ANY、SOME 和 ALL 操作符:

  • IN:在指定項(xiàng)內(nèi),同 IN(項(xiàng)1,項(xiàng)2,…)。
  • ANY:與比較操作符聯(lián)合使用,表示與子查詢返回的任何值比較為 TRUE ,則返回 TRUE 。
  • SOME:ANY 的別名,較少使用。
  • ALL:與比較操作符聯(lián)合使用,表示與子查詢返回的所有值比較都為 TRUE ,則返回 TRUE 。

下面是原始數(shù)據(jù)表:

table1:

s1210

table2:

s251220

ANY 操作符
ANY 關(guān)鍵字必須接在一個(gè)比較操作符的后面,表示與子查詢返回的任何值比較為 TRUE ,則返回 TRUE 。一個(gè) ANY 例子如下:
SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
查詢返回結(jié)果如下所示:

s110

在子查詢中,返回的是 table2 的所有 s2 列結(jié)果(5,12,20),然后將 table1 中的 s1 的值與之進(jìn)行比較,只要大于 s2 的任何值即表示為 TRUE,符合查詢條件。
IN 是 = ANY 的別名,二者相同,但 NOT IN 的別名卻不是 <> ANY 而是 <> SOME。
特殊情況
如果 table2 為空表,則 ANY 后的結(jié)果為 FALSE;
如果子查詢返回如 (NULL,NULL,NULL) 列為空的結(jié)果,則 ANY 后的結(jié)果為 UNKNOWN 。
ALL 操作符
ALL 關(guān)鍵字必須接在一個(gè)比較操作符的后面,表示與子查詢返回的所有值比較為 TRUE ,則返回 TRUE 。一個(gè) ALL 例子如下:
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
該查詢不會(huì)返回任何結(jié)果,因?yàn)?s1 中沒有比 s2 所有值都大的值。
當(dāng)然在該例子查詢中,返回了 s2 的所有值,您可以在該子查詢中添加任何條件以限制返回的查詢結(jié)果而無需全部返回。
NOT IN 是 <> ALL 的別名,二者相同。
特殊情況
如果 table2 為空表,則 ALL 后的結(jié)果為 TRUE;
如果子查詢返回如 (0,NULL,1) 這種盡管 s1 比返回結(jié)果都大,但有空行的結(jié)果,則 ALL 后的結(jié)果為 UNKNOWN 。
注意:對(duì)于 table2 空表的情況,下面的語(yǔ)句均返回 NULL:

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

MySQL 行子查詢
行子查詢是指子查詢返回的結(jié)果集是一行 N 列,該子查詢的結(jié)果通常是對(duì)表的某行數(shù)據(jù)進(jìn)行查詢而返回的結(jié)果集。
一個(gè)行子查詢的例子如下:

SELECT * FROM table1 WHERE (1,2) = (SELECT column1, column2 FROM table2)

在該例子中,在保證子查詢返回單一行數(shù)據(jù)的前提下,如果 column1=1 且 column2=2 ,則該查詢結(jié)果為 TRUE。
MySQL 行構(gòu)造符
在上面的例子中,WHERE 后面的 (1,2) 被稱為行構(gòu)造符,也可以寫作 ROW(1,2)。行構(gòu)造符通常用于與對(duì)能返回兩個(gè)或兩個(gè)以上列的子查詢進(jìn)行比較。
MySQL 行子查詢實(shí)例
下面是用于例子的兩張?jiān)紨?shù)據(jù)表:
article 表:

MySQL中列子查詢與行子查詢操作的學(xué)習(xí)教程

blog 表:

MySQL中列子查詢與行子查詢操作的學(xué)習(xí)教程

SQL 如下:

SELECT * FROM article WHERE (title,content,uid) = (SELECT title,content,uid FROM blog WHERE bid=2)

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

MySQL中列子查詢與行子查詢操作的學(xué)習(xí)教程

在該行子查詢例子中,將 article 表 title,content,uid 字段逐一與子查詢返回的行記錄作比較,如果相等則列出這些相等的記錄(理論上可能不止一條)。



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 德格县| 宝坻区| 客服| 高州市| 禹州市| 阜新市| 庐江县| 乌拉特中旗| 黄浦区| 仙游县| 揭东县| 太白县| 德清县| 辽中县| 治县。| 大新县| 屏山县| 乐安县| 南部县| 合江县| 珠海市| 岫岩| 金阳县| 南投市| 卢氏县| 威信县| 富顺县| 博乐市| 常山县| 英山县| 嘉峪关市| 丰原市| 宁化县| 宁蒗| 金秀| 安福县| 巨鹿县| 拉孜县| 永康市| 武陟县| 湘阴县|