什麼是SQL?什麼是NOSQL? 用簡單範例看一下他們的差異

文章推薦指數: 80 %
投票人數:10人

SQL (結構化查詢語言) 是用於和關聯式資料庫溝通的語言,它用在資料庫中 ... 套件,以及使用特定的函式操作,但如果是使用另一個NoSQL資料庫,像是Firebase,那就需要 ... 返回文章列表 什麼是SQL?什麼是NOSQL?用簡單範例看一下他們的差異 資料庫 當你想要學習一項新技術時,資料庫和SQL可能不是你首先想到的。

他看起來沒那麼潮,你可能會想到學習Python或R來進行資料分析。

或者是Swift來開發iOSAPP。

在過去的幾年裡,你可能也聽說過越來越流行的新技術NoSQL。

在大數據和資料分析的世界裡,資料庫和SQL比起以往任何時候都更重要。

如果你正準備開始設計一個Web應用程式,我相信你一開始大部分的時間會花在設計資料庫的架構上,而決定你的Web應用程式的速度和數據準確性最重要的指摽,就是你的如何設計資料庫的架構。

 什麼是關聯式資料庫? 資料庫是一個有規則和序列,存放資料的集合,允許我們儲存和讀取資料。

目前有許多不同類型的資料庫技術,每個類型都有不同的儲存和讀取資料的方式,但到目前為止,最流行的還是關聯式資料庫。

在關聯式資料庫中,資料存儲在Table中,Table類似於Excel的表單,由欄和列組成的多個儲存格,Table中有一個唯一的key來標識每一行數據。

這些唯一的key可以用來將Table連接在一起。

正是這種結構使我們能夠辨識和存取資料,建立起資料庫中其他區塊之間的關係。

也正是這些關係,使得關聯式資料庫變得如此強大,並且在資料庫中提供資料的一致性。

SQL結構化查詢語言 SQL(結構化查詢語言) 是用於和關聯式資料庫溝通的語言,它用在資料庫中建立Table,以及從資料庫中新增、修改和刪除資料,串連Table之間的資料。

在工程師社群的問答平台Stackoverflow的調查中發現,SQL目前排名在程式語言的第三名,所以它是一個在開發人員中,普遍使用的程式語言,除了從Stackoverflow客觀的圖表分析,根據Ryan自己在業界工作的觀察,絕大多數的後端開發人員,不管你是使用哪一種程式語言,也都會使用SQL存取資料庫中的資料,所以很少有人只會Java,Ptyhon,C#程式語言,但不懂SQL程式語言的開發工程師。

SQL語法使用起來非常簡單,我們只要寫好Table名稱、要搜尋的欄位名稱以及搜尋條件就可以了,像是下方我想在資料庫中搜尋書名為「斜槓人生」的書,我只要用SQL關鍵字select後方寫下想要找出的欄位名稱,例如書名與出書年份,然後在關鍵字from後方寫上table名稱book,最後則是搜尋條件,而這樣簡單的語法可以在Oracle,MySQL,MSSQL等關聯式資料庫上執行。

  關聯式資料庫系統 目前著名的資料庫系統有甲骨文Oracle、微軟MicrosoftSQLServer和MySQL。

這些資料庫都是關聯式資料庫,其中應用最廣泛的是MySQL。

事實上,最近對stackoverflow的調查發現,超過50%的工程師在職業生活中使用過MySQL,其重要程度可見一斑。

NoSQL資料庫 NoSQL是NotOnlySQL的縮寫,和剛才前面介紹的不同是,NoSQL資料庫是一種非關聯式資料庫,將資料儲存為類似JSON的文件,並對資料進行查詢,這是一個document資料庫模型,在這個模型中,資料並不存儲在Table中,doucment是key-value的有序集合。

資料庫中的每個doucment不需要具有相同的數據結構,你可以將資料儲存在JSON、XML文件甚至CSV文件,我下方使用紀錄書籍資訊的JSON格式作為範例,讓你更容易理解。

這是使用JSON格式紀錄的書籍資料,這裏有兩本書,分別是「斜槓青年」與「巴菲特寫給股東的信」,使用key-value的方式紀錄資料,像是書名的key值,就是title,value值就是「斜槓青年」,這樣我們在找資料時,只要搜尋key值title等於「斜槓青年」,就可以找到資料。

