- 快速念咒:MySQL入門指南與進階實戰(zhàn)
- 彭宇奇
- 3184字
- 2024-05-24 18:33:16
1.1 什么是SQL

大家好!歡迎你們參加《快速念咒:MySQL入門指南與進階實踐》讀者見面會——“七嘴八舌聊SQL”!我是主持人詹姆士!在這樣一個信息化的時代,我們每個人都會和數(shù)據(jù)打交道。事實上,管理和分析數(shù)據(jù)是一種能力,這種能力就好比莎翁駕馭文字或萬磁王掌控金屬。而我相信通過對SQL的學(xué)習(xí),大家對數(shù)據(jù)的管理和分析能力將更上一“棟”樓。沒錯,這種感覺就像坐上觀光電梯,眼前的風(fēng)景不斷地快速變換著。瞧啊,今天到場的3位嘉賓學(xué)員,他們名字的首字母剛好組成了“SQL”,既然這樣,就請3位嘉賓先來聊聊他們各自對SQL的理解吧。因為這一概念對于很多初學(xué)者來講都還是天空中一團模糊的云朵,而我們需要將它揉捏成大家所熟悉和喜歡的形狀。瑟琳娜,由你先開始可以嗎?
非常樂意!大家都知道,彈鋼琴時需要按照樂譜的指示來進行演奏。那么類似地,數(shù)據(jù)庫也會根據(jù)我們輸入的SQL語句執(zhí)行相應(yīng)的操作。所以單從這個角度來看,大家不妨將一段SQL語句視為一段樂譜,因為它們的本質(zhì)作用都是表達(dá)。只不過SQL難以表達(dá)情感,因為SQL語句的閱讀對象是數(shù)據(jù)庫,且它傳遞的信息是我們對數(shù)據(jù)的操作指令。因此,我對SQL的理解就是——SQL是一門用來與數(shù)據(jù)庫溝通的計算機語言。
瑟琳娜,想必你一定很愛好音樂吧。希望你能再用音樂類比為我們講解一下SQL的主要功能。
我想我可以借用一句歌詞:I wish I can select my name from your heart。沒錯,這句歌詞的字面含義是,我希望能在你的心中找到我的名字。暫且拋開其中的浪漫情愫,相信大家一定注意到了,這句歌詞體現(xiàn)了一種查詢行為。事實上,查詢信息正是SQL的主要功能,大家可以透過SQL的全稱看到這一點——Structured Query Language(結(jié)構(gòu)化查詢語言)。
非常巧妙的解釋!根據(jù)歌詞中的查詢行為,我們可以抽象出一條這樣的表達(dá)式:SELECT something FROM somewhere。事實上,這正是SQL的標(biāo)志性語句。大家只要熟練運用好這條表達(dá)式,就足以從容應(yīng)對SQL的大部分使用場景了!
真的是這樣嗎?看來SQL真是一項易于掌握的技能。說實在的,我原本一直以為SQL很難上手,抱歉,這也許是我對計算機語言的固有印象。不過,既然勞倫斯表示“SELECT something FROM somewhere”就是SQL的標(biāo)志性語句,那我就放心多了。因為它的字面含義真是太容易理解了:從哪里去找什么東西。這種感覺就像背著鐵鍬去挖寶藏!相信每個男孩在成長的過程中都憧憬過這樣一段經(jīng)歷。
沒錯,查詢信息的過程就像在數(shù)據(jù)庫中挖寶藏,這個比喻很棒!正如剛剛聊到的那樣,“SELECT...FROM...”的字面含義是,從哪里去找什么東西,站在閱讀者的角度來看就是這樣的。而我們作為書寫者,要做的就是對這條表達(dá)式填充“物名”和“地名”。例如,如果要表達(dá)去河邊的大柳樹下挖寶藏,那么對應(yīng)的填充結(jié)果就是SELECT precious FROM river_willow。
事實上,使用SQL編寫一條查詢語句就像在宣讀一份指使性的聲明。因為我們不需要告訴計算機如何去做,只需要通過一段聲明告知它我們想要的是什么信息。這種感覺就像當(dāng)一位甩手掌柜,雖然你想要得到寶藏,但卻無須親自動手。因為你只需要將寶藏的埋藏地點和寶藏類型告知計算機即可,然后選擇一個舒服的姿勢躺在扶手椅里,一邊喝著剛從冰箱里拿出來的橙味汽水,一邊看著計算機在指定地點揮汗如雨。至于它揮舞的是鐵鍬還是鋤頭,以及采用何種方式挖掘都無關(guān)緊要。這些都用不著你來教它,過一陣子它自己就會捧著寶藏遞到你的眼前。
啊哈,躺在舒服的扶手椅里,一邊喝著飲料一邊發(fā)表通告,當(dāng)甩手掌柜,這正好符合SQL語言的特點和基本調(diào)性——聲明性、指使性。再結(jié)合瑟琳娜之前的理解來看,她的定義還可以變得更加完整:SQL是一門用來與數(shù)據(jù)庫溝通的聲明性計算機語言。
請問一下,我們的讀者后續(xù)會從“SELECT...FROM...”這條表達(dá)式入手學(xué)習(xí)SQL,是嗎?說實在的,這條短小精悍的語句看起來真的很友好。
沒錯,它就類似于一句簡單的“你好!”當(dāng)我們開始學(xué)習(xí)一門新的外語時,往往都是從這樣一句親切的問候開始的。
確實如此,一句“你好!”不僅簡單友善,還能拉近人與人之間的距離,它作為學(xué)習(xí)新外語的第一步再合適不過了。奎妮,你好像有話想說?
是的,詹姆士,我對將SQL定義為一門語言有不同的看法,這源于我生活中的一些感悟。去年冬天,我在滑雪俱樂部認(rèn)識了兩位新朋友,他們分別是來自西班牙的艾維利亞和來自意大利的安東尼奧。在日常生活中,無論我在見面時對艾維利亞說Hola,還是在碰到安東尼奧時打招呼說Ciao,他們都會熱情地予以回應(yīng),因為他們都明白我是在使用語言進行問候。但是請大家細(xì)想一下,雖然SQL的交流對象是數(shù)據(jù)庫,可是數(shù)據(jù)庫并不像我們?nèi)祟愐粯泳哂姓Z言的概念。換句話來講,雖然SQL語句會在我們和數(shù)據(jù)庫之間傳遞信息,但是作為“語言”,它卻是單向僅被我們所認(rèn)可的。一條在我們看來字面含義非常直觀的SQL語句,傳遞到數(shù)據(jù)庫那邊,就會變成一串與操作相對應(yīng)的符號。因此,我并不認(rèn)為SQL是一門語言,原因是對“語言”這一概念缺乏雙向的統(tǒng)一認(rèn)可。事實上,我對SQL的理解是,SQL是一套由基礎(chǔ)英文單詞和常用符號組成的書寫系統(tǒng)。
哦?將SQL定義成一套書寫系統(tǒng),這我還是第一次聽說。不過集思廣益的討論更能給讀者們帶來啟發(fā)!
也許我再分享一篇新聞報道可以增加大家對這種理解方式的認(rèn)同——某處的實驗室里有一只聰明的黑猩猩,它能通過在機器屏幕上輸入“我要一塊蘋果”,從而獲得一塊蘋果作為獎勵。

請大家思考一下,雖然從表面上看,這只聰明的黑猩猩是在使用我們?nèi)祟惖恼Z言和機器進行溝通。但實際上,它也許并不像我們一樣清楚這句話的真正含義,因為它在乎的只是這樣操作以后能夠得到獎勵。要證明這一點并不困難,如果讓黑猩猩把“我要一塊蘋果”換成“我不要吃蘋果”,但結(jié)果同樣是獲得一塊蘋果作為獎勵的話,那么很顯然,黑猩猩只是將我們的人類語言當(dāng)成了一種單方面索取獎勵的工具而已。
事實上,這篇新聞報道的有趣事件對我們今天的討論內(nèi)容很有啟發(fā)。既然SQL的主要功能是查詢信息,那么我們其實與那只聰明的黑猩猩一樣,都只是將“語言”當(dāng)成了一種單方面的索取工具,只不過黑猩猩索取的是一塊蘋果,而我們索取的是有分析價值的信息數(shù)據(jù)。
奎妮的觀點確實很有道理。同學(xué)們在日后的學(xué)習(xí)中就會發(fā)現(xiàn),其實大多數(shù)SQL語句都是由一些描述性很強的基礎(chǔ)英文單詞(關(guān)鍵詞)組成的,例如剛剛聊到的SELECT和FROM。雖然這些關(guān)鍵詞會引導(dǎo)計算機執(zhí)行操作,但我認(rèn)為它們更重要的作用是引導(dǎo)我們形成書寫思路。而且在很多情況下,關(guān)鍵詞的書寫順序與它的執(zhí)行順序并不一致,大家以后就會感受到SQL的這一特點。
不過話說回來,如果只是把語言當(dāng)作一個單方面的索取工具,那么就會缺少很多互動。說到這里,我有些好奇,勞倫斯,請問你有嘗試過使用SQL語言和別人交流嗎?
哈哈,我沒有。但我想,如果有人這樣做了,那他一定是達(dá)到了某種“業(yè)精于勤,而更精于嬉”的新境界!說實在的,在聽了瑟琳娜和奎妮的理解之后,我認(rèn)為SQL就只是一個工具而已,只不過它具備一定的語言性質(zhì)。因此描述得更準(zhǔn)確一點就是,SQL是一個用來與數(shù)據(jù)庫溝通,且披著語言外衣的工具。請想象一下,如果在某天晚上,就在你準(zhǔn)備進入夢鄉(xiāng)的時候,突然有一位身穿白色大褂的老人,哆哆嗦嗦地降臨在了你的床邊。他一邊用慈祥的目光注視著你,一邊卻用莊重的口吻向你表示:“親愛的年輕人,你是被上天選中的孩子,因此我有義務(wù)開小灶將你培養(yǎng)成一名先知。如果你能學(xué)會使用SQL來查閱‘命運’這個數(shù)據(jù)庫,那么你將預(yù)見未來生活中的種種際遇……”
天啊!如果這種事情真的發(fā)生在我身上,我想我查詢信息的欲望會在一瞬間爆發(fā):癌癥被攻克的關(guān)鍵性技術(shù)是什么?什么時候開始星際旅行?高智能機器人是否真的會出現(xiàn)?當(dāng)然,順便了解一下最有潛力的股票也無妨。說實在的,在這種情況下,SQL可能就真的只是一個工具而已。就像那只聰明的黑猩猩,只要能獲得一塊蘋果作為獎勵,它并不在乎輸入的是“今晚月色真美!”還是“你們快點放我出去!”
沒錯,每個人可能都對SQL有不同的理解:一門語言、一套書寫系統(tǒng),抑或只是一個單純的索取工具。因為不同的理解取決于大家使用SQL的普遍場景及思考問題的角度,所以沒有必要對SQL做統(tǒng)一且絕對的定義。希望各位同學(xué)在日后的學(xué)習(xí)中可以收獲屬于自己的理解!
- C語言程序設(shè)計案例教程(第2版)
- Java入門經(jīng)典(第6版)
- Java面向?qū)ο笏枷肱c程序設(shè)計
- Mastering Natural Language Processing with Python
- Learning Flask Framework
- Java設(shè)計模式及實踐
- SQL Server 2016數(shù)據(jù)庫應(yīng)用與開發(fā)習(xí)題解答與上機指導(dǎo)
- 你不知道的JavaScript(中卷)
- FFmpeg入門詳解:音視頻原理及應(yīng)用
- 數(shù)據(jù)結(jié)構(gòu)案例教程(C/C++版)
- Python Data Structures and Algorithms
- 軟件供應(yīng)鏈安全:源代碼缺陷實例剖析
- 軟件項目管理實用教程
- Hands-On Nuxt.js Web Development
- R Data Science Essentials