溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mariadb SELECT子查詢及UNION怎么用

發(fā)布時間:2022-02-18 16:24:54 來源:億速云 閱讀:177 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Mariadb SELECT子查詢及UNION怎么用”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Mariadb SELECT子查詢及UNION怎么用”文章能幫助大家解決問題。

SELECT子查詢

嵌套在其他SELECT語句中的SELECT查詢叫做子查詢,為什么要這樣做呢?其實我們已經(jīng)學了多表查詢,很多時候多表查詢已經(jīng)夠用了?但是子查詢又有自身存在的地位和價值,還拿多表查詢那個例子來說。

Mariadb SELECT子查詢及UNION怎么用

我們想知道某一城市所使用的語言,就可以分為兩個步驟:

1.在City表中查詢該城市的CountryCode。

2.使用查詢到的這個CountryCode在CountryLanguage表中查詢該國家所使用的語言。

雖然,可以分兩步完成,但是,需要兩次查詢和兩次傳輸,在帶寬和性能的對比下,我們更希望讓Mysql(MariaDB)來幫助我們完成這件事不是嗎?

看下用子查詢是什么樣的~

MariaDB [world]> SELECT Language FROM countrylanguage WHERE CountryCode = (SELECT CountryCode FROM city WHERE Name = 'Peking');
+-----------+
| Language  |
+-----------+
| Chinese   |
| Dong      |
| Hui       |
| Mantšu    |
| Miao      |
| Mongolian |
| Puyi      |
| Tibetan   |
| Tujia     |
| Uighur    |
| Yi        |
| Zhuang    |
+-----------+
12 rows in set (0.07 sec)

看到(SELECT CountryCode FROM city WHERE Name = ‘Peking’)這一坨了嗎?用括號括起來的這個查詢,他會得到北京的CountryCode,而這個CountryCode又作為外面SELECT的WHERE檢索條件。

所以,子查詢就是用括號括起來的查詢,而MariaDB會在進行查詢時先進行括號內(nèi)的查詢,得到一個值或一組值替換到相應的位置。

ANY或SOME子查詢

其實ANY和SOME跟IN的意思是一樣的,只要滿足操作符對()內(nèi)的任一值的操作為TRUE即可,如下所示。

查詢所有技術(shù)部(Tech)和銷售部(Sales)的員工:

MariaDB [world]> SELECT * FROM user                                                    
   -> WHERE deptid IN
   -> (SELECT id FROM department WHERE name IN ('Sales','Tech'));

MariaDB [world]> SELECT * FROM user
   -> WHERE deptid = ANY
   -> (SELECT id FROM department WHERE name IN ('Sales','Tech'));

MariaDB [world]> SELECT * FROM user
   -> WHERE deptid = SOME
   -> (SELECT id FROM department WHERE name IN ('Sales','Tech'));


+----+-------+----------+---------------------+--------+
| id | name  | password | regtime             | deptid |
+----+-------+----------+---------------------+--------+
|  1 | test  | test     | 2018-03-05 17:25:26 |      1 |
|  2 | test1 | test1    | 2018-03-05 17:25:26 |      1 |
|  3 | lucy  | lucy     | 2018-03-05 17:25:26 |      2 |
+----+-------+----------+---------------------+--------+
3 rows in set (0.00 sec)

EXISTS存在判斷

只要子查詢返回的有值即為TRUE,否則即為FALSE,如下例展示:

MariaDB [world]> SELECT EXISTS( SELECT * FROM user WHERE deptid = (SELECT id FROM department WHERE name='Tech') ) AS dep_is_Exist;
+--------------+
| dep_is_Exist |
+--------------+
|            1 |
+--------------+
1 row in set (0.01 sec)

當然EXISTS前可以加一個NOT,這樣就變成了當子查詢沒有結(jié)果時為真了。

注意事項

  1. 作為子查詢的SELECT語句只能查詢單個列,企圖檢索多個列將返回錯誤。
  2. 通常子查詢和表連接可以做相互轉(zhuǎn)換,而表連接相對而言會比子查詢獲得更好的效率。

UNION組合表

SQL允許執(zhí)行多個查詢(多條SELECT語句),并將結(jié)果作為一個查詢結(jié)果集返回,這些組合查詢通常稱為并(union)或復合查詢(compound query)。

需要注意如下幾點:

  1. UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關(guān)鍵字UNION分隔(因此,如果組合四條SELECT語句,將要使用三個UNION關(guān)鍵字)。
  2. UNION中的每個查詢必須包含相同的列、表達式或聚集函數(shù)(不過,各個列不需要以相同的次序列出)。
  3. 列數(shù)據(jù)類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含轉(zhuǎn)換的類型(例如,不同的數(shù)值類型或不同的日期類型)。

語法如下:

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

看如下例子,檢索所有美國和中國的國家:

MariaDB [world]> SELECT * FROM city WHERE CountryCode = 'CHN'   -> UNION
   -> SELECT * FROM city WHERE CountryCode ='USA';
+------+-------------------------+-------------+----------------------+------------+
| ID   | Name                    | CountryCode | District             | Population |
+------+-------------------------+-------------+----------------------+------------+
| 1890 | Shanghai                | CHN         | Shanghai             |    9696300 |
| 1891 | Peking                  | CHN         | Peking               |    7472000 |
....................................................................................
| 4064 | Odessa                  | USA         | Texas                |      89293 |
| 4065 | Carson                  | USA         | California           |      89089 |
| 4066 | Charleston              | USA         | South Carolina       |      89063 |
+------+-------------------------+-------------+----------------------+------------+
637 rows in set (0.01 sec)

//以下這條語句等同上方的SELECT查詢
SELECT * FROM city WHERE CountryCode ='USA' OR CountryCode = 'CHN';

統(tǒng)計美國和中國的城市數(shù):

MariaDB [world]> SELECT CountryCode,COUNT(id) AS city_nums FROM city WHERE CountryCode = 'CHN'   -> UNION
   -> SELECT COUNT(id),CountryCode FROM city WHERE CountryCode = 'USA';
+-------------+-----------+
| CountryCode | city_nums |
+-------------+-----------+
| CHN         | 363       |
| 274         | USA       |
+-------------+-----------+
2 rows in set (0.00 sec)

所以只要列數(shù)相同,都是可以組合成同一個結(jié)果集的,以下例子第一行顯示了美國的城市數(shù),第二行顯示了美國的語言數(shù)量:

MariaDB [world]> SELECT COUNT(id),CountryCode FROM city WHERE CountryCode = 'USA' UNION SELECT COUNT(Language),CountryCode FROM countrylanguage WHERE CountryCode ='USA';
+-----------+-------------+
| COUNT(id) | CountryCode |
+-----------+-------------+
|       274 | USA         |
|        12 | USA         |
+-----------+-------------+
2 rows in set (0.00 sec)

關(guān)于“Mariadb SELECT子查詢及UNION怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI