3.1 Waarden vergelijken: <, >, =, <>
Een van de meest voorkomende trefwoorden die worden gebruikt bij het schrijven van SQL-query's is de WHERE
. Met zijn hulp vertellen we MySQL welke tabelrijen we willen filteren (selecteren).
Na het trefwoord WHERE
kunt u zeer complexe en lastige voorwaarden schrijven. Dus welke bewerkingen kan deze voorwaarde bevatten?
Exploitant | Beschrijving | Voorbeeld |
---|---|---|
< | Minder | salaris < 40000 |
> | Meer | salaris > 100000 |
<= | Minder of gelijk | leeftijd <= 25 |
>= | Meer of gelijk | leeftijd >= 18 |
= | gelijk aan | beroep = 'Programmeur' |
<>, != | Niet gelijk | Jaar(lid_datum) != 2015 |
In tegenstelling tot de Java-taal wordt hier voor strikte gelijkheid één is-teken gebruikt, en niet twee .
Wil je controleren of de waarden niet gelijk zijn, dan kan dat op twee manieren: <>
ofwel !=
De eerste benadering wordt gebruikt in talen als Pascal, de tweede is typerend voor talen als C++ en Java.
Voor toewijzing in SQL wordt het gebruikt :=
zoals in Pascal, maar de toewijzing zelf wordt zeer zelden gebruikt.
Laten we een query schrijven waarin we alle werknemers weergeven die in 2015 niet zijn aangenomen.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmeur | 100.000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmeur | 80.000 | 23 | 2013-08-12 |
3 | Ivanov Sergej | Tester | 40.000 | dertig | 01-01-2014 |
6 | Vaska | kat | 1.000 | 3 | 2018-01-01 |
3.2 Logische bewerkingen EN, OF, NIET
U kunt ook WHERE
de logische bewerkingen AND
, OR
en gebruiken NOT
. En ze zijn precies geschreven zoals ik ze hier heb beschreven. Geen &&
, ||
of!
Laten we een SQL-query schrijven waarbij we werknemers selecteren die ouder zijn dan 20 jaar en een salaris ontvangen van minder dan 50K.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
3 | Ivanov Sergej | Tester | 40.000 | dertig | 01-01-2014 |
5 | Kirienko Anastasia | Officemanager | 40.000 | 25 | 2015-10-10 |
Te makkelijk. Laten we een query schrijven waarbij we werknemers selecteren die meer dan 100.000 ontvangen en niet als directeur werken:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Hier hebben we specifiek !=
de operator gebruikt in plaats van het symbool NOT
.
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmeur | 100.000 | 25 | 2012-06-30 |
3.3 TUSSEN: waardebereik
Ook in SQL is er een speciale operator BETWEEN
waarmee je kunt controleren of een variabele tussen twee waarden ligt. Deze operator wordt gebruikt in booleaanse uitdrukkingen. De algemene vorm van zo'n operator is:
variable BETWEEN bottom line AND top_bound
In dit geval zijn, in tegenstelling tot de Java-taal, zowel de onder- als de bovengrens opgenomen in het toegestane interval.
Laten we een voorbeeld schrijven waarin we alle werknemers selecteren met een salaris van 40.000 tot 100.000. Het verzoek ziet er als volgt uit:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmeur | 100.000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmeur | 80.000 | 23 | 2013-08-12 |
3 | Ivanov Sergej | Tester | 40.000 | dertig | 01-01-2014 |
5 | Kirienko Anastasia | Officemanager | 40.000 | 25 | 2015-10-10 |
De operator BETWEEN
ondersteunt niet alleen numerieke typen, maar ook datums en zelfs tekenreekstypen . Bij het werken met strings wordt de lexicografische volgorde gebruikt: aaba komt voor aabb
3.4 IN: lijst met waarden
Daarnaast heeft SQL een speciale operator IN
waarmee je kunt controleren of een variabele in de opgegeven lijst voorkomt. Deze operator wordt gebruikt in booleaanse uitdrukkingen. De algemene vorm van zo'n operator is:
variable IN (value 1 , value 2 , ... value N)
Laten we een query schrijven waarin we werknemers selecteren die 20, 25 of 30 jaar oud zijn. Het verzoek ziet er als volgt uit:
SELECT * FROM employee WHERE age IN (20, 25, 30)
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmeur | 100.000 | 25 | 2012-06-30 |
3 | Ivanov Sergej | Tester | 40.000 | dertig | 01-01-2014 |
5 | Kirienko Anastasia | Officemanager | 40.000 | 25 | 2015-10-10 |
En laten we nu een query schrijven, waarbij we daarentegen werknemers selecteren van not
20, 25 of 30 jaar. De query ziet er als volgt uit:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
2 | Petrov Petr | Programmeur | 80.000 | 23 | 2013-08-12 |
4 | Rabinovich Moisha | Regisseur | 200.000 | 35 | 2015-05-12 |
6 | Vaska | kat | 1.000 | 3 | 2018-01-01 |
Alles werkte zoals verwacht. Schoonheid.
3.5 LIKE: stringpatroon
En tot slot nog een belangrijke en veelgebruikte operator - LIKE
. Het wordt gebruikt bij het vergelijken van strings. Het kan worden gebruikt om een tekenreekspatroon in te stellen. Deze operator wordt gebruikt in booleaanse uitdrukkingen. De algemene vorm van zo'n operator is:
variable LIKE 'sample'
In het patroon kunnen speciale tekens worden gebruikt: %
en _
.
- Underscore betekent elk teken, altijd 1 st.
- Percentage betekent elk teken en elk aantal keren (inclusief 0 keer).
Laten we een query schrijven die alle mensen selecteert waarvan de achternaam begint met de letter "I". Het verzoek ziet er als volgt uit:
SELECT * FROM employee WHERE name LIKE 'I%'
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmeur | 100.000 | 25 | 2012-06-30 |
3 | Ivanov Sergej | Tester | 40.000 | dertig | 01-01-2014 |
Laten we de taak nu ingewikkelder maken - de naam moet "o" bevatten en de naam moet eindigen op "a". Het verzoek ziet er als volgt uit:
SELECT * FROM employee WHERE name LIKE '%o%a'
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Regisseur | 200.000 | 35 | 2015-05-12 |
Oké, laten we het wat moeilijker maken. Laten we alle werknemers eruit filteren van wie de leeftijd begint met het cijfer "3". Het verzoek ziet er als volgt uit:
SELECT * FROM employee WHERE age LIKE '3%'
En we krijgen het volgende zoekresultaat:
ID kaart | naam | bezigheid | salaris | leeftijd | join_date |
---|---|---|---|---|---|
3 | Ivanov Sergej | Tester | 40.000 | dertig | 01-01-2014 |
4 | Rabinovich Moisha | Regisseur | 200.000 | 35 | 2015-05-12 |
6 | Vaska | kat | 1.000 | 3 | 2018-01-01 |
Trouwens, onze leeftijdskolom is van het type , dus het werkt niet alleen met strings. Wat kan niet anders dan zich verheugen.int
LIKE
GO TO FULL VERSION