程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中列子查詢與行子查詢操作的進修教程

MySQL中列子查詢與行子查詢操作的進修教程

日期:2017/7/28 14:22:34      編輯:MySQL綜合教程

MySQL中列子查詢與行子查詢操作的進修教程。本站提示廣大學習愛好者:(MySQL中列子查詢與行子查詢操作的進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中列子查詢與行子查詢操作的進修教程正文


MySQL 列子查詢及 IN、ANY、SOME 和 ALL 操作符的應用
MySQL 列子查詢
列子查詢是指子查詢前往的成果集是 N 行一列,該成果平日來自對表的某個字段查詢前往。
一個列子查詢的例子以下:

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

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

因為列子查詢前往的成果集是 N 行一列,是以不克不及直接應用 = > < >= <= <> 這些比擬標量成果的操作符。在列子查詢中可使用 IN、ANY、SOME 和 ALL 操作符:

  • IN:在指定項內,同 IN(項1,項2,…)。
  • ANY:與比擬操作符結合應用,表現與子查詢前往的任何值比擬為 TRUE ,則前往 TRUE 。
  • SOME:ANY 的別號,較少應用。
  • ALL:與比擬操作符結合應用,表現與子查詢前往的一切值比擬都為 TRUE ,則前往 TRUE 。

上面是原始數據表:

table1:

s1
2
10

table2:

s2
5
12
20

ANY 操作符
ANY 症結字必需接在一個比擬操作符的前面,表現與子查詢前往的任何值比擬為 TRUE ,則前往 TRUE 。一個 ANY 例子以下:
SELECT s1 FROM table1 WHERE s1 > ANY (SELECT s2 FROM table2)
查詢前往成果以下所示:

s1
10

在子查詢中,前往的是 table2 的一切 s2 列成果(5,12,20),然後將 table1 中的 s1 的值與之停止比擬,只需年夜於 s2 的任何值即表現為 TRUE,相符查詢前提。
IN 是 = ANY 的別號,兩者雷同,但 NOT IN 的別號卻不是 <> ANY 而是 <> SOME。
特別情形
假如 table2 為空表,則 ANY 後的成果為 FALSE;
假如子查詢前往如 (NULL,NULL,NULL) 列為空的成果,則 ANY 後的成果為 UNKNOWN 。
ALL 操作符
ALL 症結字必需接在一個比擬操作符的前面,表現與子查詢前往的一切值比擬為 TRUE ,則前往 TRUE 。一個 ALL 例子以下:
SELECT s1 FROM table1 WHERE s1 > ALL (SELECT s2 FROM table2)
該查詢不會前往任何成果,由於 s1 中沒有比 s2 一切值都年夜的值。
固然在該例子查詢中,前往了 s2 的一切值,您可以在該子查詢中添加任何前提以限制前往的查詢成果而無需全體前往。
NOT IN 是 <> 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)

MySQL 行子查詢
行子查詢是指子查詢前往的成果集是一行 N 列,該子查詢的成果平日是對表的某行數據停止查詢而前往的成果集。
一個行子查詢的例子以下:

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

在該例子中,在包管子查詢前往單一行數據的條件下,假如 column1=1 且 column2=2 ,則該查詢成果為 TRUE。
MySQL 行結構符
在下面的例子中,WHERE 前面的 (1,2) 被稱為行結構符,也能夠寫作 ROW(1,2)。行結構符平日用於與對能前往兩個或兩個以上列的子查詢停止比擬。
MySQL 行子查詢實例
上面是用於例子的兩張原始數據表:
article 表:

http://www.aspphp.online/shujuku/UploadFiles_3118/201707/2017072814223472.png (646×131)

blog 表:

20151216173333001.png (645×102)

SQL 以下:

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

查詢前往成果以下所示:

20151216173412781.png (659×53)

在該行子查詢例子中,將 article 表 title,content,uid 字段一一與子查詢前往的行記載作比擬,假如相等則列出這些相等的記載(實際上能夠不止一條)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved