In SQL, l'operatore diverso da (!=
) confronta la non uguaglianza di due espressioni. Cioè, verifica se un'espressione è non uguale a un'altra espressione.
Se uno o entrambi gli operandi sono NULL
, NULL
viene restituito.
SQL ha anche un altro operatore diverso da (<>
), che fa la stessa cosa. Quale usi può dipendere dal tuo DBMS, quale ti senti più a tuo agio nell'usare e forse anche se la tua organizzazione ha delle convenzioni di codifica che stabiliscono quale dovrebbe essere utilizzato.
Tabella di origine
Immagina che il nostro database contenga la seguente tabella. Questa è la tabella che useremo per gli esempi in questa pagina.
SELECT * FROM Owners;
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Esempio
Se volessimo restituire un elenco di tutti i proprietari che non hanno un OwnerId
di 3
, potremmo farlo:
SELECT *
FROM Owners
WHERE OwnerId != 3;
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
La nostra query utilizza l'operatore diverso da (!=
) per verificare se il OwnerId
la colonna non è uguale a 3
. La query restituisce tutti i proprietari tranne il numero di proprietario 3.
Stringhe
Quando si confronta con un valore stringa, utilizzare le virgolette attorno alla stringa. Ad esempio, se volessimo ottenere informazioni su tutti i proprietari il cui nome non è Homer, potremmo fare quanto segue:
SELECT *
FROM Owners
WHERE FirstName != 'Homer';
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Condizioni multiple
Se hai più condizioni, puoi utilizzare più operatori (sia gli stessi operatori che diversi).
In questo modo:
SELECT * FROM Owners
WHERE OwnerId != 1 AND OwnerId != 3;
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Una volta che inizi a utilizzare più condizioni, dovresti usare le parentesi per racchiudere le condizioni che desideri vengano valutate per prime. Se non lo fai, potresti scoprire di ottenere risultati inaspettati, a causa delle condizioni valutate in un ordine che non avevi previsto.
Negazione della condizione
Se usi il NOT
per negare la condizione fornita dall'operatore diverso da, finirai per ottenere i risultati di uguale (=
) operatore:
SELECT *
FROM Owners
WHERE NOT FirstName != 'Homer';
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
In questo caso, è meglio usare solo l'uguale (=
) operatore, in questo modo:
SELECT *
FROM Owners
WHERE FirstName = 'Homer';
Naturalmente, questo stesso potrebbe essere negato con NOT
operatore, che ci darebbe lo stesso risultato che non è uguale a (!=
) l'operatore ci fornisce:
SELECT *
FROM Owners
WHERE NOT FirstName = 'Homer';
Valori NULL
Potresti aver notato che la nostra tabella di esempio originale contiene un paio di NULL
valori nella Email
colonna.
Una colonna contenente NULL
significa che non ha valore. Questo è diverso da 0
o false
o anche una stringa vuota.
Non puoi utilizzare l'operatore diverso da per confrontare con NULL
. In realtà, questo potrebbe dipendere dal tuo DBMS e dalla sua configurazione. Ma per ora, diamo un'occhiata a cosa succede se provo a confrontare l'Email
colonna su NULL
.
SELECT * FROM Owners
WHERE Email != NULL;
Risultato:
(0 rows affected)
Il modo per verificare se non NULL
valori consiste nell'usare IS NOT NULL
.
Pertanto, dovremmo riscrivere la dichiarazione di cui sopra come segue.
SELECT * FROM Owners
WHERE Email IS NOT NULL;
Risultato:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Ora otteniamo solo quelle righe che non sono NULL
nella Email
colonna.
Se sei interessato, vedi SQL Server ANSI_NULLS Explained
per vedere come puoi cambiare il modo NULL
i valori vengono trattati in SQL Server.