Está en la página 1de 11

Diseño de bases de datos I

Ingeniería Informática

7. Lenguaje SQL: Filtrado y operaciones con datos


7.1 Consultas SQL
Una consulta (Query) es una operación que recupera datos de una tabla o vista. SELECT
es la única instrucción SQL que se puede usar para consultar datos. El conjunto de datos
recuperados de la ejecución de una instrucción SELECT se conoce como conjunto de
resultados (Result set).

Los lenguajes formales de consultas están basados en el concepto matemático de que las
relaciones son conjuntos. Así, nunca aparecen tuplas duplicadas en las relaciones. En la
práctica, la eliminación de duplicados consume tiempo. Por tanto, SQL (como la mayoría de
los lenguajes de consultas comerciales) permite duplicados en las relaciones, así como en
el resultado de las expresiones SQL.

Instrucciones:

Sentencia Descripción

SELECT Especifica qué columnas se deben mostrar en el resultado. La


proyección produce un subconjunto de las columnas en la tabla. Cada
select_expr indica una columna que desea recuperar. Debe haber al
menos uno select_expr. Esta cláusula es obligatoria.

FROM Especifica las tablas o vistas desde las que se deben recuperar los
datos. Esta Cláusula es obligatoria.

WHERE Especifica una condición para filtrar filas, produciendo un subconjunto de


las filas en la tabla. Una condición especifica una combinación de una o
más expresiones y operadores lógicos (booleanos) y devuelve un valor
de VERDADERO, FALSO o DESCONOCIDO. Esta sentencia no es
obligatoria.

ORDER BY Especifica el orden en que se deben mostrar las filas.

SELECT se usa para recuperar filas seleccionadas de una o más tablas, y puede incluir
sentencias UNION y subconsultas. La estructura básica de una expresión SQL consta de
tres cláusulas: select, from y where. Sin embargo pueden existir otras instrucciones
complementarias.

El resultado de una consulta SELECT nos devuelve una tabla lógica. Es decir, los
resultados son una relación de datos, que tiene filas/registros, con una serie de
campos/columnas. Igual que cualquier tabla de la base de datos. Sin embargo esta tabla
está en memoria mientras la utilicemos, y luego se descarta. Cada vez que ejecutamos la
consulta se vuelve a calcular el resultado.

Sintaxis básica:

26
Diseño de bases de datos I
Ingeniería Informática

SELECT
[ALL | DISTINCT | DISTINCTROW ]
select_expr [, select_expr] ...
[FROM table_references]
[WHERE where_condition]
ORDER BY {col_name | expr | position}
[ASC | DESC], ...]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

Una expresión es una combinación de uno o más valores, operadores y funciones SQL que
se resuelve en un valor. La lista de expresiones que aparece después de la palabra clave
SELECT y antes de la cláusula FROM se llama lista de selección. El símbolo asterisco “ * ”
se puede usar para denotar “todos los atributos”. Las cláusulas SELECT de la forma
SELECT * indican que se deben seleccionar todos los atributos de todas las relaciones que
aparecen en la cláusula FROM.

Los modificadores ALL y DISTINCT especifican si se deben devolver filas duplicadas. ALL
(el valor predeterminado) especifica que se deben devolver todas las filas coincidentes,
incluidos los duplicados. DISTINCT específica la eliminación de filas duplicadas del conjunto
de resultados. Es un error especificar ambos modificadores.

La cláusula WHERE, si se proporciona, indica la condición o condiciones que las filas deben
cumplir para ser seleccionadas. where_condition es una expresión que se evalúa como
verdadera para cada fila que se seleccionará. La declaración selecciona todas las filas si no
hay una cláusula WHERE. En la expresión WHERE, puede usar cualquiera de las funciones
y operadores que admite MySQL, excepto para funciones agregadas.

7.2 Operadores matemáticos y lógicos comunes


Existen varios operadores lógicos y matemáticos que se utilizan para evaluar expresiones.
Estos operadores se pueden utilizar para evaluar condiciones con la cláusula WHERE al
momento de filtrar datos en una consulta. Algunos operadores son aplicables a valores
numéricos, otros a caracteres y otros a ambos tipos de datos.