[ { "year":2017, "title":"斜槓青年", "info":{ "release_date":"2017-09-01", "rating":8.2, "genres":["生涯規劃","商業理財"], "plot":"全球職涯新趨勢,迎接更有價值的多職人生", "actors":"SusanKuang" } }, { "year":2017, "title":"巴菲特寫給股東的信", "info":{ "plot":"巴菲特親筆撰述唯一著作", "rating":8.3 } } ]  但是存取資料的方式,必須使用資料庫系統提供的API才能夠新增、修改、刪除資料,也就是需要透過程式語言呼叫特定的函式,或是使用資料庫系統提供的指令,遠端連線執行後才能存取資料,像是Amazon的雲端服務AWS,也有提供NoSQL的資料庫服務,名稱是DynamoDB,下面是一段使用Python程式語言搜尋「斜槓青年」這本書的簡單範例,其中最重要的是有中文「斜槓青年」這一行,搜尋的方式是使用Key物件,使用函式eq判斷書名是否相同,如果相同就會將書籍資料回傳,並且可以透過下面for迴圈一本一本找出來,列印出書名或其他相關資訊。

importboto3 fromboto3.dynamodb.conditionsimportKey dynamodb=boto3.resource('dynamodb',endpoint_url='http://localhost:8000') table=dynamodb.Table('Book') response=table.query(KeyConditionExpression=Key('title').eq('斜槓青年')) forbookinresponse['Items']: print(book['title'])  NoSQL資料庫的優點是它們能夠處理大量的結構化或半結構化數據,更容易擴展,並且能夠提供高可用性。

使用NoSQL資料庫的一些好例子包括:事件記錄(例如存儲用戶登錄)、電子商務應用(存儲用戶購物車的數據)和即時的分析。

SQL與NoSQL的比較 雖然No​​SQL資料庫與關聯式資料庫相比確實有一些優勢,但也有很多缺點。

數據一致性和數據完整性是NoSQL資料庫的主要問題,另一個缺點是缺乏標準化。

例如SQL語法適用於所有關聯式資料庫(MySQL、Oracle、MSSQL等),雖然一些特定的函式,語法上有些差異,但大致來說都是使用SQL的語法操作資料庫,而NoSQL資料庫沒有這樣的標準語言,不同的NoSQL資料庫之間存在很大的差異,剛才上面是使用AWSDynamoDB範例,我們需要匯入AWS的套件,以及使用特定的函式操作,但如果是使用另一個NoSQL資料庫,像是Firebase,那就需要匯入另一個套件和使用另一組函式來操作資料庫,所以學習SQL程式語言會是CP值更高的一種投資,因為你不用再另外花時間學習多個操作資料庫的方法。

在這個信息驅動的大數據時代,為你開發的系統選擇正確的資料庫,比以往任何時候都重要。

雖然關聯式資料庫已經存在了40多年,你可能會被"較新“的NoSQL資料庫技術所吸引,但有一些事情你需要考慮。

關係型資料庫提供的數據一致性和數據完整性意味著,如果你的系統是處理金融信息和交易,那麼數據一致性是必須的。

如果你希望你的資料庫是安全的,關聯式資料庫提供的安全功能,在這方面有明顯的優勢,而且你只需要學習10~20條簡單的SQL語法,就能夠操作大部分的資料庫數據。

所有這些都意味著,使用關係型資料庫和SQL是至關重要的。

關係型資料庫長期以來一直位居第一是有很好的原因的,90%的時間裡它們都是最好的選擇,而且這種情況不會很快改變,如果你有興趣學習更多關於SQL的知識。

可以看看我的課程《資料庫設計-有效的使用系統資料》。

這堂課程幫助許多初學者學會SQL語法,也受到許多同學的好評,課程中使用MySQL作為課程示範,相信這堂課程會成為你學習資料庫和資料分析的重要基石。

資料庫設計課程連結:https://hahow.in/cr/database   CodeGym致力於創造實用的高品質線上課程,幫助想要學習程式語言和IT技術的朋友,能透過我們的課程,學習相關知識,創造出屬於你自己的作品 瀏覽所有課程 作者 Ryan CodeGym創辦人/講師 熟悉Java,Python等多種程式語言,在IT產業經歷十多年,善於資料分析、機器學習,並且熱衷於將資訊技術應用在不同產業分析和系統開發當中 追蹤CodeGym 最新文章 全世界前100大公司資料視覺化圖表 什麼是SQL?什麼是NOSQL?用簡單範例看一下他們的差異 Repl.it線上程式開發服務 文章分類 全部分類 java 程式語言 資料庫 資料視覺化 資訊科學專題分享 Java程式語言從0到1 這堂課程將以實際開發系統來做為教學的目標,課程教學過程將由淺入深教同學開發系統的完整流程,上完這個課程之後將具備使用Java程式語言開發軟體系統的能力 了解課程 資料庫設計 完成這堂課程後,你將學會資料庫設計正確的基礎觀念和完整的SQL語法知識,搭配Ryan製作的課程【Python基礎課程和網路爬蟲入門實戰】,將你學習到的資料庫技能將再次升級 了解課程 JoinOurFreeTrial Getstartedtodaybeforethisonceinalifetimeopportunityexpires.



請為這篇文章評分?