MySQL Cláusula WHERE: AND, OR, IN, NOT IN Ejemplo de consulta
⚡ Resumen inteligente
MySQL La cláusula WHERE filtra las filas antes de que lleguen al conjunto de resultados, aplicando criterios precisos a las sentencias SELECT, UPDATE y DELETE. Comprender los operadores AND, OR, IN, NOT IN y de comparación permite a los principiantes recuperar exactamente los registros que requiere una consulta.
¿Qué es la cláusula WHERE? MySQL?
Dónde cláusula in MySQL es una palabra clave utilizada para especificar los criterios exactos de los datos o filas que se verán afectados por la declaración SQL especificada. La cláusula WHERE se puede utilizar con declaraciones SQL como INSERT, UPDATE, SELECT y DELETE para filtrar registros y realizar diversas operaciones con los datos.
Vimos cómo consultar datos de un base de datos de CRISPR Medicine News usando la instrucción SELECT en el tutorial anterior. La instrucción SELECT devolvió todos los resultados de la tabla de la base de datos consultada.
Sin embargo, hay ocasiones en las que queremos restringir los resultados de una consulta a una condición específica. La cláusula WHERE en SQL resulta útil en tales situaciones y funciona de la misma manera en una consulta. Consulta de ELIMINACIÓN o ACTUALIZACIÓN como lo hace en una consulta SELECT.
Sintaxis de la cláusula WHERE
La sintaxis básica de la cláusula WHERE es la siguiente.
SELECT * FROM tableName WHERE condition;
AQUÍ
- “SELECCIONAR * DESDE nombre de tabla” es el estándar Instrucción SELECT
- "DÓNDE" es la palabra clave que restringe el conjunto de resultados, y "condición" es el filtro aplicado a los resultados. El filtro puede ser un rango, un valor único o una subconsulta.
Supongamos que queremos obtener los detalles de un miembro de la tabla de miembros, dado el número de miembro 1. El siguiente script lo logra.
SELECT * FROM `members` WHERE `membership_number` = 1;
Ejecutar este script en MySQL banco de trabajo Al ejecutar “myflixdb” se obtiene el siguiente resultado.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
Una sola condición rara vez es suficiente. Las secciones siguientes combinan WHERE con operadores logicos.
Cláusula WHERE combinada con – Y LÓGICA Operator
Con el operador lógico AND, se devuelve una fila solo si se cumplen TODOS los criterios especificados.
Supongamos que queremos todas las películas de la categoría 2 que se estrenaron en 2008. El siguiente script lo consigue.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
Al ejecutar el script anterior en “myflixdb” se obtiene el siguiente resultado.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
AND reduce el conjunto de resultados. OR lo amplía.
Cláusula WHERE combinada con – OR LÓGICA Operator
Con el operador OR, se devuelve una fila si se cumple ALGUNO de los criterios especificados.
El siguiente script obtiene todas las películas de la categoría 1 o de la categoría 2.
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
El conjunto de resultados se muestra a continuación.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Encadenar muchas condiciones OR dificulta la lectura. La palabra clave IN soluciona ese problema.
Cláusula WHERE combinada con – IN Palabra clave
La cláusula WHERE, cuando se utiliza con la palabra clave IN, solo afecta a las filas cuyos valores coinciden con la lista proporcionada. IN reduce la cantidad de cláusulas OR que tendrías que escribir de otra manera.
Las siguientes MySQL La consulta WHERE IN devuelve filas donde membership_number es 1, 2 o 3.
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
El conjunto de resultados se muestra a continuación.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
NOT IN realiza el filtro opuesto.
Cláusula WHERE combinada con – NO EN Palabra clave
Con la palabra clave NOT IN, la cláusula WHERE excluye todas las filas cuyo valor coincida con la lista proporcionada.
La siguiente consulta devuelve filas donde membership_number NO es 1, 2 o 3.
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
El conjunto de resultados se muestra a continuación.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE también filtra los valores por tamaño e igualdad, utilizando operadores de comparación.
Cláusula WHERE combinada con – COMPARACIÓN Operatoros
Los operadores de comparación menor que (<), igual a (=), mayor que (>) y distinto de (<>) se pueden utilizar con la cláusula WHERE.
= Igual a
El siguiente script obtiene todos los miembros femeninos de la tabla de miembros utilizando el operador de comparación igual.
SELECT * FROM `members` WHERE `gender` = 'Female';
El conjunto de resultados se muestra a continuación.
| membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
|---|---|---|---|---|---|---|---|
| 1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
| 2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
| 4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Más que
El siguiente script obtiene todos los pagos mayores a 2,000 de la tabla de pagos.
SELECT * FROM `payments` WHERE `amount_paid` > 2000;
El conjunto de resultados se muestra a continuación.
| payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
|---|---|---|---|---|---|
| 1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
| 3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
<> No es igual a
El siguiente script obtiene todas las películas cuyo ID de categoría no es 1.
SELECT * FROM `movies` WHERE `category_id` <> 1;
El conjunto de resultados se muestra a continuación.
| movie_id | title | director | year_released | category_id |
|---|---|---|---|---|
| 2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
| 5 | Daddy's Little Girls | NULL | 2007 | 8 |
| 6 | Angels and Demons | NULL | 2007 | 6 |
| 7 | Davinci Code | NULL | 2007 | 6 |
| 9 | Honey mooners | John Schultz | 2005 | 8 |
Referencia rápida: Cláusula WHERE Operatoros
Los operadores que se combinan con mayor frecuencia con WHERE se resumen a continuación. Las definiciones completas aparecen en el MySQL Referencia del operador.
| Operator | Significado | Ejemplo de condición |
|---|---|---|
| = | Igual a | `género` = 'Femenino' |
| <> | No igual a | `category_id` <> 1 |
| > / | Mayor que / menor que | `cantidad_pagada` > 2000 |
| Y / o | Todos los criterios / cualquier criterio | `category_id` = 2 Y `year_released` = 2008 |
| DENTRO / NO DENTRO | Coincide con/excluye una lista | `número_de_miembro` EN (1,2,3) |
| ES NULO / NO ES NULO | Pruebas para valores faltantes | `postal_address` ES NULO |
⚠️ Nota: NULL nunca coincide con = o <>. Utilice IS NULL o IS NOT NULL cuando una columna no pueda contener ningún valor.
Acertijo: Encuentra películas que se devolvieron tarde
Supongamos que queremos obtener las películas alquiladas que no fueron devueltas antes del 25/06/2012. Combinando la cláusula WHERE con el operador "menor que" y el operador AND, logramos esto.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
Ejecutando el script anterior en MySQL El banco de trabajo arroja los siguientes resultados.
| reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
|---|---|---|---|---|---|
| 14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |


