En este artículo, vamos a hablar sobre el WHERE
cláusula y cómo usarla en MySQL. Además de SELECT
, el alcance de WHERE
incluye la cláusula UPDATE
y DELETE
declaraciones. El WHERE
cláusula es indispensable para un trabajo de calidad con bases de datos MySQL. Es por eso que el artículo actual se ocupará de esta cláusula y explorará sus características distintivas en profundidad.
Cuando tratamos con MySQL, necesitamos cláusulas condicionales para las declaraciones SELECT en la mayoría absoluta de los casos. Dichas cláusulas determinan los criterios de selección, por lo que solo obtenemos los datos que necesitamos.
MySQL WHERE
La cláusula es el medio más práctico para filtrar los resultados. Es flexible, lo que permite a los usuarios especificar varias condiciones para la selección de datos y combinar varias condiciones en una declaración. Para que su rutina de trabajo diaria sea aún más agradable, siempre es mejor recurrir a la optimización de consultas y perfiles de MySQL.
Contenido
- MySQL WHERE sintaxis
- Usando WHERE en MySQL
- Ejemplo de condición única de consulta WHERE
- Múltiples condiciones WHERE
- DÓNDE Y operador
- DÓNDE O operador
- Uso de AND con condiciones OR
- DÓNDE ENTRE operador
- Operador WHERE LIKE
- DONDE NO ME GUSTA ejemplo
- Operador WHERE IN
- DONDE NO EN ejemplo
- Operador DONDE ESTÁ NULO
- Ejemplo de DONDE NO ES NULO
- DONDE NO EXISTE
- DONDE EXISTE
- Uso de la cláusula WHERE de MySQL con operadores de comparación
- Resumen
Sintaxis de MySQL WHERE
Para empezar, echemos un vistazo más de cerca al uso de WHERE
en el SELECT
declaración. La sintaxis básica es la siguiente:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
SELECT … FROM
es la declaración estándar que define a qué columnas y qué tabla nos dirigimos. El WHERE
palabra clave identifica los criterios de selección de datos. Puede haber un solo valor, el rango entre valores, la subconsulta y más de una condición.
Automatiza tu trabajo con criterios de consulta. Véalos y edítelos visualmente en las pestañas separadas de nuestro visual Herramienta de consulta MySQL donde está dibujando su consulta. No necesita escribir los nombres de las columnas ni recordar reglas complejas. Simplemente seleccione los datos requeridos de las listas y disfrute de los resultados.
Usando WHERE en MySQL
MySQL funciona de la siguiente manera al ejecutar SELECT
declaración que contiene el WHERE
cláusula:
- Evaluar el
FROM
cláusula para identificar la tabla de destino. - Proceder al
WHERE
cláusula para evaluar los criterios para la selección de datos. - Marque el
SELECT
instrucción para definir las columnas a recuperar.
Nota :El SELECT
declaración a menudo incluye el ORDER BY
cláusula que pone los resultados en orden ascendente o descendente. Si es así, MySQL lo evaluará al final.
El principio de trabajo de MySQL WHERE
es similar al IF
condición en lenguajes de programación. Compara los valores que proporcionamos con los de la tabla MySQL de destino. Cuando estos valores coinciden, el RDBMS obtiene esos registros para los usuarios.
Cuando la condición para WHERE
cláusula es un valor de texto, ponemos ese texto entre comillas simples. Sin embargo, no se necesitan comillas para los valores numéricos.
SELECT first_name, last_name, city
FROM Readers
WHERE City = ‘Seattle’;
SELECT *
FROM Readers
WHERE CustomerID = 24;
Mejora tus habilidades de creación de scripts con el formateador MySQL avanzado que permite embellecer tu código para obtenerlo exactamente como te gusta.
Ahora, revisemos el uso de WHERE
cláusula. Se trata de un montón de casos específicos. La mejor manera de explorarlos es consultar un MySQL práctico WHERE
ejemplo para cada escenario.
WHERE ejemplo de consulta de condición única
El escenario más simple de usar esta cláusula es MySQL WHERE
teniendo un único criterio para la selección de datos. Supongamos que alguna empresa desea recuperar la lista de sus empleados que trabajan en el departamento de Atención al Cliente como gerentes de soporte:
SELECT
last_name,
first_name,
job_title
FROM
employees
WHERE
jobtitle = 'Support';
La consulta recuperará datos de los empleados y filtre los registros de acuerdo con el valor en el job_title columna. Debe devolver la lista de todos los apellidos y nombres de todos los empleados que trabajan como gerentes de soporte. El resultado es el siguiente:
apellido | nombre | título_trabajo |
Zorro | María | Soporte |
Negro | Juan | Soporte |
Johnson | Steve | Soporte |
Hudson | Diana | Soporte |
Williams | Katie | Soporte |
Verde | Jake | Soporte |
Nota :Codifique menos y logre más con el verificador de sintaxis de MySQL. dbForge Studio para MySQL es un IDE rico en funciones diseñado para facilitar el desarrollo, mantenimiento y administración de bases de datos MySQL y MariaDB.
Múltiples condiciones WHERE
El ejemplo anterior demuestra que MySQL WHERE
cláusula trae datos que coinciden con la condición. En este caso, filtró a todos aquellos empleados que tenían el cargo especificado. Sin embargo, a menudo necesitamos establecer varios criterios para recuperar los datos. Es factible:necesitamos aplicar MySQL WHERE
con los operadores específicos:AND
operador y el OR
operador.
DONDE Y operador
Hagamos nuestro ejemplo anterior un poco más complicado. Queremos la lista de empleados que trabajan en el departamento de Soporte, contratados el año pasado.
Para lograr eso, estableceremos dos condiciones y las uniremos con AND
operador lógico:
SELECT
last_name,
first_name,
job_title,
hire_year
FROM
employees
WHERE
jobtitle = 'Support' AND
hire_year = 2021;
La salida:
apellido | nombre | título_trabajo | año_contratación |
Zorro | María | Soporte | 2021 |
Negro | Juan | Soporte | 2021 |
Johnson | Steve | Soporte | 2021 |
La escritura de código en sí ocupa la mayor parte del tiempo total que dedica al desarrollo y la administración de la base de datos. Duplique su velocidad de codificación con el editor de código MySQL Server refinado y optimizado que viene con dbForge Studio para MySQL.
operador DONDE O
Usando el OR
El operador lógico es otro método para trabajar con varias condiciones en MySQL WHERE
cláusula. Si enviamos esta consulta, devolverá datos que coincidan con los criterios que establecimos.
La empresa quiere comprobar los clientes regulares que vienen de dos ciudades. Para eso, especificaremos esas ciudades y usaremos el OR
operador.
SELECT
lastName,
firstName,
city
FROM
customers
WHERE
city = 'Seattle' OR
city = 'Bellevue';
apellido | nombre | ciudad |
Anderson | María | Seattle |
Negro | Juan | Seattle |
Thompson | Steve | Bellevue |
Smith | Diana | Bellevue |
Williams | Katie | Seattle |
Pedros | Jake | Seattle |
Uso de AND con condiciones OR
MySQL permite combinar MySQL WHERE AND OR
– ambos operadores lógicos pueden estar presentes en una sola sentencia. En este caso, MySQL verificará tres condiciones a la vez.
Por ejemplo, la biblioteca quiere obtener información sobre sus lectores que residen en Bellevue, que se convirtieron en lectores habituales de la biblioteca en 2021 o que han leído más de 20 libros.
En este caso, MySQL WHERE
cadena se vuelve más compleja. Para encajar y organizar AND
&OR
condiciones, usamos los paréntesis para determinar cómo MySQL debe evaluarlas.
Eche un vistazo al siguiente ejemplo:
SELECT *
FROM readers
WHERE (city = 'Bellevue' AND reg_year = '2020')
OR (books_read > 20);
La salida:
apellido | nombre | ciudad | reg_year | libros_leer |
Anderson | María | Seattle | 2021 | 25 |
Jones | Chris | Bellevue | 2020 | 12 |
Thompson | Lora | Seattle | 2020 | 35 |
Farrell | Brian | Bellevue | 2021 | 48 |
Smith | Jeff | Bellevue | 2020 | 50 |
Pedros | Ana | Bellevue | 2020 | 10 |
Patterson | Juan | Bellevue | 2020 | 11 |
Esta salida muestra algunos resultados que coinciden con la condición de la ciudad de residencia + año de registro. También incluye resultados que cumplen la segunda condición de haber leído más de 20 libros.
DONDE ENTRE operador
El operador BETWEEN permite establecer límites más amplios. Suponga que la biblioteca quiere obtener la lista de sus lectores que se unieron en 2019, 2020 y 2021. En lugar de enviar varias consultas o usar AND
operador, podemos establecer el rango para el WHERE
condición usando BETWEEN
operador.
Para recuperar la lista de lectores que se unieron entre 2019 y 2022, enviamos la siguiente consulta:
SELECT
last_Name,
first_Name,
reg_year
FROM
readers
WHERE
reg_year BETWEEN 2019 AND 2021
ORDER BY reg_year;
La salida:
apellido | nombre | reg_year |
Anderson | María | 2019 |
Jones | Chris | 2019 |
Thompson | Lora | 2019 |
Farrell | Brian | 2019 |
Smith | Jeff | 2020 |
Pedros | Ana | 2020 |
Patterson | Juan | 2020 |
Williams | Marcar | 2021 |
Hiks | Andrés | 2021 |
Otorgar | Valentina | 2021 |
operador WHERE LIKE
Aplicar el operador LIKE le permite usar la cláusula WHERE para seleccionar ciertos registros que incluyen un patrón específico. Para definir ese patrón, usamos el signo de porcentaje (%) para reemplazar un carácter o una cadena de varios caracteres de cualquier longitud.
Los patrones más comunes para MySQL SELECT WHERE LIKE
son los siguientes:
WHERE
valor LIKE 'abc%
‘ – encuentra y devuelve todos los valores que comienzan con “abc”
WHERE
valor LIKE '%abc'
– encuentra y devuelve todos los valores que terminan en “abc”
WHERE
valor LIKE '%abc%'
– encuentra y devuelve valores que tienen “abc” en cualquier lugar entre el inicio y el final
Echemos un vistazo a WHERE LIKE
ejemplo. La empresa quiere obtener la lista de sus clientes de EE. UU. y Reino Unido. La consulta es la siguiente:
SELECT ContactName, Country, City
FROM Customers
WHERE Country LIKE 'U%'
ORDER BY ContactName;
La salida es:
Nombre del contacto | País | Ciudad |
Helen Bennett | Reino Unido | Vacas |
Simon Crowther | Reino Unido | Londres |
Hari Kumar | Reino Unido | Londres |
Howard Snyder | EE.UU. | Eugenio |
Yoshi Latimer | EE.UU. | Elgin |
John Steel | EE.UU. | Walla Walla |
Jaime Torres | EE.UU. | San Francisco |
Fran Wilson | EE.UU. | Portland |
DONDE NO ME GUSTA ejemplo
Hay otro caso en el que necesita excluir algunos datos de los resultados. Podemos usar MySQL WHERE NOT LIKE
operador. Encuentra y devuelve los datos que no tienen caracteres específicos.
La empresa quiere una lista de sus clientes de todos los países excepto el Reino Unido y los Estados Unidos. La sintaxis de WHERE NOT LIKE
en MySQL tendrá el siguiente aspecto:
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT LIKE 'U%'
ORDER BY Country;
La salida:
Nombre del contacto | País | Ciudad |
Roland Mendel | Austria | Graz |
Georg Pipps | Austria | Salzburgo |
Catherine Dewey | Bélgica | Bruselas |
Pascale Cartrain | Bélgica | Charleroi |
Elizabeth Lincoln | Canadá | Tsawassen |
Yoshi Tannamuri | Canadá | Vancouver |
Jean Fresnière | Canadá | Montreal |
Jytte Petersen | Dinamarca | København |
Palle Ibsen | Dinamarca | Århus |
Pirkko Koskitalo | Finlandia | Oulu |
Matti Karttunen | Finlandia | Helsinki |
Annette Roulet | Francia | Toulouse |
María Bertrand | Francia | París |
Maria Anders | Alemania | Berlín |
Hanna Mooss | Alemania | Mannheim |
operador DONDE EN
Usando el IN
y NOT IN
Las palabras clave son otra opción para filtrar las filas y recuperar solo una parte de los datos que coincidan con nuestros estrictos criterios. El propósito principal es reducir el número de OR
cláusulas en un SELECT
declaración.
MySQL WHERE IN
apela a las filas que contienen los valores que especificamos para WHERE
condición. Por ejemplo, queremos recuperar la lista de clientes que residen en varios países europeos. El WHERE IN
la sintaxis es la siguiente en MySQL:
SELECT ContactName, Country, City
FROM Customers
WHERE Country IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
Tenga en cuenta que adjuntamos nuestros valores que especifican la condición de búsqueda entre paréntesis. En el caso de trabajar con valores de texto, debemos ponerlos todos entre comillas simples. Sin embargo, si nuestros valores son numéricos, los enumeraremos sin comillas simples, por ejemplo, (25, 35, 45).
La salida de MySQL anterior WHERE IN
cláusula en el SELECT
declaración es:
Nombre del contacto | País | Ciudad |
Catherine Dewey | Bélgica | Bruselas |
Pascale Cartrain | Bélgica | Charleroi |
Frédérique Citeaux | Francia | Estrasburgo |
Laurence Lebihans | Francia | Marsella |
Janine Labrune | Francia | Nantes |
Martine Rancé | Francia | Lille |
Alexander Feuer | Alemania | Leipzig |
Henriette Pfalzheim | Alemania | Köln |
Horst Kloss | Alemania | Cunewalde |
Karin Josephs | Alemania | Munster |
Rita Müller | Alemania | Stuttgart |
Thomas Hardy | Reino Unido | Londres |
Victoria Ashworth | Reino Unido | Londres |
Elizabeth Brown | Reino Unido | Mánchester |
Ann Devon | Reino Unido | Londres |
DONDE NO EN ejemplo
El caso contrario es MySQL WHERE NOT IN
cláusula. Se utiliza para asegurarse de que su consulta ignorará las filas que contienen los valores especificados para la condición. En el ejemplo anterior, solicitamos clientes de los 4 países europeos definidos. MySQL WHERE NOT IN
SELECT
la consulta para la misma solicitud devolverá todos los clientes que residen en otros países, excepto los 4 definidos anteriormente.
SELECT ContactName, Country, City
FROM Customers
WHERE Country NOT IN ('Belgium', 'France', 'Germany', 'UK')
ORDER BY Country;
La salida:
Nombre del contacto | País | Ciudad |
Patricio Simpson | Argentina | Buenos Aires |
Sergio Gutiérrez | Argentina | Buenos Aires |
Brian Citeaux | Canadá | Montreal |
Laura Smith | Canadá | Toronto |
Jane Green | Canadá | Toronto |
Martine Rancé | Canadá | Vancouver |
Alexander Feuer | Canadá | Århus |
Paolo Accorti | Italia | Roma |
Giovanni Rovelli | Italia | Torino |
Ana Moroni | Italia | Pavía |
Nota :Recomendamos usar [NOT] EXISTS
sobre [NOT] IN
ya que EXISTS
el operador lógico funciona más rápido que IN
, al comparar conjuntos de datos mediante una subconsulta. Además, NOT EXISTS
evitará resultados inesperados cuando los datos de origen contengan NULL
valores.
DÓNDE ES NULL operador
Para verificar si un valor es NULL
o no, use el IS NULL
operador. La siguiente declaración usa el WHERE
cláusula con IS NULL
operador para obtener las filas sin un valor en books_read
columna:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NULL;
La salida se verá así:
apellido | nombre | reg_year | libros_leer |
Janet | Overacker | 2020 | NULO |
Lidia | Swenson | 2017 | NULO |
Alberto | Crepeau | 2018 | NULO |
Anastasia | Johnson | 2021 | NULO |
Voluntad | Smith | 2017 | NULO |
Ejemplo de DONDE NO ES NULO
A diferencia del comando anterior, WHERE IS NOT NULL
, por el contrario, muestra solo aquellas filas que contienen algún tipo de valor en la columna en cuestión. En el siguiente ejemplo, vamos a seleccionar solo aquellas filas donde books_read la columna no está vacía:
SELECT last_name, first_name, reg_year, books_read
FROM readers
WHERE books_read IS NOT NULL;
En la salida, verá solo aquellas filas que contienen un valor en books_read columna:
apellido | nombre | reg_year | libros_leer |
Cory | Baster | 2021 | 8 |
Maddison | Winston | 2022 | 3 |
Isabella | Garsia | 2014 | 45 |
Jeremy | Koh | 2022 | 1 |
Aaron | Peterson | 2021 | 15 |
WHERE EXISTS
The EXISTS
operator checks if the subquery returns any value at all. Typically, this operator is used to indicate that at least one row in a table satisfies a certain condition.
In the example below,
SELECT last_name, first_name
FROM customers
WHERE EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
WHERE NOT EXISTS
However, the NOT EXISTS
operator is there for us in case we want to make sure whether there are rows in the table that do not satisfy a certain condition. For example, let’s find all products from the Products table for which there were no orders in the Orders table:
SELECT last_name, first_name
FROM customers
WHERE NOT EXISTS
(SELECT * FROM discounts WHERE customers.id = discounts.customer_id)
There is a separate article in our blog for those willing to learn more about the difference between EXISTS and NOT EXISTS in SQL.
Using MySQL WHERE clause with comparison operators
As we know, the WHERE
condition value can be any number, text, string, or subquery. Besides specifying the condition strictly, we can set a wider meaning for it by using the comparison operators. One example of a similar function is using the BETWEEN
operador. Now, let us review other options to set the condition range.
Operator | Description | Example |
= | Equal to the value. It is applicable for almost any data type. | SELECT * FROM VisitorsWHERE City =’London’; |
<> or != | Not equal to. It excludes the rows matching the value from the results. | SELECT * FROM CustomersWHERE Country=’Germany’ AND City !=’Berlin’; |
< | Less than. Mostly applies to numbers and date/time. | SELECT * FROM CustomersWHERE CustomerID <7; |
> | Greater than. Works in the same way, for numeric values and date/time. | SELECT * FROM CustomersWHERE CustomerID> 10; |
<= | Less than or equal to. The results set includes the rows with the same values or less than the condition value. | SELECT * FROM CustomersWHERE CustomerID <=5; |
>= | Greater than or equal to. The result set includes rows having the same values exceeding the condition values. | SELECT * FROM CustomersWHERE CustomerID>=55; |
In our example, we want to retrieve the list of customers with a customer ID lower than 90 who reside in the USA. The query is the following:
SELECT CustomerID, ContactName, City, Country
FROM Customers
WHERE CustomerID < 90 AND Country ='USA';
The output is:
CustomerID | ContactName | City | Country |
65 | Paula Wilson | Albuquerque | USA |
55 | Rene Phillips | Anchorage | USA |
78 | Liu Wong | Butte | USA |
36 | Yoshi Latimer | Elgin | USA |
32 | Howard Snyder | Eugene | USA |
82 | Helvetius Nagy | Kirkland | USA |
48 | Fran Wilson | Portland | USA |
77 | Liz Nixon | Portland | USA |
45 | Jaime Torres | San Francisco | USA |
89 | Karl Jablonski | Seattle | USA |
55 | Rene Phillips | Anchorage | USA |
Resumen
As you see, MySQL WHERE
is among the most helpful clauses for all MySQL users. The variety of different logical operators lets you focus on the specific portion of data only, filter it correctly, and receive the results you need. Besides, modern professional tools for MySQL databases allow you to perform all tasks faster and easier. They take the burden of manual routines off your shoulders and make the performance much more stable and reliable. To sum up, working with a WHERE
statement is not too complicated. However, it requires being familiar with the corresponding commands. The command-line tools are more oriented toward experienced tech-savvy users. On the contrary, dbForge Studio for MySQL can boast an intuitive graphical interface. The intelligent code completion feature will be of use while working with the WHERE
clause, navigating the code, obtaining quick object information, and instantly performing syntax checks. Moreover, dbForge Query Builder will be of use to easily build WHERE
clauses visually.
Useful Links
- Joins in MySQL
- MySQL update query