Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Consultas SQL: Manipulación de Datos con Tablas Múltiples, Apuntes de Algoritmos Avanzados

Base de datos contiene script y clases de estudio

Tipo: Apuntes

2020/2021

Subido el 29/05/2021

kayn-g4
kayn-g4 🇵🇪

5 documentos

1 / 46

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
SQL: DML MANIPULACIÓN DE DATOS
CONSULTAS USANDO TABLAS MÚLTIPLES
En los ejemplos utilizaremos el Esquema University:
Student(stuId, lastName, firstName, major, créditos)
Faculty(facId, name, departament, rank)
Class(classNumber, facId, schedule, room)
Enroll(stuId, classumber, grade)
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e

Vista previa parcial del texto

¡Descarga Consultas SQL: Manipulación de Datos con Tablas Múltiples y más Apuntes en PDF de Algoritmos Avanzados solo en Docsity!

CONSULTAS USANDO TABLAS MÚLTIPLES

En los ejemplos utilizaremos el Esquema University:

Student(stuId, lastName, firstName, major, créditos)

Faculty(facId, name, departament, rank)

Class(classNumber, facId, schedule, room)

Enroll(stuId, classumber, grade)

CONSULTAS USANDO TABLAS MÚLTIPLES

Ejemplo 1. Combinación (Reunión) natural

Pregunta: Obtener las ID y nombres de todos los estudiantes que cursan ART 103 A.

Solución: Se usan dos tablas. Primero se busca en la tabla Enroll para registros donde el classNumber es ‘ART 103 A’. Luego se busca en la tabla Student los registros con valores stuId coincidentes, y se combinan dichos registros en una nueva tabla. A partir de esta tabla, se encuentran lastName y firstName. Esto es similar a la operación JOIN en el álgebra relacional. SQL permite hacer una operación combinación (reunión) natural del álgebra relacional, al nombrar las tablas involucradas y expresar en el predicado la condición que deben cumplir los registros en el campo común.

Consulta SQL:

SELECT Enroll.stuId, lastName, firstName

FROM Student, Enroll

WHERE ClassNumber = 'ART 103 A' AND Enroll.stuId = Student.stuId;

CONSULTAS USANDO TABLAS MÚLTIPLES

Ejemplo 4. Uso de alias

SELECT COPY1.classNumber, COPY1.schedule, COPY1.room, COPY2.classNumber, COPY2.schedule

FROM Class COPY1, Class COPY

WHERE COPY1.room = COPY2.room

AND COPY1.classNumber < COPY2.classNumber;

Observación: Se debe introducir los nombres calificados en la línea SELECT. Esto es necesario porque cada columna en la tabla Class ahora aparece dos veces, una vez en cada copia. Se agregó la segunda condición "COPY1.classNumber < COPY2.classNumber" para evitar incluir a cada curso consigo mismo, pues cada curso satisface el requisito de que se imparte en el mismo salón. También evita que aparezcan en el resultado registros con los dos cursos invertidos. De modo incidental se pueden introducir alias en cualquier SELECT aun cuando no se requieren.

CONSULTAS USANDO TABLAS MÚLTIPLES

Ejemplo 3. Combinación (Reunión) natural de tres tablas

Pregunta: Encontrar los números de curso y los nombres y especialidades de todos los estudiantes inscritos en los cursos impartidos por el miembro Faculty F110.

Solución: Como en el ejemplo anterior, se necesita empezar en la tabla Class para encontrar el classNumber de todos los cursos impartidos por F110. Luego se comparan éstos con los valores classNumber en la tabla Enroll para encontrar los valores stuId de todos los estudiantes en dichos cursos. Luego se busca en la tabla Student para encontrar los nombres y especialidades de todos los estudiantes inscritos en ellos.

Consulta SQL:

SELECT Enroll.classNumber, lastName firstName, major

FROM Class, Enroll, Student

WHERE facId = 'F110' AND

Class.classNumber = Enroll.classNumber AND

Enroll.stuId = Student.stuId;

CONSULTAS USANDO TABLAS MÚLTIPLES

Ejemplo 5. Combinación sin condición de igualdad

Pregunta: Encontrar todas las combinaciones de estudiantes y Faculty donde la especialidad del estudiante sea diferente del departamento del miembro Faculty.

Solución: Esta solicitud inusual es para ilustrar una combinación en la que la condición no sea una igualdad en un campo común. En este caso, los campos que se examinan, major y department, incluso no tienen el mismo nombre. Sin embargo, se les puede comparar ya que tienen el mismo dominio. Dado que no se dice cuáles columnas mostrar en el resultado, se usa su criterio.

