3.1 Jämföra värden: <, >, =, <>
Ett av de vanligaste nyckelorden som används när du skriver SQL-frågor är WHERE
. Det är med dess hjälp som vi talar om för MySQL vilka tabellrader vi vill filtrera (välj).
Efter nyckelordet WHERE
kan du skriva mycket komplexa och knepiga villkor. Så vilka operationer kan detta tillstånd innehålla?
Operatör | Beskrivning | Exempel |
---|---|---|
< | Mindre | lön <40 000 |
> | Mer | lön > 100 000 |
<= | Mindre eller lika | ålder <= 25 |
>= | Mer eller lika | ålder >= 18 |
= | Lika | yrke = 'Programmerare' |
<>, != | Inte jämnlikt | Year(join_date) != 2015 |
Till skillnad från Java-språket, för strikt likhet, används ett lika tecken här, och inte två .
Om du vill kontrollera att värdena inte är lika, kan detta göras på två sätt: <>
antingen !=
den första metoden används i språk som Pascal, den andra är typisk för språk som C ++ och Java.
För tilldelning i SQL används den :=
som i Pascal, men själva uppgiften används väldigt sällan.
Låt oss skriva en fråga där vi visar alla anställda som inte anställdes 2015.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmerare | 100 000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmerare | 80 000 | 23 | 2013-08-12 |
3 | Ivanov Sergey | Testare | 40 000 | trettio | 2014-01-01 |
6 | Vaska | katt | 1 000 | 3 | 2018-01-01 |
3.2 Logiska operationer OCH, ELLER, INTE
Du kan också WHERE
använda de logiska operationerna och AND
. Och de är skrivna precis som jag beskrev dem här. Inga , ellerOR
NOT
&&
||
!
Låt oss skriva en SQL-fråga där vi väljer ut anställda som är över 20 år och får en lön på mindre än 50K.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
3 | Ivanov Sergey | Testare | 40 000 | trettio | 2014-01-01 |
5 | Kirienko Anastasia | Kontors chef | 40 000 | 25 | 2015-10-10 |
Alltför lätt. Låt oss skriva en fråga där vi väljer anställda som får mer än 100 000 och inte arbetar som styrelseledamot:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Här !=
använde vi specifikt operatorn istället för symbolen NOT
.
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmerare | 100 000 | 25 | 2012-06-30 |
3.3 MELLAN: värdeintervall
Även i SQL finns en speciell operator BETWEEN
med vilken du kan kontrollera om en variabel ligger mellan två värden. Denna operator används i booleska uttryck. Den allmänna formen för en sådan operatör är:
variable BETWEEN bottom line AND top_bound
I det här fallet, till skillnad från Java-språket, ingår både de nedre och övre gränserna i det tillåtna intervallet.
Låt oss skriva ett exempel där vi väljer ut alla anställda med en lön från 40K till 100K. Förfrågan kommer att se ut så här:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmerare | 100 000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmerare | 80 000 | 23 | 2013-08-12 |
3 | Ivanov Sergey | Testare | 40 000 | trettio | 2014-01-01 |
5 | Kirienko Anastasia | Kontors chef | 40 000 | 25 | 2015-10-10 |
Operatören BETWEEN
stöder inte bara numeriska typer, utan även datum och till och med strängtyper . Vid arbete med strängar används den lexikografiska ordningen: aaba kommer före aabb
3.4 IN: lista över värden
Dessutom har SQL en speciell operator IN
med vilken du kan kontrollera om en variabel finns i den angivna listan. Denna operator används i booleska uttryck. Den allmänna formen för en sådan operatör är:
variable IN (value 1 , value 2 , ... value N)
Låt oss skriva en fråga där vi väljer ut anställda som är 20, 25 eller 30 år gamla. Förfrågan kommer att se ut så här:
SELECT * FROM employee WHERE age IN (20, 25, 30)
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmerare | 100 000 | 25 | 2012-06-30 |
3 | Ivanov Sergey | Testare | 40 000 | trettio | 2014-01-01 |
5 | Kirienko Anastasia | Kontors chef | 40 000 | 25 | 2015-10-10 |
Och låt oss nu skriva en fråga, där vi tvärtom väljer anställda vars ålder är not
20, 25 eller 30. Frågan kommer att se ut så här:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
2 | Petrov Petr | Programmerare | 80 000 | 23 | 2013-08-12 |
4 | Rabinovich Moisha | Direktör | 200 000 | 35 | 2015-05-12 |
6 | Vaska | katt | 1 000 | 3 | 2018-01-01 |
Allt fungerade som förväntat. Skönhet.
3.5 GILLA: strängmönster
Och slutligen en annan viktig och mycket ofta använd operatör - LIKE
. Det används när man jämför strängar. Den kan användas för att ställa in ett strängmönster. Denna operator används i booleska uttryck. Den allmänna formen för en sådan operatör är:
variable LIKE 'sample'
Specialtecken kan användas i mönstret: %
och _
.
- Understreck betyder valfri karaktär, alltid 1 st.
- Procent betyder vilket tecken som helst och hur många gånger som helst (inklusive 0 gånger).
Låt oss skriva en fråga som kommer att välja alla personer vars efternamn börjar med bokstaven "I". Förfrågan kommer att se ut så här:
SELECT * FROM employee WHERE name LIKE 'I%'
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmerare | 100 000 | 25 | 2012-06-30 |
3 | Ivanov Sergey | Testare | 40 000 | trettio | 2014-01-01 |
Låt oss nu komplicera uppgiften - namnet ska innehålla "o" och namnet ska sluta med "a". Förfrågan kommer att se ut så här:
SELECT * FROM employee WHERE name LIKE '%o%a'
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Direktör | 200 000 | 35 | 2015-05-12 |
Okej, låt oss göra det lite svårare. Låt oss filtrera bort alla anställda vars ålder börjar med siffran "3". Förfrågan kommer att se ut så här:
SELECT * FROM employee WHERE age LIKE '3%'
Och vi får följande frågeresultat:
id | namn | ockupation | lön | ålder | join_date |
---|---|---|---|---|---|
3 | Ivanov Sergey | Testare | 40 000 | trettio | 2014-01-01 |
4 | Rabinovich Moisha | Direktör | 200 000 | 35 | 2015-05-12 |
6 | Vaska | katt | 1 000 | 3 | 2018-01-01 |
Vår ålderskolumn är förresten av typen , så den fungerar inte bara med strängar . Vad kan inte annat än glädjas.int
LIKE
GO TO FULL VERSION