Operadores Lógicos:
Operador Descripción Operador Descripción

> Mayor que <= Menor o igual que

>= Mayor o igual que = Igual que

< Menor <> Distinto, no igual

and Disyunción (Y) or Conjunción (O)

BETWEEN Entre IS NOT NULL No es nulo

NOT Negación IS NULL Es nulo

27
Diseño de bases de datos I
Ingeniería Informática

8. Funciones de fecha y texto

8.1 Funciones de fecha y tiempo


Las funciones que esperan valores de fecha generalmente aceptan valores de fecha y hora
e ignoran la parte de tiempo. Funciones que esperan valores de tiempo generalmente
aceptan valores de fecha y hora e ignoran la parte de fecha.
Operador Descripción
CURDATE() Devuelve la fecha del momento en que se ejecuta.
NOW() Devuelve la fecha y el tiempo del momento en que se
ejecuta.
DATE_FORMAT(date,format) Recibe una fecha, y retorna un formato siguiendo los
literales de la cadena format.
STR_TO_DATE(str,format) Recibe una cadena de caracteres válida (str), y retorna
una fecha siguiendo los literales de cadena format

Las funciones que devuelven la fecha o la hora actual se evalúan sólo una vez por consulta
al comienzo de la consulta de ejecución. Esto significa que múltiples referencias a una
función como NOW () dentro de una sola consulta siempre produce el mismo resultado.
(Para nuestros propósitos, una sola consulta también incluye una llamada a un programa
almacenado (rutina almacenada, desencadenante o evento) y todos los subprogramas
llamados por ese programa).

Algunas funciones de fecha se pueden usar con fechas "cero" o fechas incompletas como
'2001-11-00', mientras que otros no pueden. Las funciones que extraen partes de fechas
generalmente funcionan con fechas incompletas y, por lo tanto, pueden devolver 0 cuando
de otro modo podría esperar un valor distinto de cero.

Para conocer más sobre funciones de fecha, visite la documentación oficial de MySQL:
https://dev.mysql.com/doc/refman/8.0/en/string-functions.html

Literal Descripción Literal Descripción


%a Nombre del día de la semana %M Nombre del mes
abreviado
%b Nombre de mes abreviado %m Número del mes (00..12)
%c Número del mes (1..12) %s Seconds
%d Número de día del mes (00..31) %W Nombre dia de la semana
%H Hora (00..23) %w Número de día de la semana

%h Hora (01..12) %Y Año, número de cuatro dígitos

28
Diseño de bases de datos I
Ingeniería Informática

%i Número de minutos (00..59) %y Año, número de dos dígitos

8.2 Funciones de texto

Operador Descripción
CHAR_LENGTH(str) Recibe como parámetro una cadena de
caracteres y retorna el número de caracteres en
dicho parámetro.
CONCAT(str1,str2,..) Recibe uno o más cadenas de caracteres
separadas por comas y devuelve una sola cadena
con todas las cadenas unidas.
LOWER (str) Convierte una cadena de caracteres en letras
minúsculas.
REPLACE(str,from_str,to_str) Retorna la cadena str con todas las ocurrencias
de from_str reemplazadas por to_str

SUBSTRING(str,pos,len) Retorna una subcadena de texto str


comenzando desde la posición indicada pos y
con la longitud indicada len

TRIM(str) Devuelve una cadena de caracteres sin espacios


antes ni después de la cadena recibida como
parámetros str.

UPPER(str) Convierte una cadena de caracteres en letras


mayúsculas.

29
Diseño de bases de datos I
Ingeniería Informática

9. Funciones Matemáticas y de agregado

9.1 Funciones matemáticas


Las funciones de cadenas de caracteres y de fecha actúan sobre campos de datos de tipo
carácter y tipo fecha respectivamente. Para el caso de los campos tipo numérico también
existen un gran número de funciones matemáticas que son útiles al momento de realizar
consultas. Las funciones matemáticas retornan un valor de tipo numérico, excepto en los
casos en que haya un error, entonces retornará un valor nulo (NULL).

