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 WHERE
kan 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 WHERE
logiske operasjonene AND
og OR
. NOT
Og 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 BETWEEN
som 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 BETWEEN
stø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 IN
som 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å not
20, 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.int
LIKE
GO TO FULL VERSION