Operador OU MySQL

Resumo : neste tutorial, você aprenderá como usar o ORoperador MySQL para combinar expressões booleanas.

Introdução ao operador MySQL OR

ORO operador MySQL é um operador lógico que combina duas expressões booleanas .

A OR BLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Se A e B não forem NULL, o operador OR retornará 1 (verdadeiro) se A ou B for diferente de zero. Por exemplo:

SELECT 1 OR 1, 1 OR 0, 0 OR 1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+--------+--------+--------+
| 1 OR 1 | 1 OR 0 | 0 OR 1 |
+--------+--------+--------+
|      1 |      1 |      1 |
+--------+--------+--------+
1 row in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Se A e B forem zero (falso), o operador OR retornará zero. Por exemplo:

SELECT 0 OR 0;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+--------+
| 0 OR 0 |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Quando A e/ou B são NULL, o operador OR retorna 1 (verdadeiro) se A ou B for diferente de zero. Caso contrário, retorna NULL. Por exemplo:

SELECT 1 OR NULL, 0 OR NULL, NULL or NULL;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
+-----------+-----------+--------------+
| 1 OR NULL | 0 OR NULL | NULL or NULL |
+-----------+-----------+--------------+
|         1 |      NULL |         NULL |
+-----------+-----------+--------------+
1 row in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

A tabela a seguir mostra o resultado do ORoperador ao combinar verdadeiro (diferente de zero), falso (zero) e NULL:

verdadeiro FALSO NULO
verdadeiro verdadeiro verdadeiro verdadeiro
FALSO verdadeiro FALSO NULO
NULO verdadeiro NULO NULO

Operador MySQL OR e avaliação de curto-circuito

Assim como o ANDoperador, o ORoperador também está em curto-circuito. Em outras palavras, o MySQL para de avaliar as partes restantes da expressão assim que consegue determinar o resultado. Por exemplo:

SELECT 1 = 1 OR 1 / 0;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+----------------+
| 1 = 1 OR 1 / 0 |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Como a expressão 1 = 1sempre retorna 1, o MySQL não avaliará a expressão 1/0. E o MySQL emitiria um erro se isso acontecesse.

Operador precedente

Quando uma expressão contém operadores ANDe OR, o MySQL usa a precedência do operador para determinar a ordem de avaliação dos operadores. O MySQL avalia primeiro o operador com maior precedência.

Como o ANDoperador tem precedência maior que o ORoperador, o MySQL avalia o ANDoperador antes do ORoperador. Por exemplo:

SELECT 1 OR 0 AND 0;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+--------------+
| 1 OR 0 AND 0 |
+--------------+
|            1 |
+--------------+
1 row in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Como funciona.

1 OR 0 AND 0 = 1 OR 0 = 1

Para alterar a ordem de avaliação, use os parênteses. Por exemplo:

SELECT (1 OR 0) AND 0;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+----------------+
| (1 OR 0) AND 0 |
+----------------+
|              0 |
+----------------+
1 row in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Como funciona.

(1 OR 0) AND 0 = 1 AND 0 = 0

Exemplos de operadores OR do MySQL

Usaremos a  customerstabela do banco de dados de exemplo para a demonstração:

A consulta a seguir utiliza o ORoperador da WHEREcláusula para selecionar todos os clientes localizados nos EUA ou na França:

SELECT    
	customername, 
	country
FROM    
	customers
WHERE country = 'USA' OR 
      country = 'France';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+------------------------------+---------+
| customername                 | country |
+------------------------------+---------+
| Atelier graphique            | France  |
| Signal Gift Stores           | USA     |
| La Rochelle Gifts            | France  |
| Mini Gifts Distributors Ltd. | USA     |
| Mini Wheels Co.              | USA     |
| Land of Toys Inc.            | USA     |
| Saveley & Henriot, Co.       | France  |
| Muscle Machine Inc           | USA     |
| Diecast Classics Inc.        | USA     |
...Linguagem de código:  texto simples  ( texto simples )

O exemplo a seguir utiliza a ORoperadora para selecionar os clientes localizados nos EUA ou na França e com limite de crédito superior a 100.000.

SELECT   
	customername, 
	country, 
	creditLimit
FROM   
	customers
WHERE(country = 'USA'
		OR country = 'France')
	  AND creditlimit > 100000;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+------------------------------+---------+-------------+
| customername                 | country | creditLimit |
+------------------------------+---------+-------------+
| La Rochelle Gifts            | France  |   118200.00 |
| Mini Gifts Distributors Ltd. | USA     |   210500.00 |
| Land of Toys Inc.            | USA     |   114900.00 |
| Saveley & Henriot, Co.       | France  |   123900.00 |
| Muscle Machine Inc           | USA     |   138500.00 |
| Diecast Classics Inc.        | USA     |   100600.00 |
| Collectable Mini Designs Co. | USA     |   105000.00 |
| Marta's Replicas Co.         | USA     |   123700.00 |
| Mini Classics                | USA     |   102700.00 |
| Corporate Gift Ideas Co.     | USA     |   105000.00 |
| Online Diecast Creations Co. | USA     |   114200.00 |
+------------------------------+---------+-------------+
11 rows in set (0.00 sec)Linguagem de código:  texto simples  ( texto simples )

Observe que se você não usar os parênteses, a consulta retornará os clientes localizados nos EUA ou os clientes localizados na França com limite de crédito superior a 100.000.

SELECT    
    customername, 
    country, 
    creditLimit
FROM    
    customers
WHERE 
    country = 'USA'
    OR country = 'France'
    AND creditlimit > 100000;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Experimente

+------------------------------+---------+-------------+
| customername                 | country | creditLimit |
+------------------------------+---------+-------------+
| Signal Gift Stores           | USA     |    71800.00 |
| La Rochelle Gifts            | France  |   118200.00 |
| Mini Gifts Distributors Ltd. | USA     |   210500.00 |
| Mini Wheels Co.              | USA     |    64600.00 |
| Land of Toys Inc.            | USA     |   114900.00 |
| Saveley & Henriot, Co.       | France  |   123900.00 |
| Muscle Machine Inc           | USA     |   138500.00 |
| Diecast Classics Inc.        | USA     |   100600.00 |
| Technics Stores Inc.         | USA     |    84600.00 |
| American Souvenirs Inc       | USA     |        0.00 |
...Linguagem de código:  texto simples  ( texto simples )

Resumo

  • O ORoperador combina duas expressões booleanas e retorna verdadeiro quando uma das expressões é verdadeira. Caso contrário, retorna falso.
  • O MySQL avalia o ORoperador após o ANDoperador se uma expressão contém operadores ANDe OR.
  • Use parênteses para alterar a ordem de avaliação.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *