sql >> Base de Datos >  >> RDS >> Mysql

Cómo SELECCIONAR registros sin valores NULL en MySQL

Si bien la mayoría de las aplicaciones tendrán algún tipo de tecnología del lado del servidor o incluso del lado del cliente que se puede usar para filtrar los resultados de las consultas de la base de datos que pueden contener NULL o valores vacíos, usar otro idioma y esa carga adicional de ejecutar código suele ser más costosa para el servidor y, de hecho, en gran medida innecesaria.

En cambio, a continuación, exploraremos brevemente cómo usar el motor de MySQL para realizar esta tarea, tomando solo los registros que desee y excluyendo aquellos con molestos NULL columnas en la mezcla.

NO ES UN OPERADOR DE COMPARACIÓN NULO

Con mucho, el método más simple y directo para garantizar que el conjunto de resultados de una columna en particular no contenga NULL valores es usar el IS NOT NULL operador de comparación.

Por ejemplo, si queremos seleccionar todos los registros en nuestros books tabla donde el primary_author columna no es NULL , la consulta podría verse así:

SELECT
  primary_author,
  published_date,
  title
FROM
  books
WHERE
  primary_author IS NOT NULL;

Dado que IS NOT NULL se comporta como cualquier otro comparador, se puede combinar con otros WHERE cláusulas para filtrar aún más los resultados, como si estuviera usando = , > , < , LIKE y otros operadores de comparación estándar.

Filtrar NULL de varias columnas

En algunos casos, es posible que desee recuperar resultados donde no NULL los valores están presentes en varias columnas. Por ejemplo, tenemos algunos registros en los books tabla:

id | title                | primary_author  | published_date
1  | The Hobbit           | Tolkien         | 09-21-1937
2  | The Silmarillion     | Tolkien         | 09-15-1977
3  | The Name of the Wind | Rothfuss        | 03-27-2007
4  | The Wise Man's Fear  | Rothfuss        | 03-01-2011
5  | The Doors of Stone   | Rothfuss        | NULL
6  | Beowulf              | NULL            | 01-01-1000

Toma nota que Las Puertas de Piedra (id 5 ) no está publicado y, por lo tanto, published_date es NULL . Del mismo modo, Beowulf (id 6 ) – el famoso poema épico en inglés antiguo – no tiene autor conocido, por lo que primary_author es NULL .

En este caso, es posible que deseemos consultar resultados que contengan solo los primeros cuatro registros, excluyendo así los últimos dos registros que tienen NULL valores en cualquiera de primary_author o published_date . Esto se puede realizar con esta declaración simple usando AND con múltiples operadores de comparación:

SELECT
  primary_author,
  published_date,
  title
FROM
  books
WHERE
  (
    primary_author IS NOT NULL
  AND
    published_date IS NOT NULL
  );

Nota:los paréntesis no son obligatorios, pero es una buena práctica incluir comparadores agrupados para una mejor legibilidad.

Ahí tienes; un operador de comparación simple que se puede usar para filtrar cualquier NULL valores en sus registros.