首页
/
每日頭條
/
科技
/
sql數據分析和使用說明
sql數據分析和使用說明
更新时间:2025-09-16 14:23:01

sql數據分析和使用說明?本篇文章繼續圍繞SQL的語法重點為大家介紹子查詢的使用,下面我們就來說一說關于sql數據分析和使用說明?我們一起去了解并探讨一下這個問題吧!

sql數據分析和使用說明(數據分析人必掌握的數據庫語言)1

sql數據分析和使用說明

本篇文章繼續圍繞SQL的語法重點為大家介紹子查詢的使用。

01 子查詢

使用子查詢進行過濾

在SQL中SELECT語句用于查詢,之前所使用的所有SELECT語句都是簡單查詢,即從單個數據庫表中檢索數據的單條語句。然而SQL還可以創建子查詢,即嵌套在其他查詢中的查詢。

示例:

數據表:本次使用的數據庫表都是關系表。訂單存儲在兩個表中,每個訂單包含訂單編号、客戶ID、訂單日期,在Orders表中存儲為一行。各訂單的物品存儲在相關的OrderItems表中。Orders表不存儲顧客信息,隻存儲顧客ID。顧客實際信息存儲在Customers表中。

若現在需要檢索出訂購RGAN01的所有顧客,應怎樣檢索?步驟如下:

檢索包含物品RGAN01的所有訂單的編号。

檢索具有前一步驟列出的訂單編号的所有顧客的ID。

檢索前一步驟返回的所有顧客ID的顧客信息。

上述每個步驟都可單獨作為一個查詢來進行。

可将一條SELECT語句返回的結果用于另一條SELECT語句的WHERE子句,也可使用子查詢來将3個查詢組合成一條語句。

第一個語句含義明确,是對prod_id為RGAN01的所有訂單物品檢索其order_num列。

示例: SELECT order_num FROM OrderItems WHERE prod_id = ‘RGAN01’

分析:通過該語句知道了哪個訂單包含要檢索的物品。

下一步查詢與上述語句檢索出的訂單20007和20008相關的顧客ID。此處可利用IN子句。

示例: SELECT cust_id FROM Orders WHERE order_num IN (20007,20008)

下面可結合上述兩個查詢,将第一個查詢變為子查詢。

示例: SELECT cust_id FROM Orders WHERE order_num IN (SELECT order_num FROM OrderItems WHERE prod_id = ‘RGAN01’)

分析:在SELECT語句中,子查詢總是從内向外處理。在處理上述SELECT語句時,DBMS實際上執行了兩個操作。

首先執行了圓括号()内的查詢,此查詢返回兩個訂單号:2000720008.

接着這兩個值以IN操作符要求的逗号分隔的格式傳遞給外部查詢的WHERE子句。外部查詢變為:

SELECT cust_id FROM orders WHERE order_num IN (20007,20008)

該語句檢索的結果和前面硬編碼WHERE子句返回的結果相同。

由上述語句得出訂購物品RGAN01的所有顧客ID:100004100005.下一步檢索這些顧客ID的顧客信息。

示例: SELECT cust_name,cust_contact FROM Customers WHERE cust_id IN (100004,100005)

也可将其中的WHERE子句轉換為子查詢,就不用硬編碼這些顧客ID了。

示例: SELECT cust_name, cust_contace FROM Customers WHERE cust_id IN (SELECT cust_id FROM Orders WHERE order_num IN (SELECT order_num FROM OrderItems WHERE prod_id = ‘RGAN01’))

分析:DBMS實際上必須執行三條SELECT語句才能完成上述語句。最裡面的子查詢返回訂單号,此列用于外面的子查詢的WHERE子句。外面的子查詢返回顧客ID列,此顧客ID列用于最外層查詢的WHERE子句。最外層查詢返回最終所需的數據。

由此可見,在WHERE子句中使用子查詢可編寫出功能強大靈活的SQL語句。對于能嵌套的子查詢的數目沒有限制,不過在實際應用中由于性能的限制,不宜嵌套太多子查詢。

注意:作為子查詢的SELECT語句隻能查詢單個列,檢索多個列将返回錯誤。另外使用子查詢并不總是執行該類數據檢索的最有效方法。

不止SQL數據庫學習,還有全面的大數據分析學習

TopBDA大數據分析師培訓

作為計算字段使用子查詢

使用子查詢的另一方法是創建計算字段。

示例:需要顯示Customers表中每個顧客的訂單總數。訂單與相應的顧客ID都存儲在Orders表中。要執行這個操作,需要以下步驟:

從Customers表中檢索顧客列表。

對于檢索出的每個顧客,統計其在Orders表中的訂單數目。

這裡我們可以應用之前介紹的SELECT COUNT(*)對表中的行進行計數,并通過一條WHERE子句來過濾某個特定的顧客ID,僅對該顧客的訂單進行計數。

