日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解MariadbSELECT子查詢及UNION

SELECT子查詢

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

創(chuàng)新互聯(lián)從2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元勐海做網(wǎng)站,已為上家服務(wù),為勐海各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220

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

1.在City表中查詢?cè)摮鞘械腃ountryCode。

2.使用查詢到的這個(gè)CountryCode在CountryLanguage表中查詢?cè)搰?guó)家所使用的語(yǔ)言。

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

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

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’)這一坨了嗎?用括號(hào)括起來(lái)的這個(gè)查詢,他會(huì)得到北京的CountryCode,而這個(gè)CountryCode又作為外面SELECT的WHERE檢索條件。

所以,子查詢就是用括號(hào)括起來(lái)的查詢,而MariaDB會(huì)在進(jìn)行查詢時(shí)先進(jìn)行括號(hào)內(nèi)的查詢,得到一個(gè)值或一組值替換到相應(yīng)的位置。

ANY或SOME子查詢

其實(shí)ANY和SOME跟IN的意思是一樣的,只要滿足操作符對(duì)()內(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)

當(dāng)然EXISTS前可以加一個(gè)NOT,這樣就變成了當(dāng)子查詢沒(méi)有結(jié)果時(shí)為真了。

注意事項(xiàng)

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

UNION組合表

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

需要注意如下幾點(diǎn):

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

語(yǔ)法如下:

SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

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

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)

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

統(tǒng)計(jì)美國(guó)和中國(guó)的城市數(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ù)相同,都是可以組合成同一個(gè)結(jié)果集的,以下例子第一行顯示了美國(guó)的城市數(shù),第二行顯示了美國(guó)的語(yǔ)言數(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)

文章標(biāo)題:詳解MariadbSELECT子查詢及UNION
分享路徑:http://m.5511xx.com/article/cccdecj.html