CONSULTAS SQL – PARTE 1
TEORÍA 4
Introducción a las Bases de Datos y
Bases de Datos
Tecnicaturas TUPAR y TUDAI
2019
LENGUAJE DE CONSULTA SQL
SELECT * | { [DISTINCT] columna | expresion [alias],...}
FROM <lista tablas>
ESCRITURA DE SENTENCIAS SQL
SELECT mi_atributo
FROM mi_tabla;
DERE DEL ESQUEMA UNC_ESQ_VOLUNTARIO
4
CONSULTAS SQL BÁSICAS
Ejemplo: selección de los datos completos de las instituciones.
SELECT *
FROM institucion;
Se usa para especificar la recuperación de todos los datos de la/s tabla/s
27 fila(s)
Tiempo total de ejecución: 2.589 ms
SQL ejecutada.
CONSULTAS SQL BÁSICAS
Ejemplo: seleccionar el código y el nombre de las instituciones.
SELECT id_institucion, nombre_institucion
FROM institucion;
FILAS DUPLICADAS
Ejemplo: Seleccionar los voluntarios que son coordinadores.
Ejemplo: Seleccionar los distintos voluntarios que son coordinadores.
SELECT id_coordinador
FROM voluntario;
SELECT DISTINCT id_coordinador
FROM voluntario;
…
ELIMINAR LOS VALORES REPETIDOS
Ejemplo: Seleccionar los voluntarios coordinadores y las distintas instituciones de los empleados coordinados.
SELECT DISTINCT id_institucion, id_coordinador
FROM voluntario;
EJERCICIOS 1
9
USO DE OPERADORES ARITMÉTICOS�
Precedencia de los Operadores
* / + -
USO DE OPERADORES ARITMÉTICOS�
Ejemplo: Seleccionar los nombres de las tareas y los rangos de duración (diferencia entre horas maximas y mínimas) de cada una.
¿Que obtendremos en estos casos?
Los paréntesis se usan para forzar evaluaciones prioritarias y para clarificar sentencias!!
SELECT nombre_tarea, max_horas – min_horas
FROM tarea;
SELECT nombre_tarea, 2*max_horas – min_horas
FROM tarea;
SELECT nombre_tarea, 2*(max_horas – min_horas)
FROM tarea;
RENOMBRADO DE COLUMNAS
SELECT nombre_tarea, max_horas – min_horas AS variacion
FROM tarea;
SELECT nombre_tarea, max_horas – min_horas variacion
FROM tarea;
SELECT apellido || ‘,’ || nombre AS “Apellido,nombre”
FROM voluntario;
EJERCICIOS 2
13
RESTRINGIR FILAS RECUPERADAS
SELECT * | { [DISTINCT] columna | expresión [alias],...}
FROM <lista tablas>
[WHERE condicion/es];
RESTRINGIR FILAS RECUPERADAS
Por ejemplo recuperar el nro de voluntario, nombre y apellido de los voluntarios que trabajan en la institución cuyo identificador es 60.
SELECT nro_voluntario, nombre, apellido
FROM voluntario
WHERE id_institucion = 60;
CONDICIONES DE COMPARACIÓN
SELECT *
FROM voluntario
WHERE id_tarea= 'ST_MAN';
SELECT *
FROM voluntario
WHERE id_tarea != 'ST_MAN';
EJERCICIOS 3
17
OTROS OPERADORES DE COMPARACIÓN
Ejemplo: Seleccionar las voluntarios cuyo número se encuentra entre 100 y 120
SELECT * FROM voluntario
WHERE nro_voluntario BETWEEN 100 AND 120;
OTROS OPERADORES DE COMPARACIÓN POSTGRESQL
SELECT *
FROM voluntario
WHERE id_tarea IS NOT DISTINCT FROM 'ST_MAN';
OPERADOR LIKE
Ejemplo: Seleccionar los voluntarios cuya segunda letra del nombre sea a y luego tenga una n como carácter final.
SELECT * FROM voluntario WHERE nombre LIKE ‘_a%n’;
OPERADOR SIMILAR TO (POSTGRESQL)
SELECT * FROM voluntario WHERE nombre SIMILAR TO ‘_a%n’;
OPERADOR IS [NOT] NULL
Ejemplo: listar los datos completos de los voluntarios que no tengan coordinador.
SELECT * FROM voluntario
WHERE id_coordinador IS NULL;
OPERADOR IS [NOT] NULL
SELECT * FROM voluntario
WHERE porcentaje<=0.1
OR porcentaje IS NULL;
CONDICIONES DE COMPARACIÓN COMPUESTAS
CONDICIONES DE COMPARACIÓN COMPUESTAS
Importante:
Qué sucede si se eliminan ()?
SELECT nro_voluntario,
apellido,
id_institucion,
id_coordinador
FROM voluntario
WHERE (id_coordinador=100
OR id_coordinador=124)
AND id_institucion=50;
Ejemplo: Seleccionar los voluntarios que son coordinados por los voluntarios nro 100 o 124 y están trabajando para la institución cuyo código es 50.
…AL ELIMINAR ()
Estas filas no corresponden a la institución cuyo identificador es 50!!
No es válida la consulta sin los paréntesis en la condición!!!
EJERCICIOS 4
27
ORDEN EN LA PRESENTACIÓN DE LAS TUPLAS
Ejemplo listar los apellidos ordenados descendentemente y nombres de los voluntarios que son coordinados por el voluntario 124.
SELECT apellido, nombre
FROM voluntario
WHERE id_coordinador=124
ORDER BY apellido DESC, nombre;
LIMIT AND OFFSET (POSTGRESQL)
SELECT lista de atributos
FROM tabla/s
[ORDER BY ... ]
[LIMIT { número | ALL}]
[OFFSET número];
LIMIT AND OFFSET (POSTGRESQL)
Ejemplo: seleccionar los datos de los voluntarios que corresponden a los 10 primeros voluntarios.
Ejemplo: seleccionar los datos de los voluntarios a partir del 15TO voluntario.
SELECT *
FROM voluntario
ORDER BY nro_voluntario
LIMIT 10;
SELECT *
FROM voluntario
ORDER BY nro_voluntario
LIMIT ALL
OFFSET 15;
EJERCICIOS 5
31
¿QUÉ SON FUNCIONES DE GRUPO O AGREGACIÓN?
Estas funciones operan sobre conjuntos de filas para proporcionar un resultado por grupo.
Cantidad de horas aportadas por todos los voluntarios
…
FUNCIONES DE GRUPO O AGREGACIÓN
Permiten resumir el resultado de una consulta:
i
SELECT [columna, ...] funcion de grupo(columna), ...
FROM tabla/s
[WHERE condicion/es]
FUNCIONES DE GRUPO O AGRUPAMIENTO
Ejemplo: seleccionar el voluntario mas joven y el mas viejo.
SELECT SUM(horas_aportadas), AVG(horas_aportadas), MAX(horas_aportadas), MIN(horas_aportadas)
FROM voluntario;
SELECT MAX(fecha_nacimiento) AS voluntario_mas_joven,
MIN(fecha_nacimiento) AS voluntario_mas_viejo
FROM voluntario;
FUNCIONES DE GRUPO O AGRUPAMIENTO
Ejemplo: Liste el número de ciudades en la tabla dirección, excluyendo los valores nulos.
SELECT COUNT(*)
FROM voluntario;
SELECT COUNT(ciudad) AS cantidad__de_ciudades
FROM direccion;
FUNCIONES DE GRUPO Y VALORES NULOS
SELECT AVG(porcentaje) AS Porcentaje_promedio
FROM voluntario;
SELECT AVG(NVL(porcentaje, 0)) AS Porcentaje_promedio
FROM voluntario;
SELECT AVG(COALESCE(porcentaje, 0)) AS Porcentaje_promedio
FROM voluntario;
EJEMPLOS DE FUNCIONES DE GRUPO O AGRUPAMIENTO
Alias de columna
SELECT COUNT(*) AS cantidad_de_voluntarios
FROM voluntario;
SELECT SUM(horas_aportadas) AS Horas_trabajadas
FROM voluntario v WHERE v.id_coordinador=120;
Alias de tabla
SELECT MAX(horas_aportadas) maximo, MIN(horas_aportadas) minimo, MAX(horas_aportadas) – MIN(horas_aportadas) diferencia
FROM voluntario v
WHERE v.id_coordinador=120;
SELECCIÓN SOBRE GRUPOS DE DATOS
La clausula GROUP BY especifica como se deben agrupar las filas seleccionadas.
SELECT lista columnas, función de grupo (columna)
FROM <lista tablas>
[ WHERE condición ]
[GROUP BY expresión de grupo | lista columnas
[ ORDER BY <lista atributos orden> ];
CREACIÓN DE GRUPOS DE DATOS O AGREGACIONES
¿Cuántos voluntarios tiene cada Institución?
…
SELECT id_institucion, COUNT(*) AS cantidad_voluntarios
FROM voluntario
GROUP BY id_institucion;
SINTAXIS DE LA CLAUSULA GROUP BY
Todas las columnas de la lista SELECT, excepto las funciones de grupo, deben estar en la cláusula GROUP BY.
Ejemplo: liste las diferentes instituciones y el máximo de horas aportadas a cada una de ellas
Ejemplo: determine los porcentajes promedio de los voluntarios por institución.
SELECT AVG(porcentaje)
FROM voluntario
GROUP BY id_institucion;
SELECT id_institucion, MAX(horas_aportadas)
FROM voluntario
GROUP BY id_institucion;
EJERCICIOS 6
41
RESTRINGIR LOS RESULTADOS DE LOS GRUPOS
Coordinadores con más de 7 voluntarios
SELECT id_coordinador, COUNT(*) AS cantidad_de_voluntarios
FROM voluntario
GROUP BY id_coordinador
HAVING COUNT(*) > 7;
Se puede anexar la cláusula HAVING para restringir grupos
FUNCIONES DE GRUPO NO VÁLIDAS
43
SELECT id_coordinador, COUNT(*) AS cantidad_de_voluntarios
FROM voluntario
WHERE COUNT(*) >7
GROUP BY id_coordinador;
Sentencia NO VALIDA
EJERCICIOS 7
44
PARA RECORDAR!!!
Practicar…
Practicar… !!!
Recomendaciones