成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入實(shí)例,掌握SQL子查詢

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
通過(guò)了解子查詢的類型和實(shí)際應(yīng)用,數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠掌握這種高級(jí) SQL 技術(shù)并優(yōu)化其數(shù)據(jù)庫(kù)交互。

SQL子查詢是數(shù)據(jù)庫(kù)查詢中的一項(xiàng)重要且強(qiáng)大的技術(shù),是數(shù)據(jù)庫(kù)開(kāi)發(fā)人員提升查詢能力的關(guān)鍵工具之一。通過(guò)嵌套在主查詢中,子查詢可以實(shí)現(xiàn)更精確和靈活的數(shù)據(jù)過(guò)濾,為數(shù)據(jù)管理和查詢優(yōu)化提供無(wú)限可能。對(duì)于數(shù)據(jù)庫(kù)開(kāi)發(fā)人員來(lái)說(shuō),了解不同類型的子查詢及其實(shí)際應(yīng)用是優(yōu)化查詢和數(shù)據(jù)管理的關(guān)鍵。

圖片

1 理解子查詢

子查詢是嵌套在另一個(gè)查詢中的 SQL 查詢,作為增強(qiáng)主查詢功能的構(gòu)建塊。這些子查詢可以應(yīng)用于 SELECT、UPDATE、DELETE 和 INSERT 語(yǔ)句,實(shí)現(xiàn)了廣泛的應(yīng)用。子查詢的主要目的是以一種無(wú)法通過(guò)常規(guī)查詢實(shí)現(xiàn)的方式來(lái)過(guò)濾或操作數(shù)據(jù)。

接下來(lái)我們通過(guò)具體示例來(lái)深入了解各種類型的子查詢及其應(yīng)用。

2 示例

假設(shè)在 MySQL 數(shù)據(jù)庫(kù)管理系統(tǒng)中有以下數(shù)據(jù)庫(kù)表:

一個(gè)包含有關(guān)員工信息的 Employees 表,一個(gè)存儲(chǔ)有關(guān)產(chǎn)品詳細(xì)信息的 Products 表,一個(gè)將產(chǎn)品分類為不同類別的 Categories 表,以及一個(gè)記錄有關(guān)客戶訂單信息的 Orders 表。

這些表之間的關(guān)系通過(guò)主鍵和外鍵建立。

Employees 表

  • employee_id(主鍵):每個(gè)員工的唯一標(biāo)識(shí)符。
  • employee_name:?jiǎn)T工姓名。
  • department_id:?jiǎn)T工所屬部門的標(biāo)識(shí)符。
  • salary:?jiǎn)T工的薪水。
+---------+--------------+---------------+--------+
| employee_id | employee_name | department_id | salary |
+---------+--------------+---------------+--------+
| 1          | John Doe          | 101             | 50000  |
| 2          | Jane Smith       | 102            | 60000  |
| 3          | Mark Johnson    | 101             | 55000  |
+---------+--------------+---------------+--------+

Products 表

  • product_id(主鍵):每個(gè)產(chǎn)品的唯一標(biāo)識(shí)符。
  • product_name:產(chǎn)品名稱。
  • category_id:產(chǎn)品所屬類別的標(biāo)識(shí)符。
+---------+--------------+-------------+
| product_id | product_name | category_id |
+---------+--------------+-------------+
| 101         | Laptop             | 1               |
| 102         | Smartphone     | 1               |
| 103         | T-shirt             | 2               |
+---------+--------------+-------------+

Categories 表

  • category_id(主鍵):每個(gè)類別的唯一標(biāo)識(shí)符。
  • category_name:類別名稱。
+-------------+----------------+
| category_id | category_name |
+-------------+----------------+
| 1               | Electronics       |
| 2               | Clothing             |
| 3               | Furniture            |
+-------------+----------------+

Orders 表

  • order_id(主鍵):每個(gè)訂單的唯一標(biāo)識(shí)符。
  • product_id(外鍵):引用 Products 表中的product_id。
  • order_date:訂單下達(dá)日期。
+---------+-------------+------------+
| order_id | product_id | order_date |
+---------+-------------+------------+
| 1001     | 101            | 2023–01–01 |
| 1002     | 102            | 2023–01–02 |
| 1003     | 103            | 2023–01–03 |
+---------+-------------+------------+

