【黃啊碼】MySQL入門—3、我用select *,老闆直接趕我坐火車回家去,買的還是站票

2022-07-22 21:06:50

大家好!我是黃啊碼,學會了DDL語句了嗎?那我們今天就來學習一下基本的查詢語法,我見過很多外包機構的程式設計師都是萬物皆可select *,然後專案跑了一段時間就基本跑不動了,問就回答:伺服器設定不夠,加錢!好傢伙,居然可以這樣,學習啦【狗頭保護】如果你在維護自家公司的專案,老闆稍微會點技術,你相信他會打你嗎?

好了,廢話少說,先上課程目錄:

SELECT 查詢的基礎語法;
如何排序檢索資料;
什麼情況下用SELECT*,如何提升 SELECT 查詢效率?
SELECT 查詢的基礎語法
SELECT 可以幫助我們從一個表或多個表中進行資料查詢。我們知道一個資料表是由列(欄位名)和行(資料行)組成的,我們要返回滿足條件的資料行,就需要在 SELECT 後面加上我們想要查詢的列名,可以是一列,也可以是多個列。如果你不知道所有列名都有什麼,也可以檢索所有列。

1、檢索所有列【你:好傢伙,這麼簡單,我爸媽看到都會說我是大聰明】

select * from user_info;

吶,不就出來了嗎?

 

2、檢索單個列【你:這也太簡單了吧,小瞧我大聰明瞭?】

select user_name from user_info;

 

黃啊碼:但,你這結果好像順序不對啊,張三不是該排在最前吧 。

你:嗯哼,我不管,能得到結果就行了。

黃啊碼:啪,啪,老老實實給我看到最後。

3、起別名,說通俗易懂就是給它起個外號,比如你的外號就是二狗,哦,不對,是靚仔、靚女

select user_name as u_name from user_info;

 

你:啊碼,我很懶,我不想寫那麼多程式碼;

黃啊碼:啪,就知道你不想寫那麼多,把as去掉不就少寫兩個字母了嗎?

黃啊碼:結果是不是一樣?

你:是一樣,但,但是,下次能不能不打我?

黃啊碼:打是親,罵是愛,不打不罵不自在。

你:好傢伙,待我東西學到手,讓你知道什麼叫做人間大愛!

4、查詢常數

SELECT 查詢還可以對常數進行查詢。對的,就是在 SELECT 查詢結果中增加一列固定的常數列。這列的取值是我們指定的,而不是從資料表中動態取出的。你可能會問為什麼我們還要對常數進行查詢呢?SQL 中的 SELECT 語法的確提供了這個功能,一般來說我們只從一個表中查詢資料,通常不需要增加一個固定的常數列,但如果我們想整合不同的資料來源,用常數列作為這個表的標記,就需要查詢常數。

比如我們想在user_name前增加一列‘u_name’代表人物名稱,我們可以這麼寫:

select '人物名稱' as u_name,user_name from user_info;

 

你:啊碼,你這樣寫有點像脫褲子放屁,我一看覺得那是人物名稱;

黃啊碼:啪,啪,啪,你說什麼? 不要你覺得,我要我覺得,我覺得這是在教你東西就行了,這三丈紅給你個記性。

但切記,如果把人物名稱改為數位,就不需要加單引號了,直接這樣

 

你:666,啊碼就是厲害;

黃啊碼:啪,要你誇,我厲害我能不知道?

5、去除重複行,比如:

 

這明顯就有兩個張三,我想獲取這張表裡邊的所有user_name,並且是獨一無二的,該咋弄?

你:啊碼,我知道,我知道,distinct!distinct!;

黃啊碼:誰讓你說的,你這樣會讓我很沒面子的,啪!

select distinct user_name from user_info;

 

這裡有兩點需要注意:

DISTINCT 需要放到所有列名的前面,如果寫成SELECT user_age, DISTINCT user_name FROM user_info會報錯。
DISTINCT 其實是對後面所有列名的組合進行去重,
如何排序檢索資料
最最最普通的方式如下:

select * from user_info ORDER BY user_id asc;

 

你:啊碼,那是不是可以asc去掉;

黃啊碼:啪,你終於有點覺悟了,確實是的。

 

你:啊碼,我說對了,你為啥還要打我;

我:不好意思,純粹順手,習慣了,啪;

你:捂著臉,敢怒不敢言。

使用 ORDER BY 子句有以下幾個點需要掌握:

排序的列名:ORDER BY 後面可以有一個或多個列名,如果是多個列名進行排序,會按照後面第一個列先進行排序,當第一列的值相同的時候,再按照第二列進行排序,以此類推。
排序的順序:ORDER BY 後面可以註明排序規則,ASC 代表遞增排序,DESC 代表遞減排序。如果沒有註明排序規則,預設情況下是按照 ASC 遞增排序。我們很容易理解 ORDER BY 對數值型別欄位的排序規則,但如果排序欄位型別為文字資料,就需要參考資料庫的設定方式了,這樣才能判斷 A 是在 B 之前,還是在 B 之後。比如使用 MySQL 在建立欄位的時候設定為 BINARY 屬性,就代表區分大小寫。
非選擇列排序:ORDER BY 可以使用非選擇列進行排序,所以即使在 SELECT 後面沒有這個列名,你同樣可以放到 ORDER BY 後面進行排序。
ORDER BY 的位置:ORDER BY 通常位於 SELECT 語句的最後一條子句,否則會報錯。
至於WHERE ... GROUP BY ... HAVING .. 我們後邊在學,黃啊碼怕你吃太多會消化不良,到時啪的可是我。

什麼情況下用 SELECT*,如何提升 SELECT 查詢效率?
如果我們只是練習,或者對資料表進行探索,那麼是可以使用SELECT * 的。它的查詢效率和把所有列名都寫出來再進行查詢的效率相差並不大。這樣可以方便你對資料表有個整體的認知。但是在生產環境下,不推薦你直接使用SELECT * 進行查詢,如果你想強制上【潮汕話:硬愛】那沒辦法,這邊建議您回爐重造。

好了,今天的課程學到這裡,有問題的留個言,別忘了一鍵三連,下次我們還會再見!

最後留個問題,這文章出現了幾個「啪」,數錯了給我重新學一遍!

我是黃啊碼,碼字的碼,退。。。退。。。退。。。朝!