自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SQL數(shù)據(jù)分析之子查詢

運維 數(shù)據(jù)庫運維
子查詢用于為主查詢返回其所需數(shù)據(jù),或者對檢索數(shù)據(jù)進行進一步的限制,通常將一個查詢(子查詢)的結(jié)果作為另一個查詢(主查詢)的數(shù)據(jù)來源或判斷條件,常見的子查詢有WHERE子查詢,HAVING子查詢,F(xiàn)ROM子查詢,SELECT子查詢,EXISTS子查詢。

[[408468]]

子查詢用于為主查詢返回其所需數(shù)據(jù),或者對檢索數(shù)據(jù)進行進一步的限制,通常將一個查詢(子查詢)的結(jié)果作為另一個查詢(主查詢)的數(shù)據(jù)來源或判斷條件,常見的子查詢有WHERE子查詢,HAVING子查詢,F(xiàn)ROM子查詢,SELECT子查詢,EXISTS子查詢。

子查詢是一種嵌套在其他 SQL 查詢的 WHERE 子句中的查詢,可以在 SELECT、INSERT、UPDATE 和 DELETE 語句中,同邏輯運算符一起使用。

示例工具:MySQL8.0、Navicat Premium 12

本文講解內(nèi)容:SQL子查詢

適用范圍:子查詢在SQL數(shù)據(jù)分析中的應用

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

  • 子查詢必須括在圓括號中。
  • 子查詢的 SELECT 子句中只能有一個列,除非主查詢中有多個列,用于與子查詢選中的列相比較。
  • 子查詢不能使用 ORDER BY,不過主查詢可以。在子查詢中,GROUP BY 可以起到同 ORDER BY 相同的作用。
  • 返回多行數(shù)據(jù)的子查詢只能同多值操作符一起使用,比如 IN 操作符。
  • SELECT 列表中不能包含任何對 BLOB、ARRAY、CLOB 或者 NCLOB 類型值的引用。
  • 子查詢不能直接用在聚合函數(shù)中。
  • BETWEEN 操作符不能同子查詢一起使用,但是 BETWEEN 操作符可以用在子查詢中。

創(chuàng)建數(shù)據(jù)表

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

  1. SELECT column_name [, column_name ] 
  2. FROM   table1 [, table2 ] 
  3. WHERE  column_name OPERATOR (SELECT column_name [, column_name ] 
  4.                              FROM table1 [, table2 ] 
  5.                              [WHERE]) 

對于子查詢的數(shù)據(jù)演示創(chuàng)建兩個表,一個是薪水表,另一個是職位表,并且插入數(shù)據(jù)。

  1. #創(chuàng)建薪水表SALARY 
  2. CREATE TABLE SALARY ( 
  3. ID VARCHAR ( 10 ), 
  4. NAME VARCHAR ( 10 ), 
  5. AGE VARCHAR ( 10 ), 
  6. ADDRESS VARCHAR ( 10 ), 
  7. SAL INT(10) ); 

給薪水表插入數(shù)據(jù),數(shù)據(jù)內(nèi)容如下所示:

  1. # 給薪水表插入數(shù)據(jù) 
  2. INSERT INTO SALARY(ID,NAME,AGE,ADDRESS,SAL) 
  3. VALUES 
  4. ('C001','Rmesh',35,'Ahmedabad',2000), 
  5. ('C002','Khilan',25,'Delhi',1500), 
  6. ('C003','Kaushik',23,'Kota',2000), 
  7. ('C004','Chaitali',25,'Mumbai',6500), 
  8. ('C005','Hardik',27,'Bhopal',8500), 
  9. ('C006','Komal',22,'MP',4500), 
  10. ('C007','Tom',26,'MP',5500), 
  11. ('C008','Muffy',24,'Indore',10000); 

查詢所有的薪水數(shù)據(jù)如下所示:

  1. SELECT * FROM  SALARY; 

同理創(chuàng)建一個職位表。

  1. #創(chuàng)建職位表JOB 
  2. CREATE TABLE JOB ( 
  3. JID VARCHAR ( 10 ), 
  4. JB VARCHAR ( 10 )); 

給職位表插入數(shù)據(jù),數(shù)據(jù)內(nèi)容如下所示:

  1. # 給職位表插入數(shù)據(jù) 
  2. INSERT INTO JOB(JID,JB) 
  3. VALUES 
  4. ('C001','Teacher'), 
  5. ('C002','Docter'), 
  6. ('C003','Teacher'), 
  7. ('C004','Worker'), 
  8. ('C005','Nurse'), 
  9. ('C006','Teacher'), 
  10. ('C007','Docter'), 
  11. ('C008','Teacher'); 

查詢所有的職位數(shù)據(jù)如下所示:

  1. SELECT * FROM  JOB; 

子查詢過濾

子查詢最常見的使用是在WHERE子句的IN操作符中,以及用來填充計算列。先看一個簡單的例子,要查詢所有醫(yī)生的薪水情況,這里首先在職位表中查詢所有醫(yī)生的JID,查詢結(jié)果如下:

  1. SELECT JID 
  2. FROM JOB 
  3. WHERE JB='Docter'

然后在薪水表中查詢ID為'C002','C007'的薪水情況,查詢結(jié)果如下:

  1. SELECT SAL 
  2. FROM SALARY 
  3. WHERE ID IN('C002','C007'); 

這里使用子查詢更加簡便,子查詢從內(nèi)向外依次處理,在下面的SELECT語句中,MySQL實際上執(zhí)行了兩個操作,首先查詢返回兩個ID號:C002和C007。

然后,這兩個值以IN操作符要求的逗號分隔的格式傳遞給外部查詢的WHERE子句,可以看到輸出的結(jié)果是正確的,并且與前面WHERE子句所返回的值相同。

  1. SELECT SAL 
  2. FROM SALARY 
  3. WHERE ID IN(SELECT JID 
  4.             FROM JOB 
  5.             WHERE JB='Docter'); 

使用子查詢查詢薪水大于8000的員工的所有信息,首先內(nèi)部查詢薪水大于8000的ID,然后外部使用一個WHERE查詢即可得到結(jié)果。

  1. SELECT * 
  2. FROM SALARY 
  3. WHERE ID IN (SELECT ID 
  4.              FROM SALARY 
  5.              WHERE SAL > 8000); 

作為計算字段使用子查詢

使用子查詢的另一方法是創(chuàng)建計算字段,創(chuàng)建計算字段需要使用聚合函數(shù),例如count,sum,avg,max,min等,這里首先計算平均薪水作為一個內(nèi)查詢,然后在外部使用WHERE子句進行查詢,得出薪資比平均薪資低的員工的所有信息。

  1. SELECT * 
  2. FROM SALARY 
  3. WHERE SAL < (SELECT AVG(SAL)  
  4.              FROM SALARY); 

除使用WHERE過濾,還可以使用HAVING過濾,HAVING子句對分組統(tǒng)計函數(shù)進行過濾,也可以在HAVING子句中使用子查詢,要查詢薪資最高的人及其薪資情況,首先內(nèi)部查詢最高工資,然后外部以人名分組后使用HAVING子句過濾,查詢結(jié)果如下。

  1. SELECT NAME,SAL 
  2. FROM SALARY 
  3. GROUP BY NAME 
  4. HAVING SAL = (SELECT MAX(SAL)  
  5.               FROM SALARY); 

本文轉(zhuǎn)載自微信公眾號「大話數(shù)據(jù)分析」,作者「尚天強」??梢酝ㄟ^以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系大話數(shù)據(jù)分析公眾號。

 

責任編輯:武曉燕 來源: 大話數(shù)據(jù)分析
相關(guān)推薦

2011-08-12 09:29:32

SQL Server子查詢

2021-06-29 07:04:39

SQL數(shù)據(jù)視圖

2024-10-11 18:36:51

2020-07-26 19:19:46

SQL數(shù)據(jù)庫工具

2015-08-14 10:28:09

大數(shù)據(jù)

2022-02-06 11:35:53

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

2020-12-24 13:32:31

大數(shù)據(jù)數(shù)據(jù)分析SQL

2025-04-17 02:00:00

數(shù)據(jù)分析SQL大數(shù)據(jù)

2009-09-15 10:46:04

LINQ to SQL

2024-07-26 21:36:43

2017-09-01 09:52:20

PythonPandas數(shù)據(jù)分析

2017-04-11 09:08:02

數(shù)據(jù)分析Python

2022-11-14 10:36:55

數(shù)據(jù)科學數(shù)據(jù)分析

2015-08-11 15:52:52

大數(shù)據(jù)數(shù)據(jù)分析

2023-05-04 12:41:30

ChatGPTSQL數(shù)據(jù)分析

2015-10-26 10:41:10

數(shù)據(jù)分析思想指南

2021-08-09 10:15:34

數(shù)據(jù)庫數(shù)據(jù)分析師

2021-02-25 11:42:23

大數(shù)據(jù)數(shù)據(jù)分析sQL

2021-12-28 11:23:36

SQLServerExcel數(shù)據(jù)分析

2016-05-10 10:43:02

點贊
收藏

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