3.1 Sammenligning af værdier: <, >, =, <>

Et af de mest almindelige nøgleord, der bruges, når du skriver SQL-forespørgsler, er WHERE. Det er med dens hjælp, at vi fortæller MySQL, hvilke tabelrækker vi vil filtrere (vælg).

Efter søgeordet WHEREkan du skrive meget komplekse og vanskelige forhold. Så hvilke operationer kan denne tilstand indeholde?

Operatør Beskrivelse Eksempel
< Mindre løn <40.000
> Mere løn > 100.000
<= Mindre eller lige alder <= 25
>= Mere eller lige alder >= 18 år
= Lige med erhverv = 'Programmer'
<>, != Ikke lige Year(join_date) != 2015

I modsætning til Java-sproget, for streng lighed, bruges et lig tegn her, og ikke to .

Hvis du vil kontrollere, at værdierne ikke er ens, så kan dette gøres på to måder: <>enten !=den første tilgang bruges i sprog som Pascal, den anden er typisk for sprog som C ++ og Java.

Til opgave i SQL bruges den :=som i Pascal, men selve opgaven bruges meget sjældent.

Lad os skrive en forespørgsel, hvor vi viser alle de medarbejdere, der ikke blev ansat i 2015.


SELECT * FROM employee WHERE YEAR(join_date) != 2015
        

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_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 tredive 2014-01-01
6 Vaska kat 1.000 3 2018-01-01

3.2 Logiske operationer OG, ELLER, IKKE

Du kan også bruge WHEREde logiske operationer ANDog OR. NOTOg de er skrevet præcis som jeg har beskrevet dem her. Ingen &&, ||eller!

Lad os skrive en SQL-forespørgsel, hvor vi udvælger medarbejdere, der er over 20 år og modtager en løn på under 50K.


SELECT * FROM employee WHERE age > 20 AND salary < 50000
        

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
3 Ivanov Sergey Tester 40.000 tredive 2014-01-01
5 Kirienko Anastasia Kontorchef 40.000 25 2015-10-10

For nemt. Lad os skrive en forespørgsel, hvor vi udvælger medarbejdere, der modtager mere end 100.000 og ikke arbejder som direktør:


SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
        

Her !=brugte vi specifikt operatoren i stedet for symbolet NOT.

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
1 Ivanov Ivan Programmer 100.000 25 2012-06-30

3.3 MELLEM: værdiområde

Også i SQL er der en speciel operator BETWEEN, hvormed du kan kontrollere, om en variabel ligger mellem to værdier. Denne operator bruges i booleske udtryk. Den generelle form for en sådan operatør er:


variable BETWEEN bottom line AND top_bound
        

I dette tilfælde, i modsætning til Java-sproget, er både de nedre og øvre grænser inkluderet i det tilladte interval.

Lad os skrive et eksempel, hvor vi udvælger alle medarbejdere med en løn fra 40K til 100K. Anmodningen vil se sådan ud:

SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_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 tredive 2014-01-01
5 Kirienko Anastasia Kontorchef 40.000 25 2015-10-10

Operatøren BETWEENunderstøtter ikke kun numeriske typer, men også datoer og endda strengtyper . Ved arbejde med strenge bruges den leksikografiske rækkefølge: aaba kommer før aabb

3.4 IN: liste over værdier

Derudover har SQL en speciel operator, INmed hvilken du kan kontrollere, om en variabel er indeholdt i den angivne liste. Denne operator bruges i booleske udtryk. Den generelle form for en sådan operatør er:

variable IN (value 1 , value 2 , ... value N)

Lad os skrive en forespørgsel, hvor vi udvælger medarbejdere, der er 20, 25 eller 30 år. Anmodningen vil se sådan ud:

SELECT * FROM employee WHERE age IN (20, 25, 30)

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
1 Ivanov Ivan Programmer 100.000 25 2012-06-30
3 Ivanov Sergey Tester 40.000 tredive 2014-01-01
5 Kirienko Anastasia Kontorchef 40.000 25 2015-10-10

Og lad os nu skrive en forespørgsel, hvor vi tværtimod udvælger medarbejdere, hvis alder er not20, 25 eller 30. Forespørgslen vil se sådan ud:

SELECT * FROM employee WHERE age NOT IN (20, 25, 30)

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
2 Petrov Petr Programmer 80.000 23 2013-08-12
4 Rabinovich Moisha Direktør 200.000 35 2015-05-12
6 Vaska kat 1.000 3 2018-01-01

Alt fungerede som forventet. Skønhed.

3.5 LIKE: snoremønster

Og endelig en anden vigtig og meget ofte brugt operatør - LIKE. Det bruges, når man sammenligner strenge. Den kan bruges til at sætte et strengmønster. Denne operator bruges i booleske udtryk. Den generelle form for en sådan operatør er:

variable LIKE 'sample'

Specialtegn kan bruges i mønsteret: %og _.

  • Understregning betyder ethvert tegn, altid 1 stk.
  • Procent betyder et hvilket som helst tegn og et hvilket som helst antal gange (inklusive 0 gange).

Lad os skrive en forespørgsel, der vil vælge alle personer, hvis efternavn begynder med bogstavet "I". Anmodningen vil se sådan ud:

SELECT * FROM employee WHERE name LIKE 'I%'

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
1 Ivanov Ivan Programmer 100.000 25 2012-06-30
3 Ivanov Sergey Tester 40.000 tredive 2014-01-01

Lad os nu komplicere opgaven - navnet skal indeholde "o", og navnet skal slutte med "a". Anmodningen vil se sådan ud:

SELECT * FROM employee WHERE name LIKE '%o%a'

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
4 Rabinovich Moisha Direktør 200.000 35 2015-05-12

Okay, lad os gøre det lidt sværere. Lad os filtrere alle medarbejdere fra, hvis alder starter med tallet "3". Anmodningen vil se sådan ud:

SELECT * FROM employee WHERE age LIKE '3%'

Og vi får følgende forespørgselsresultat:

id navn beskæftigelse løn alder join_date
3 Ivanov Sergey Tester 40.000 tredive 2014-01-01
4 Rabinovich Moisha Direktør 200.000 35 2015-05-12
6 Vaska kat 1.000 3 2018-01-01

Vores alderskolonne er i øvrigt af typen , så den fungerer ikke kun med strenge . Hvad kan ikke andet end at glæde sig.intLIKE