CodeGym /Java Course /All lectures for NL purposes /WHERE: voorwaarden in SQL-query's

WHERE: voorwaarden in SQL-query's

All lectures for NL purposes
Niveau 1 , Les 773
Beschikbaar

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 WHEREkunt 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 WHEREde logische bewerkingen AND, ORen 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 BETWEENwaarmee 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 BETWEENondersteunt 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 INwaarmee 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 not20, 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.intLIKE

Opmerkingen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION