數據分析必須要掌握的數據庫與sql基礎知識!收藏
在數據分析面試中,有一類知識絕對是面試官重頭考察的內容,但是很多人卻常常忽略,也就是——數據庫與SQL!
數據庫是什么?
你可以把數據想象成一個個文件夾,數據庫就是一個一個文件柜,這個文件柜存放著非常多的數據,無論這個數據是什么、或者是如何組織的

這里要注意,人們通常用數據庫這個術語來代表他們使用的數據庫軟件,這是不正確的,這是以前你混淆的根源
確切的說,數據庫軟件應該稱為DBMS,也就是數據庫管理系統,數據庫就是由DBMS創建和操縱的,比如我們可以在sql sever創建一個數據庫

也就是說DBMS就像是一個圖書管理員,你不直接訪問數據庫,而是利用DBMS訪問數據庫,讓圖書管理員幫你找一個文件柜。
數據庫的分類?
這里所說的數據庫都指的是數據庫管理系統,這按照早期的數據庫理論,比較流行的數據庫模型有三種,分別為層次式數據庫、網狀數據庫和關系型數據庫。
而在當今的互聯網企業中,最常用的數據庫模式主要有兩種,即關系型數據庫和非關系型數據庫。
關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式)

在關系型數據庫中,對數據的操作幾乎全部建立在一個或多個關系表格上,通過這些關聯的表格分類、合并、連接或選取等運算來實現數據的管理。
關系型通俗的理解是,數據作為二維數組存在,你可以理解為圖書館的圖書排列。
書架、樓層你可以理解為關系型的數據結構,書作為數據存在,而所有圖書館管理員就是數據庫的進程,用于不同的工作。有人救火(數據修復、備份),有人整理書架、書籍(數據整理、歸檔),而用戶進程就是指的來到圖書館的顧客,他們看書、移動書籍,而管理員就會對著維護。
關系型數據庫誕生距今已有40多年了,從理論產生到發展到實現產品,例如:
常見的MySQL和Oracle數據庫,Oracle在數據庫領域里上升到了霸主地位,形成每年高達數百億美元的龐大產業市場,而MySQL也是不容忽視的數據庫,以至于被Oracle重金收購了。

非關系型數據庫也被稱為NoSQL數據庫,NoSQL的本意是“Not Only SQL”,指的是非關系型數據庫,而不是“NO SQL”的意思
因此,NoSQL的產生并不是要徹底否定關系型數據庫,而是作為傳統數據庫的一個有效補充,在特定的場景下可以發揮難以想象的高效率和高性能。

NoSQL是非關系型數據庫的廣義定義,它打破了長久以來關系型數據庫與ACID理論大一統的局面。NoSQL數據存儲不需要固定的表結構,通常也不存在連續操作,在大數據存取上具備關系型數據庫無法比擬的性能優勢。
SQL儲存數據
那么,作為關系型數據庫最常見的SQL,它是怎么存儲數據的?
1、表:
在你將文件夾放入文件柜的時候,不能將他們隨便的扔進某個抽屜就完事了,而是在文件柜中創建文件,然后將相關的資料放入相關的文件中,這就是數據庫的表。
表是一種結構化的文件,用來存儲某種特定類型的數據,比如說這樣的sql文件,其里面包含了20多個數據庫表,每個表的名字都不應該是相同的,但是我們可以在不同的數據庫里存放相同表名的數據表。

同時我們不能把學生數據與老師數據放在同一個表里,這樣會我們不好提取數據,檢索和訪問都比較麻煩,所以我們應該創建兩個表,每個清單一個表。
2、列:
列是組成表的字段信息,一張表可以有一個或者多個列組成。
我們可以這么理解,每一列都是數據庫表中的每一個字段,比如下面的學生id列、學生姓名列、考試成績列就是三個字段。

正確地將數據分解為多個列是十分重要的,比如班級和學生姓名應該是獨立的列,通過將他們進行分解開,才有可能利用特定的列隊數據進行排列和過濾,如果學生姓名和班級組合在了一個列里,按照班級過濾就會十分的困難。

數據庫中每個列都有對應的數據類型,數據類型定義列可以存儲的數據種類。
例如,如果列中存儲的是數字,那么對應的數據類型應該是數值類型,如果列種存儲的是日期、文本、注釋、金額等,應該用恰當的數據類型規定出來。
數據類型:所容許的數據類型,每個列都應該有相對應的數據類型,限制存儲的數據形式。
3、行:
數據庫表中的數據是按照行進行存儲的,每一行就是存儲的一個數據,比如第一行是張三的數據,第二行是李四的數據。
4、主鍵:
表中每一行都應該有可以唯一標識自己的一列,比如學生信息表中我們不能用學生的姓名作為主鍵,因為我們會發現一旦出現重名的情況,我們就會出現兩個不同的數據;

當然也不能用考試成績作為主鍵,比如按照“90分”作為主鍵進行提取時我們還會提取出兩個數據;

所以我們應該用學生id作為主鍵,因為無論如何學生id是不會重復的,它具有唯一性,所以可以作為主鍵。

所以主鍵就是唯一區分數據表行的標識,用來表示一個特定的行。
沒有主鍵的話,我們更新或者刪除表中特定的行就會十分的困難,他必須滿足兩個條件:
- 任意兩行都不應該有相同的主鍵值
- 每一行都必須具有一個主鍵值(主鍵列不存在null值)
數據庫中能夠將不同的表進行關聯,靠的就是主鍵,例如下面兩個表:

比如上面兩張圖,左圖是學生信息表,右圖是老師信息表。左圖的主鍵是學生ID,右圖的主鍵是老師ID。細心的讀者可能發現右圖還有一個學生ID,這里的學生ID是專門用來聯接用戶表的,它并不是主鍵。只不過兩張表通過學生ID這個唯一信息來關聯。
但兩張表關聯也并不是信息能一一對應的,也會存在空缺的時候,比如:


所以,想要認知數據庫的內容,首先我們先要明白sql、sql sever、my sql、oricle與數據庫、數據庫管理系統的區別在哪,因為很多人在學數據分析的時候,都是在網上到處找資料,不同的資料里濫用了這些名詞,造成了大家的混淆,也增加了大家對于sql認知的難度。