Operador Descripción
CEIL(X) Recibe un número decimal y retorna el número menor entero.
FLOOR(X) Recibe un número decimal y retorna el número mayor entero.
ROUND(X,D) Recibe un número decimal X y retorna el número redondeado con la
cantidad decimales especificados D.
POW(X,Y) Retorna el número base X elevado al número exponencial Y.
SQRT(X) Retorna la raíz cuadrada de un número X.

9.2 Operadores aritméticos


Los operadores aritméticos nos permiten realizar cálculos aritméticos entre campos en una
consulta SQL. MySQL soporta los operadores aritméticos usuales. La división por cero
produce como resultado un valor nulo (NULL). La precisión del resultado de una operación
será la del operando con mayor precisión.

En caso de la suma, resta y multiplicación el resultado es calculado con un tipo de dato


BIGINT de 64 bits cuando ambos operandos son enteros. En mySQL los operadores
aritméticos aplican a números, por tanto para realizar operaciones con fechas se debe
utilizar las respectivas funciones de fecha DATE_ADD() Y DATE_SUB() para sumar o restar
fechas respectivamente.

Operador Descripción
+ Operador de adición
- Operador de sustracción
* Operador de producto o multiplicación
/ Operador de división.
DIV División de enteros. Elimina decimales del resultado.
MOD Operador Módulo o cociente de división.

30
Diseño de bases de datos I
Ingeniería Informática

9.3 Funciones de agrupación


Las funciones agregadas devuelven una única fila de resultados basada en grupos de filas
en lugar de en filas individuales. La agregación es fundamental para el almacenamiento de
datos. Las funciones agregadas también se llaman funciones de agrupación dado que
realiza cálculos con grupos de datos. Van acompañadas por la cláusula de agregación
GROUP BY. A menos que se indique lo contrario, las funciones de grupo omiten los valores
NULL.
Si utiliza una función de grupo en una instrucción que no contiene ninguna cláusula GROUP
BY, equivale a agrupar en todas las filas. Para eliminar valores duplicados, utilice la cláusula
DISTINCT.

Operador Descripción

AVG() Retorna promedio de un conjunto de valores en una fila.

COUNT() Devuelve un recuento del número de filas devueltas

MAX() Retorna el valor máximo de un conjunto de valores de una fila.

MIN() Retorna el valor mínimo de un conjunto de valores de una fila.

SUM() Retorna la suma de un conjunto de valores en una fila.

9.3.1 Agrupación de datos (GROUP BY)


La cláusula GROUP BY agrupa un conjunto de filas en un conjunto de filas de resumen por
valores de columnas o expresiones. La cláusula GROUP BY devuelve una fila para cada
grupo. En otras palabras, reduce el número de filas en el conjunto de resultados.

SELECT year, country, product, SUM(profit) AS profit


FROM sales GROUP BY year, country, product;

La cláusula GROUP BY debe aparecer después de las cláusulas FROM y WHERE. A


continuación de las palabras clave GROUP BY hay una lista de columnas o expresiones
separadas por comas que indican los criterios para agrupar filas. Estos criterios de
agrupación deben ser establecidos tanto en la cláusula SELECT como en después de la
cláusula GROUP BY.

9.3.2 Filtrando grupos de datos (cláusula HAVING)


La claùsula WHERE se utiliza para filtrar filas en un conjuntos de resultados de una
consulta. La cláusula HAVING se utiliza en la instrucción SELECT para especificar
condiciones de filtro para un grupo de filas o agregados. La cláusula HAVING se utiliza a
menudo con la cláusula GROUP BY para filtrar grupos en función de una condición
especificada. Si se omite la cláusula GROUP BY, la cláusula HAVING se comporta como la
cláusula WHERE. Tenga en cuenta que la cláusula HAVING aplica una condición de filtro a
cada grupo de filas, mientras que la cláusula WHERE aplica la condición de filtro a cada fila
individual.

31
Diseño de bases de datos I
Ingeniería Informática

10. Combinaciones y subconsultas

10.1 Álgebra relacional


