3.1 Confronto dei valori: <, >, =, <>
Una delle parole chiave più comuni utilizzate durante la scrittura di query SQL è l'estensione WHERE
. È con il suo aiuto che diciamo a MySQL quali righe della tabella vogliamo filtrare (selezionare).
Dopo la parola chiave, WHERE
puoi scrivere condizioni molto complesse e complicate. Quindi quali operazioni può contenere questa condizione?
Operatore | Descrizione | Esempio |
---|---|---|
< | Meno | stipendio < 40000 |
> | Di più | stipendio > 100000 |
<= | Minore o uguale | età <= 25 |
>= | Più o uguale | età >= 18 |
= | Equivale | occupazione = 'Programmatore' |
<>, != | Non uguale | Anno(join_date) != 2015 |
A differenza del linguaggio Java, per stretta uguaglianza, qui viene utilizzato un carattere uguale e non due .
Se vuoi verificare che i valori non siano uguali, puoi farlo in due modi: <>
o !=
Il primo approccio è utilizzato in linguaggi come Pascal, il secondo è tipico di linguaggi come C ++ e Giava.
Per l'assegnazione in SQL, viene utilizzato :=
come in Pascal, ma l'assegnazione stessa viene utilizzata molto raramente.
Scriviamo una query in cui mostriamo tutti i dipendenti che non sono stati assunti nel 2015.
SELECT * FROM employee WHERE YEAR(join_date) != 2015
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmatore | 100.000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmatore | 80.000 | 23 | 2013-08-12 |
3 | Sergej Ivanov | Tester | 40.000 | trenta | 2014-01-01 |
6 | Vasca | gatto | 1.000 | 3 | 2018-01-01 |
3.2 Operazioni logiche AND, OR, NOT
È inoltre possibile WHERE
utilizzare le operazioni logiche AND
e OR
. NOT
E sono scritti esattamente come li ho descritti qui. Nessuno &&
, ||
o!
Scriviamo una query SQL in cui selezioniamo dipendenti che hanno più di 20 anni e ricevono uno stipendio inferiore a 50.000.
SELECT * FROM employee WHERE age > 20 AND salary < 50000
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
3 | Sergej Ivanov | Tester | 40.000 | trenta | 2014-01-01 |
5 | Kirienko Anastasia | Capo ufficio | 40.000 | 25 | 2015-10-10 |
Troppo facile. Scriviamo una query in cui selezioniamo i dipendenti che ricevono più di 100.000 e non lavorano come direttore:
SELECT * FROM employee WHERE salary >= 100000 AND NOT occupation = 'Director'
Qui abbiamo !=
usato specificamente l'operatore al posto del simbolo NOT
.
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmatore | 100.000 | 25 | 2012-06-30 |
3.3 TRA: intervallo di valori
Anche in SQL esiste un operatore speciale BETWEEN
con il quale è possibile verificare se una variabile si trova tra due valori. Questo operatore viene utilizzato all'interno delle espressioni booleane. La forma generale di un tale operatore è:
variable BETWEEN bottom line AND top_bound
In questo caso, a differenza del linguaggio Java, sia il limite inferiore che quello superiore sono inclusi nell'intervallo consentito.
Scriviamo un esempio in cui selezioniamo tutti i dipendenti con uno stipendio da 40K a 100K. La richiesta sarà simile a:
SELECT * FROM employee WHERE salary BETWEEN 40000 AND 100000
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmatore | 100.000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programmatore | 80.000 | 23 | 2013-08-12 |
3 | Sergej Ivanov | Tester | 40.000 | trenta | 2014-01-01 |
5 | Kirienko Anastasia | Capo ufficio | 40.000 | 25 | 2015-10-10 |
L'operatore BETWEEN
supporta non solo i tipi numerici, ma anche le date e persino i tipi di stringa . Nel caso di lavorare con le stringhe, viene utilizzato l'ordine lessicografico: aaba viene prima di aabb
3.4 IN: lista di valori
Inoltre, SQL dispone di un operatore speciale IN
con il quale è possibile verificare se una variabile è contenuta nell'elenco specificato. Questo operatore viene utilizzato all'interno delle espressioni booleane. La forma generale di un tale operatore è:
variable IN (value 1 , value 2 , ... value N)
Scriviamo una query in cui selezioniamo dipendenti che hanno 20, 25 o 30 anni. La richiesta sarà simile a:
SELECT * FROM employee WHERE age IN (20, 25, 30)
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmatore | 100.000 | 25 | 2012-06-30 |
3 | Sergej Ivanov | Tester | 40.000 | trenta | 2014-01-01 |
5 | Kirienko Anastasia | Capo ufficio | 40.000 | 25 | 2015-10-10 |
E ora scriviamo una query, dove, al contrario, selezioniamo dipendenti la cui età è not
20, 25 o 30. La query sarà simile a:
SELECT * FROM employee WHERE age NOT IN (20, 25, 30)
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
2 | Petrov Petr | Programmatore | 80.000 | 23 | 2013-08-12 |
4 | Rabinovich Moisha | Direttore | 200.000 | 35 | 2015-05-12 |
6 | Vasca | gatto | 1.000 | 3 | 2018-01-01 |
Tutto ha funzionato come previsto. Bellezza.
3,5 MI PIACE: schema corde
E infine, un altro operatore importante e molto utilizzato - LIKE
. Viene utilizzato quando si confrontano stringhe. Può essere utilizzato per impostare uno schema corde. Questo operatore viene utilizzato all'interno delle espressioni booleane. La forma generale di un tale operatore è:
variable LIKE 'sample'
I caratteri speciali possono essere utilizzati nel modello: %
e _
.
- Il trattino basso indica qualsiasi carattere, sempre 1 pz.
- Percentuale indica qualsiasi carattere e qualsiasi numero di volte (compreso 0 volte).
Scriviamo una query che selezionerà tutte le persone il cui cognome inizia con la lettera "I". La richiesta sarà simile a:
SELECT * FROM employee WHERE name LIKE 'I%'
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
1 | Ivanov Ivan | Programmatore | 100.000 | 25 | 2012-06-30 |
3 | Sergej Ivanov | Tester | 40.000 | trenta | 2014-01-01 |
Ora complichiamo il compito: il nome dovrebbe contenere "o" e il nome dovrebbe terminare con "a". La richiesta sarà simile a:
SELECT * FROM employee WHERE name LIKE '%o%a'
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
4 | Rabinovich Moisha | Direttore | 200.000 | 35 | 2015-05-12 |
Ok, rendiamolo un po' più difficile. Filtriamo tutti i dipendenti la cui età inizia con il numero "3". La richiesta sarà simile a:
SELECT * FROM employee WHERE age LIKE '3%'
E otteniamo il seguente risultato della query:
id | nome | occupazione | stipendio | età | data di iscrizione |
---|---|---|---|---|---|
3 | Sergej Ivanov | Tester | 40.000 | trenta | 2014-01-01 |
4 | Rabinovich Moisha | Direttore | 200.000 | 35 | 2015-05-12 |
6 | Vasca | gatto | 1.000 | 3 | 2018-01-01 |
A proposito, la nostra colonna etàint
è di tipo , quindi LIKE
funziona non solo con le stringhe. Cosa non può che rallegrarsi.