1. 程式人生 > 其它 >【轉】漫畫學SQL,通俗易懂

【轉】漫畫學SQL,通俗易懂

對於SQl, 很多人學不會的原因是從一開始就沒明白,學這東西能幹啥,學會了能有什麼用。甚至有些人不知道‘SQL’應該怎麼讀,以至於一開始興致勃勃,但是學到一半放棄了。

 

注意:‘sql’真的不能讀成‘燒烤’、‘惜烤’、’撒扣’、’斯購‘,另外,’MYSQL’真的不能讀成’賣燒烤’,’賣西褲‘,有學員問:那我賣什麼,我回答說:你去死。

 

如果你真的、實在是、絕對的看不懂英文的音標,那就暫且讀’色兒扣‘吧,這是針對英語文盲特別製作的讀法。(注意我在這裡並沒有瞧不起你的意思)

 

所以,堅持學會的根本,不在於這個知識是否有多難,而在於它帶給你的意義有多大。如果做事情沒有意義,那麼你就沒有學習的動力。在資料分析的招聘中,SQL是必考的能力之一。所以學習SQL的意義,就在於你能否通過資料分析的面試,如果不能通過面試,你將窮困潦倒,顛沛流離,別人娶妻生子,兒孫繞膝,而你孤苦伶仃,滿目淒涼,垂垂老矣....

 

想要入門SQL,關鍵在於有沒有一個好的領路人帶你入門,所以ladys and鄉親們,放下手頭所有的農活,開始喜歡我吧,因為接下來,我將帶你輕鬆搞定SQL的各個語法。記住我最大的特點就是,通俗易懂的解釋一個事情。

 

01.

理論篇

理解重要的概念

 

 

【資料】數字,文字,圖形,影象,聲音這些都叫資料。

 

 

 

【資料庫】 理解資料庫的一種最簡單的方法是 將它想象成一個電子化的“檔案櫃”,

 

這個“檔案櫃”是一個存放資料的物理位置,不管資料是什麼形式!就像法海手裡的金鉑,我管你是什麼妖,統統都得收進來!(電視劇裡的那個金鉑看起來像一個電飯鍋的內膽,有沒有很像)。也有人說資料庫儲存資料,就像冰箱是儲存食物一樣,,什麼肉啊,米啊,菜啊,都能存放,對此我也是十分十分的同意!!

 

 

 

 

有了資料庫後,所有終端裝置(手機,PAD, PC)都可以直接在這個系統上查詢資料和修改資料。有人問我,老師,我是安卓手機,能連線資料庫嗎,當然能了,不許瞧不起安卓系統!!

 

 

 

 

【資料表】 表是由行和列組成的一張二維表,這是關係資料庫中最基本的資料模型

 

 

【主鍵】用來表示資料的唯一性,是資料庫中非常重要的概念。在生活中我們也會使用ID來標識資料的唯一性,例如:國家用身份證來唯一標識一個人,即使你有一個雙胞胎兄弟,但只要你們的身份證號不一樣,你們就是兩個人。再比如銀行卡的卡號就是主鍵,如果兩個人卡號重複了,裡面有100萬,錢算誰的呢?這事就鬧大了。

 

 

【外來鍵】

關聯到其他表主鍵的欄位被稱為“ 外來鍵 ”,如果A表的一個欄位來源於B表,那麼這個欄位就是A表的外來鍵。

例如:成績表中的欄位學號 sno 就是外來鍵, 因為這個欄位的值來源於學生表的主鍵sno。

 

 

【表關聯】什麼是聯絡呢?你是你爸爸的兒子,你是你的兒子的爸爸。這就是生活中的聯絡。其實,資料之間也是有聯絡的。資料庫裡各個表之間如何建立聯絡呢?

 

將多張表通過主鍵+外來鍵關聯起來的方式,叫作表關聯。

例如學生選課涉及的四張表,通過主鍵和外來鍵關聯在一起,就構成了一個簡易的學生選課資料庫系統。

 

 

表關聯是關係資料庫中非常核心的理念 ,它可以表達非常複雜的資料關

 

【概念模型】表示方法:E—R方法(也叫實體聯絡法)

 

 

【一個E-R模型案例】:

 

 

【資料模型】(主要指關係模型)

 

SQL語句的基礎是關係資料庫,關係資料庫的基礎是關係模型,關係模型可以由E-R圖得到。

在關係資料庫中,一張表就是一個關係,所以表格的一些術語和關係的一些術語能表達同樣的意思,具體來說,有下面幾點不同:

 

 

上面講的都是資料庫方面的基本理論。理論有了,當然就得有對應的軟體實現才能用起來,不然再強大的理論都是一坨屎。這就好比,如果只有設計草圖是無法蓋起樓房的,得有具體的施工團隊才能蓋起樓房。

 

上面講的資料庫原理就是“設計草圖”,那麼對應的“施工團隊”是誰呢?

 

實現資料庫原理的“施工團隊”就是常用的資料庫軟體,例如MySQL、Oracle、SQLServer等都是實現上面理論的資料庫。各個資料庫軟體的使用差別大同小異,但是因為MySQL是開源的,免費的,所以成為各大公司使用的主流,面試也主要以’賣燒烤‘為主。

02.

SQL基礎篇

 

 

我經歷過很多次資料分析師面試,經常會遇到這樣一道經典的SQL筆試題。注意:這可是華為的面試題,上點心吧。

 

【華為經典面試題】