El álgebra relacional se inspira en la teoría de conjuntos para especificar consultas en una
base de datos relacional. Las operaciones del álgebra relacional han sido clasificadas según
distintos criterios; de todos ellos indicamos los tres siguientes:

● Según se pueden expresar o no en términos de otras operaciones.


● Según el número de relaciones que tienen como operandos
● Según se parecen o no a las operaciones de la teoría de conjuntos

Como se ha dicho, una tabla es un conjunto de datos relacionados. Al momento de hacer


consultas para generar reportes o análisis de datos, será necesario combinar la información
de las tablas por medio de sus campos clave. Para ellos podemos hacer uso de la teoría de
conjuntos para entender la forma en que se pueden combinar los datos de las tablas sin
distorsionar la información.

Las operaciones del álgebra relacional pueden ser unarias cuando operan sobre una sola
relación o conjunto. Mientras que las operaciones binarias involucran pares de relaciones.
Las operaciones conjuntistas del álgebra relacional son la unión, la intersección, la
diferencia y el producto cartesiano.
Los diagramas de Venn son una excelente herramienta para visualizar y comprender las
operaciones conjuntistas.

En bases de datos las operaciones binarias de álgebra relacional son denominadas JOIN.
Un JOIN es una consulta que combina filas de dos o más tablas, vistas.

Operación union (UNION ALL)

La unión es una operación que, a partir de dos relaciones, obtiene una nueva relación
formada por todas las tuplas que están en alguna de las relaciones de partida. Más
concretamente, para poder aplicar la unión a dos relaciones, es preciso que las dos
relaciones sean compatibles, esto es que cada deben tener el mismo número de atributos
cada uno con el mismo dominio.

10.2 Cláusula UNION


La Cláusula UNION combina el resultado de varias instrucciones SELECT en un solo
conjunto de resultados. Los nombres de las columnas del conjunto resultado se toman de
los nombres de columna de la primera instrucción SELECT.

32
Diseño de bases de datos I
Ingeniería Informática

SELECT ... (SELECT


UNION [ALL | DISTINCT] t1.a, t1.b, t1.c
SELECT ... FROM t1 WHERE a=10 AND B=1)
[UNION [ALL | DISTINCT] SELECT UNION
...] (SELECT
t2.x, t2.y, t2.z
FROM t2 WHERE a=11 AND B=2);

Las columnas seleccionadas enumeradas en las posiciones correspondientes de cada


instrucción SELECT deben tener los mismos datos tipo. Por defecto, las filas duplicadas se
eliminan de los resultados de UNION. La palabra clave opcional DISTINCT tiene el mismo
efecto pero lo hace explícito. Con la palabra clave opcional ALL, no se produce la
eliminación de filas duplicadas y el resultado incluye todas las filas coincidentes de todas las
instrucciones SELECT.

10.3 La cláusula INNER JOIN


La intersección es una operación que, a partir de dos
relaciones, obtiene una nueva relación formada por las
tuplas que pertenecen a las dos relaciones de partida.

La intersección, como la unión, sólo se puede aplicar a


relaciones que tengan tuplas similares. Para poder hacer
la intersección de dos relaciones, es preciso, pues, que
las relaciones sean compatibles.

SELECT SELECT
t1.campo1, t1.campo2, …, t1.name,
T2.campo1, t2.campo2, … t2.salary
from tabla1 as t1 FROM employee AS t1
INNER JOIN tabla2 as t2 INNER JOIN info AS t2
ON (t1.campo1 = t2.campo1) ON t1.name = t2.name;

10.4 La cláusula LEFT JOIN


En algunos casos, puede interesar hacer combinaciones de
los datos de dos relaciones sin que haya pérdida de datos
de las relaciones de partida. Entonces, se utilizan las
combinaciones externas. Las combinaciones externas entre
dos relaciones consisten en variantes de combinación que
conservan en el resultado todas las tuplas una de las
relaciones o de ambas relaciones.

33
Diseño de bases de datos I
Ingeniería Informática

