天天看點

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

五分鐘讓你學會 SQL(二)

咱們上回書說到,最基礎的 sql 查詢就是如此的簡單。沒有看到的可以看下曆史文章的上一篇。

今天,我們詳細了解下基本查詢模型

SELECT * FROM table

外的一些晉級語句,包括

WHERE

條件過濾、

oder by

排序、

group by

分組查詢、

limit

限制條數以及邏輯運算符以及一些并表查詢等文法

用的資料庫還是上文說到的那個我改造了一下的 U.S. County-Level Data ,下載下傳連結見上文付費部分。→_→

先了解下 SQL 中的邏輯運算符:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

還有一個要知道的就是「%」,它在 SQL 裡代表的是通配符。

OK,我們先從條件過濾說起來,針對之前的資料加一下條件(

WHERE

),隻看 county 是 Snohomish 的。

SELECT 
*
FROM covid_19_us
WHERE county LIKE 'Snohomish'
           

輸出:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

是不是很神奇?我們還可以看 county 是 Snohomish 和 Cook 的:

SELECT 
*
FROM covid_19_us
WHERE county IN ( 'Snohomish','Cook','Orange')
           

輸出:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

當然你還可以根據其他的條件,通過邏輯運算符進行不同的條件過濾。

我還想讓輸出的資料按照 data_uninx (這個字段内容是記錄建立的時間戳)進行倒序看最新的記錄,這就要用到

order by

排序了:

SELECT 
*
FROM covid_19_us
WHERE county like 'Snohomish'
order by data_uninx desc
           

輸出:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

這裡解釋下,

order by column DESC

代表的就是以 column 作為排序的依據,将其進行降序(

DESC

)排列,如果是升序排列的話,用

ASC

表示

對了,我還想看看這些資料中按照按照州(state)集合,看看各種的病例數和死亡數加總結果。這時候就要用到

group by

SELECT 
    state, 
    sum(cases), 
    sum(deaths) 
FROM covid_19_us 
group by state
           

輸出結果:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

最後,這個資料将近 50w 行,從 1 月 1 日到 8 月 22 的全美資料都在這裡邊,一個是每次查詢耗時耗力,我隻想看最近的 5 條記錄怎麼呢?這時候就用到了

limit

SELECT 
*
FROM covid_19_us
WHERE county like 'Snohomish'
order by data_uninx desc
limit 5
           

輸出結果:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

好了,現在你基本可以開始進行查詢了,但是如果你隻掌握了這些最基礎的用法在工作中似乎還是無法實作「查詢自由」,因為我們在前邊的學習中,有一個重要的假設:所有資料都在一個表中,但在實際的業務系統中,這樣的資料表是很少存在的。為了性能上的一些考慮,一般系統都會進行分庫分表進行管理,比如一個商城可能包括了産品表、訂單表、使用者表,可是你要查詢某一個使用者買了多少東西,花了多少錢,每個東西的産品參數是什麼這類問題時就會涉及到跨越三個表去查詢。這時候我們就用到了跨表查詢的技能。也就是說我們為了檢索我們所需要的資料,将來自不同資料表的資料連接配接到一起。

聽起來複雜的樣子……

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

其實并不難,我們在上一篇文章中提到了「關系型資料庫」這個詞不知道你還有沒有印象,「關系型」資料庫最大的好處之一就是「關系」:表和表之間存在關系,我們可以通過「連接配接」(

join

)将它們連接配接到一起。

inner join

left join

right join

full join

等,我們用的比較多的是一般是

inner join

left join

其中

inner join

(等值連接配接)隻傳回兩個表中聯結字段相等的行

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

left join

(做連接配接)則是将左表(table1)傳回所有行,即使右表(table2)中沒有比對。如果右表中沒有比對則傳回 NULL。

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

right join

left join

正好相反,右表(table1)傳回所有行,即使左表(table1)中沒有比對。如果左表中沒有比對則傳回 NULL。

full join

則是不管左表(table1)還是右表(table2),隻要其中一個表中存在比對,則傳回結果,我們可以了解為是

left join

right join

結果的合集.

我們還是舉個例子:

SELECT 
    covid_19_us.state, 
    sum(covid_19_us.cases), 
    sum(covid_19_us.deaths),
    us.state_abbr 
FROM covid_19_us left join us on covid_19_us.state = us.state
where covid_19_us.state in ('Washington','Illinois','California')
group by covid_19_us.state,us.state_abbr
           

輸出結果:

sql limit不接具體數字_【标題黨】五分鐘讓你學會 SQL(二)

ok,SQL 你學會了麼,重要的還是要練,隻看不練是沒有用的……

順便推薦一個線上 SQL 學習網站:sqlzoo,可以去這裡學習下,支援英文、日文、中文,不過中文是繁體中文。可以在上邊線上執行 sql 語句。

#About Me

張小璋,野蠻生長成世界500強企業供應鍊金融産品經理的法語畢業生。微信公衆号:張小璋碎碎念(ID:<a href="" target="_blank" rel="external nofollow" > SylvainZhang )。

一直在網際網路金融公司從事産品經理工作并負責網際網路金融産品線,深耕網際網路金融和區塊鍊領域。「PMCAFF」、「人人都是産品經理」專欄作家、「PmTalk」簽約作家。