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, WHEREmaaari 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 WHEREgamitin ang mga lohikal na operasyon AND, ORat 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 = 'Director'
        

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 BETWEENkung 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

BETWEENSinusuportahan 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 INkung 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 not20, 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 'I%'

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 LIKEito ay gumagana hindi lamang sa mga string. Ano ang hindi maaaring ngunit magalak.