3 子查詢應(yīng)用

把子查詢應(yīng)用于各種數(shù)據(jù)庫(kù)表,以突出它們的實(shí)際用途。

3.1 SELECT 語(yǔ)句

假設(shè)想要檢索所有工資高于其各自部門平均工資的員工。

SELECT employee_name
FROM employees
WHERE salary > (SELECT AVG(salary) 
FROM employees e2 
WHERE e1.department_id = e2.department_id);

在此示例中,子查詢計(jì)算每個(gè)部門的平均工資,主查詢選擇工資超過(guò)該部門平均工資的員工。

+--------------+
| employee_name |
+--------------+
| Jane Smith    |
+--------------+

主查詢選擇工資高于其各自部門平均工資的員工。

在本例中,只有簡(jiǎn)-史密斯?jié)M足這一條件。

3.2 UPDATE 語(yǔ)句

假設(shè)想要將特定部門中所有員工的工資提高10%,使其高于該部門的平均工資。

UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 101
AND salary < (SELECT AVG(salary) 
FROM employees 
WHERE department_id = 101);

在這里,子查詢確定指定部門的平均工資,主查詢更新符合條件的員工的工資。

更新后,Employees 表被修改如下:

+-------------+---------------+---------------+--------+
| employee_id | employee_name | department_id | salary |
+-------------+---------------+---------------+--------+
| 1           | John Doe      | 101           | 55000  |
| 2           | Jane Smith    | 102           | 60000  |
| 3           | Mark Johnson  | 101           | 60500  |
+-------------+---------------+---------------+--------+

主查詢將部門101中的員工工資提高10%,使其高于該部門的平均工資。

3.3 DELETE 語(yǔ)句

假設(shè)想要?jiǎng)h除所有已經(jīng)沒(méi)有庫(kù)存的產(chǎn)品的訂單。

DELETE FROM orders
WHERE product_id 
NOT IN (SELECT product_id FROM products WHERE stock_quantity > 0);

在這種情況下,子查詢檢索具有正庫(kù)存數(shù)量的產(chǎn)品的 product_id,主查詢刪除不在此列表中的產(chǎn)品的訂單。

刪除操作后,Orders 表被修改如下:

+----------+------------+------------+
| order_id | product_id | order_date |
+----------+------------+------------+
| 1001     | 101        | 2023-01-01 |
| 1002     | 102        | 2023-01-02 |
+----------+------------+------------+

主查詢刪除了已經(jīng)沒(méi)有庫(kù)存的產(chǎn)品的訂單,依據(jù)子查詢檢索到具有正庫(kù)存數(shù)量的產(chǎn)品的 product_id。

3.4 INSERT 語(yǔ)句

假設(shè)只有當(dāng)某個(gè)部門的員工數(shù)量超過(guò)5人時(shí),才想要插入一個(gè)新員工。

INSERT INTO employees (employee_id, employee_name, department_id, salary)
VALUES (1001, 'John Doe', 201, 60000)
WHERE (SELECT COUNT(*) 
FROM employees 
WHERE department_id = 201) > 5;

在這個(gè)例子中,子查詢計(jì)算指定部門的員工數(shù)量,主查詢只有在數(shù)量大于5時(shí)才插入新員工。

沒(méi)有插入任何行,Employees 表保持不變。

主查詢嘗試僅在部門201中的員工數(shù)量大于5時(shí)將新員工插入。

在這種情況下,條件沒(méi)有滿足,因此插入操作沒(méi)有發(fā)生。

4 子查詢分類

4.1 單行子查詢

這種類型的子查詢僅返回一行結(jié)果。

通常在需要將單個(gè)值與子查詢的結(jié)果進(jìn)行比較的情況下使用。

SELECT employee_name
FROM employees
WHERE salary = (SELECT MAX(salary) FROM employees);

在這個(gè)例子中,子查詢從 employees 表中檢索最高工資,主查詢選擇具有該工資的員工。

4.2 多行子查詢

多行子查詢返回多行結(jié)果。

當(dāng)主查詢需要與一組值進(jìn)行比較時(shí)使用。

SELECT product_name 
FROM products 
WHERE category_id 
IN (SELECT category_id 
FROM categories 
WHERE category_name = 'Electronics');

