Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como comparar valores nulos no MySQL


Às vezes, pode ser necessário comparar uma coluna com valor nulo ou comparar duas colunas em que uma delas tenha valores nulos ou até mesmo realizar uma verificação nula para colunas. Neste artigo veremos como comparar valores nulos no MySQL. Você pode usá-lo para comparação Null no MySQL.



Como comparar valores nulos no MySQL


Digamos que você tenha a seguinte tabela sales(id, order_date, cost_price, selling_price)
mysql> create table sales(
                id int, 
                order_date date, 
                cost_price int, 
                selling_price int);

mysql> describe sales;
+---------------+---------+------+-----+---------+-------+
| Field         | Type    | Null | Key | Default | Extra |
+---------------+---------+------+-----+---------+-------+
| id            | int(11) | YES  |     | NULL    |       |
| order_date    | date    | YES  |     | NULL    |       |
| cost_price    | int(11) | YES  |     | NULL    |       |
| selling_price | int(11) | YES  |     | NULL    |       |
+---------------+---------+------+-----+---------+-------+

mysql> insert into sales(id,order_date,cost_price,selling_price)
       values(1,'2020-11-01',150,250),
             (2,'2020-11-02',200,300);

mysql> insert into sales(id,order_date, cost_price) 
       values(3, '2020-11-03',100);

mysql> insert into sales(id,order_date, selling_price) 
       values(4, '2020-11-03',100);

mysql> select * from sales;
+------+------------+------------+---------------+
| id   | order_date | cost_price | selling_price |
+------+------------+------------+---------------+
|    1 | 2020-11-01 |        150 |           250 |
|    2 | 2020-11-02 |        200 |           300 |
|    3 | 2020-11-03 |        100 |          NULL |
|    4 | 2020-11-03 |       NULL |           100 |
+------+------------+------------+---------------+

Digamos que você queira selecionar linhas em que o preço de custo seja nulo. Normalmente, você usaria uma expressão como cost_price=null mas não funciona com valores NULL. Em caso de comparação nula, você precisa usar IS operador, ou seja, cost_price IS null

Portanto, a seguinte consulta SQL não funcionará
mysql> select * from sales where cost_price=null;
Empty set (0.00 sec)

A seguinte consulta SQL funcionará . Aqui está a consulta SQL para selecionar linhas em que cost_price é nulo.
mysql> select * from sales where cost_price is null;
+------+------------+------------+---------------+
| id   | order_date | cost_price | selling_price |
+------+------------+------------+---------------+
|    4 | 2020-11-03 |       NULL |           100 |
+------+------------+------------+---------------+

Leia também:Como comparar duas colunas no MySQL

Da mesma forma, aqui está a consulta SQL para selecionar linhas em que cost_price não é NULL. Nesse caso, usamos IS NOT operador.
mysql> select * from sales where cost_price is not null;
+------+------------+------------+---------------+
| id   | order_date | cost_price | selling_price |
+------+------------+------------+---------------+
|    1 | 2020-11-01 |        150 |           250 |
|    2 | 2020-11-02 |        200 |           300 |
|    3 | 2020-11-03 |        100 |          NULL |
+------+------------+------------+---------------+

Você pode usar IS NULL e IS NOT NULL com instrução UPDATE, INSERT e DELETE.




Com declaração UPDATE
mysql> update sales
       set selling_price=350
       where cost_price is null;

mysql> select * from sales;
+------+------------+------------+---------------+
| id   | order_date | cost_price | selling_price |
+------+------------+------------+---------------+
|    1 | 2020-11-01 |        150 |           250 |
|    2 | 2020-11-02 |        200 |           300 |
|    3 | 2020-11-03 |        100 |          NULL |
|    4 | 2020-11-03 |       NULL |           350 |
+------+------------+------------+---------------+

Leia também:Como obter cada enésima linha no MySQL




Com declaração INSERT

Aqui está um exemplo que usa MySQL NULL Comparison na instrução INSERT.
mysql> insert into new_sales(id,order_date, cost_price, selling_price)
      select * from sales
      where cost_price is null;




Com declaração DELETE

Aqui está um exemplo para usar a comparação Null na instrução Delete.
mysql> delete from sales
       where cost_price is null;

mysql> select * from sales;
+------+------------+------------+---------------+
| id   | order_date | cost_price | selling_price |
+------+------------+------------+---------------+
|    1 | 2020-11-01 |        150 |           250 |
|    2 | 2020-11-02 |        200 |           300 |
|    3 | 2020-11-03 |        100 |          NULL |
+------+------------+------------+---------------+

Espero que este artigo o ajude a comparar valores NULL no MySQL. O Ubiq facilita a visualização de dados e o monitoramento em painéis em tempo real. Experimente o Ubiq gratuitamente.