Database
 sql >> Database >  >> RDS >> Database

12 Operatori SQL comunemente usati

In SQL, un operatore è un carattere speciale o una parola chiave che specifica un'azione eseguita su una o più espressioni.

Gli operatori SQL sono parte integrante di SQL e ci consentono di scrivere query che restituiscono risultati rilevanti.

In questo articolo, presento 12 degli operatori SQL più comunemente usati durante la scrittura di query SQL.

The Equals (= ) Operatore

L'operatore Uguale (= ) è probabilmente l'operatore più comunemente usato in SQL. Confronta l'uguaglianza di due espressioni. Anche se hai una vaga familiarità con SQL, probabilmente conoscerai questo operatore.

Immagina di avere un database per un hotel per animali domestici e di voler ottenere informazioni su tutti gli animali domestici di nome Fluffy.

In tal caso, potremmo fare questo:

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy';

Risultato:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

La nostra query utilizza l'operatore Uguale (= ) per confrontare l'uguaglianza del valore di PetName colonna e la stringa Fluffy .

Nel nostro caso, possiamo vedere che l'hotel per animali domestici ha attualmente due animali chiamati Fluffy.

Il maggiore di (> ) Operatore

L'operatore Maggiore di (> ) confronta due espressioni e restituisce TRUE se l'operando di sinistra ha un valore maggiore dell'operando di destra; in caso contrario, il risultato è FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB > '2020-01-01';

Risultato:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

In questo caso, sta confrontando il valore del DOB colonna e la data 2020-01-01 per vedere se il DOB la colonna è maggiore.

Meno di (< ) Operatore

L'operatore Minore di (< ) fa il contrario. Confronta due espressioni e restituisce TRUE se l'operando di sinistra ha un valore inferiore all'operando di destra; in caso contrario, il risultato è FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB < '2020-01-01';

Risultato:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Il maggiore o uguale a (>= ) Operatore

L'operatore Maggiore di o Uguale a (>= ) confronta due espressioni e restituisce TRUE se l'operando di sinistra ha un valore maggiore o uguale all'operando di destra; in caso contrario, restituisce FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB >= '2020-09-17';

Risultato:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Nota che ha restituito 2020-09-17 e tutte le date maggiori di quella. Se avessimo utilizzato l'operatore Maggiore di (> ), sarebbero state restituite solo le prime due righe.

Il minore o uguale a (<= ) Operatore

L'operatore Minore di o Uguale a (<= ) confronta due espressioni e restituisce TRUE se l'operando di sinistra ha un valore inferiore o uguale all'operando di destra; in caso contrario, il risultato è FALSE .

SELECT PetName, DOB 
FROM Pets
WHERE DOB <= '2020-09-17';

Risultato:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Nota che ha restituito 2020-09-17 e tutte le date inferiori a quella. Se avessimo utilizzato l'operatore Minore di (< ), sarebbero state restituite solo le prime tre righe.

Il AND Operatore

Il AND combina due espressioni booleane e restituisce TRUE quando entrambe le espressioni sono TRUE .

Ecco un esempio.

SELECT PetId, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
AND DOB > '2020-01-01';

Risultato:

+---------+------------+
| PetId   | DOB        |
|---------+------------|
| 1       | 2020-11-20 |
| 6       | 2020-09-17 |
+---------+------------+

In questo caso, otteniamo solo i dettagli degli animali domestici il cui nome è Fluffy e la loro data di nascita è compresa tra le due date.

Il OR Operatore

Il OR combina due espressioni booleane e restituisce TRUE quando una delle condizioni è TRUE .

Ecco un esempio.

SELECT 
    PetId, 
    PetName,
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' OR PetName = 'Bark';

Risultato:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Questo è fondamentalmente l'opposto di AND operatore. Se avessimo usato AND , nessuna riga sarebbe stata restituita, perché non possiamo avere due valori diversi in una colonna contemporaneamente.

Il BETWEEN Operatore

Il BETWEEN operatore ci consente di specificare un intervallo da testare. Ad esempio, possiamo usarlo per restituire animali nati tra due date.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

Risultato:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
+-----------+------------+

Il NOT Operatore

Il NOT nega un input booleano (inverte il valore di qualsiasi espressione booleana). Quindi restituisce TRUE quando l'espressione è FALSE .

Ecco cosa succede quando aggiungiamo NOT operatore al nostro esempio precedente.

SELECT
    PetName,
    DOB
FROM Pets
WHERE DOB NOT BETWEEN '2018-01-01' AND '2020-01-01';

Risultato:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
+-----------+------------+

Questa volta abbiamo preso tutti gli altri animali domestici, gli animali domestici che non erano nato tra quelle date.

In MariaDB, NOT si limita a negare il IN , BETWEEN e EXISTS clausole. La maggior parte degli altri DBMS consente NOT per negare qualsiasi espressione.

Il IN Operatore

Il IN determina se un valore specificato corrisponde a qualsiasi valore in una sottoquery o in un elenco.

Ecco un esempio.

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

Risultato:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 4       | Wag       | 2020-03-15 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
+---------+-----------+------------+

Potremmo ottenere lo stesso risultato usando due OR operatori:

SELECT 
    PetId, 
    PetName, 
    DOB 
FROM Pets
WHERE PetName = 'Fluffy' 
    OR PetName = 'Bark' 
    OR PetName = 'Wag';

Tuttavia, il IN operatore è un modo più conciso per farlo. Il IN operatore è particolarmente utile quando si dispone di un lungo elenco di valori con cui confrontare.

Il IN l'operatore viene quasi sempre eseguito più velocemente di più OR operatori, soprattutto su set di dati più grandi.

Un altro vantaggio del IN operatore, è che può contenere un altro SELECT elenco. Questa è nota come subquery . Una sottoquery è una query nidificata all'interno di un'altra query (o anche di un'altra sottoquery).

Ecco un esempio.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Risultato:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

Questo esempio ci mostra quanti tipi di animali sono presenti nel nostro hotel per animali domestici.

Potremmo usare il NOT operatore per capovolgerlo e vedere quanti tipi di animali non sono nel nostro hotel per animali domestici.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId NOT IN ( SELECT PetTypeId FROM Pets );

Risultato:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 4           | Rabbit    |
+-------------+-----------+

Quindi il nostro database contiene un tipo di animale domestico di Rabbit , ma al momento non abbiamo conigli come animali domestici.

Il + e || Operatori di concatenazione di stringhe

Il + e || Gli operatori di concatenazione di stringhe consentono di concatenare le stringhe. La concatenazione di stringhe è l'operazione di unione di stringhe di caratteri end-to-end.

Il motivo per cui ho elencato due operatori che fanno la stessa cosa è perché + è supportato in SQL Server e || operatore è supportato in DB2, Oracle, PostgreSQL, SQLite.

Ecco un esempio che funziona in SQL Server.

SELECT 
    FirstName,
    LastName,
    FirstName + LastName
FROM Owners;

Risultato:

+-------------+------------+--------------------+
| FirstName   | LastName   | (No column name)   |
|-------------+------------+--------------------|
| Homer       | Connery    | HomerConnery       |
| Bart        | Pitt       | BartPitt           |
| Nancy       | Simpson    | NancySimpson       |
| Boris       | Trump      | BorisTrump         |
+-------------+------------+--------------------+

In questo caso, i proprietari hanno il loro nome e cognome memorizzati in colonne diverse. Nel nostro SELECT list, prima li recuperiamo singolarmente, ma li recuperiamo anche di nuovo, utilizzando un operatore di concatenazione per unirli insieme.

Tuttavia, ci sono un paio di problemi con i nostri risultati.

  • Non c'è spazio tra il nome e il cognome.
  • Non esiste un nome di colonna.

Fortunatamente è facile da risolvere.

Possiamo usare la stessa operazione di concatenazione per includere lo spazio tra il nome e il cognome.

E possiamo utilizzare un alias di colonna per il risultato concatenato per fornire un nome di colonna nel set di risultati.

SELECT 
    FirstName,
    LastName,
    FirstName + ' ' + LastName AS FullName
FROM Owners;

Risultato:

+-------------+------------+---------------+
| FirstName   | LastName   | FullName      |
|-------------+------------+---------------|
| Homer       | Connery    | Homer Connery |
| Bart        | Pitt       | Bart Pitt     |
| Nancy       | Simpson    | Nancy Simpson |
| Boris       | Trump      | Boris Trump   |
+-------------+------------+---------------+

Se stai usando DB2, Oracle, PostgreSQL, SQLite, scambia il + per || e dovrebbe funzionare bene.

Se stai usando MySQL o MariaDB, dovrai usare CONCAT() funzione per concatenare le stringhe.

Il LIKE Operatore

Il LIKE l'operatore consente di eseguire la corrispondenza dei modelli. Determina se una stringa di caratteri specifica corrisponde a un modello specificato. Un modello può includere caratteri normali e caratteri jolly.

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '%.com';

Risultato:

+-------------+------------+-------------------+
| FirstName   | LastName   | Email             |
|-------------+------------+-------------------|
| Homer       | Connery    | [email protected] |
| Bart        | Pitt       | [email protected]  |
+-------------+------------+-------------------+

In questo esempio, ho usato LIKE operatore in combinazione con il % operatore jolly per restituire i proprietari i cui indirizzi email terminano con .com .

Operatore bonus! Il % Operatore con caratteri jolly

Il % l'operatore jolly corrisponde a qualsiasi stringa di zero o più caratteri. Può essere utilizzato sia come prefisso che come suffisso e può essere utilizzato anche nel mezzo di una stringa.

Tende ad essere più comunemente usato come suffisso e ha un uso limitato nel mezzo dei modelli, sebbene ci siano alcuni casi d'uso validi per usarlo nel mezzo di un modello, come i seguenti:

SELECT 
    FirstName,
    LastName,
    Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';

Risultato:

+-------------+------------+------------------+
| FirstName   | LastName   | Email            |
|-------------+------------+------------------|
| Bart        | Pitt       | [email protected] |
+-------------+------------+------------------+

In questo caso, non conoscevamo l'indirizzo email di Bart, ma sapevamo che iniziava con [email protected] e terminava in .com . Pertanto, siamo stati in grado di utilizzare LIKE insieme al % operatore jolly per compilare il resto.

Tieni presente che questa tecnica può restituire molte righe irrilevanti, a seconda dei dati e di come costruisci la tua istruzione SQL.

Tieni inoltre presente che le query che contengono il LIKE La clausola può essere eseguita molto più lentamente rispetto ad altre query e probabilmente dovresti evitare di usare LIKE clausola a meno che tu non ne abbia davvero bisogno. Usando il % operatore come prefisso può essere particolarmente lento.

Questo non vuol dire che non dovresti usarlo affatto. Il LIKE operatore è parte integrante di SQL e incontrerai molti scenari in cui sarà l'unica opzione (o almeno, l'opzione migliore).

Più operatori SQL

Vedi il mio elenco completo di operatori SQL per un sacco di altri operatori che non sono inclusi qui.