3.1 Paghahambing ng mga halaga: <, >, =, <>
Ang isa sa mga pinakakaraniwang keyword na ginagamit kapag nagsusulat ng mga query sa SQL ay ang WHERE
. Sa tulong nito, sasabihin namin sa MySQL kung aling mga hilera ng talahanayan ang gusto naming i-filter (piliin).
Pagkatapos ng keyword, WHERE
maaari kang magsulat ng napakakumplikado at nakakalito na mga kundisyon. Kaya anong mga operasyon ang maaaring maglaman ng kundisyong ito?
Operator | Paglalarawan | Halimbawa |
---|---|---|
< | Mas kaunti | suweldo < 40000 |
> | Higit pa | suweldo > 100000 |
<= | Mas kaunti o katumbas | edad <= 25 |
>= | Higit pa o katumbas | edad >= 18 |
= | katumbas | trabaho = 'Programmer' |
<>,!= | Hindi pantay | Taon(petsa_pagsali) != 2015 |
Hindi tulad ng wikang Java, para sa mahigpit na pagkakapantay-pantay, isang katumbas ng character ang ginagamit dito, at hindi dalawa .
Kung nais mong suriin na ang mga halaga ay hindi pantay, maaari itong gawin sa dalawang paraan: <>
alinman !=
Ang unang diskarte ay ginagamit sa mga wika tulad ng Pascal, ang pangalawa ay tipikal para sa mga wika tulad ng C ++ at Java.
Para sa pagtatalaga sa SQL, ginagamit ito :=
tulad ng sa Pascal, ngunit ang pagtatalaga mismo ay bihirang ginagamit.
Sumulat tayo ng query kung saan ipinapakita natin ang lahat ng empleyadong hindi natanggap noong 2015.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmer | 100,000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmer | 80,000 | 23 | 2013-08-12 |
3 | Ivanov Sergey | Tester | 40,000 | tatlumpu | 2014-01-01 |
6 | Vaska | pusa | 1,000 | 3 | 2018-01-01 |
3.2 Mga lohikal na operasyon AT, O, HINDI
Maaari mo ring WHERE
gamitin ang mga lohikal na operasyon AND
, OR
at NOT
. At ang mga ito ay nakasulat nang eksakto tulad ng inilarawan ko dito. Wala &&
, ||
o!
Sumulat tayo ng SQL query kung saan pipili tayo ng mga empleyado na higit sa 20 taong gulang at tumatanggap ng suweldo na mas mababa sa 50K.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
3 | Ivanov Sergey | Tester | 40,000 | tatlumpu | 2014-01-01 |
5 | Kirienko Anastasia | Tagapamahala ng Opisina | 40,000 | 25 | 2015-10-10 |
Masyadong madali. Sumulat tayo ng isang query kung saan pipili tayo ng mga empleyado na tumatanggap ng higit sa 100K at hindi nagtatrabaho bilang isang direktor:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Директор'
Dito namin partikular !=
na ginamit ang operator sa halip na ang simbolo NOT
.
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmer | 100,000 | 25 | 2012-06-30 |
3.3 PAGITAN: hanay ng halaga
Gayundin sa SQL mayroong isang espesyal na operator BETWEEN
kung saan maaari mong suriin kung ang isang variable ay nasa pagitan ng dalawang halaga. Ginagamit ang operator na ito sa loob ng mga boolean na expression. Ang pangkalahatang anyo ng naturang operator ay:
variable BETWEEN bottom line AND top_bound
Sa kasong ito, hindi tulad ng wikang Java, ang parehong ibaba at itaas na mga hangganan ay kasama sa pinapayagang pagitan.
Sumulat tayo ng isang halimbawa kung saan pinipili natin ang lahat ng empleyado na may suweldo mula 40K hanggang 100K. Ang kahilingan ay magiging ganito:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmer | 100,000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmer | 80,000 | 23 | 2013-08-12 |
3 | Ivanov Sergey | Tester | 40,000 | tatlumpu | 2014-01-01 |
5 | Kirienko Anastasia | Tagapamahala ng Opisina | 40,000 | 25 | 2015-10-10 |
BETWEEN
Sinusuportahan ng operator hindi lamang ang mga uri ng numero, kundi pati na rin ang mga petsa at maging ang mga uri ng string . Sa kaso ng pagtatrabaho sa mga string, ginagamit ang lexicographic order: ang aaba ay nauuna sa aabb
3.4 IN: listahan ng mga halaga
Bilang karagdagan, ang SQL ay may isang espesyal na operator IN
kung saan maaari mong suriin kung ang isang variable ay nakapaloob sa tinukoy na listahan. Ginagamit ang operator na ito sa loob ng mga boolean na expression. Ang pangkalahatang anyo ng naturang operator ay:
variable IN (value 1 , value 2 , ... value N)
Sumulat tayo ng query kung saan pipili tayo ng mga empleyado na 20, 25 o 30 taong gulang. Ang kahilingan ay magiging ganito:
SELECT * FROM employee WHERE age IN (20, 25, 30)
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmer | 100,000 | 25 | 2012-06-30 |
3 | Ivanov Sergey | Tester | 40,000 | tatlumpu | 2014-01-01 |
5 | Kirienko Anastasia | Tagapamahala ng Opisina | 40,000 | 25 | 2015-10-10 |
At ngayon magsulat tayo ng query, kung saan, sa kabaligtaran, pipili tayo ng mga empleyado na ang edad ay не
20, 25 o 30. Ang query ay magmumukhang:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
2 | Petrov Petr | Programmer | 80,000 | 23 | 2013-08-12 |
4 | Rabinovich Moisha | Direktor | 200,000 | 35 | 2015-05-12 |
6 | Vaska | pusa | 1,000 | 3 | 2018-01-01 |
Lahat ay gumana tulad ng inaasahan. kagandahan.
3.5 KATULAD: pattern ng string
At sa wakas, isa pang mahalaga at madalas na ginagamit na operator - LIKE
. Ginagamit ito kapag naghahambing ng mga string. Maaari itong magamit upang magtakda ng pattern ng string. Ginagamit ang operator na ito sa loob ng mga boolean na expression. Ang pangkalahatang anyo ng naturang operator ay:
variable LIKE 'sample'
Maaaring gamitin ang mga espesyal na character sa pattern: %
at _
.
- Ang ibig sabihin ng underscore ay anumang karakter, palaging 1 pc.
- Ang porsyento ay nangangahulugang anumang karakter at anumang bilang ng beses (kabilang ang 0 beses).
Sumulat tayo ng isang query na pipili sa lahat ng mga tao na ang apelyido ay nagsisimula sa titik na "I". Ang kahilingan ay magiging ganito:
SELECT * FROM employee WHERE name LIKE 'И%'
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmer | 100,000 | 25 | 2012-06-30 |
3 | Ivanov Sergey | Tester | 40,000 | tatlumpu | 2014-01-01 |
Ngayon gawing kumplikado ang gawain - ang pangalan ay dapat maglaman ng "o" at ang pangalan ay dapat magtapos sa "a". Ang kahilingan ay magiging ganito:
SELECT * FROM employee WHERE name LIKE '%o%a'
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Direktor | 200,000 | 35 | 2015-05-12 |
Okay, gawin nating medyo mahirap. I-filter natin ang lahat ng empleyado na ang edad ay nagsisimula sa numerong "3". Ang kahilingan ay magiging ganito:
SELECT * FROM employee WHERE age LIKE '3%'
At makuha namin ang sumusunod na resulta ng query:
id | pangalan | hanapbuhay | suweldo | edad | Sumali sa date |
---|---|---|---|---|---|
3 | Ivanov Sergey | Tester | 40,000 | tatlumpu | 2014-01-01 |
4 | Rabinovich Moisha | Direktor | 200,000 | 35 | 2015-05-12 |
6 | Vaska | pusa | 1,000 | 3 | 2018-01-01 |
Sa pamamagitan ng paraan, ang aming hanay ng edadint
ay uri , kaya LIKE
ito ay gumagana hindi lamang sa mga string. Ano ang hindi maaaring ngunit magalak.
GO TO FULL VERSION