熱線電話:13121318867

登錄
首頁精彩閱讀深入理解SQL大邏輯
深入理解SQL大邏輯
2016-05-06
收藏

深入理解SQL大邏輯

1、只要結果不問過程

當我們寫出一條SQL語句后,SQL語句是到數據庫中去執行的,具體怎么理解和執行SQL是數據庫的事,我們關心的事兒就是如何寫好SQL語句,別讓數據庫對我們的SQL產生誤解,造成SQL無法執行或者執行錯誤就好了。

有句古話,叫做“但行好事,莫問前程”,意思是自身要多做義舉做好當下,而不要去牽掛往后的發展,這句話套用在SQL上就是“但行好事,莫問過程”,SQL只管告訴數據庫,我要的數兒是什么,而不用管數據庫是用什么方法把數據給你一行行提取出來的。

從個人經驗來看,對與一個以前從未有過編寫計算機程序的讀者來說,學習SQL反而更加容易一些。這是因為SQL是一種非過程化編程語言。所謂的”非過程化”,是指不要求我們給出SQL查詢的執行過程,只需要用戶定義出執行后數據的結果,具體的執行過程則由執行該語言的數據庫來實現。

如果你對上述敘述感到費解,那么恭喜你,你可能不會遇到以前因為學習過某種計算機編程語言的既有知識帶給你學習SQL的困惱。

2. SQL的可視化理解

我們經??吹絼e人編寫的很長的一段SQL語句,分析該語句的執行目的對于SQL初學者往往很困難。在這一節里,我們將結合一個非常具體的案例幫助大家理解SQL語句的執行順序。

假設在數據庫(或者Excel)里有以下兩個表格,兩個表格分別命名”左表”和”右表”。這兩個表格是企業培訓系統數據局中常見的數據結構,左表是為企業每個員工設置的他所要參加的培訓類別,一個員工可以被指定多個培訓類別(或者叫做”培訓科目群組”),而每個培訓類別包含多個培訓項目,具體的培訓類別和培訓項目對照放在右表中。請仔細了解并弄懂以下兩個表格之間的關系,因為,后面的解說全部參照這兩個表格中的數據。

現在,結合這兩個表格,我們想得到如下一個綜合的表格:通過這個綜合表格,可以知道每一個員工被指派的”所有具體的培訓項目”。我們知道,在這個案例中,即使不用SQL,我們也能以左右兩個表格中共有的”培訓類別”字段作為關聯獲得這個結果。

假設我們對SQL還不是很熟悉,還不具備手動書寫SQL的能力,請教了一位專家,他幫我們寫出的SQL語句如下:

下面的問題是,怎么理解這個SQL語句呢?我們已經知道最基礎的SQL語句是由SELECT…FROM…WHERE三段兒組成的,這三段兒的執行順序如下圖所示:

在最基礎的SQL語句中,最先執行的是FROM,FROM關鍵字后面通常是SQL語句所涉及的所有表格名稱,在這里涉及兩個表格:[左表],[右表] 。

當該SQL語句發送到數據庫時,FROM代碼段中的兩個表格會做一個交叉對接的操作,也就是:用左表的每一行記錄和右表的每一行記錄對接,形成一行新的記錄,執行過程如下圖。

FROM代碼段的執行結果是在數據庫內存中形成下面一個中間結果表格(我們在界面上是看不到的)。

執行完FROM代碼段后,第二步執行的SQL語句段兒是WHERE,在案例中的SQL語句中WHERE語句段中的內容是:WHERE[左表].[培訓類別]=[右表].[培訓類別]

該語句段的作用相當于對FROM代碼段的結果執行了一個”篩選”操作。篩選條件是:[左表].[培訓類別]=[右表].[培訓類別],篩選結果如下:

當整個SQL語句的FROM,WHERE代碼段執行完畢后,最后執行的是SELECT代碼段,SELECT代碼段中的內容是:SELECT [工號],[左表].[培訓類別],[培訓項目] ,該代碼段中的內容很好理解,就是把前面兩步執行結果中的特定的列提取出來。我們還知道,如果想提取所有的列,可以把SELECT代碼段改寫成:SELECT *


數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