A(使用者購買記錄)、B(商品對應ID)、C(ID對應價格)三個表,問本月內購買商品金額最多的前三名使用者分別是誰?

 

【分析】

 

A表只有使用者和商品名字的對應關係,需要關聯到C表求得價格,但A表和C表沒有公共欄位,這時發現A表和B表有公共欄位【商品名字】,而B表和C表有公共欄位【商品ID】,於是先用A表Join B表,再Join C表得出一張多個欄位的關聯表,用Group by求出使用者購買商品的總金額,再用Order by對使用者購買商品的總金額進行降序排列,最後用Limit擷取總金額前三位的使用者。

 

這道題看起來很難,但考到了都是一些SQL的基礎知識,包括Select、Groupby、Order by、Join、Limit。

 

所以,作為資料分析獅(有人喜歡把自己叫作分析狗,真是太不尊重自己了,我聽了非常氣憤),如果你以後的發展方向不是資料工程師的話,SQL只需要掌握基礎語句就可以糊弄面試了,具體包括:

 

查詢資料(select語句)

過濾資料(where語句)

彙總資料(group by 語句)

排序資料(order by 語句)

時間函式

1 查詢資料(select語句)

【語法】select 列名稱 from表名稱

【案例】select name from world; (選取world表中‘name’這一列)

 

select * from world(選取world表中所有列)

2 過濾資料(where語句)

 

【語法】select xxxx from xxx Where 條件表示式

【案例】select * from country where IndepYear >1975

 

 

3 使用distinct關鍵詞去重:

【語法】select distinct 欄位名 from 表名

【案例】select distinct class from student

 

 

4 彙總資料( Group by 語句)

【定義】什麼是group by 子句,“Group By”從字面意義上理解就是根據“By”指定的規則對資料進行分組. 那麼,GROUPBY 是如何分組的呢?

【案例】

 

 

所以group by也叫分組函式。

5 排序語句(order by)

Order by 指的是根據指定的列對結果進行排序,預設升序;如果希望降序,需要加上DESC關鍵字。

【語法】selectxxx from xxx

where xxx

order by xxx desc

【案例】篩選人口總數大於10萬的國家的資訊,並且按照人口總數進行降序排序。

 

select * from countrywhere population > 100000

 

order by population desc (先篩選符合條件的行,後排序)

 

使用Orderby 的幾種情況:

(1)order by 作用於單個欄位

 

 

(2)加desc關鍵字實現降序

 

 

(3)order by 作用於雙欄位

 

 

先對年齡進行升序排序,然後針對相同年齡的,再根據成績升序排序

 

6時間函式

 

關於阿里,京東,美團,快手等大部分網際網路公司,大部分資料需求都是和時間相關的,所以熟練掌握時間函式,非常的重要!!有人告訴我他不想工作,我奉勸你照照鏡子,看看鏡子中的自己,已經長得這麼醜了,難道還要沒錢嗎?

 

真是no zuo no die,我不會罵你的,我很有修養

 

03.

SQL進階篇

 

恭喜你,你已經看到進階篇了,現在你已經get到一個了不起的技能,媽媽再也不用擔心你沒法裝X了。下面這些資料是我們內部的一些分享資料,有人問我什麼內部,你在哪個公司上班,拜託大家不要像我二姑媽似的這麼八卦,要學會看重點!!進階部分需要大家瞭解mysql的執行原理,join的用法,SQL的執行順序等等,因為這是我們寫複雜SQL的基礎。你不會走,就想飛嗎,真的沒這麼容易!!

 

(1)mysql中join的用法

 

之前網路上流行用韋恩圖來表示各種連線查詢:

 

 

但我覺得用下面這種方式表達連線查詢,更容易理解:

 

 

 

 

 

 

 

 

 

 

有沒有覺得連線查詢竟然如此簡單,還不是多虧了我這幾張圖嗎。

 

(2)Mysql的執行順序:

 

當sql邏輯複雜後,sql的執行順序就會非常重要,SQL執行順序和書寫順序又不一樣,所以慢慢扣吧,這也是進階的基礎呢。

 

 

 

04.

SQL複雜查詢

 

恭喜你,你都看到複雜查詢了,我覺得你很有潛力!!面對大量資料我們時常需要對他們進行彙總,分組,歸類,這時候就需要用到一些複雜的查詢方法。

 

1聚合函式:【分類】聚合函式有哪些?

 

 

2分組聚合

 

【定義】指的是先使用group by 分組後,再使用聚合函式對每組資料聚合

分組語句和聚合函式常常一起使用

 

 

 

【案例】:

 

 

3 使用having子句

 

【定義】篩選符合條件的組,常常和group by 一起使用。

 

【示意圖】

 

 

4巢狀查詢:

 

(1)【定義】什麼是巢狀查詢?

 

如果把一個查詢塊巢狀在另一個查詢塊的WHERE子句或HAVING短語的條件中,我們就稱為巢狀查詢。其中外層查詢稱為主查詢,內層查詢稱為子查詢。

 

 

(2)【執行順序】先執行內層查詢,再執行外層查詢:

 

 

(3)巢狀查詢用來解決哪些問題?

 

 

【Sql 語句】

 

 

掌握了上面這些語法,基本上你可以糊弄各種形式的面試了,最常見的考SQL的方法就是,給你一個虛擬的資料庫表結構,然後讓你按給出的條件查詢出資料,並用手寫的形式寫出在紙上。所以面試前把常用的SQL語句記清楚就OK了。

文章摘自:https://zhuanlan.zhihu.com/p/87000536