En esta clase hablaremos acerca de los operadores de comparación en MySQL, también conocidos por su verdadero nombre «operadores relacionales», estos son utilizados para comparar igualdades y desigualdades, Los operadores de comparación se utilizan con la cláusula WHERE para determinar qué registros seleccionar.
Operador | Descripción |
= | Igual |
<=> | Igual (Compara con seguridad valores NULL) |
<> | Diferente |
!= | Diferente |
> | Mayor Que |
>= | Mayor o Igual Que |
< | Menor Que |
<= | Menor o Igual Que |
IN ( ) | Valores que Coinciden en una Lista |
NOT | Negar una Condición |
BETWEEN | Valores en un Rango (incluye los extremos) |
IS NULL | Verifica si el Valor es NULL |
IS NOT NULL | Verifica si el Valor es diferente de NULL |
LIKE | Definir un patrón de búsqueda y utiliza % y _ |
EXISTS | La condición se cumple si la subconsulta devuelve al menos una fila |
Operador relacional de Igualdad o Igual
En MySQL, puede utilizar el operador relacional «=» para comprobar la igualdad en una consulta. El operador = sólo puede comprobar igualdad con valores que no son NULL.
Ejemplo:
SELECT *
FROM contactos
WHERE apellido = 'Jameson';
En este ejemplo, la instrucción SELECT anterior devolverá todas las filas de la tabla de contactos en la que apellido es igual a Jameson.
Operador relacional de Igualdad (Con valores NULL)
Debido a que el operador relacional de igualdad o igual a «=«, sólo compara los valores diferentes de NULL, no es seguro utilizar con valores NULL. Para superar esta limitación, MySQL agregó el operador <=> para permitirte comprobar la igualdad con valores NULL y no NULL.
Para explicar mejor la diferencia entre el operador = y el operador <=>, incluiremos algunos ejemplos con consultas y datos.
Suponiendo que tenemos una tabla llamada contactos en MySQL con los siguientes datos:
contacto_id | nombre | website1 | website2 |
1 | Jameson | tertulianet.com | NULL |
2 | JuliAnderson | NULL | NULL |
3 | Pepe | ADB | ADB |
4 | Jackie | JackieConsuelte.com | ElKikiriki.com |
Podemos usar el operador = en la siguiente consulta:
SELECT *
FROM contactos
WHERE website1 = website2;
Como utilizamos el operador =, obtendríamos los siguientes resultados:
contacto_id | Apellido | website1 | website2 |
3 | Pepe | ADB | ADB |
En el ejemplo, la instrucción SELECT anterior devolverá todas las filas de la tabla de contactos donde el website1 es igual al website2. No devuelve el segundo registro donde website1 y website2 son valores NULL.
Ahora vamos a ver qué sucede cuando reescribimos nuestra consulta usando el operador <=> que es seguro de usar con valores NULL:
SELECT *
FROM contactos
WHERE website1 <=> website2;
Como utilizamos el operador <=>, obtendríamos los siguientes resultados:
contacto_id | apellido | website1 | website2 |
2 | JuliAnderson | NULL | NULL |
3 | Pepe | ADB | ADB |
Ahora nuestra consulta devuelve todas las filas de la tabla de contactos donde website1 es igual a website2, incluidos aquellos registros donde website1 y website2 son valores NULL.
Operador relacional de Desigualdad, distinto de o diferente de
Podemos utilizar los operadores <> o ! = Para comprobar la desigualdad en una consulta.
Por ejemplo, podríamos comprobar la desigualdad usando el operador <>, como sigue:
SELECT *
FROM contactos
WHERE apellido <> 'Jameson';
En el ejemplo anterior, la instrucción SELECT devolverá todas las filas de la tabla de contactos en la que apellido no es igual a Johnson.
O también podría utilizar el operador !=, así como continua:
SELECT *
FROM contactos
WHERE apellido != 'Jameson';
Ambas consultas retornaran los mismos resultados.
Operador relacional Mayor Que
Puede utilizar el operador > en MySQL para comprobar una expresión mayor que.
SELECT *
FROM contactos
WHERE contacto_id > 50;
Veamos con un ejemplo como la instrucción SELECT devolverá todas las filas de la tabla de contactos donde el contacto_id es mayor que 50. Un contacto_id igual a 50 no se incluiría en el conjunto de resultados.
Operador relacional Mayor o Igual Que
En MySQL, puede usar el operador >= para comprobar una expresión mayor o igual que.
SELECT *
FROM contactos
WHERE contacto_id >= 50;
En este ejemplo, la sentencia SELECT devolverá todas las filas de la tabla de contactos donde el contacto_id es mayor o igual a 50. En este caso, contacto_id igual a 50 se incluiría en el conjunto de resultados.
Operador relacional Menor Que
Puede usar el operador < en MySQL para comprobar una expresión menor que.
SELECT *
FROM inventario
WHERE producto_id < 210;
En este ejemplo, la instrucción SELECT devolverá todas las filas de la tabla de inventario donde el id_producto es menor que 210. Un id_producto igual a 210 no se incluiría en el conjunto de resultados.
Operador relacional Menor o Igual Que
En MySQL, puede utilizar el operador <= para comprobar una expresión menor o igual a.
SELECT *
FROM inventario
WHERE producto_id <= 300;
La instrucción SELECT devolverá todas las filas de la tabla de inventario donde el id_producto es menor que 210. Un id_producto igual a 210 también se incluiría en el conjunto de resultados.
Hasta el momento hemos utilizado operadores relacionales, sin embargo MySQL tambien posee funciones que nos ayudaran abordar mejor esta tarea de comparar valores y dar resultados.
Operador IN()
Puedes hacer uso del operador IN(). para listar uno o más valores, los cuales se tomaran en cuenta en la busqueda.
SELECT *
FROM inventario
WHERE producto_id IN(300,1089,2000,45);
En lo anterior, la instrucción SELECT devolverá todas las filas de la tabla de inventario donde el id_producto sea 300, 1089, 2000 y 45. Únicamente los id_producto que coincidan con los valores que están dentro de IN() se incluiría en el conjunto de resultados.
Operador lógico NOT
El uso del operador NOT se limita a invertir el resultado de la instrucción a su derecha, por lo general se combina con el operador INT() , EXISTS, NULL, BETWEEN, entre otros.
SELECT *
FROM inventario
WHERE producto_id NOT IN(300,1089,2000,45);
Esta instrucción SELECT devolverá todas las filas de la tabla de inventario donde el id_producto sea diferente de 300, 1089, 2000 y 45. Esto se debe a que el operador NOT esta invirtiendo el resultado que devolvería IN(), Únicamente los id_producto que no coincidan con los valores que están dentro de IN() serán devueltos en el conjunto de resultados.
Operador BETWEEN
El operador BETWEEN tiene un uso similar al de los operadores «<» y «>», que que este establece un rango inicial y un rango final, adicional a esto también es necesario usar el operador AND.
SELECT *
FROM inventario
WHERE producto_id BETWEEN 300 AND 1000;
Con el uso de BETWEEN , la instrucción SELECT devolverá todas las filas de la tabla de inventario donde el id_producto se encuentre dentro del rango de 300 y 1000 , incluyendo el 300 y el 1000. También podemos combinar este operador con el operador NOT y este invertirá los resultados.
Operador LIKE
El operador LIKE en MySQL tiene un uso único entre los operadores, este busca las coincidencias de un patrón dentro de una valor, para esto utiliza los caracteres % y guíon bajo «_»
Guion Bajo «_»
En este operador utilizaremos otra tabla que contenga información más variada para poder sacar a relucir el potencial.
id | N_orden |
---|---|
22004 | primero |
22274 | segundo |
22334 | tercero |
22814 | cuarto |
22480 | quinto |
22811 | sexto |
22165 | séptimo |
22728 | octavo |
22334 | noveno |
22893 | décimo |
Nuestro primer ejemplo será utilizando el guión bajo (underscore) o _
SELECT *
FROM ordenes
WHERE Id LIKE '____4';
Este será el resultado, MySql solo traerá solo los registro que terminan con el número 4 , pero que antes de ese valor contienen 4 caracteres.
id | N_orden |
---|---|
22004 | primero |
22274 | segundo |
22334 | tercero |
22814 | cuarto |
22334 | noveno |
El uso del guion bajo (_) en el operador LIKE, indica la cantidad de caracteres que se deben tomar en cuenta en esa consulta, en otras palabras si utilizo dos (2) guiones bajos (_) al inicio del patrón, solo se tomarán en cuenta los registros que tengan dos caracteres antes del valor.
Los guiones bajos se pueden colocar donde se quiere que coincida el patrón, en el próximo ejemplo no se colocaran al inicio sino en un lugar arbitrario
SELECT *
FROM ordenes
WHERE Id LIKE '__8__';
Esta consulta producirá el siguiente resultado.
id | N_orden |
---|---|
22814 | cuarto |
22811 | sexto |
22893 | décimo |
Esto se debe a que solo esos tres registros cumplen con el patrón de la consulta.
Algo que hay que destacar es que los guiones bajos, sustituyen a los caracteres, es decir si tengo un campo donde sus valores tienen 10 caracteres, entonces debo crear un patrón que llene esos 10 caracteres, sea con valores o guiones bajos, por eso en los ejemplos anteriores hay 4 guiones bajos, para un campo que tenga valores de longitud variada solo se tomaran en cuenta los que cumplan con la longitud del patrón.
Es decir, si en la tabla anterior usara el siguiente patrón no traerá resultados:
‘_5_’
¿Por qué?
porque este patrón solo toma en cuenta valores con longitud de 3 caracteres, ni mayor ni inferior.
El número de guiones bajos y caracteres pueden ser según la necesidad.
El número de guiones bajos y caracteres pueden ser según la necesidad.
‘_a_p’
‘a___’
‘_3_5_2’
‘_____’
‘0_quer_8’
‘a___’
‘_3_5_2’
‘_____’
‘0_quer_8’
Estos son ejemplos de patrones, puedes crear el tuyo según los datos que quieres filtrar.
Ahora bien, que pasa si quiero filtrar valores sin tener la limitante de la longitud de caracteres presentada anteriormente por el patrón creado por el guión bajo
Símbolo de porcentaje «%»
En este caso utilizaremos el símbolo de porcentaje (%)
Un patrón creado utilizando símbolo de porcentaje indica que donde se coloque el %, le dirá a MySql que hay caracteres, sin importar la longitud o cantidad.
El siguiente patrón indica que se tomen en cuenta los valores que inicien con 9, sin importar cuantos caracteres más tiene el valor.
SELECT * FROM ordenes WHERE Id LIKE '9%';
Pero también podría ser inverso, los valores que terminan con uno o varios caracteres
SELECT * FROM ordenes WHERE Id LIKE '%9';
Podría ser un CÓDIGO que inicie con a, tenga dos (2) caracteres luego un numero (podría ser el 8) y que tenga mas caracteres.
SELECT * FROM ordenes WHERE Codigo LIKE 'a__9%';
O tal vez que tome en cuenta algunos caracteres que se encuentren presente en el valor.
SELECT * FROM ordenes WHERE Nombre LIKE '%pepe%';
o
SELECT * FROM ordenes WHERE Nombre LIKE '%pe%ju%';
FECHA DE ENTREGA: 24/04/2020
ESCRIBIR UNA BREVE DESCRIPCIÓN DE CADA UNO DE LOS OPERADORES DE COMPARACIÓN ANTERIORMENTE DESCRITOS.
No hay comentarios.:
Publicar un comentario