Sante Caserio
pubblicato più di 2 anni fa

Gli operatori logici

Gli indispensabili operatori logici in MySQL

MySQL prevede quattro operatori logici: NOT, AND, OR e XOR.

Gli operatori logici dovrebbero operare nel campo della logica booleana, quella cioè che si occupa di calcolare se un’asserzione sia vera (TRUE) o falsa (FALSE). In realtà in MySQL il tipo di dati BOOL non esiste, ma viene emulata più o meno come nel linguaggio C. TRUE viene considerato sinonimo di 1, ma qualsiasi valore diverso da 0 verrà comunque considerato vero, mentre FALSE viene considerato sinonimo di 0; esiste anche la parola chiave UNKNOWN, che probabilmente è stata implementata perchè prima o poi MySQL aggiungerà il supporto a una logica a 3 valori, ma al momento UNKNOWN è un sinonimo di NULL. Un campo dichiarato di tipo BOOL (o BOOLEAN) sarà in realtà di tipo TINYINT.

NOT è l’unico operatore unario, cioè che richiede un unico termine. Esso inverte il valore al quale si riferisce: NOT TRUE è sinonimo di FALSE e NOT FALSE è sinonimo di TRUE.

1mysql> SELECT NOT 1, NOT 0;
2        -> 0, 1

AND restituisce 1 se entrambi i termini a cui si riferisce sono veri, mentre in tutti gli altri casi restituisce 0.

1mysql> SELECT 1 AND 2, 1 AND 0, 0 AND 1;
2        -> 1, 0, 0
3mysql> SELECT (NOT 1) AND (NOT 2), (NOT 0) AND (NOT FALSE), NOT (1 AND 1);
4        -> 0, 1, 0

OR restituisce 1 se anche solo uno dei due termini è vero, mentre restituisce 0 solo se sono entrambi falsi. Naturalmente, combinando OR e NOT, è possibile verificare che entrambi i termini siano falsi.

1mysql> SELECT 1 OR 0, TRUE OR 10, FALSE OR FALSE;
2        -> 1, 1, 0
3mysql> SELECT NOT (1 OR TRUE), NOT (0 OR FALSE);
4        -> 0, 1

XOR sta per eXclusive OR e restituisce 1 se soltanto uno dei due termini è vero, mentre se sono entrambi veri o entrambi falsi restituisce 0. Equivale a col1 OR col2 AND NOT (col1 AND col2).

1mysql> SELECT 1 OR 0, TRUE OR 10, FALSE OR FALSE;
2        -> 1, 0, 0

AND può essere sostituito da &&, OR può essere sostituito da || e NOT può essere sostituito da !, mentre XOR non ha un sostituto.

Precedenza

NOT ha precedenza rispetto a AND, che ha precedenza rispetto a XOR, che ha precedenza rispetto a OR.

AND e && hanno la stessa precedenza, così come OR e || (diversamente da quanto accade in PHP). Se l’SQL MODE HIGH_NOT_PRECEDENCE è impostato ! e NOT hanno la stessa precedenza, altrimenti ! ha precedenza rispetto a NOT.

Se si vuole modificare la precedenza degli operatori, o se non si è certi di quale operatore abbia la precedenza, si possono utilizzare le parentesi come negli esempi mostrati sopra.

Condividi su:

Esprimi un voto:

  • Current rating: 0.0/5
  • 1
  • 2
  • 3
  • 4
  • 5

Argomenti chiave:

Ultimi commenti Ultimi commenti

Esegui il Login oppure registrati per scrivere un commento.
Cerca nel sito...
Ultime recipes

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL MySQL Report un tool di shell per tenere tutto sotto controllo

Un utilissimo tool di shell che effettua un dettagliato e comodo report su MySQL


Vai alla recipe

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL MySQLSniffer sniffare il traffico TCP di MySQL

Un utilissimo tool per sniffare il traffico Client/Server TCP/IP di MySQL


Vai alla recipe

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso myisamchk riparare file MyISAM

Verificare l'integrità, riparare gestire chiavi e memoria di tabelle MyISAM attraverso il file myisamchk


Vai alla recipe

Un tool per comprimere le tabelle MyISAM fino a oltre il 50% myisampack comprimere file MyISAM

Un tool per comprimere le tabelle MyISAM fino a oltre il 50%


Vai alla recipe

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun mysqlshow visualizzare le informazioni sul database MySQL

mysqlshow le info di base sui database, tabelle e colonne senza utilizzare alcun client


Vai alla recipe

Utilizzando UNION / UNION ALL su campi int unsigned zerofill,
ho notato che MysqlUNION / UNION ALL su campi int unsigned zerofill. di DebUsr
Vai al tip

Utilizzo di funzioni come alias di campo tramite l'impiego di prepared statementReport con alias di campo dinamici di john_revelator
Vai al tip

Può capitare che sia necessario eseguire un dump di database in formato Comma SeparatedEsecuzione dump in formato CSV (tabelle in engine MyIsam esportate in formato CSV) di ghigomatto
Vai al tip

E' possibile eseguire le query SQL contenute in un file di testo. Questo è utileEseguire le query da un file di testo di Sante Caserio
Vai al tip

Se vogliamo fare il backup di tutti i database con mysqldump, e ne abbiamo parecchiFare il backup di tutti i database di Sante Caserio
Vai al tip

Salve, dopo tante storie ho studiato il php e mysql .. . che in questo forum parlavo php e campo mysql timestamp di gigi Vai al topic

ciao a tutti ho creato un forum su aruba ma non so come farlo visualizzare nel mio aruba di albertodiprima Vai al topic

Salve a tutti gente, questo è il mio primo post su questo forum e questo a causa Problema Gravissimo con AutoIncrement di stefanoadsl Vai al topic

Salve! Mi presento, mi chiamo Adriano e sono uno studente di ingegneria informatica Problema Trigger di Xanakro Vai al topic

Ciao a tutti!
Volevo chiedere una informazione.
Ho una query che lanciata la prima Query Eseguita più volte di OltreLeStelle Vai al topic