MySQL從刪庫到跑路(4):tell me where do i find someone like you girl?

 “多情自古空餘恨,此恨綿綿無絕期。

 又是一個陽光明媚的早晨,秋高氣爽,天高雲淡,可是李有爲的心裏卻被蒙上了一層厚厚的陰霾。

 古詩有云:“莫言下嶺便無難,賺得行人錯喜歡。正入萬山圈子裏,一山放過一山欄。“李有爲所處的似乎就是這麼一個狀態,剛剛解決了一個問題,可是裏面有陷入了另一個問題當中。

 “So many people all around the world,Tell me where do I find someone like you girl**"

 茫茫人海,芸芸衆生,誰能告訴他,他鐘意的女仔在哪裏呢?

 正當李有爲心煩意亂的時候,背後傳來了一陣熟悉的菸草味道,緊接着一道熟悉的聲音鑽進了他的耳朵裏。

 “誰也不能,唯獨你大爺能!”

 李有爲回過頭凝視着大爺,目中充滿了感激之色,他也說這句話通常意味着大爺準備傳授他新東西了。

 "還記得我們初次相見,我讓你運行的那段SQL代碼嗎?“

select * from human_base_info where name='李有爲'

 這行代碼裏的where其實也是SQL裏面的一個關鍵詞,數據表裏一般都包含大量的數據,通常情況下,我們並不會把所有的數據都選擇出來,只需要篩選出滿足特定條件的數據即可,where就是起這種作用的關鍵詞。

select * from human_base_info where name='李有爲'

 現在我們再來看這句SQL,其中的含義就很清晰明瞭了,查詢human_base_info表裏面,滿足name是‘李有爲’的所有人的所有信息。

where有很多操作符,name='李有爲’是做相等檢驗,這只是其中一個操作。

比如說你想要看妹子,就用sex='F’

比如說你想要看年齡等於22歲的,就用age=22

如果想看身高170極其以上的,就用height>=170

如果想看身高170及其以下的,就用height<=170

注意:使用引號問題
看來上面的條件你會發現,sex做相等檢驗的時候,對值加了單引號''
對age做相等檢驗的時候,則沒有加單引號,這是因爲數據類型的原因
sex(性別),是字符串類型
age(年齡),是數值類型
對字符串做過濾操作的時候,需要用''單引號做限制
對數值類型做過濾操作,則不需要。
數據類型的問題以後會詳講,此不多言……
具體的操作符如下
操作符		說明
=			等於
<>			不等於
!=			不等於
<			小於
<=			小於等於
!<			不小於
>			大於
>=			大於等於
!>			不大於
BETWEEN		在兩個值之間
IS NULL		值爲空

 李有爲感覺自己已經完全聽懂大爺的話了,可是另一個問題卻又縈繞在他心裏,令他不吐不快。

 按照大爺的說法,他現在可以使用where配合操作符,過濾一些滿足他期望條件的數據了,他可以知道身高170-180之間的人,可以知道年齡在22-25歲之間的人,可以知道顏值在200以上的人,可是他卻無法把這些過濾條件整合,比方說,他想要知道身高178-180,年齡22-25,顏值200以上的所有妹子,這個時候應該怎麼辦呢?

 大爺立馬看穿了他的心思,朝着李有爲嘿嘿笑道:“你龜兒子現在是不是想要曉得,滿足身高(height)170-180,年齡(age)22-25,顏值(looks)200以上的所有妹子(sex=‘F’)的信息。

二人相視一笑,男人之間的快樂就是這麼簡單、直接!

 ;"咳咳咳……"大爺卡了一口痰,吐了一炮老葉子菸口水,喝了一口三十七度五的溫茶水,微笑道:“看來有必要給你講一講組合篩選、過濾了!

AND

 大爺突然提高了音量:“身高170-180,年齡22-25,顏值200以上,性別爲女,這些條件是什麼關係?“”

 “並列關係!”李有爲正襟危坐道。

 “英語單詞裏面,哪一個單詞可以表示並列?“

 “AND

 “沒錯,就是AND!AND也是SQL的一個關鍵詞。”你剛纔的那些過濾條件就可以用AND把他們並列起來。

最後的SQL其實就是這麼簡單

SELECT
	*
FROM
	human_base_info
WHERE
	height >= 170
