黃河之水天上來,數據之源資料庫——SQL
一.為什麼學習資料庫?
數據從哪來?除了來自於Excel里的數據,在現實中,大部分的數據是存放在資料庫中。這就要求你能從資料庫中讀取數據,並進行分析得出結果。
1、數據分析師需要掌握以下2個知識點:
(1)常用的關係資料庫:Mysql
(2)SQL語句:從資料庫中獲取數據,並進行分析的語言
2、社群會員潘康平成功轉行數據分析的經驗總結(現是餓了么業務分析師,靠擅長SQL數據分析):
(1)SQL能力比較重要,要好好學
(2)會收到很多面試邀請和offer,要撿重點
(3)開通知乎專欄
(4)能力上主要是SQL,分析主要靠excel
(5)不要怕零基礎,他行,我也行。只要你願意付出努力
3、面試數據分析,需要掌握哪些SQL核心技能呢?
1)會利用SQL操作開源資料庫mysql進行查
2)資料庫的分組、聚合、排序
3)存儲過程
4、SQL成為數據分析面試經常考察的內容。
最常見的考SQL的方法給你一個虛擬的資料庫表結構,然後讓你按給出的條件查詢出數據,並用手寫的形式寫出在紙上。所以面試前把常用的SQL語句記清楚就行了。
二.資料庫是什麼?
資料庫就是存儲數據的地方,就像冰箱是存儲食物的地方一樣。正是因為有了資料庫後,所有人可以直接在這個系統上查找數據和修改數據。例如你每天使用餘額寶查看自己的賬戶收益,就是從後台資料庫讀取數據後給你的。
資料庫的英文名稱叫DB(Database),那麼資料庫裡面有什麼東東呢?
資料庫通常包含一個或多個表組成。如果你用過Excel,就會知道Excel是一張一張的二維表。每個表都是有列和行組成的,其中每一列都用名字來標識出來。同樣的,資料庫里存放的也是一張一張的表,只不過各個表之間是有聯繫的。
所以,簡單來說:
資料庫=多張表+各表之間的關係
其實資料庫是邏輯上的概念,它是一堆互相關聯的數據,放在物理實體上,是一堆寫在磁碟上的文件,文件中有數據。這些最基礎的數據組成了表(table)。
學會資料庫你需要掌握以下兩點:
1)資料庫表的結構
表的結構是指要了解資料庫每張表長什麼樣。
資料庫中每個表由一個名字標識。表包含帶有列名的列,和記錄數據的行。
你可能會問了,為啥要有個用戶id來表示數據的唯一性呢,用姓名也可以呀?
其實,姓名是無法唯一確定出一個用戶的,因為會有重名。所以,資料庫的表裡都會加一個ID的欄位用來表示數據的唯一性。
ID是資料庫中重要的概念,叫做唯一標識符或者主鍵,用來表示數據的唯一性。其實,在生活中我們也會使用ID來標識數據的唯一性唯一標識,最典型的例子就是國家用身份證來唯一標識一個人 ,資料庫中的ID也是這個作用,唯一標識一條數據,只不過在資料庫中我們把這樣唯一標識數據的ID叫做主鍵,每張表只能有一個主鍵。
2)各表之間的關係
數據之間也是有聯繫的。資料庫里各個表之間如何建立聯繫呢?
資料庫是表的集合,一個資料庫中可以放多張,表與表之間能互相聯繫。我們看下面兩張表(數據分析社群會員表,教育背景表),你能告訴我它們之間有什麼聯繫嗎?
表1:社群會員
表2:教育背景
這兩張表通過會員ID關聯起來,為了更清楚的看到這兩個表的關係,下面的圖中我用相同顏色代表同一個會員的信息。例如在會員表裡姓名是猴子的會員ID是1,那麼我想知道該會員的教育背景,我就可以在教育背景這個表裡去查找「會員ID」值是1的行,最後發現這行數據的教育背景ID是2,對應的就找到該會員的教育背景信息了。
3. 資料庫里各個表之間如何建立聯繫呢?
資料庫中,如果你要關聯其他表,一般會以「表名_ID」作為聯接。就像我們在上面「教育背景」表裡加入了「會員的ID」就是將兩張表關聯起來了。
聯繫就是數據能夠對應匹配,在資料庫中正式名稱叫聯接,對應的操作叫做join。
Join(聯接)是關係型資料庫中的核心概念,是操作的基礎
4、實現資料庫原理的「施工團隊」就是常用的資料庫軟體,例如MySQL、Oracle、SQL Server等都是實現上面理論的資料庫。各個資料庫軟體的使用差別大同小異,但是因為MySQL是開源的,成為各大公司使用的主流,面試也主要以MySQL為主。
四、SQL語句學習
SQL的學習主要分兩步來進行,也不需要看書。
SQL基礎知識
1)SQL學習直接看w3school中的內容就可以了:http://www.w3school.com.cn/sql/index.asp
2)學習的過程中對照著在Mysql圖形軟體(Navicat) 中操作。
如何在Navicat中寫SQL語句:http://www.formysql.com/jiqiao/sql-yuju.html
五、如何使用Pyhton操作資料庫?
可以單獨使用Mysql進行數據分析,也可將Python和Mysql結合起來實現更豐富的應用。
PyMySQL包提供了在Python中操作Mysql的各種方法。
Python中操作資料庫使用起來也特別簡單,基本上下面4步套路就可以了。
導入Python的資料庫包
連接資料庫
SQL查詢:獲取數據
關閉資料庫連接
教程:http://www.runoob.com/python3/python3-mysql.html
六、SQL練習平台sqlzoo中將習題
http://sqlzoo.net/wiki/SELECT_basics/zh
(一)/SELECT basics/zh表格WORLD
我們繼續練習簡單的單一表格SQL查詢。
這個教程是有關諾貝爾獎得獎者的:
10、顯示早期的醫學獎(Medicine)得獎者(1910之前,不包括1910),及近年文學獎(Literature)得獎者(2004年以後,包括2004年)。
select * from nobel where (yr<1910 and subject=Medicine) or (yr>=2004 and subject=Literature) (五)/SELECT withinSELECT Tutorial/zh如要練習一些較少用的SQL功能,看下去。
我們可以用ALL 這個詞對一個列表進行>=或>或<或<=充當比較。例如,你可以用此查詢找到世界上最大的國家(以人口計算):
SELECT name FROM world WHERE population >= ALL(SELECT population FROM worldWHERE population>0)你需在子查詢的條件中使用 population>0,因為有些國家的記錄中,人口是沒有填入,只有 null值。
六SUM and COUNT/zh全球統計:群組函數
此教程是有關群組函數,例如COUNT, SUM 和 AVG。群組函數把多個數值運算,得出結果只有一個數值。例如SUM函數會把數值2,4,和5運算成結果11。
七、The JOIN operation/zh合拼表格-- 歐洲國家盃 UEFA EURO 2012此教程是介召 JOIN的使用,讓你合拼2個或更多的表格。數據庫的表格貯存了在波蘭 Poland 和烏克欄 Ukraine的歐洲國家盃2012的賽事和進球資料。
最後:
推薦書籍:《深入淺出SQL》or《SQL必知必會》
推薦閱讀:
※MySQL練習
※mysql表中查找和小於某個數的所有最前面的記錄?
※Python3 pandas如何加快SQL Server讀寫速度?
※使用CUDA加速SQL查詢的研究狀況目前如何,未來的發展會怎樣?
※為什麼公司不準使用SQL語句查詢的「*」?