Unidad Didáctica 2: Uso de Bases de Datos Relacionales Parte 1: El Lenguaje SQL: Consultas y Actualización (DML)
Unidad Didáctica 2: Uso de Bases de Datos Relacionales Parte 1: El Lenguaje SQL: Consultas y Actualización (DML)
(Doc. UD2.1)
Bases de Datos
Departamento de Sistemas Informáticos y Computación / Universidad Politécnica de Valencia
1
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
Objetivos:
2
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
3
1 Introducción a SQL
4
1 Introducción a SQL
Sublenguajes de SQL
❑ Lenguaje de Definición de Datos (LDD –DDL en inglés)
6
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
7
Presentación de la base de datos Ciclismo
Se desea mantener información de una vuelta ciclista , para ello se ha definido una base de datos relacional cuyo
esquema se muestra a continuación:
ETAPA (netapa: entero, km: entero, salida: cadena(35), llegada: cadena(35), dorsal:entero)
CP: {netapa}
CAj: {dorsal}→ CICLISTA
PUERTO (nompuerto: cadena(40), altura: entero, categoria:cadena(1), pendiente: real, netapa: entero, dorsal: entero)
CP: {nompuerto}
CAj: {netapa}→ ETAPA
CAj: {dorsal}→ CICLISTA
VNN: {netapa}
9
Presentación de la base de datos
Ciclismo
Descripción de los atributos de cada relación:
Equipo
nomeq: cómo se llama el equipo ciclista.
director: nombre del preparador técnico del equipo.
Ciclista
dorsal: nº de dorsal asignado al ciclista durante la carrera.
nombre: cómo se llama el corredor.
edad: cuántos años tiene.
nomeq: nombre del equipo al que pertenece.
Etapa
netapa: número de la etapa en la vuelta.
km: cuántos kilómetros tiene la etapa.
salida: nombre de la ciudad de donde parte la etapa.
llegada: nombre de la ciudad donde está la meta de la etapa.
dorsal: dorsal del ciclista que ha ganado la etapa.
Puerto
nompuerto: cómo se llama el puerto de montaña.
altura: altura máxima del puerto.
categoria: cuál es la categoría del puerto (1ª, especial, …).
pendiente: % de pendiente media del puerto.
netapa: número de la etapa donde se sube el puerto.
dorsal: dorsal ciclista que ha ganado el puerto al pasar en primera posición.
Maillot
codigo: código del maillot.
tipo: indica qué clasificación premia ese maillot.
color: cómo es la camiseta asociada a ese premio.
premio: cuánto dinero gana el ciclista que acabe la vuelta con ese maillot.
Llevar:
El ciclista con dorsal dorsal ha llevado en la etapa de número netapa el maillot identificado por codigo.
10
2 Introducción SELECT
Consultas sobre la Base de Datos
Notación de la sintaxis
Notación Significado
MAYÚSCULAS palabras reservadas de SQL
Cursiva: componentes de la base de datos
Texto normal: elementos a definir más adelante
E1, E2,…, En lista separada por comas de Ei, donde i>0
| separador de opciones alternativas
[] contenido opcional
{ }: contenido obligatorio
11
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
información a obtener
12
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
1 FROM tabla
2 [WHERE condición]
13
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
14
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
16
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
Expresion: Funciones agregadas
Obtienen un valor calculado de la expresión, en el conjunto de filas
obtenidas.
SINTAXIS
{AVG | MAX | MIN | SUM | COUNT } ([ALL|DISTINCT] expresión_escalar) |
COUNT(*)
1 {AVG | MAX | MIN | SUM | COUNT } ( [ALL|DISTINCT] expresión ):
Esta opción {} indica que se debe elegir uno de los nombres(AVG, MAX, …) de las
funciones, que son, respectivamente la media (average en inglés), el máximo, el mínimo,
la suma y la cuenta
2 COUNT (*): es una función agregada que da como resultado el número de filas de
la selección, es decir, cuenta las filas.
19
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
3 SELECT[ALL|DISTINCT]{expresión1, expresión2,..., expresiónn| *}
1 FROM tabla
2 [WHERE condición]
4 [ORDER BY columna1, columna2,..., columnan]
EJEMPLO 1: Obtener el nombre de todos los ciclistas del equipo ‘Banesto’ que
sean mayores de 27 años. SELECT nombre
FROM Ciclista
WHERE nomeq= ‘Banesto’ AND edad > 27;
EJEMPLO 2: Obtener el nombre de todos los ciclistas del equipo ‘Banesto’, que tengan 27
años ó más de 30 SELECT nombre
FROM Ciclista
WHERE nomeq= ‘Banesto’ AND (edad = 27 OR edad>30);
exp BETWEEN exp1 AND exp2 (exp >= exp1) AND (exp <= exp2)
22
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
Predicado: LIKE
24
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
Predicado: IN
EJEMPLO: Obtener el nombre de los puertos de 1ª, 2ª
o 3ª categoría.
SELECT nompuerto FROM Puerto
WHERE categoria IN ( ‘1’, ‘2’, ‘3’ ) ;
(*) También el predicado IN es derivado y la equivalencia es:
exp IN (exp1, exp2, , expn) (exp=exp1) OR (exp=exp2) OROR (exp=expn)
Predicado: IS NULL
EJEMPLO: Obtener todos los datos de aquellos ciclistas
de los que se conoce su edad.
SELECT * FROM Ciclista
WHERE edad IS NOT NULL;
25
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
COMPARACIÓN DE VALORES NULOS
Las comparaciones entre cualquier valor y NULL resultan en
indefinido. Ejemplo:
SELECT *
FROM Tabla
WHERE atrib1 > atrib2
Si, p. ej., atrib1 = 50 y atrib2 fuera nulo, el resultado de la comparación
sería indefinido; la fila no se seleccionaría.
28
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas
SINTAXIS
30
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas
31
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas
USO DE CLAVES AJENAS EN CONSULTAS DE VARIAS TABLAS
SELECT C.nombre
FROM Ciclista C, Equipo E
WHERE C.nomeq = E.nomeq AND E.director = ‘Alvaro Pino’;
33
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas
USO DE CLAVES AJENAS EN CONSULTAS DE VARIAS TABLAS
Obtención de filas repetidas.
Al combinar varias tablas, una misma fila de una tabla R puede
aparecer relacionada con varias filas de otra tabla S.
34
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
35
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
Cuando
información buscada una tabla
Usando subconsultas:
FROM Etapa
WHERE netapa IN Subconsulta que
devuelve números de
(SELECT netapa etapas que aparecen
en puerto, e.d, las que
FROM Puerto) tienen puertos
37
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
EJEMPLO: Obtener los nombres de los ciclistas
pertenecientes al equipo dirigido por ‘Alvaro Pino’.
Usando igualdades:
SELECT C.nombre
FROM CICLISTA C, EQUIPO E
WHERE C.nomeq=E.nomeq
AND E.director=‘Alvaro Pino’
Usando subconsultas:
SELECT C.nombre
FROM Ciclista C
WHERE C.nomeq =
(SELECT E.nomeq FROM Equipo E
WHERE E.director = ‘Alvaro Pino’);
Esta consulta es posible porque
1. la consulta no pide información que esté en la tabla de la subconsulta,
2. la subconsulta retorna un único valor.
38
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS QUE ACEPTAN SUBCONSULTAS
39
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS QUE ACEPTAN SUBCONSULTAS
PREDICADOS DE COMPARACIÓN (=, <>, >, <, >=, <=)
SINTAXIS:
expresión predicado de comparación expresión
Las subconsultas pueden ser argumentos de un predicado de
comparación siempre que
1. devuelvan una única fila, y
2. la columna resultante de la subconsulta coincida en tipo
con el otro lado del predicado de comparación.
41
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS QUE ACEPTAN SUBCONSULTAS
PREDICADO IN
SINTAXIS:
expresión [NOT] IN (expresión_tabla)
42
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
SUBCONSULTAS ENCADENADAS
43
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS DE COMPARACION CUANTIFICADOS
>
>=
< ALL predicado de
(expresión) (subconsulta) comparación
<= ANY
cuantificado
=
<>
44
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS DE COMPARACION CUANTIFICADOS
EJEMPLO: Obtener el nombre de los puertos de mayor
altura.
SELECT P.nompuerto
FROM Puerto P
WHERE P.altura
>= ALL
(SELECT DISTINCT (P2.altura)
FROM Puerto P2)
45
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS DE COMPARACION CUANTIFICADOS
EJEMPLO: Obtener los nombres de puertos que no son
los de menor pendiente.
SELECT P.nompuerto
FROM Puerto P
WHERE P.pendiente
> ANY
(SELECT DISTINCT (P2.pendiente)
FROM Puerto P2)
46
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS DE COMPARACION CUANTIFICADOS
47
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADO EXISTS
Sintaxis: EXISTS (expresión_tabla)
El predicado EXISTS se evalúa a cierto si la
expresión_tabla devuelve al menos una fila.
48
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADO EXISTS
EJEMPLO: Obtener el nombre de aquellos ciclistas que
han llevado un maillot de un premio menor de 50000.
SELECT C.nombre FROM Ciclista C
WHERE EXISTS
(SELECT * FROM Llevar L, Maillot M
WHERE L.codigo=M.codigo AND
L.dorsal=C.dorsal AND M.premio<50000)
50
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
Evaluación de los predicados con subconsultas vacías
PREDICADO EVALUACIÓN
51
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
Uso de EXISTS para cuantificación universal
(NO HAY EN SQL de MSQL Server , Oracle)
X F(X) X F(X)
Nota: Se sabe que en esta base de datos hay etapas de más de 200 km. 52
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
“Obtener el nombre del ciclista tal que no existe una etapa
de más de 200 km. que él no haya ganado (que la haya
ganado otro)”
Nota: Se sabe que en esta base de datos hay etapas de más de 200 km.
53
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
Obtener el nombre del ciclista que ha ganado todas
las etapas de más de 300 km.
55
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
56
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
SINTAXIS
57
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
Relación Selección-Agrupamiento
❑ Un grupo se puede entender como un conjunto de filas
que tienen en el conjunto de columnas que se
incluyen en la cláusula GROUP BY, el mismo valor.
❑ Las funciones agregadas en las consultas agrupadas
funcionan de forma diferente que en las consultas
normales, ya que se aplican a cada grupo formado.
❑ En una consulta agrupada sólo se puede realizar una
selección que devuelva una sola fila por cada grupo
formado en la consulta.
58
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
EJEMPLO INCORRECTO:
SELECT nomeq, nombre, AVG(edad) FROM Ciclista
GROUP BY nomeq;
59
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
GROUP y WHERE
Si se incluye la cláusula WHERE, la aplicación
de esta cláusula se produce previamente a la
agrupación.
SELECT nomeq, AVG(edad)
FROM Ciclista
1 WHERE edad > 25
2 GROUP BY nomeq;
60
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
Ejemplo:
SELECT nomeq, avg(edad) FROM ciclista
GROUP BY nomeq
HAVING avg(edad)>30 and nomeq like 'B%‘
62
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
63
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY
64
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
65
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Existen otras formas de combinar varias tablas en consultas
que, junto con las ya vistas (1,2), dan lugar a una
“expresión de tabla”.
Las formas de combinar dos tablas en el lenguaje SQL son:
1. Inclusión de varias tablas en la cláusula FROM.
2. Uso de subconsultas en las condiciones de las cláusulas
WHERE o HAVING.
3. Combinaciones conjuntistas de tablas: utilizan para
combinar las tablas, operadores de la teoría de
conjuntos.
4. Concatenaciones de tablas: combinan dos tablas
utilizando diferentes formas variantes del operador
concatenación del Álgebra Relacional.
66
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Combinación Conjuntista
67
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Combinación Conjuntista: UNION
68
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Combinación Conjuntista
70
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
71
2 Introducción SELECT
2.7 Operador JOIN
CONCATENACIONES DE TABLAS
➢ Producto cartesiano
➢ Concatenación interna
➢ Concatenación externa
72
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Interna
referencia_tabla1 [INNER] JOIN referencia_tabla2 ON condicion
Condicion = referencia_tabla1.columna α referencia_tabla2.columna
Siendo α : >, >= , =, <, <=, <>
SELECT nombre
FROM Ciclista INNER JOIN Equipo ON ciclista.nomeq=Equipo.nomeq
WHERE director = ‘Álvaro Pino’;
73
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Interna
referencia_tabla1 [INNER] JOIN referencia_tabla2 ON condicion
Condicion = referencia_tabla1.columna α referencia_tabla2.columna
Siendo α : >, >= , =, <, <=, <>
74
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Interna
referencia_tabla1 [INNER] JOIN referencia_tabla2 ON condicion
Condicion = referencia_tabla1.columna α referencia_tabla2.columna
Siendo α : >, >= , =, <, <=, <>
75
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Interna
78
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Externa: RIGHT JOIN
referencia_tabla1 RIGHT JOIN referencia_tabla2 ON condicion
Condicion = referencia_tabla1.columna α referencia_tabla2.columna
Siendo α : >, >= , =, <, <=, <>
80
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
81
3 Lenguaje de manipulación de datos(LMD)
82
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
83
3 Lenguaje de manipulación de datos (LMD)
3.1 Instrucción INSERT
INTRODUCCIÓN DE INFORMACIÓN
Sintaxis de la operación INSERT
85
3 Lenguaje de manipulación de datos (LMD)
3.1 Instrucción INSERT
INTRODUCCIÓN DE INFORMACIÓN:
Ejemplo de inserción de una tupla incompleta:
86
3 Lenguaje de manipulación de datos (LMD)
3.1 Instrucción INSERT
INTRODUCCIÓN DE INFORMACIÓN:
Ejemplo de inserción múltiple:
Añadir a la tabla ‘Ciclista_ganador’, (con el mismo esquema
que Ciclista), la información de los ciclistas que hayan ganado
alguna etapa.
INSERT INTO Ciclista_ganador
SELECT * FROM Ciclista
Expresión
tabla WHERE dorsal IN (SELECT dorsal FROM etapa)
87
UD2.1 El lenguaje SQL (LMD)
Consultas y Actualización
1. Introducción a SQL
2. Instrucción SELECT.
1. Consultas sencillas sobre una tabla.
2. Consultas simples sobre varias tablas
3. Consultas complejas: Subconsultas
4. Consultas complejas: Agrupación (GROUP BY)
5. Operadores conjuntistas
6. Operador JOIN
3. Lenguaje de Manipulación de Datos (LMD)
1. Instrucción INSERT
2. Instrucción DELETE
3. Instrucción UPDATE
4. Instrucciones de control de transacciones
88
3 Lenguaje de manipulación de datos (LMD)
3.2 Instrucción DELETE
ELIMINACIÓN DE INFORMACIÓN:
Sintaxis de la operación DELETE
DELETE FROM tabla [WHERE condición]
90
3 Lenguaje de manipulación de datos (LMD)
3.3 Instrucción UPDATE
MODIFICACIÓN DE INFORMACIÓN:
Sintaxis de la operación UPDATE
SINTAXIS:
UPDATE tabla SET asignación1, asignación 2,…, n asignaciónn
[WHERE condición]
Ejemplo:
Incrementar un 10% los premios de los maillots.
91
3 Lenguaje de manipulación de datos (LMD)
3.3 Instrucción UPDATE
MODIFICACIÓN DE INFORMACIÓN:
Sintaxis de la operación UPDATE
SINTAXIS:
UPDATE tabla SET asignación1, asignación 2,…, n asignaciónn
[WHERE condición]
Ejemplo:
Los ciclistas del Kelme se cambian todos al equipo K10
de nueva creación.
93
4 Instrucciones de Control de Transacciones
94
4 Instrucciones de Control de Transacciones
Ejemplo:
COMMIT;
Nota: Para que esta transacción se ejecute, hay que indicarle al SGBD que
no compruebe la integridad referencial hasta después del COMMIT.
95