在這種情況下,子查詢獲取“電子產(chǎn)品”類別的 category_id,主查詢選擇屬于該類別的所有產(chǎn)品。

4.3 多列子查詢

這種類型的子查詢返回多列但只有一行。它在主查詢需要單行的一組值時(shí)使用。

SELECT employee_name 
FROM employees 
WHERE (salary, department_id) = (SELECT MAX(salary), department_id FROM employees);

這里的子查詢檢索最高工資及其關(guān)聯(lián)的 department_id,主查詢選擇具有相同工資和部門的員工。

總結(jié)

通過(guò)了解子查詢的類型和實(shí)際應(yīng)用,數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠掌握這種高級(jí) SQL 技術(shù)并優(yōu)化其數(shù)據(jù)庫(kù)交互。

通過(guò)示例可以看到,子查詢打開(kāi)了許多可能性,使其成為任何 SQL 實(shí)踐者工具箱中有價(jià)值的補(bǔ)充。通過(guò)靈活運(yùn)用子查詢,我們可以根據(jù)具體需求精確地檢索和操作數(shù)據(jù),提高查詢的效率和準(zhǔn)確性。

無(wú)論是用于數(shù)據(jù)篩選、數(shù)據(jù)匯總、數(shù)據(jù)更新還是數(shù)據(jù)插入,子查詢都展示了其強(qiáng)大的功能。了解如何編寫和優(yōu)化子查詢,可以讓我們?cè)跀?shù)據(jù)庫(kù)管理和查詢優(yōu)化方面更具競(jìng)爭(zhēng)力。

責(zé)任編輯:武曉燕 來(lái)源: Java學(xué)研大本營(yíng)
相關(guān)推薦

2010-07-21 09:50:12

SQL Server子

2025-01-20 15:06:42

2011-07-18 14:38:44

子查詢外部查詢

2011-03-28 15:10:45

SQL Server群集

2009-09-07 20:40:48

LINQ子查詢

2024-10-11 16:51:02

2010-10-21 14:27:35

SQL Server時(shí)

2021-01-22 17:57:31

SQL數(shù)據(jù)庫(kù)函數(shù)

2021-04-02 07:46:52

SQL Server數(shù)據(jù)庫(kù)知識(shí)筆記

2021-01-18 11:41:22

SQL數(shù)據(jù)庫(kù)編程語(yǔ)言

2023-06-07 07:43:57

數(shù)據(jù)庫(kù)JOIN類型

2010-11-11 13:39:57

SQL連接查詢

2021-05-11 11:05:43

SAL子查詢

2021-02-06 13:45:59

SQL子查詢數(shù)據(jù)庫(kù)

2024-12-19 07:30:34

2024-03-06 09:30:13

PostgreSQL子查詢視圖

2024-04-08 09:00:30

PostgreSQ數(shù)據(jù)庫(kù)EXPLAIN 命令

2010-06-30 15:24:49

SQL Server子

2013-03-06 09:49:16

SQL Server

2011-08-12 09:29:32

SQL Server子查詢
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品自拍视频 | 亚洲美女在线一区 | 国产精品一区二区三区在线 | 无码一区二区三区视频 | 男女网站视频 | 午夜影院普通用户体验区 | 久久精品视频在线观看 | 欧美激情在线一区二区三区 | 欧美久久影院 | 精品久久久久久久 | 91精品国产91久久久久久密臀 | 免费福利视频一区二区三区 | 亚洲精品一区二区三区在线 | 欧美日韩综合视频 | 国产精品无码专区在线观看 | 欧美一区二区视频 | 国产一区三区在线 | 在线观看的av | 国产一伦一伦一伦 | 成年人视频免费在线观看 | 99reav| 嫩草视频入口 | 一区二区成人 | 喷水毛片 | 在线亚洲免费 | 久久久久国产一区二区三区 | 国产一区二 | 国产一区二区三区在线视频 | 久色| 麻豆久久久久久久 | 91久久久久久久久久久久久 | 美女视频一区二区三区 | 午夜精品久久 | 国产精品不卡 | 欧美三级在线 | 久久久精品一区二区三区四季av | 国产激情偷乱视频一区二区三区 | www.成人在线视频 | 91精品在线播放 | 91精品国产综合久久婷婷香蕉 | 免费看的av |