MySQL WHERE Cláusula con ejemplos – AND, OR, IN, NOT IN
¿Cuál es la cláusula WHERE?
Miramos cómo consultar datos de una base de datos utilizando 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 especificada. La cláusula WHERE de SQL es útil en tales situaciones.
WHERE cláusula Sintaxis
La sintaxis básica para la cláusula WHERE cuando se usa en una instrucción SELECT es la siguiente.
SELECT * FROM condición tableName WHERE;
AQUÍ
- “SELECT * FROM tableName” es la instrucción SELECT estándar
- “DONDE” 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 podría ser un rango, valor único o sub consulta.
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 membresía 1, usaríamos la siguiente secuencia de comandos para lograrlo.
SELECCIONE * FROM `miembros` WHERE` membership_number` = 1;
Ejecutar el script anterior en MySQL workbench en el “myflixdb” produciría los siguientes resultados.
número de socio | nombres completos | género | fecha de nacimiento | dirección física | direccion postal | contct_number | correo electrónico |
1 | Janet Jones | Hembra | 21-07-1980 | Calle Primera Parcela No 4 | Bolsa privada | 0759 253 542 | janetjones@yagoo.cm |
Cláusula WHERE combinada con – Y operador lógico
La cláusula WHERE, cuando se utiliza 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 script que se muestra a continuación para lograrlo.
SELECCIONAR * FROM `películas` DONDE` category_id` = 2 AND `year_released` = 2008;
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
movie_id | título | director | añorelado | categoria ID |
2 | Olvidando a Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Cláusula WHERE combinada con – O operador lógico
La cláusula WHERE, cuando se utiliza junto con el operador OR, solo se ejecuta si se cumple alguno o todos los criterios de filtro especificados.
El siguiente script obtiene todas las películas en la categoría 1 o categoría 2
SELECCIONAR * FROM `películas` DONDE` category_id` = 1 OR `category_id` = 2;
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
movie_id | título | director | añorelado | categoria ID |
1 | Piratas del Caribe 4 | Rob Marshall | 2011 | 1 |
2 | Olvidando a Sarah Marshal | Nicholas Stoller | 2008 | 2 |
Cláusula WHERE combinada con la palabra clave IN
La cláusula WHERE cuando se utiliza 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. IN ayuda a reducir el número de cláusulas OR que quizás deba usar
La siguiente consulta da filas donde membership_number es 1, 2 o 3
SELECCIONE * FROM `miembros` WHERE` membership_number` IN (1,2,3);
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
número de socio | nombres completos | género | fecha de nacimiento | dirección física | direccion postal | contct_number | correo electrónico |
1 | Janet Jones | Hembra | 21-07-1980 | Calle Primera Parcela No 4 | Bolsa privada | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Hembra | 23-06-1980 | Melrose 123 | NULO | NULO | jj@fstreet.com |
3 | Robert Phil | Masculino | 12-07-1989 | 3rd Street 34 | NULO | 12345 | rm@tstreet.com |
La cláusula WHERE combinada con – NO EN palabra clave
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 proporciona filas donde membership_number NO es 1, 2 o 3
SELECCIONE * FROM `members` WHERE` membership_number` NOT IN (1,2,3);
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
número de socio | nombres completos | género | fecha de nacimiento | dirección física | direccion postal | contct_number | correo electrónico |
4 | Gloria Williams | Hembra | 14-02-1984 | 2nd Street 23 | NULO | NULO | NULO |
Cláusula WHERE combinada con – OPERADORES DE COMPARACIÓN
Los operadores de comparación menores que (), iguales a (=), no iguales a () pueden usarse con la cláusula Where
= Igual a
La siguiente secuencia de comandos obtiene todos los miembros femeninos de la tabla de miembros utilizando el operador de igual a comparación.
SELECCIONAR * FROM `miembros` WHERE` gender` = 'Femenino';
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
número de socio | nombres completos | género | fecha de nacimiento | dirección física | direccion postal | contct_number | correo electrónico |
1 | Janet Jones | Hembra | 21-07-1980 | Calle Primera Parcela No 4 | Bolsa privada | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Hembra | 23-06-1980 | Melrose 123 | NULO | NULO | jj@fstreet.com |
4 | Gloria Williams | Hembra | 14-02-1984 | 2nd Street 23 | NULO | NULO | NULO |
> Mayor que
La siguiente secuencia de comandos obtiene todos los pagos que son mayores a 2.000 desde la tabla de pagos.
SELECCIONE * DE `pagos` DONDE` amount_paid`> 2000;
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
payment_id | número de socio | fecha de pago | descripción | cantidad pagada | external_reference_number |
1 | 1 | 23-07-2012 | Pago de alquiler de película | 2500 | 11 |
3 | 3 | 30-07-2012 | Pago de alquiler de película | 6000 | NULO |
<> No es igual a
La siguiente secuencia de comandos obtiene todas las películas cuya identificación de categoría no es 1.
SELECCIONE * FROM `películas` DONDE` category_id` <> 1;
Ejecutar el script anterior en MySQL workbench contra el “myflixdb” produce los siguientes resultados.
movie_id | título | director | añorelado | categoria ID |
2 | Olvidando a Sarah Marshal | Nicholas Stoller | 2008 | 2 |
5 | Las hijas de papá | NULO | 2007 | 8 |
6 | Ángeles y demonios | NULO | 2007 | 6 |
7 | Código da Vinci | NULO | 2007 | 6 |
9 | Honey Mooners | John Schultz | 2005 | 8 |
Resumen
- La cláusula SQL WHERE se usa para restringir el número de filas afectadas por una consulta SELECT, UPDATE o DELETE.
- La cláusula WHERE se puede usar junto con operadores lógicos como AND y OR, operadores de comparación como, = etc.
- Cuando se usa con el operador lógico AND, se deben cumplir todos los criterios.
- Cuando se usa 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.
Brain Teaser
Supongamos que queremos obtener una lista de películas alquiladas que no se han devuelto a tiempo el 24/06/2012. Podemos usar la cláusula WHERE junto con el operador que no sea de comparación y el operador lógico AND para lograr eso.
SELECCIONAR * FROM `movierentals` WHERE` return_date` <'2012-06-25' AND movie_returned = 0;
Ejecutar el script anterior en MySQL workbench da los siguientes resultados.
número de referencia | Fecha de Transacción | Fecha de regreso | número de socio | movie_id | movie_returned |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |