此文是《10周入門資料分析》系列的第7篇
想瞭解學習路線,可以先閱讀「10周計劃」
上一篇分享了資料庫的基礎知識,以及如何安裝資料庫,今天這篇分享資料庫操作和SQL。
SQL全稱是 Structured Query Language,翻譯後就是結構化查詢語言,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理關聯式資料庫系統。
至於 ORACLE、DB2、Sybase、SQLServer、MySQL、MS Access等都是資料庫,雖然語法上有差異,但是基本上都是大同小異。作為一名資料從業者,雖然市面上有很多很智慧很自助的資料工具,甚至有的拖拖拽拽就能實現,但作為一名報表工程師、資料分析師,不懂一點SQL是絕對不行的。
之前很多文章對於SQL都一筆帶過,輕描帶寫,略忽視這項基本技能的重要性,所以今天就來講講如何學習SQL。
市面上有大量的書籍和教學視頻,這裡就幫大家提煉核心要點,給個學習方向。
本次的文章主要從以下幾個方面進行說明,大家可以參考著學習:
- SQL快速學習路線
- 資料庫表基礎操作
- SQL基礎語句
- SQL高級語句
SQL快速學習路線
零基礎自學SQL時通常會踩到兩個雷:
一雷:學習之前先安裝資料庫軟體,可以是SQL Sever,也可以是MySQL。對於新人而言,安裝資料庫軟體挺費時間,雷太多。我剛上大學那會要求2天內自學SQL,結果我花了1天時間安裝SQL Sever。前一篇文章分享了MySQL的安裝教程,剛開始學用不上太龐雜的功能,所以推薦小而美的MySQL,SQL Sever也是可以的。
二雷:一上來就背SQL語法。我看過太多新人在那邊吭哧吭哧做筆記背SQL,個人不贊成這種學法,不實踐記不住。就和Excel函數一樣,理解含義和如何使用,關鍵時候去w3school查詢一下就行了,以後用得多了自然就掌握了。
SQL學習路線
1、下載安裝MySQL,或者安裝軟體phpstudy(這個軟體自帶了mysql資料庫,而且安裝啟動方便)。
2、我這裡用的是phpstudy,打開phpstudy後,點擊下圖中的啟動,點擊後資料庫服務就會啟動了。
3、下載安裝Navicat軟體
這個軟體可以輕鬆連接資料庫,我們可以在這個軟體中練習學習SQL語法
4、使用Navicat建立資料庫連接
點擊檔 — — 新建連接,連接名隨便填寫,比如我寫的是“本地”。主機名稱、埠都不需要修改,用戶名和密碼都是root(因為我們安裝的phpstudy裡的mysql預設使用者名密碼就是root),點擊連接測試顯示為成功後點確定保存。
以後再次訪問時,按兩下即可。
5、下載習題進行學習,內含習題需要用到的資料表。
6、導入第5步中下載的資料表。
右擊第4步中的“本地”,新建一個資料庫test1,按兩下打開新建的資料庫(打開後顏色是綠色)。
拖拽剛才下載的資料表文件(sqltest1.sql)到test1上面。
這時會出現上述彈窗,點擊開始,等待導入完成後,點擊關閉
在左側空白處右擊,選擇“刷新”,即可看到剛才導入的資料表了。
7、打開sql語法編輯器
如下圖點擊查詢 — — 新建查詢,在空白處輸入sql語法,點擊運行,如果輸入錯誤會有報錯,輸入正確則會返回查詢內容。
8、邊做邊學
打開第一部分習題,邊做邊學,通過查詢w3c的sql語法手冊完成
9、鞏固練習
嘗試不看sql語法手冊,獨立完成第二部分習題。
以上是sql的學習路徑,接下來是sql語句的學習,掌握使用場景和含義,具體語法就不做解釋了,大家參考w3c的sql語法手冊學習。這裡我歸了下類,挑重點講。
資料庫表基礎操作
首先資料庫表必掌握的基礎操作,建表、刪表、往表裡增資料、往表裡刪資料以及最重要的取數等等。
1、CREATE TABLE(建表)
怎麼著也得先建立表~
當你建表成功後,發現忘記添加主鍵,或者忘記添加外鍵,莫著急。使用以下咒語即可:
建好的表如下:
2、INSERT(插入)
向表中插入資料
3、UPDATE(更新)
4、DELETE(刪除)
在使用delete刪除emp表中資料時,要注意該表與其他表是否存在關聯關係,比如:外鍵。emp表id是表orders的外鍵,如果要刪除emp表中的id,得先刪除orders表中的外鍵。
5、DISTINCT(去重)
在表中,可能會包含重複值,這並不成問題。不過,有時你也許希望僅僅返回唯一不同的值。使用distinct關鍵字進行處理,用於返回唯一不同的值。
注意:distinct關鍵字是去重!去重!去重!*把列中的重複值去掉!
曾經我在筆試的時候,有道SQL考題:請寫出表中所有重複的name的所有資料。我當時沒反應過來,直接就用了distinct關鍵字,後來就….
6、Select(取數)
SELECT 語句用於從表中選取資料,結果被存儲在一個結果表中(稱為結果集)。這是以後最常用的操作,佔據你90%。
SQL SELECT 語法
SELECT 列名稱 FROM 表名稱
以及:
SELECT * FROM 表名稱
比如需獲取名為 “LastName” 和 “FirstName” 的列的內容(從名為 “Persons” 的資料庫表),請使用類似這樣的 SELECT 語句:
SELECT LastName,FirstName FROM Persons
SELECT通常結合其他函數和語法使用。
SQL基礎語句
在實際的SQL使用中,肯定會涉及到有關函數的使用,這裡簡單介紹幾種初學時必學的函數類型。
1、AVG()
AVG 函數返回數值列的平均值。NULL 值不包括在計算中。
2、COUNT()
COUNT( ) 函數用於返回匹配指定條件的行數。
3、MAX()
MAX函數返回指定列的最大值,NULL值不包括在計算中
4、MIN()
MIN函數返回的指定列的最小值,NULL值不包括在計算中
5、SUM()
SUM函數返回指定列的總數
6、ROUND()
ROUND 函數用於把數值欄位舍入為指定的小數位數
7、FORMAT()
FORMAT 函數用於對欄位的顯示進行格式化
SQL高級語句
這一部分的內容是通常用到的,屬於最開始學習SQL知識時必須要熟練的,我這裡大致列出幾項。
1、LIMIT
2、LIKE
一般配合where使用,搜索條件中的指定模式
在上面我們可以看到,萬用字元“%”的使用方法,所以萬用字元必須要配合like 運算子一塊使用。
萬用字元還有以下幾種:
3、IN
從字面意思就可以知道它的作用是什麼了
4、JOIN
聯表運算子JOIN,該運算子是用於將兩個或者兩個以上的表進行關聯,並從這些表中查詢資料。
對於聯表來說,通過使用主鍵(primary key)和外鍵(foreign key)也可以建立連接。
除了上述直接使用條件關聯,下面我們可以用可讀性更高的INNER JOIN來寫
還有其他幾種方連接方式(外連接):
- LEFT JOIN:就算右表中沒有匹配,也從左表返回所有的行
- RIGHT JOIN:即使左表沒有匹配,也行右表返回所有的行
- FULL JOIN:只要有一個表存在著匹配,就返回行
5、ALTER
穿插介紹一下alter,前面的例子中已經包含了幾種alter使用方法。
6、UNION
UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
請注意,UNION 內部的 SELECT 語句必須擁有相同數量的列。列也必須擁有相似的資料類型。同時,每條 SELECT 語句中的列的順序必須相同。
上面引用的意思就是:道不同,不相為謀!
UNION和UNION ALL命令幾乎是等效的,不過加了“ALL”,就會列出所有的值。
注意:因為其也具有“唯一性”,容易和PRIMARY KEY混淆。面試或筆試常考兩者的不同,在這裡說明一下:
與PRIMARY KEY不同的是,每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。
為表添加UNION,這裡給出使用的SQL語法。
7、AUTO-INCREMENT(自增)
在運用中,我們希望在每添加一條資料後,自動的為我們的主鍵創建值。
8、ORDER BY
在前面中已經使用到了有關order by的SQL語句,order by該語句用於對結果集進行排序,默認是進行ASC正序排序(從小到大)。
排序的兩種方式:
- ASC:昇冪(從小到大)
- DESC:降冪(從大到小)
舉例子:
對於DESC排序,這裡就不進行舉例了,大家可以自己寫SQL試一下。
9、GROUP BY
通常配合合計函數使用,根據一個或多個列對結果集進行分組。
具體的用法在介紹函數時會涉及到。
10、HAVING
在上面的例子中,我們使用where關鍵字來增加查詢準則,這裡增加having字句是因為,where關鍵字無法與合計函數一起使用
同樣引用上面的SQL語句。
具體的用法在介紹函數時會涉及到。
11、DEFAULT
DEFAULT約束用於向列中插入預設值。
本次文章中寫的相關知識點是我以前在學習中隨手記錄的,對一些SQL大大來說,這些已經是耳熟能詳了。會不會讓你們產生一種灌水的錯覺????哈哈~
我是「數據分析那些事」。常年分享資料分析乾貨,不定期分享好用的職場技能工具。
各位粉絲寶寶也可以關注我的Facebook,期待你與我互動起來~