如下對顧客1000001的訂單進行計數:

SELECT COUNT(*) AS orders FROM Orders WHERE cust_id = 1000001

要對每個顧客執行COUNT(*)需要将其作為一個子查詢,如下:

SELECT cust_name, cust_state, (SELECT COUNT(*) FROM Orders WHERE Orders.cust_id = Customers.cust_id) AS orders FROM Customers ORDER BY cust_name

分析:該SELECT語句對Customers表中的每個顧客返回三列:cust_name、cust_state和orders。orders是一個計算字段,它由圓括号中的子查詢建立。該子查詢對檢索出的每個顧客執行一次。此例中,該子查詢執行了5次,因為檢索出了5個顧客。

子查詢中的WHERE子句與之前使用的WHERE子句略有不同,因為它使用了完全限定列名,而不隻是列名(cust_id)。它指定表名和列名(Orders.cust_id和Customers.cust_id)。下面的WHERE子句告訴SQL,比較Orders表中的cust_id和當前正從Customers表中檢索出的cust_id:

WHERE Orders.cust_id = Customers.cust_id

在有可能混淆列名時必須用一個句點分隔表名和列名。此例中,有兩個cust_id列:一個在Customers中,另一個在Orders中。若不采用完全限定名,DBMS會認為要對Orders表中的cust_id自身進行比較。因為:

SELECT COUNT(*) FROM Orders WHERE cust_id =cust_id

上述語句總返回Orders表中訂單的總數,而該結果不是我們想要的,如下:

SELECT cust_name, cust_state, (SELECT COUNT(*) FROM Orders WHERE cust_id = cust_id) AS orders FROM Customers ORDER BY cust_name

由上可知,在構造語句時,若涉及到多個表,而不對同一列名加以區分則會引起DBMS抛出錯誤信息。

好的做法是,當在SELECT語句中操作多個表時,使用完全限定列名來避免歧義

最後總結一下子查詢的特點:

子查詢必須括在圓括号中。

子查詢的SELECT子句中隻能有一個列,除非主查詢中有多個列,用于與子查詢選中的列相比較。

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

返回多行數據的子查詢隻能同多值操作符一起使用,比如IN操作符。

SELECT 列表中不能包含任何對BLOB、ARRAY、CLOB或者NCLOB類型值的引用。

子查詢不能直接用在聚合函數中。

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

以上便是本次介紹的全部内容,下篇文章将為大家講解連接高級連接的使用。

我們下期再見!

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
聯想手機系統特色
聯想手機系統特色
作為曾經“中華酷聯”中的一員,聯想不願華為獨美,從去年開始卷土重來,準備發力國内手機市場,并且還重新啟用了原ZUK手機總裁的常程來掌舵。而回歸的戰略很明顯,還是主打性價比,并且把對手直接鎖定為小米。之後聯想推出的幾款手機性價比都非常了得,不...
2025-09-16
尼格買提和撒貝甯秀恩愛
尼格買提和撒貝甯秀恩愛
去年12月,撒貝甯與妻子李白迎來身份升級,喜獲龍鳳胎。不過,夫妻倆都比較低調,并未對外公開這一喜訊。直到撒貝甯妻子個人動态被媒體被發現,才正式曝光。不同于其他明星爸媽,不論是撒貝甯還是妻子李白,兩個人都很少在公開場合談及孩子,就更别說是曬娃...
2025-09-16
江淮恺達x6微卡超能版
江淮恺達x6微卡超能版
在轎卡市場,江淮1卡恺達X6精靈虎敢号稱“大1号賺更多”,大在哪裡,到底能不能賺很多,是不是隻是口号,還要看實車表現到底怎麼樣。之前,我們說江淮1卡恺達X6動力大1号、駕駛室大1号和貨廂大1号,的動力吸引了衆多卡友的興趣,也有卡友說恺達X6...
2025-09-16
店鋪運營數據分析三個指标
店鋪運營數據分析三個指标
店鋪業績好不好,主要看這3大數據......在服裝店鋪管理中,業績管理工作可以說是占了所有管理日常工作的百分百,也就是說店員日常的工作其實都是為了店鋪有個良好的業績。說到業績管理,拍着腦袋做管理的時代已經過去,用相關數據指導管理才有未來。但...
2025-09-16
vivos6具有無線充電功能嗎
vivos6具有無線充電功能嗎
縱觀這兩年5G行業的發展,vivo對5G的提前布局和和創新研發一直都走在行業的前沿道路上,自旗下第一款5G商用手機發布至今,已經陸續推出了多款搭載成熟方案的5G手機,先後覆蓋了vivo旗下的iQOO、NEX、X、Z系列産品線。而在2020年...
2025-09-16
Copyright 2023-2025 - www.tftnews.com All Rights Reserved