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 WHEREkan 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å WHEREanvända de logiska operationerna och AND. Och de är skrivna precis som jag beskrev dem här. Inga , ellerORNOT&&||!

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 BETWEENmed 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 BETWEENstö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 INmed 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 not20, 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.intLIKE