零基礎如何學習SQL——淺識SQL Server
本文以SQL Server 2012 為例,簡單介紹SQL最基礎的知識,幫助零基礎的朋友邁出學習SQL的第一步。(看完本文,直接就可以做專業的數據維護數據分析那肯定是痴人說夢了,但是做一些基礎的數據查詢,從資料庫中導出自己想要的數據還是完全可以做到的。當然前提是你要花一兩周的時間多練習和實踐。)
閱前必讀:
本文的目的是讓零基礎的人閱讀完文章後,對SQL語言形成一個淺顯的認知,認識到SQL語言零基礎也是完全可以快速掌握的。
所以受文章篇幅和作者水平所限,本文只介紹在操作過程中必須的簡單知識,許多非常重要的基礎性知識,在本文並沒有涉及,當然,這樣也不會影響跟著本文內容進行練習。但是如若想真正掌握SQL語言,建議通過購買書籍進行系統的自學,尤其是一些資料庫方面的基礎性知識。
(SQL Server的安裝包比較大,如果只是想要學習SQL語言,了解簡單的查詢如何使用的話,可以根據你們公司正在使用的資料庫選擇相應的軟體,如果不了解的話,也可以選擇相對較小的資料庫管理軟體如Sqlite,derby,或者規範一些選擇MySQL,postgreSQL,更大則選擇SQL Server或者Oracle吧!至於這幾個軟體的安裝和界面介紹,大家可以自行google,因為我只是使用過SQL Server而已。)
本文適用人群:
1. 對SQL、資料庫零認知(零基礎);
2. 想要學習SQL卻毫無頭緒,無從下手;
3. 善計劃但缺乏行動;(我承認這點有點牽強,單純為了湊足三點,強迫症不解釋)
閱讀本文可以讓你對SQL形成基礎的認知,也會明白該如何去學習SQL,如何掌握SQL最淺顯的用法,克服自學遇到的第一個問題——如何踏出第一步。
本文不適用人群:
數據相關的專業人士,了解資料庫,學習過哪怕一種數據語言,對數據分析有基礎認知的人。
(本文所述內容對於這部分人來說實在是太淺顯了些,閱讀本文給他們帶來不了新的知識。當然我也歡迎這樣的人帶著批判的眼光掃視本文,多提一些建議和意見。尤其是文中如果有錯誤的地方,希望直言指出。)
~~~~~~~~~~~~~~~~~~~~
自我介紹一下,一個正在零基礎自學SQL和R語言的普通上班族。歡迎各位有自學數據分析意向的同伴一起組隊。我零基礎的概念:非數學、統計學等數據相關專業畢業,無編程基礎,無數據相關工作經歷。
~~~~~~~~~~~~~~~~~~~~
扯了那麼多,現在進入正文。本文的主要內容分為三點:
1. SQL是什麼?
2. SQL軟體怎麼用?(特指SQL Server)
3. 入門後該怎麼學習和提升?
在此強調,SQL只是一門數據語言,如果想要學習數據分析,只學會SQL是完全不夠的。不過在本文中的核心是如何學習SQL,而不是如何學習數據分析,所以不涉及任何其他語言或者分析工具。
一、SQL是什麼?
這年頭,想知道一個東西到底是什麼東西,首選當然是搜索了。百度和Google的結果如下:
結構化查詢語言(Structured Query Language)簡稱SQL(發音:/?es kju? ?el/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係資料庫系統;同時也是資料庫腳本文件的擴展名。——百度百科
SQL is a special-purpose domain-specific language used in programming and designed for managing data held in a relational database management system (RDBMS), or for stream processing in a relational data stream management system (RDSMS).結構化查詢語言(英語:Structured Query Language,縮寫:SQL),是一種特殊目的之編程語言,用於資料庫中的標準數據查詢語言,IBM公司最早使用在其開發的資料庫系統中。——維基百科
好吧,我承認這完全屬於偷懶行為,不過這兩個百科也確實簡明扼要的說明了SQL是啥。
以下是我自己的閱讀理解。(歡迎專業人士指正,更改建議希望以確保準確度的情況下,更利於零基礎自學理解為原則。)
SQL是一門語言,一種用於資料庫查詢的語言。(ps:其實不只是查詢)
這段話難理解嗎?當然不難理解,完全就是字面意思嘛。
可是,當初零基礎的我看這句話的時候,還是有些似懂非懂。
如果你也是這樣的話,我盡量用通俗易懂的方式解釋給零基礎的你:
這句話有三個關鍵詞:語言、資料庫以及查詢。
首先,SQL是一種語言,SQL是一種語言,SQL是一種語言。重要的事情說三遍是個好習慣。
其次,SQL面向資料庫。資料庫是什麼?(請自行百度和Google)
用一種對零基礎好理解的方式說,其實資料庫就是表的合集。
當然,這個說法確實是極度簡單的說法,簡單到甚至有可能是錯的,但是零基礎的你這樣去理解,是完全沒問題的。
資料庫也分為不同的類型,存儲的也不光是表而已,不過在這就不做過多贅述了,自行百度和Google去。(其實不詳述的主要原因還是我自己也沒有完全吃透,起碼在初學階段暫時不影響學習。)
最後,SQL是用於查詢的。
這句話沒錯,但是不夠全面,SQL語言當然不只是用於資料庫的查詢,而且還可以用於資料庫存取、更新和管理等等方面。
我自己思考了半天,還是決定,只留下「查詢」這兩個字,因為其實對於初學SQL的人來說,SQL最主要最常用的用途,確實就是查詢,而且查詢也是最簡單的用途。
所以我希望在前期的學習中,著重強調「查詢」功能。
查詢,整個過程,其實就是在資料庫中,根據你輸入的條件,將你想要的數據調用顯示出來的過程。
在這裡如果不理解的話,會在本文第二點「軟體怎麼用中」進行詳細的說明。
現在,關於SQL是什麼,我相信你應該有了一點基礎的概念,也許現在還不太理解,但是這些簡單的概念,在你後面的學習中會逐漸清晰起來。
二、SQL 軟體怎麼用?
SQL既然是一種語言,那麼就必然需要一個語言編譯的環境,也就是相應的編程軟體。
其實編程軟體這個說法並不準確,但是還是那句話,便於我們零基礎的同學理解。
SQL語言所應用的環境,更準確的說,應該是資料庫管理系統。(請自行Google)
資料庫管理系統,就是SQL語言所應用的環境。(我顛來倒去說了兩次,絕不是為了湊字數。)
現在常見的資料庫管理系統有很多,如 Oracle、Microsoft SQL Server、MySQL 等等。(感興趣也請自行Google)
這些數據管理系統所用的SQL語言略有不同,但是基本上都符合國際通用的SQL標準,對大部分人來說,熟練掌握一門資料庫管理系統的SQL語言就夠了。
本文將會以 Microsoft SQL Server 2012(簡稱SQL Server)為例,簡單說明SQL Server資料庫管理系統是如何使用,其中SQL查詢語言又該如何編寫。(遠比你想像的要簡單。)
而這這些內容,將主要分為:1. 軟體安裝;2. 軟體界面介紹; 3. 初步使用SQL語言。
(一)、軟體安裝
很多編程語言的自學者,在第一步軟體的安裝上就倒下了,SQL語言也不例外。
本文以SQL Server 2012為例,後面的界面介紹和SQL代碼也都是在SQL Server 2012中實例介紹,所以如果有想要一步一步跟著操作的,請下載安裝SQL Server 2012版本。
SQL Server 2012是一款付費軟體,但是我們在哪?中國。你懂得,關於SQL Server的安裝,直接百度你可以搜到很多你想要的信息。
在本文中,我將不會對SQL Server 2012的安裝進行說明,希望各位自學者自行百度。
(建議:在下載和安裝過程中,如果遇見了問題,百度的時候,請用向人類提問的方式在百度中進行提問,將問題盡量詳細描述,你會發現,你遇到的很多問題,都是別人過去早已遇見過並且已有解決方案的。)
(二)、軟體界面介紹
打開Microsoft SQL Server 2012,直接點擊登陸,顯示如下:(英文版請自行對照)
在對象資源管理器中,我建議大家多點開看看,看到有不明白的詞或者地方,直接Google,這些內容本文不涉及,但是也很重要。點擊【新建查詢】,界面會跳出一個空白的查詢窗口,在查詢窗口可輸入SQL代碼(更準確的說是T-SQL代碼,還是那句話,自行Google去),顯示如下:
關於SQL Server的界面,只介紹前期主要用到的【對象資源管理器】窗口和【查詢窗口】,其他界面和窗口,自行進行系統的學習。除了界面,在此我再給零基礎的同學介紹一下資料庫中表的基礎形式。如下圖所示,資料庫中的表,每一豎列稱之為「列」,也叫「欄位」;每一橫行稱之為「行」(hang,第二聲),每一行也叫「記錄」,每一行單個格子中的內容,稱之為「值」。
在Excel中,表是可以直接點開看的,但是在在SQL Server中則不可以,不過在SQL Server中表如上圖一樣,依舊是可以顯示的,在後面我會教給大家如何查看錶內的內容,也就是表中的欄位和值。(三)、初步使用SQL語言
在學習期間遇見任何問題,請自行點擊鏈接SQL教程自學。
在電腦D盤新建一個文件夾,文件夾命名為:DATA。
1、創建資料庫
在空白的查詢頁面,輸入以下語句:
CREATE DATABASE Example ON PRIMARY(Name=Example_data,Filename=D:DATAExample.mdf,Size=5MB,Maxsize=unlimited,Filegrowth=10%)LOG ON(Name=Example_log,Filename=D:DATAExample.ldf,Size=3MB,Maxsize=50MB,FileGrowth=2MB)
點擊【執行】或者按F5鍵執行。
在【對象資源管理器】窗口,按F5刷新或者右鍵點擊【資料庫】選擇「刷新」。如下圖所示,在資料庫列表中,已新增資料庫「Example」。2、創建表
點擊【新建查詢】新建一個空白的查詢窗口。輸入以下代碼並執行:(這段代碼你可以不用理解,直接複製就行)
USE ExampleCREATE TABLE Student(SNO VARCHAR(3) NOT NULL, SNAME VARCHAR(4) NOT NULL,SSEX VARCHAR(2) NOT NULL, SBIRTHDAY DATETIME,CLASS VARCHAR(5))
以上代碼已新建一個名為Student的新表,表內欄位為SNO、SNAME、SSEX、SBIRTHDAY、CLASS。至於VARCHAR(n)和DATETIME的意思,請點擊鏈接SQL 數據類型自行自學。
再次新建另一個空白的查詢窗口,輸入以下代碼並執行:(這段代碼你可以不用理解,直接複製就行)
USE ExampleINSERT INTO Student(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (108 ,曾華 ,男 ,1977-09-01,95033);INSERT INTO Student(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (105 ,匡明 ,男 ,1975-10-02,95031);INSERT INTO Student(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (107 ,王麗 ,女 ,1976-01-23,95033);INSERT INTO Student(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (101 ,李軍 ,男 ,1976-02-20,95033);INSERT INTO Student(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (109 ,王芳 ,女 ,1975-02-10,95031);INSERT INTO Student(SNO,SNAME,SSEX,SBIRTHDAY,CLASS) VALUES (103 ,陸君 ,男 ,1974-06-03,95031);
以上代碼執行後,Student表中,則終於有了值,如果在Excel中,Student也終於算是一個完整的表了。但是在SQL Server中,Student表並不完整,一個完整的表應該還設定完整的約束,不過因為約束並不影響對SQL基礎的認知,故而在本文不進行說明,請自行自學。
3、查看錶
現在就是激動人心的時刻,也是我們零基礎最想了解的SQL的東西,那就是進行SQL查詢。
情景一:現在Student表已經創建好並填充好值了,那麼怎麼查看Student表呢?
新建一個空白的查詢窗口,輸入以下代碼並執行:(可能有人注意到了,我的很多代碼有的用了大寫有的用了小寫,其實SQL Server是不區分大小寫的,所以大小寫並不重要,到底用大寫還是小寫,純屬個人習慣。)
select * from Student
執行了這段代碼,你會發現在查詢結果窗口,顯示了Student表的內容,所有欄位的值。這就是查看錶內容的方法了,也是select最基礎的用法。下面我們將重點講一下select語句,select語句也是本文最重要的內容。
select語句的用法:
SELECT 列名稱 FROM 表名稱
舉例說明。
情景二:我希望查看Student表中所有學生的姓名(SNAME)和他們所屬的班級(CLASS)。
那麼就應該輸入以下代碼:
select sname,class from Student
查詢結果如下:
還記得前一個代碼嗎?select * from Student
按照select語句的用法,* 代表的就是列名稱,可是我們可以看到,Student表中每一名為 * 的欄位,那麼 * 是什麼呢?
* 就是「所有欄位」的意思,當我們想要提取某個表中的所有欄位信息時,我們不需要將表中所有欄位都列出來,只需要用一個 * 來代替就可以了,一會兒去試試吧。
最基礎的select語句我們會了,那麼接下來就要學習一些依然是基礎,但是稍微高級一點的東西了。(說實話,我猶豫了半天要不要用「高級」這個詞,尷尬臉)
情景三:我想要查看95033班所有學生的所有信息。
輸入以下代碼並執行:
select * from Studentwhere CLASS=95033;
結果如下所示,我們可以看到,查詢結果顯示了所有95033班學生的信息,而非95033班的學生,全部都被過濾掉了:
這個select語句和之前的select語句有什麼不同?多了一個where函數,那麼where函數是怎麼用的呢?
SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值
where語句其實就是在select語句的基礎上,多加一個篩選項,而篩選項則由「列名 運算符 值」構成。
其中列名和值很簡單,就是字面意思,class就是列名,二95003就是值。
而運算符是什麼呢?
運算符包含但不只限於"<",">","="等常用數學運算符,關於運算符的信息,在鏈接SQL WHERE 子句中有說明,可自行查看。
再留個例子給大家做參考。
情景四:我想要查看95033班所有性別(SSEX)為男的學生的所有信息。
select * from Studentwhere CLASS=95033 and SSEX=男
這次的結果我就不貼出來了,關於where有什麼疑問的話,直接看我上面列出的鏈接,有詳細教程的。
本文關於select函數的使用,就講到這裡。
select函數當然不會只是這麼簡單,因為我們在實際運用SQL查詢資料庫的過程中,所涉及到的情況遠比我們設定的四個情景複雜的多,所以select語句的使用也遠比我們本文講的複雜(其實也沒有太過複雜)。
這兩天我會單獨就SELECT基礎運用再寫一篇基礎介紹性的文章。
不過如果有迫不及待的朋友,可以進入鏈接SQL 簡介中把這些教程都過一遍,基礎教程全看完,高級教程中時間充裕的話也全看完,時間緊迫可以重點看union之前的語句(join是重中之重),函數也全部看完。
所有語句中,尤其重點去理解join和group by。
三、入門後怎麼學習和提升?
首先把這個鏈接SQL 簡介中的教程全部過一遍。
最好買一本SQL學習的書,如果學SQL Server2012的話,那就買一本《SQL Server 2012 從入門到精通》,如果學MySQL的話,那就買《SQL必知必會》。
SQL語言,學一種足以。
在學習期間,可以去這個鏈接經典SQL練習題 - qaz13177_58_的專欄 - 博客頻道 - CSDN.NET做做習題.(這個習題好像非常的泛濫,我也沒有想著找原創作者,所以就直接貼了我隨便點開的一個。侵刪,請告知。)
把題目的代碼直接複製粘貼到空白的SQL查詢窗口並執行就行,可能跟著我做的朋友會發現Student表名被佔用了,你們可以直接吧原來的Student表刪掉,這樣執行就不會有問題了。
他是用MySQL寫的題目,所以有些答案用SQL Server的話,會是錯誤,不過大部分都是對的。
如果你都能做出來的話,那就可以嘗試去實踐了。
至於怎麼實踐,如果工作了的,那就嘗試看看能不能要到公司資料庫的許可權,基於業務去做一些數據查詢,首先看你們公司的【數據字典】,這個說法可能每個公司不一樣,指的是每個公司關於每個資料庫,每個表,每個欄位的定義和說明。
簡單了解【數據字典】後,多看看你們同事過去寫的查詢代碼,有不明白的就Google,或者直接問;接著就可以自己做一些查詢了。
而如果要不到公司資料庫許可權或者並沒有開始工作的朋友,我只能說建議你們多在網上搜一搜SQL相關的題目吧,其他我也沒有什麼更好的建議了,因為我也只是處於剛剛開始自己寫查詢代碼的階段。
或者其他大神們有建議的,也希望不吝賜教,多幫助幫助我們這些零基礎自學的人吧。
下期預告:
優先順序從高至低:
1、初步計劃會寫一篇關於SELECT在各種情況下的各種用法。
2、也有計劃將自己在這段實踐寫習題和做實踐的心得做個整理進行輸出。
3、空著吧,強迫症喜歡湊三點。
以上。
ps:
希望大家多多提意見和建議,如果有零基礎的同學關於本文中有看不懂的地方,請直接提出來,有過零基礎學習的經歷,我非常明白零基礎自學是非常痛苦的。
作為一個初學者,雖然盡量避免,但是我覺得非常有可能有一些錯誤的地方,希望各位看到錯誤處的朋友能直接指出,我不希望自己的不專業給別人灌輸了錯誤的知識,謝謝!
推薦閱讀:
※零基礎如何自學醫?
※0基礎如何學習編程? 注意:完全0基礎.
※學習樂理知識,如何從零開始?
※零基礎如何自學MySQL資料庫?
※轉行到IT行業,都有人問過哪些問題?