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 WHERE
kan 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 WHERE
de logiske operationer AND
og OR
. NOT
Og 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 BETWEEN
understø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, IN
med 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 not
20, 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.int
LIKE
GO TO FULL VERSION