3.1 Sammenligning av verdier: <, >, =, <>

Et av de vanligste søkeordene som brukes når du skriver SQL-spørringer, er WHERE. Det er med dens hjelp vi forteller MySQL hvilke tabellrader vi vil filtrere (velg).

Etter nøkkelordet WHEREkan du skrive svært komplekse og vanskelige forhold. Så hvilke operasjoner kan denne tilstanden inneholde?

Operatør Beskrivelse Eksempel
< Mindre lønn < 40 000
> Mer lønn > 100 000
<= Mindre eller lik alder <= 25
>= Mer eller lik alder >= 18 år
= Er lik yrke = 'Programmer'
<>, != Ikke lik Year(join_date) != 2015

I motsetning til Java-språket, for streng likhet, brukes ett lik tegn her, og ikke to .

Hvis du vil sjekke at verdiene ikke er like, kan dette gjøres på to måter: <>enten !=den første tilnærmingen brukes i språk som Pascal, den andre er typisk for språk som C ++ og Java.

For oppgave i SQL brukes den :=som i Pascal, men selve oppgaven brukes svært sjelden.

La oss skrive en spørring der vi viser alle de ansatte som ikke ble ansatt i 2015.


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

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
1 Ivanov Ivan Programmerer 100 000 25 2012-06-30
2 Petrov Petr Programmerer 80 000 23 2013-08-12
3 Ivanov Sergey Tester 40 000 tretti 2014-01-01
6 Vaska katt 1000 3 2018-01-01

3.2 Logiske operasjoner OG, ELLER, IKKE

Du kan også bruke de WHERElogiske operasjonene ANDog OR. NOTOg de er skrevet akkurat slik jeg beskrev dem her. Ingen &&, ||eller!

La oss skrive en SQL-spørring der vi velger ut ansatte som er over 20 år og mottar en lønn på under 50K.


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

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
3 Ivanov Sergey Tester 40 000 tretti 2014-01-01
5 Kirienko Anastasia Kontorsjef 40 000 25 2015-10-10

For enkelt. La oss skrive en forespørsel der vi velger ansatte som mottar mer enn 100 000 og ikke jobber som direktør:


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

Her !=brukte vi spesifikt operatoren i stedet for symbolet NOT.

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
1 Ivanov Ivan Programmerer 100 000 25 2012-06-30

3.3 MELLOM: verdiområde

Også i SQL er det en spesiell operator BETWEENsom du kan kontrollere om en variabel ligger mellom to verdier. Denne operatoren brukes i boolske uttrykk. Den generelle formen for en slik operatør er:


variable BETWEEN bottom line AND top_bound
        

I dette tilfellet, i motsetning til Java-språket, er både de nedre og øvre grensene inkludert i det tillatte intervallet.

La oss skrive et eksempel der vi velger ut alle ansatte med lønn fra 40K til 100K. Forespørselen vil se slik ut:

SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
1 Ivanov Ivan Programmerer 100 000 25 2012-06-30
2 Petrov Petr Programmerer 80 000 23 2013-08-12
3 Ivanov Sergey Tester 40 000 tretti 2014-01-01
5 Kirienko Anastasia Kontorsjef 40 000 25 2015-10-10

Operatøren BETWEENstøtter ikke bare numeriske typer, men også datoer og til og med strengtyper . Ved arbeid med strenger brukes den leksikografiske rekkefølgen: aaba kommer foran aabb

3.4 IN: liste over verdier

I tillegg har SQL en spesiell operator INsom du kan kontrollere om en variabel finnes i den angitte listen. Denne operatoren brukes i boolske uttrykk. Den generelle formen for en slik operatør er:

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

La oss skrive en forespørsel der vi velger ut ansatte som er 20, 25 eller 30 år. Forespørselen vil se slik ut:

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

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
1 Ivanov Ivan Programmerer 100 000 25 2012-06-30
3 Ivanov Sergey Tester 40 000 tretti 2014-01-01
5 Kirienko Anastasia Kontorsjef 40 000 25 2015-10-10

Og la oss nå skrive en spørring, der vi tvert imot velger ansatte som har en alder på not20, 25 eller 30 år. Spørringen vil se slik ut:

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

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
2 Petrov Petr Programmerer 80 000 23 2013-08-12
4 Rabinovich Moisha Regissør 200 000 35 2015-05-12
6 Vaska katt 1000 3 2018-01-01

Alt fungerte som forventet. Skjønnhet.

3.5 LIKE: strengmønster

Og til slutt, en annen viktig og svært ofte brukt operatør - LIKE. Det brukes når du sammenligner strenger. Den kan brukes til å sette et strengmønster. Denne operatoren brukes i boolske uttrykk. Den generelle formen for en slik operatør er:

variable LIKE 'sample'

Spesialtegn kan brukes i mønsteret: %og _.

  • Understrek betyr et hvilket som helst tegn, alltid 1 stk.
  • Prosent betyr et hvilket som helst tegn og et hvilket som helst antall ganger (inkludert 0 ganger).

La oss skrive en spørring som vil velge alle personer hvis etternavn begynner med bokstaven "I". Forespørselen vil se slik ut:

SELECT * FROM employee WHERE name LIKE 'I%'

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
1 Ivanov Ivan Programmerer 100 000 25 2012-06-30
3 Ivanov Sergey Tester 40 000 tretti 2014-01-01

La oss nå komplisere oppgaven - navnet skal inneholde "o" og navnet skal slutte med "a". Forespørselen vil se slik ut:

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

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
4 Rabinovich Moisha Regissør 200 000 35 2015-05-12

Ok, la oss gjøre det litt vanskeligere. La oss filtrere ut alle ansatte hvis alder starter med tallet "3". Forespørselen vil se slik ut:

SELECT * FROM employee WHERE age LIKE '3%'

Og vi får følgende spørreresultat:

id Navn okkupasjon lønn alder join_date
3 Ivanov Sergey Tester 40 000 tretti 2014-01-01
4 Rabinovich Moisha Regissør 200 000 35 2015-05-12
6 Vaska katt 1000 3 2018-01-01

Alderskolonnen vår er forresten av typen , så den fungerer ikke bare med strenger . Hva kan ikke annet enn å glede seg.intLIKE