¿Qué es la cláusula WHERE en MySQL?
La cláusula WHERE en MySQL es una palabra clave que se usa 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 sentencias SQL como INSERT, UPDATE, SELECT y DELETE para filtrar registros y realizar varias operaciones en los datos.
Vimos cómo consultar datos de una base de datos 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, son momentos en los que queremos restringir los resultados de la consulta a una condición específica. La cláusula WHERE en SQL es útil en tales situaciones.
Sintaxis de la cláusula WHERE
La sintaxis básica de la cláusula WHERE cuando se usa en una instrucción SELECT WHERE de MySQL es la siguiente.
SELECT * FROM tableName WHERE condition;
AQUÍ
- "SELECT * FROM tableName" es la instrucción SELECT estándar
- "DÓNDE" es la palabra clave que restringe nuestro conjunto de resultados de consulta de selección y "condición" es el filtro que se aplicará a los resultados. El filtro puede ser un rango, un valor único o una subconsulta.
Veamos ahora un ejemplo práctico .
Supongamos que queremos obtener los datos personales de un miembro de la tabla de miembros dado el número de miembro 1, usaríamos el siguiente script para lograrlo.
SELECT * FROM `members` WHERE `membership_number` = 1;
La ejecución del script anterior en MySQL workbench en "myflixdb" produciría los siguientes resultados.
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
Cláusula WHERE combinada con - Y operador lógico
La condición WHERE en MySQL cuando se usa junto con el operador lógico AND, solo se ejecuta si se cumplen TODOS los criterios de filtro especificados. Veamos ahora un ejemplo práctico: supongamos que queremos obtener una lista de todas las películas de la categoría 2 que se lanzaron en 2008, usaríamos el guión que se muestra a continuación para lograrlo.
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Cláusula WHERE combinada con - OR LOGICAL Operador
La cláusula WHERE cuando se usa junto con el operador OR, solo se ejecuta si se cumple alguno o todos los criterios de filtro especificados. El siguiente guión incluye todas las películas de la categoría 1 o de la categoría 2SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.
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 |
Cláusula WHERE combinada con - IN Keyword
La cláusula WHERE en MySQL, cuando se usa junto con la palabra clave IN, solo afecta a las filas cuyos valores coinciden con la lista de valores proporcionada en la palabra clave IN. La instrucción MySQL IN ayuda a reducir la cantidad de cláusulas OR que puede tener que usar. La siguiente consulta de MySQL WHERE IN da filas donde número_de_membresía es 1, 2 o 3SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
La cláusula WHERE combinada con - NOT IN Keyword
La cláusula WHERE cuando se usa junto con la palabra clave NOT IN NO afecta las filas cuyos valores coinciden con la lista de valores proporcionada en la palabra clave NOT IN. La siguiente consulta da filas donde número_de_membresía NO es 1, 2 o 3SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.
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 |
Cláusula WHERE combinada con - Operadores COMPARISON
Los operadores de comparación menor que (), igual a (=), no igual a () se pueden usar 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 a.SELECT * FROM `members` WHERE `gender` = 'Female';
La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.
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 | This email address is being protected from spambots. You need JavaScript enabled to view it. |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | This email address is being protected from spambots. You need JavaScript enabled to view it. |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> Mayor que
La siguiente secuencia de comandos obtiene todos los pagos superiores a 2000 de la tabla de pagos. SELECCIONE * DE `pagos` DONDE` monto_pagado`> 2000; La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.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 cuya identificación de categoría no es 1.SELECT * FROM `movies` WHERE `category_id`<> 1;La ejecución del script anterior en MySQL workbench contra "myflixdb" produce los siguientes resultados.
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 |
Resumen
- La cláusula SQL WHERE se utiliza para restringir el número de filas afectadas por una consulta SELECT, UPDATE o DELETE.
- La condición WHERE en SQL se puede usar junto con operadores lógicos como AND y OR, operadores de comparación como, = etc.
- Cuando se utiliza con el operador lógico AND, se deben cumplir todos los criterios.
- Cuando se utiliza con el operador lógico OR, se debe cumplir cualquiera de los criterios.
- La palabra clave IN se utiliza para seleccionar filas que coinciden con una lista de valores.
Rompecabezas Supongamos que queremos obtener una lista de películas alquiladas que no han sido devueltas a tiempo el 25/06/2012. Podemos usar la cláusula de instrucción SQL WHERE junto con el operador de comparación menor que y el operador lógico AND para lograrlo.
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;La ejecución del script anterior en MySQL workbench da 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 |