<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL基礎(chǔ)知識(shí)——子查詢

          共 318字,需瀏覽 1分鐘

           ·

          2020-10-16 12:14

          點(diǎn)擊關(guān)注上方“SQL數(shù)據(jù)庫(kù)開(kāi)發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時(shí)間送達(dá)干貨

          什么是子查詢

          子查詢(Sub Query)或者說(shuō)內(nèi)查詢(Inner Query),也可以稱(chēng)作嵌套查詢(Nested Query),是一種嵌套在其他 SQL 查詢的 WHERE 子句中的查詢。

          子查詢用于為主查詢返回其所需數(shù)據(jù),或者對(duì)檢索數(shù)據(jù)進(jìn)行進(jìn)一步的限制。

          子查詢可以在 SELECT、INSERT、UPDATE 和 DELETE 語(yǔ)句中,同 =、<、>、>=、<=、IN、BETWEEN 等運(yùn)算符一起使用。

          使用子查詢必須遵循以下幾個(gè)規(guī)則:

          • 子查詢必須括在圓括號(hào)中。

          • 子查詢的 SELECT 子句中只能有一個(gè)列,除非主查詢中有多個(gè)列,用于與子查詢選中的列相比較。

          • 子查詢不能使用 ORDER BY,不過(guò)主查詢可以。在子查詢中,GROUP BY 可以起到同 ORDER BY 相同的作用。

          • 返回多行數(shù)據(jù)的子查詢只能同多值操作符一起使用,比如 IN 操作符。

          • SELECT 列表中不能包含任何對(duì) BLOB、ARRAY、CLOB 或者 NCLOB 類(lèi)型值的引用。

          • 子查詢不能直接用在集合函數(shù)中。

          • BETWEEN 操作符不能同子查詢一起使用,但是 BETWEEN 操作符可以用在子查詢中。


          SELECT子查詢語(yǔ)句

          通常情況下子查詢都與 SELECT 語(yǔ)句一起使用,其基本語(yǔ)法如下所示:

          SELECT column_name [,column_name]

          FROM ?table1 [,table2]

          WHERE column_name OPERATOR

          (SELECT column_name [,column_name] ? ? ?

          FROM table1 [,table2 ]

          [WHERE])


          示例數(shù)據(jù)表

          考慮 Customers表和Orders表,表中記錄如下所示:

          表Customers

          表Orders


          子查詢實(shí)例

          現(xiàn)在,讓我們?cè)囈幌略?SELECT 語(yǔ)句中進(jìn)行子查詢:

          SELECT * FROM Customers
          WHERE 客戶ID IN
          (SELECT 客戶ID FROM Orders
          WHERE 員工ID=9)

          上述語(yǔ)句的執(zhí)行結(jié)果如下所示:

          上述語(yǔ)句是先獲取訂單表Orders中員工ID=9的發(fā)貨記錄,我們發(fā)現(xiàn)有兩條記錄,其中這兩條記錄對(duì)應(yīng)的客戶ID是3和4,而在外層客戶Customers表中我們需要找到Orders表中返回的客戶ID是3和4所對(duì)應(yīng)的記錄,那就是我們查詢出的結(jié)果了。


          注意:在WHERE子句中使用子查詢(如這里所示),應(yīng)該保證SELECT語(yǔ)句具有與WHERE子句中相同數(shù)目的列。通常,子查詢將返回單個(gè)列并且與單個(gè)列匹配,但如果需要也可以使用多個(gè)列。


          INSERT 子查詢語(yǔ)句

          子查詢還可以用在 INSERT 語(yǔ)句中。INSERT 語(yǔ)句可以將子查詢返回的數(shù)據(jù)插入到其他表中。子查詢中選取的數(shù)據(jù)可以被任何字符、日期或者數(shù)值函數(shù)所修飾。

          其基本語(yǔ)法如下所示:

          INSERT INTO?

          table_name [(column1 [,column2])] ? ? ? ? ??

          SELECT [*|column1 [,column2] ? ? ? ? ??

          FROM table1 [,table2]

          [WHERE VALUE OPERATOR]


          示例:

          考慮與 Customers表?yè)碛邢嗨平Y(jié)構(gòu)的 Customers_bak表?,F(xiàn)在要將 上面查詢的結(jié)果插入到Customers_bak表中

          INSERT INTO Customers_bak
          SELECT * FROM Customers
          WHERE 客戶ID IN
          (SELECT 客戶ID FROM Orders
          WHERE 員工ID=9)

          查詢一下Customers_bak的結(jié)果,會(huì)發(fā)現(xiàn)和上面的結(jié)果一致。


          UPDATE子查詢語(yǔ)句

          子查詢可以用在 UPDATE 語(yǔ)句中。當(dāng)子查詢同 UPDATE 一起使用的時(shí)候,既可以更新單個(gè)列,也可更新多個(gè)列。

          其基本語(yǔ)法如下:

          UPDATE table

          SET column_name = new_value

          [WHERE OPERATOR [VALUE]

          (SELECT COLUMN_NAME ??

          FROM TABLE_NAME)

          [WHERE)]


          示例:

          下面的示例將 Customers表中在Orders表里有發(fā)貨的客戶,他們所在的城市要加一個(gè)“市”字。

          UPDATE Customers
          SET 城市=城市+'市'
          WHERE 客戶ID IN
          (SELECT 客戶ID FROM Orders)

          這將影響4行數(shù)據(jù),隨后 Customers表中的記錄將如下所示:


          DELETE 子查詢語(yǔ)句

          如同前面提到的其他語(yǔ)句一樣,子查詢還可以同 DELETE 語(yǔ)句一起使用。

          其基本語(yǔ)法如下所示:

          DELETE FROM TABLE_NAME

          [ WHERE OPERATOR [VALUE]

          (SELECT COLUMN_NAME ??

          FROM TABLE_NAME)

          [WHERE)]


          示例:

          假設(shè)我們想刪除在Orders表中有購(gòu)買(mǎi)記錄的客戶信息,可以這樣寫(xiě)

          DELETE FROM Customers
          WHERE 客戶ID IN
          (SELECT 客戶ID FROM Orders)

          這將影響4行數(shù)據(jù),隨后 Customers表中的記錄將如下所示:


          相關(guān)子查詢
          是指涉及外部查詢的子查詢
          例如:要查詢每個(gè)客戶的訂單數(shù)量,我們可以這樣寫(xiě):
          SELECT?
          `姓名`,
          `客戶ID`,
          (
          SELECT?COUNT(*)
          FROM?orders o
          WHERE?o.`客戶ID`=c.`客戶ID`?
          ) AS?'數(shù)量'
          FROM?customers c

          結(jié)果為:

          這里使用SELECT COUNT(*)對(duì)表中的行進(jìn)行計(jì)數(shù),并且通過(guò)提供一條WHERE子句來(lái)匹配某個(gè)特定的客戶ID 。其中相關(guān)就是通過(guò)WHERE里面的匹配條件來(lái)確定聯(lián)系的。


          ——End——

          后臺(tái)回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
          后臺(tái)回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。
          推薦閱讀
          這是一個(gè)能學(xué)到技術(shù)的公眾號(hào),歡迎關(guān)注

          點(diǎn)擊「閱讀原文」了解SQL訓(xùn)練營(yíng)
          瀏覽 36
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  www.三区 | 久久影院网红无码视频牛牛夜夜骚 | 91蝌蚪色| 成人无码人妻 | 2021国产精品视频 |