En teoría de conjuntos esto se conoce como diferencia. La diferencia es una operación que,
a partir de dos relaciones, obtiene una nueva relación formada por todas las tuplas que
están en la primera relación y, en cambio, no están en la segunda.

SELECT SELECT
t1.campo1, t1.campo2, …, t1.name,
T2.campo1, t2.campo2, … t2.salary
from tabla1 as t1 FROM employee AS t1
LEFT JOIN tabla2 as t2 LEFT JOIN info AS t2
ON ON t1.name = t2.name;
(t1.campo1 = t2.campo1)

Con la cláusula LEFT OUTER JOIN se hace una combinación externa en la que obtenemos
todos las tuplas del primer conjunto y aquellos que son coincidentes en el segundo conjunto
de resultados. De este modo no tenemos pérdida de información en ese primer conjunto. El
resultado recuperado mostrará campos con valores nulos para aquellas tuplas que no
hayan coincidido en el segundo conjunto.

10.5 La cláusula RIGHT OUTER JOIN


La cláusula RIGHT JOIN es una combinación externa, en la
que se obtienen las tuplas del primer conjunto que son
coincidentes con las tuplas del segundo conjunto, conservando
aquellas tuplas del segundo conjunto que no están en el
primero. De esta forma se evita la pérdida de tuplas en el
segundo conjunto, mostrando valores nulos para aquellas
tuplas que no hayan coincidido con el primer conjunto.

SELECT SELECT
t1.campo1, t1.campo2, …, t1.name,
T2.campo1, t2.campo2, … t2.salary
from tabla1 as t1 FROM employee AS t1
RIGHT JOIN tabla2 as t2 RIGHT JOIN info AS t2
ON ON t1.name = t2.name;
(t1.campo1 = t2.campo1)

34
Diseño de bases de datos I
Ingeniería Informática

10.6 Otras combinaciones

10.7 Subconsultas
Una subconsulta es una instrucción SELECT anidada dentro de otra instrucción SQL. Las
subconsultas son útiles cuando se deben ejecutar varias consultas para resolver un único
problema. Cada parte de consulta de una instrucción se denomina bloque de consulta.

Decimos que la subconsulta está anidada dentro de la consulta externa, y de hecho es


posible anidar subconsultas dentro de otras subconsultas, a una profundidad considerable.
Una subconsulta siempre debe aparecer entre paréntesis. La subconsulta entre paréntesis
es el bloque de consulta interno.

Las principales ventajas de las subconsultas son:


● Permiten consultas que están estructuradas para que sea posible aislar cada parte
de una instrucción.
● Proporcionan formas alternativas de realizar operaciones que de otro modo
requerirían uniones y uniones complejas.

35
Diseño de bases de datos I
Ingeniería Informática

● Muchas personas encuentran subconsultas más legibles que las uniones complejas.
De hecho, fue la innovación de las subconsultas lo que dio a la gente la idea original
de llamar al sql temprano "Lenguaje de consulta estructurado".

Una subconsulta puede devolver un escalar (un valor único), una sola fila, una sola columna
o una tabla (una o varias filas de una o varias columnas). Se denominan subconsultas
escalares, de columna, de fila y de tabla. Las subconsultas que devuelven un tipo
determinado de resultado a menudo se pueden usar solo en determinados contextos, como
se describe en las secciones siguientes.

10.7.1 Subconsulta como un operador escalar


Una subconsulta escalar es un operando simple y puede usarlo casi en cualquier lugar
donde un valor de columna o literal sea legal, y puede esperar que tenga esas
características que tienen todos los operandos: un tipo de datos, una longitud, una
indicación de que puede ser NULL, etc.

SELECT (SELECT s1 FROM t2) Una subconsulta que con un solo resultado
FROM t1; también puede usarse como un campo.
SELECT Una subconsulta como escalar también puede ser
UPPER((SELECT s1 FROM t1)) utilizada como argumento en una función.
FROM t2;

SELECT * FROM t1 Una subconsulta como escalar se puede utilizar


WHERE para evaluar condiciones.
column1 = (
SELECT MAX(column2)
FROM t2
);

36

También podría gustarte