Consulta SQL:

SELECT stuId, lastName, firstName, major, facId, name, department

FROM Student, Faculty

WHERE Student.major <> Faculty.department;

CONSULTAS USANDO TABLAS MÚLTIPLES

Ejemplo 4. Uso de alias

Pregunta: Obtener una lista de todos los cursos que se imparten en el mismo salón, con sus horarios y números de salón.

Solución: Esto requiere comparar la tabla Class consigo misma, y sería útil si hubiera dos copias de la tabla de modo que se podría usar una combinación (reunión). Pueden existir dos copias de una tabla al darle dos "alias", por ejemplo, COPY1 y COPY2. Los "alias" se introducen en la línea FROM al escribirlos inmediatamente después de los nombres de tabla reales.

Consulta SQL:

SELECT COPY1.classNumber, COPY1.schedule, COPY1.room, COPY2.classNumber, COPY2.schedule

FROM Class COPY1, Class COPY2 WHERE COPY1.room = COPY2.room AND COPY1.classNumber < COPY2.classNumber;

TABLAS CONCATENADAS (REUNIDAS) Y

CONCATENACIONES (REUNIONES) EXTERIORES

El concepto de tabla (o relación) predeterminado de concatenación (reunión) en una tabla concatenada es una concatenación (reunión) interna, en la que una tupla se incluye en el resultado si en la otra relación existe una tupla coincidente. Por ejemplo, en la consulta C 2 , que recupera el primer apellido del empleado y el primer apellido de su supervisor, en el resultado sólo se incluyen los empleados que tienen un supervisor, se excluyen las tuplas EMPLEADO cuyo valor para SuperDni es NULL. Si se necesita que se incluyan todos los empleados, debe utilizarse explícitamente una operación OUTER JOIN (reunión externa). En SQL, esto se manipula especificando explícitamente el OUTER JOIN en una tabla concatenada, como en la consulta C 2 B

C2B: SELECT E.Apellido 1 AS NombreDeEmpleado, S.Apellido 1 AS NombreDeSupervisor

FROM (EMPLEADO AS E LEFT OUTER JOIN EMPLEADO AS S ON E.SuperDni = S.Dni);

TABLAS CONCATENADAS (REUNIDAS) Y CONCATENACIONES

(REUNIONES) EXTERIORES

Las opciones disponibles para especificar las tablas concatenadas (combinadas o reunidas) en SQL son INNER JOIN (igual que JOIN), LEFT OUTER JOIN, RIGHT OUTER JOIN y FULL OUTER JOIN. En las tres últimas opciones puede omitirse la palabra clave OUTER. Si los atributos de concatenación tienen el mismo nombre, se puede especificar la variación de concatenación natural de las concatenaciones externas utilizando la palabra clave NATURAL antes que la operación (por ejemplo, NATURAL LEFT OUTER JOIN). La palabra clave CROSS JOIN se utiliza para especificar la operación PRODUCTO CARTESIANO. También se pueden anidar especificaciones de concatenación; es decir, una de las tablas de una concatenación puede ser una tabla concatenada. La consulta C siguiente: Por cada proyecto ubicado en Gijón, mostrar su número, el número del departamento que lo gestiona y el primer apellido, dirección y fecha de nacimiento del director del mismo, utilizando el concepto de una tabla concatenada siguiente C 3 A: SELECT NumProyecto, NumDptoProyecto, Apellido1, Dirección, FechaNac FROM ((PROYECTO JOIN DEPARTAMENTO ON NumDptoProyecto = NúmeroDpto) JOIN EMPLEADO ON DniDirector = Dni) WHERE UbicaciónProyecto = 'Gijón’;

CONSULTAS ANIDADAS (SUBCONSULTAS) Y

COMPARACIONES DE CONJUNTOS

En algunas consultas es preciso obtener valores existentes en la base de datos para usarlos en una condición de comparación. Tales consultas se pueden formular mediante consultas anidadas (subconsultas) que son consultas completas dentro de la cláusula WHERE de otra consulta, la cual se denomina consulta exterior. En general podemos tener varios niveles de consultas anidadas.

Ejemplo: Obtener los números de los proyectos en los que trabaja el empleado de apellido Silva

Select numerop

From proyecto

where numerop in (select num from trabaja_en, empleado

where nsse = nss and apellido = Silva);

El operador de comparación IN (en) compara un valor v con un conjunto (o multiconjunto) de valores V y produce el valor TRUE (verdadero) si v es uno de los elementos de V.

CONSULTAS ANIDADAS (SUBCONSULTAS) Y

COMPARACIONES DE CONJUNTOS

Siempre que una consulta anidada (subconsulta) hace referencia a un atributo de una tabla declarada en la consulta exterior, se dice que las dos consultas están correlacionadas. En este caso, la consulta anidada se evalúa una sola vez para cada tupla (o combinación de tuplas) en la consulta exterior.

Ejemplo: Obtener el nombre de pila y apellido de todos los empleados que tienen un dependiente con el mismo nombre de pila que el empleado

Select e.first_name, e.last_name

From employees e

Where e.employee_id in (select d.employee_id from dependiente d

Where d.employee_id = e.employee_id and

d.nombre = e.first_name);

CONSULTAS ANIDADAS (SUBCONSULTAS) Y

COMPARACIONES DE CONJUNTOS

Además del operador IN, podemos usar otros operadores de comparación para comparar un valor individual v (por lo regular un nombre de columna) con un conjunto V (por lo regular una consulta anidada o subconsulta). El operador = ANY (o = SOME ) devuelve TRUE si el valor v es igual a algún valor del conjunto V, y por tanto equivale a IN. Las palabras reservadas ANY y SOME tienen el mismo significado. Otros operadores que se pueden combinar con ANY (o SOME) incluyen >, >=, <, <= y < >. También es posible combinar la palabra reservada ALL (todas) con uno de estos operadores. Por ejemplo, la condición de comparación (v > ALL V) devuelve TRUE si el valor v es mayor que todos los valores del conjunto V

CONSULTAS ANIDADAS (SUBCONSULTAS) Y

COMPARACIONES DE CONJUNTOS

Ejemplo: Obtener el nombre de pila, apellido, nombre del trabajo y salario de los empleados cuyo salario es menor que cualquiera de los salarios de los empleados cuyo nombre de trabajo termina en REP y el nombre de trabajo de dichos empleados no termina en REP, ordenados por salario.

Select first_name, last_name, job_id, salary

From employees

Where salary < ANY (select salary from employees where job_id LIKE ‘%REP’) and job_id NOT LIKE ‘%REP’ order by salary;

Ejemplo: Obtener el nombre de pila, apellido, nombre del trabajo y salario de los empleados cuyo salario es mayor que todos los salarios de los empleados cuyo nombre de trabajo termina en CLERK, ordenados por salario.

Select first_name, last_name, job_id, salary from employees where salary

ALL (select salary from employees where job_id LIKE ‘%CLERK’) order by salary;

CONSULTAS ANIDADAS (SUBCONSULTAS) Y

COMPARACIONES DE CONJUNTOS

Función EXISTS y NOT EXISTS

Ejemplo: Obtener los nombres de pila y apellido de los empleados que no tienen dependientes.

Select e.first_name, e.last_name From employees e

Where NOT EXISTS (select * from dependiente d where d.employee_id = e.employee_id);

Ejemplo: Obtener todos los códigos de clientes que tengan una cuenta de depósito en todas las agencias localizadas en Santiago. Ejemplo del uso de la División (DIVIDE BY) del álgebra relacional:

Depósito[CodCliente, CodAgencia] DIVIDEBY (Agencia WHERE Ciudad = ‘Santiago’[CodAgencia])

Select DISTINCT DX.CodClie From Deposito DX

Where NOT EXISTS (select CodAgencia from Agencia where Ciudad = 'Santiago' MINUS select DISTINCT DY.CodAgencia from Deposito DY where DX.CodCliente = DY.CodCliente);

CONSULTAS CON FUNCIONES AGREGADAS

SQL cuenta con las funciones agregadas (cuenta), (suma), (máximo), (mínimo) y (promedio). La función COUNT devuelve el número de tuplas o valores especificados en una consulta. Las funciones SUM, MAX, MIN y AVG se aplican a un conjunto o multiconjunto de valores numéricos y devuelven, respectivamente, las suma, el valor máximo, el valor mínimo y el promedio de esos valores. Estas funciones se pueden usar en la cláusula SELECT o en una cláusula HAVING.

Ejemplo: Obtener el total de los empleados, la suma de sus salarios, el salario máximo, el salario mínimo y el salario promedio.

Select count(*), sum(salary), max(salary), min(salary), avg(salary)

From employees;

El argumento * de la función COUNT, especifica que se tienen que contar todas las filas para devolver el número total de filas de una tabla. Cuenta todas las filas, incluidas las que contienen valores NULL y duplicados.

Ejemplo: Obtener el número de valores de salarios distintos de los empleados. Select count(distinct salary) From employees;

El argumento DISTINCT especifica que COUNT devuelva el número de valores únicos (distintos) no NULL de la columna.