“多情自古空餘恨,此恨綿綿無絕期。“
又是一個陽光明媚的早晨,秋高氣爽,天高雲淡,可是李有爲的心裏卻被蒙上了一層厚厚的陰霾。
古詩有云:“莫言下嶺便無難,賺得行人錯喜歡。正入萬山圈子裏,一山放過一山欄。“李有爲所處的似乎就是這麼一個狀態,剛剛解決了一個問題,可是裏面有陷入了另一個問題當中。
“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市'
)
李有爲重新寫好代碼,大爺瞅了一眼,終於露出了滿意的神色。然而看見數據的查詢結果後,李有爲的心卻涼透了!
滿足這些條件的妹子,竟然一個也找不到,李有爲不禁有些失望,自己的要求也沒多高啊,爲什麼就連一個妹子也不符合條件呢?難道哥們兒真的是命犯天煞孤星,無伴終老,孤獨一生!
大爺在一旁哈哈笑出了聲,這個不怪你要求高,而是要怪你本來你自己條件就不行,偏偏要求還高的一匹!