App下載

在SQL中如何使用 SQL 子查詢?使用方法分享!

相思情 2021-09-10 15:42:03 瀏覽數(shù) (8272)
反饋

先決條件

要遵循并完全理解本教程,您需要具備以下條件:

什么是子查詢?

子查詢是嵌套在另一個 SQL 查詢中的 SQL 查詢。它們幫助查詢?yōu)閃HERE子句創(chuàng)建條件以過濾行并對它們執(zhí)行操作。子查詢可以使用SELECT,INSERT,UPDATE,和DELETE語句。

WHERE 子句中的子查詢示例

我們希望在交易金額大于 1,000 元的數(shù)據(jù)庫中獲取用戶。對于我們的示例,我們將有兩個表,分別是users和transactions存儲用戶和交易信息。

用戶和交易表

我們可以編寫一個查詢,從transactions表中提取金額超過 1,000 美元的所有行,然后將其用作另一個查詢的條件,該查詢將users根據(jù)第一個查詢的結(jié)果從表中提取行。

查詢將如下所示:

SELECT *
FROM users
WHERE id IN
    (SELECT user_id
     FROM transactions
     WHERE amount > 1000);

子查詢的優(yōu)點(diǎn)

  • 與連接相比,子查詢通過將它們構(gòu)建為獨(dú)立的部分來提高查詢可讀性。
  • 易于理解和維護(hù)子查詢。
  • 子查詢可以替代復(fù)雜的連接和聯(lián)合。

子查詢的缺點(diǎn)

  • 子查詢不能在同一個 SQL 語句中修改一個表并從同一個表中進(jìn)行選擇。
  • 子查詢是一項(xiàng)開銷很大的任務(wù),因此使用連接操作會更快。

運(yùn)行子查詢練習(xí)

我們將探索一些使用 Arctype 的示例,我們將在其中展示子查詢并了解它們是如何在應(yīng)用程序中構(gòu)建和使用的。

我們需要創(chuàng)建一個我們將在本教程中使用的數(shù)據(jù)庫。為方便起見,我創(chuàng)建了一個包含 SQL 文件的GitHub Gist,用于構(gòu)建我們的數(shù)據(jù)庫模式并將虛擬數(shù)據(jù)插入其中。要使用它,我們需要執(zhí)行以下操作:

  • 使用 Arctype 連接到我們的數(shù)據(jù)庫。
  • 導(dǎo)航到 Arctype 中的查詢選項(xiàng)卡并創(chuàng)建一個新查詢。
  • 粘貼并運(yùn)行Gist 中的create.sql 文件以創(chuàng)建模式。
  • 再次導(dǎo)航到查詢選項(xiàng)卡以創(chuàng)建新查詢。
  • 粘貼并運(yùn)行Gist 中的insert.sql 文件,用虛擬數(shù)據(jù)填充數(shù)據(jù)庫。

運(yùn)行子查詢練習(xí)

使用子查詢選擇數(shù)據(jù)

讓我們編寫一個查詢來從BUYER表中引用的SKU_DATA表中選擇所有行。在 Arctype 中創(chuàng)建一個新查詢并執(zhí)行以下代碼:

SELECT *
FROM BUYER
WHERE BuyerName IN
    (SELECT BUYER
     FROM SKU_DATA);

使用子查詢選擇數(shù)據(jù)

在上面的代碼中,我們創(chuàng)建了一個內(nèi)部查詢,該查詢BUYER從SKU_DATA表中選擇列,然后使用它作為條件從BUYER表中選擇具有相同BuyerName列值的行。

使用子查詢更新數(shù)據(jù)

讓我們編寫一個查詢,將2016 年銷售的所有商品Price的ORDER_ITEM表中列的值增加10%。在 Arctype 中創(chuàng)建一個新查詢并執(zhí)行以下代碼:

UPDATE ORDER_ITEM
SET Price=Price*1.1
WHERE SKU IN
    (SELECT SKU
     FROM CATALOG_SKU_2016);

使用子查詢成功更新

在上面的代碼中,我們創(chuàng)建了一個內(nèi)部查詢,它SKU從CATALOG_SKU_2016表中選擇列來過濾我們應(yīng)該在ORDER_ITEM表中更新的行。

使用子查詢刪除數(shù)據(jù)

我們將編寫一個子查詢,從INVENTORY存儲在小于 130,000 平方英尺的倉庫中的表中刪除所有記錄。查詢將如下所示:

DELETE
FROM INVENTORY
WHERE WarehouseID IN
    (SELECT WarehouseID
     FROM WAREHOUSE
     WHERE SquareFeet < 130000);

使用子查詢成功刪除

使用嵌套子查詢

也可以在另一個子查詢中包含子查詢。下面是一個例子:

SELECT *
FROM CATALOG_SKU_2017
WHERE SKU IN
    (
        SELECT SKU
        FROM INVENTORY
        WHERE WarehouseID IN
        (
            SELECT WarehouseID
            FROM WAREHOUSE
            WHERE SquareFeet > 130000
        )
    );

使用嵌套子查詢

在此示例中,我們從CATALOG_SKU_2017存儲在平方英尺大于 130,000 的倉庫中的表中選擇了所有行。

結(jié)論

在本文中,我們了解了子查詢,這是一種在查詢中運(yùn)行查詢的方法。我們還了解了它們的工作原理、優(yōu)點(diǎn)和局限性,并使用 Arctype 運(yùn)行數(shù)據(jù)示例。


0 人點(diǎn)贊