AND height <= 180
AND age >= 22
AND age <= 25
AND looks >= 200
AND sex = 'F'

 大爺不愧是大爺,李有爲看完代碼之後,心中油然而生一股敬佩之情,猶如滔滔江水連綿不絕,又有如黃河氾濫一發不可收拾。

 看着看着,李有爲突然想到了另外一種實現方式,他連忙在電腦上敲下了相關的SQL代碼,然後立即給大爺檢查。

SELECT
	*
FROM
	human_base_info
WHERE
	height BETWEEN 170 AND 180
AND age BETWEEN 22 AND 25
AND sex = 'F'

 大爺看完之後,臉上露出了欣慰的笑容,“不愧是我鐵齒金不換,誠實可靠老郎君的親傳弟子。”

 看見大爺欣慰、讚賞的笑容後,李有爲就像是吃了十個香飄四溢的烤腦花一樣,智商直線飆升,舉一反三道:“如果說同時滿足用“AND”,那麼只滿足其中一項就用“OR“”了哦。因爲某些條件不可能同時滿足,比如說出生地,不可能擁有兩個出生地,所以只能用OR.”。

 比如說,我想要看出生地(birthplace)是S省A市或者是S省B市的人的信息,我的SQL應該這樣寫

SELECT
	*
FROM
	human_base_info
WHERE
	birthplace='S省A市' or birthplace='S省B市'

 大爺沒有說話,只是默默地從抽屜裏拿出了一包黃鶴樓,然後遞了給李有爲,此時無聲勝有聲,對李有爲來說這就是最好的讚許。

 “問渠那得清如許?爲有源頭活水來。”靈感這東西,一旦來了,擋都但不住,接過大爺的黃鶴樓香菸,李有爲立馬又想到了AND和OR共用的情況。

 比方說,他想要知道身高170-180,年齡22-25,顏值200以上,性別爲女,而且出生地是S省A市或者是S省B市的妹子的信息時,SQL就應該這麼寫

SELECT
	*
FROM
	human_base_info
WHERE
	height >= 170
AND height <= 180
AND age >= 22
AND age <= 25
AND looks >= 200
AND sex = 'F'
AND birthplace = 'S省A市'
OR birthplace = 'S省B市'

 大爺看了李有爲的SQL代碼後,輕輕搖了搖頭,感嘆道:“小夥子,你還是太年輕了點啊,SQL這東西和加減乘除運算一樣,也是有優先級的。”
在這裏插入圖片描述
 "來,看一看你的SQL代碼的執行結果,是不是毫無邏輯,雜亂無章,一片狼藉。"現在,讓我們來看一看你這句看起來很優美,但是邏輯像屎一樣的SQL代碼。

MySQL中,AND的執行優先級高於OR。也就是總是先執行AND語句,再執行OR語句。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

你的本意是想要讓5x2+3=25,可是如果你沒有控制好運算優先級,整個計算按照先乘除後加減的方式,依次執行,所以最後的執行結果會是5x2+3=13

 什麼情況下5x2+3=25?

 加“()“,提高運算優先級,5x(2+3)=25!

沒錯,就是加括號"()",提高OR的執行優先級!


注意!
這裏的括號也必須是英文的"()"
在數據庫甚至是計算機的世界裏,
凡是代碼中要用到標點符號的地方,
都是用的是英文的標點符號,
無論是逗號、單引號、雙引號,冒號、還是括號
SELECT
	*
FROM
	human_base_info
WHERE
	height >= 170
AND height <= 180
AND age >= 22
AND age <= 25
AND looks >= 200
AND sex = 'F'
AND (
	birthplace = 'S省A市'
	OR birthplace = 'S省B市'
)

 李有爲重新寫好代碼,大爺瞅了一眼,終於露出了滿意的神色。然而看見數據的查詢結果後,李有爲的心卻涼透了!
在這裏插入圖片描述
 滿足這些條件的妹子,竟然一個也找不到,李有爲不禁有些失望,自己的要求也沒多高啊,爲什麼就連一個妹子也不符合條件呢?難道哥們兒真的是命犯天煞孤星,無伴終老,孤獨一生!

 大爺在一旁哈哈笑出了聲,這個不怪你要求高,而是要怪你本來你自己條件就不行,偏偏要求還高的一匹!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章