0% encontró este documento útil (0 votos)
46 vistas95 páginas

Unidad Didáctica 2: Uso de Bases de Datos Relacionales Parte 1: El Lenguaje SQL: Consultas y Actualización (DML)

Este documento presenta una unidad didáctica sobre el uso de bases de datos relacionales. Explica el lenguaje SQL para consultas y actualización de datos, incluyendo instrucciones SELECT, INSERT, DELETE y UPDATE. También presenta la base de datos CICLISMO como ejemplo, con tablas como EQUIPO, CICLISTA, ETAPA y PUERTO. Finalmente, ofrece ejemplos de consultas SQL sencillas sobre una tabla usando SELECT.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
46 vistas95 páginas

Unidad Didáctica 2: Uso de Bases de Datos Relacionales Parte 1: El Lenguaje SQL: Consultas y Actualización (DML)

Este documento presenta una unidad didáctica sobre el uso de bases de datos relacionales. Explica el lenguaje SQL para consultas y actualización de datos, incluyendo instrucciones SELECT, INSERT, DELETE y UPDATE. También presenta la base de datos CICLISMO como ejemplo, con tablas como EQUIPO, CICLISTA, ETAPA y PUERTO. Finalmente, ofrece ejemplos de consultas SQL sencillas sobre una tabla usando SELECT.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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:

❑ Presentar la sintaxis del lenguaje SQL (sólo el Lenguaje


de Manipulación).
❑ Ver algunos ejemplos sencillos para clarificar la
semántica del SQL.
❑ Presentar la base de datos CICLISMO.
❑ Realizar de menor a mayor complejidad consultas SQL
sobre la base de datos CICLISMO.

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

❑ El lenguaje SQL (Structured Query Language - lenguaje de consulta estructurado)

Es un lenguaje de acceso a bases de datos relacionales.

❑ Permite, entre otras cosas


➢ crear y modificar esquemas de bases de datos y
➢ especificar las operaciones sobre bases de datos.

❑ Aúna características del álgebra y el cálculo relacional.

4
1 Introducción a SQL
Sublenguajes de SQL
❑ Lenguaje de Definición de Datos (LDD –DDL en inglés)

➢ crear y modificar esquemas de BD.

❑ Lenguaje de Manipulación de Datos (LMD -DML en inglés)


➢ consulta y actualización de las BD.
✓ SELECT (consulta)
✓ INSERT (inserción de tuplas)
✓ DELETE (borrado de tuplas)
✓ UPDATE (modificación de tuplas)

❑ Otras instrucciones (no se estudiarán)

❑ Lenguaje de Control para cambiar dinámicamente propiedades de la BD.


5
1 Introducción a SQL

Lenguaje de Manipulación de Datos (LMD)


Se presentan las instrucciones que se pueden ejecutar desde un
intérprete de SQL, lo que se denomina SQL interactivo.
SQL es un lenguaje muy expresivo y, en general, permite muchas formas
de expresar las misma órdenes.
Las instrucciones que componen el LMD son las siguientes:
• SELECT: permite la declaración de consultas para la recuperación
de información de una o más tablas de una base de datos.
• INSERT: realiza la inserción de una o varias filas sobre una tabla.
• DELETE: permite efectuar el borrado de una o varias filas de una
tabla.
• UPDATE: realiza una modificación de los valores de una o más
columnas de una o varias filas de una tabla.

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:

EQUIPO (nomeq: cadena(25), director: cadena(40))


CP: {nomeq}
UNI:{director}

CICLISTA (dorsal: entero, nombre: cadena(40), edad: entero, nomeq: cadena(25))


CP: {dorsal}
CAj: {nomeq}→ EQUIPO
VNN: {nomeq}
VNN: {nombre}

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}

MAILLOT(codigo: cadena(3), tipo: cadena(30), premio: entero, color: cadena(20))


CP: {codigo}

LLEVAR(dorsal: entero, netapa: entero, codigo: cadena(3))


CP: {netapa,codigo}
CAj: {netapa}→ ETAPA
CAj: {dorsal}→ CICLISTA
CAj: {codigo}→ MAILLOT
VNN: {dorsal}
8
Presentación de la base de datos
Ciclismo

Esquema gráfico de la base de datos CICLISMO

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

SELECT [ALL | DISTINCT] {expresión1, expresión2,..., expresiónn | * }


FROM tabla
dónde se obtiene la información buscada
[WHERE condición]
condición que deben cumplir las
filas de la consulta resultante
[GROUP BY columna1, columna2, ….,columnan
[HAVING condición]]

[ORDER BY {columna1, columna2,..., columnan | *} [ASC | DESC] ]

ordena por una o varias columnas

12
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla

Orden de ejecución de las distintas cláusulas


de una instrucción SELECT:
3 SELECT [ALL|DISTINCT]{expresión1, expresión2,..., expresiónn| *}

1 FROM tabla

2 [WHERE condición]

4 [ORDER BY columna1, columna2,..., columnan]

ALL : Permite la aparición de filas idénticas (valor por defecto).


DISTINCT: No permite la aparición de filas idénticas.

13
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla

EJEMPLO: Obtener el nombre y la edad de todos


los ciclistas. SELECT nombre, edad
FROM Ciclista;

EJEMPLO: Obtener el nombre y la altura de todos


los puertos de 1ª categoría.

SELECT nompuerto, altura


FROM Puerto
WHERE categoria = ‘1’;

14
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla

EJEMPLO: Obtener edades de las que hay ciclistas.

SELECT DISTINCT edad


FROM Ciclista;
EJEMPLO: Obtener toda la información de los equipos.
SELECT *
FROM Equipo;
EJEMPLO: Obtener el nombre, la altura y la categoría de
todos los puertos ordenados por altura y categoría.
SELECT nompuerto, altura, categoría
FROM Puerto
ORDER BY altura, categoría;
15
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
Expresion
SELECT [ALL | DISTINCT] {expresión1, expresión2,..., expresiónn | *}
FROM tabla
[WHERE condición];

Las expresiones podrán ser: atributos, constantes,


expresiones escalares o funciones agregadas
Ejemplo:
SELECT ‘Núm. de ciclistas =’, COUNT(*),
‘Media Edad =’, AVG(edad)
FROM Ciclista
WHERE nomeq = ‘Banesto’;

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.

FUNCIONES AGREGADAS EN CONSULTAS SENCILLAS


En consultas sencillas (no agrupadas), la selección no podrá incluir a la vez
referencias a funciones agregadas y a atributos, ya que las funciones devuelven un
único valor y los atributos pueden devolver varios valores.
EJEMPLO INCORRECTO: SELECT nombre, AVG(edad)
FROM Ciclista 17
WHERE nomeq = ‘ONCE’;
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
Expresion: Funciones agregadas
PROPIEDADES
✓ DISTINCT indica que los valores redundantes son eliminados antes de
que se realice el cálculo correspondiente.
✓ Las funciones agregadas no se pueden anidar en las consultas sencillas.
✓ Para las funciones SUM y AVG los argumentos() deben ser numéricos.
✓ La función especial COUNT(*), da como resultado el cardinal del
conjunto de filas de la selección. No está permitido usar DISTINCT, ALL
✓ Los cálculos se hacen después de la selección y de aplicar las
condiciones.
✓ Los valores nulos son eliminados antes de realizar los cálculos (incluido
count).
✓ Si el número de filas de la selección es 0
o la función COUNT devuelve el valor 0

o las otras funciones el valor nulo.


18
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
Expresion: Funciones agregadas
EJEMPLOS
SELECT edad Resultados
FROM CLICLISTA
24
WHERE edad = 23 OR edad = 24;
23
24
SELECT COUNT(edad) FROM ciclista 3
WHERE edad = 23 OR edad = 24;
SELECT COUNT(DISTINCT edad) FROM ciclista 2
WHERE edad = 23 OR edad = 24;
SELECT SUM(edad) FROM ciclista 71
WHERE edad = 23 OR edad = 24;
SELECT SUM(DISTINCT edad) FROM ciclista 47
WHERE edad = 23 OR edad = 24;
SELECT AVG(edad) FROM ciclista 23,6666
WHERE edad = 23 OR edad = 24;
SELECT AVG(DISTINCT edad) FROM ciclista 23,5
WHERE edad = 23 OR edad = 24;

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]

La condición está formada por un conjunto de predicados combinados con


las conectivas lógicas AND, OR y NOT.

Los predicados utilizados que permiten comparar columnas son:


• predicados de comparación: =, <>, >, <, >=, <=.
• predicado LIKE: para comparar una tira de caracteres con un patrón.
• predicado BETWEEN: para comprobar si un escalar está en un rango.
• predicado IN: para comprobar si el valor está dentro de un conjunto.
• predicado IS NULL: para comprobar si el valor es nulo.
20
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
Predicados de comparación: =, <>, >, <, >=, <=.

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);

Ejercicio: ¿qué devuelve la siguiente consulta?


SELECT nombre
FROM Ciclista
WHERE nomeq= ‘Banesto’ AND edad = 27 OR edad>30; 21
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
Predicado: BETWEEN
➢ Obtener el nombre de los ciclistas cuya edad está entre 35 y 45.
SELECT nombre FROM Ciclista
WHERE edad BETWEEN 35 AND 45;

➢ Obtener el nombre de los ciclistas cuya edad no está entre 20 y 30


años.
SELECT nombre FROM Ciclista
WHERE edad NOT BETWEEN 20 AND 30;

(*) El predicado between es equivalente a una condición con


comparaciones de la siguiente forma:

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

EJEMPLO: Obtener el número de las etapas donde el


nombre de la ciudad de llegada tenga por segunda letra una
‘O’ o donde el nombre de la ciudad de salida lleve dos o más
‘A’s.
SELECT netapa FROM Etapa
WHERE llegada LIKE ‘_O%’
OR salida LIKE ‘%A%A%’;

_ : Cualquier carácter en la posición en que se encuentra.

% : Cualquier cadena de caracteres en la posición donde se encuentra


23
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
WHERE condicion
Predicado: LIKE
Uso de LIKE en casos especiales: si la cadena a buscar
contiene un carácter ‘comodín’ ( _ , %)

EJEMPLO: Obtener el nombre y la edad de los ciclistas que


pertenezcan a equipos cuyo nombre contenga la cadena
“100%”.

SELECT nombre, edad FROM Ciclista


WHERE nomeq LIKE ‘%100\%%’ ESCAPE ‘\’

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) OROR (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.

Ejemplo de consulta incorrecta (error de sintaxis)


SELECT nomeq
FROM Equipo
WHERE director = null director IS null 26
2 Introducción SELECT
2.1 Consultas sencillas sobre una tabla
Operadores aritméticos:
Pueden utilizarse tanto en las condiciones como en las
expresiones: + (suma), − (diferencia),
* (producto), / (división), etc.
EJEMPLO:
Obtener de los maillots el tipo y el premio en dólares
(supongamos que está en euros) ($1 = 0,75 €) de aquellos
maillots cuyo premio supere los 100 dólares.
Expresion

SELECT tipo, premio/0.75


FROM Maillot
WHERE premio/0.75 > 100;
Condicion
27
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

28
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas

Si la información que se desea obtener está


almacenada en varias tablas, la consulta debe incluir
dichas tablas en la cláusula FROM.
EJEMPLO: Obtener pares de números de etapas y nombres de
puertos ganados por el mismo ciclista.

SELECT Etapa.netapa, nompuerto


FROM Etapa, Puerto
WHERE Etapa.dorsal = Puerto.dorsal;

La columna dorsal de Etapa y Puerto debe calificarse con el


nombre de la tabla; sino, es ambigua. (tanto en Etapa como en
Puerto, existe el atributo dorsal, y netapa)

Sintaxis: [tabla | variable_recorrido].columna


29
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas

SINTAXIS

SELECT [ALL | DISTINCT] {expresión1, expresión2,..., expresiónn|*}


FROM tabla1, tabla2 …, tablan dónde se obtiene la información buscada
[WHERE condición]
[ORDER BY columna1, columna2,..., columnan]

30
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas

USO DE CLAVES AJENAS EN CONSULTAS DE VARIAS


TABLAS
La consulta de varias tablas corresponde al producto
cartesiano. ¡Es importante recordarlo!

¡¡¡ Si no se eligen bien las condiciones, el número de


filas resultantes puede ser muy grande. !!!!

Lo más frecuente es una igualdad entre la clave ajena y la clave


de la tabla a la que se hace referencia (aunque no siempre es
así).

31
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas
USO DE CLAVES AJENAS EN CONSULTAS DE VARIAS TABLAS

EJEMPLO: Obtener los nombres de los ciclistas


pertenecientes al equipo dirigido por ‘Alvaro Pino’.

SELECT C.nombre
FROM Ciclista C, Equipo E
WHERE C.nomeq = E.nomeq AND E.director = ‘Alvaro Pino’;

¡Es muy importante recordar la


selección de las filas que interesan!

Las variables de recorrido permiten dar otro nombre a una


tabla.
Sintaxis: FROM tabla [AS] variable_recorrido 32
2 Introducción SELECT
2.2 Consultas simples sobre varias tablas
USO DE CLAVES AJENAS EN CONSULTAS DE VARIAS TABLAS

EJEMPLO: Obtener pares nombre de ciclista, número de


etapa, de tal forma que dicho ciclista haya ganado dicha
etapa. Además la etapa debe superar los 150 km. de
recorrido.

SELECT C.nombre, E.netapa


FROM Ciclista C, Etapa
WHERE C.dorsal = E.dorsal
AND E.km > 150;

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.

Si la consulta pide información R, se pueden obtener filas repetidas,


que en la mayoría de los casos se deben eliminar. (con DISTINCT)

EJEMPLO: Obtener número y longitud de las etapas que tienen puertos


de montaña.

SELECT DISTINCT E.netapa, km


FROM Etapa E, Puerto P
WHERE E.netapa = P.netapa;

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

¿Qué es una subconsulta?


Una subconsulta es una consulta encerrada
entre paréntesis, que se incluye dentro de otra.

Cuando
información buscada una tabla

y condición de búsqueda otras tablas

EN ALGUNOS CASOS se pueden utilizar las


subconsultas
36
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
EJEMPLO: Obtener número y longitud de las etapas que
tienen puertos de montaña.
Usando igualdades:
SELECT DISTINCT E.netapa, km
FROM Etapa E, Puerto P
WHERE E.netapa = P.netapa

Usando subconsultas:

SELECT netapa, km Consulta principal

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

Las subconsultas pueden aparecer en las condiciones de


búsqueda como argumentos de los predicados siguientes:
❑ predicados de comparación (=, <>, >, <, >=, <=).
❑ IN: comprueba que un valor pertenece a una colección
dada mediante una subconsulta.
❑ Predicados de comparación cuantificados (ANY, ALL)
❑ EXISTS: equivalente al cuantificador existencial,
comprueba si una subconsulta devuelve alguna fila.

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.

Si el resultado de la subconsulta está vacío, se convierte a una


fila con el valor nulo en todas las columnas.
40
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas

EJEMPLO: Obtener los nombres de los puertos cuya altura


es mayor que la media de altura de los puertos de 2ª
categoría.
SELECT nompuerto FROM Puerto
WHERE altura > ( SELECT AVG(altura)
FROM Puerto
WHERE categoria = ‘2’ );

INCORRECTO: (error de ejecución):


SELECT nompuerto FROM Puerto
WHERE altura > AVG (SELECT altura FROM Puerto
WHERE categoría = ‘2´ );

41
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS QUE ACEPTAN SUBCONSULTAS
PREDICADO IN
SINTAXIS:
expresión [NOT] IN (expresión_tabla)

EJEMPLO: Obtener el nº de las etapas ganadas por


ciclistas con edad superior a los 30 años.

SELECT netapa FROM Etapa


WHERE dorsal IN (
SELECT dorsal FROM Ciclista
WHERE edad > 30 );

42
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
SUBCONSULTAS ENCADENADAS

EJEMPLO: Obtener el número de las etapas ganadas por


ciclistas que pertenezcan a equipos cuyo director tenga
un nombre que empiece por ‘A’.

SELECT netapa FROM Etapa


WHERE dorsal IN
(SELECT dorsal FROM Ciclista
WHERE nomeq IN
(SELECT nomeq FROM Equipo
WHERE director LIKE ‘A%’));

43
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS DE COMPARACION CUANTIFICADOS
>
>=
< ALL predicado de
(expresión) (subconsulta) comparación
<= ANY
cuantificado
=
<>

✓Los predicados de comparación cuantificados con ALL se evalúan a


CIERTO si la comparación se evalúa a CIERTO para todos los valores
devueltos por la subconsulta.
✓Los predicados de comparación cuantificados con ANY se evalúan a
CIERTO si la comparación se evalúa a CIERTO para algún valor devuelto por
la subconsulta.

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)

subconsulta: devuelve una lista de valores


(pendientes de los puertos).

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)

subconsulta: devuelve una lista de valores


(altura de todas los puertos).

46
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
PREDICADOS DE COMPARACION CUANTIFICADOS

SELECT P.nombre SELECT P.nombre


FROM Puerto P FROM Puerto P
WHERE P.altura WHERE P.altura
>= ALL =
(SELECT DISTINCT (P2.altura) (SELECT MAX(P2.altura)
FROM Puerto P2) FROM Puerto P2)

SELECT P.nombre SELECT P.nombre


FROM Puerto P FROM Puerto P
WHERE P.pendiente WHERE P.pendiente
> ANY >
(SELECT DISTINCT (P2.pendiente) (SELECT MIN(P2.altura)
FROM Puerto P2) FROM Puerto P2)

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.

La expresión: WHERE EXISTS (SELECT * FROM …)


equivale a: WHERE 0 < (SELECT COUNT(*) FROM …)

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)

Hay una referencia desde la subconsulta a la tabla C externa a ella, lo que


suele ser muy habitual en las subconsultas con EXISTS (aunque no
exclusivo) .
En general, IN y EXISTS son intercambiables y se pueden eliminar haciendo
consultas a múltiples tablas e igualando por claves ajenas. 49
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas

EJEMPLO: Obtener el nombre de los ciclistas que no


han ganado etapas.
SELECT nombre FROM Ciclista C
WHERE NOT EXISTS (SELECT * FROM Etapa E
WHERE E.dorsal = C.dorsal);

La expresión: WHERE NOT EXISTS (SELECT * FROM …)


equivale a: WHERE 0 = (SELECT COUNT(*) FROM …)

50
2 Introducción SELECT
2.3 Consultas complejas: Subconsultas
Evaluación de los predicados con subconsultas vacías

PREDICADO EVALUACIÓN

[expresión|subconsulta]  [expresión|subconsulta] INDEFINIDO

expresión IN (subconsulta) FALSO

expresión  ALL (subconsulta) CIERTO

expresión  ANY (subconsulta) FALSO


EXISTS (subconsulta) FALSO

Siendo  cualquiera de: =, <>, >, <, >=, <=.

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)

“Obtener el nombre del ciclista que ha ganado todas las


etapas de más de 200 km.”
Para poder expresar esta consulta en SQL MSQL Server,
Oracle, se debe convertir en la consulta equivalente:

“Obtener el nombre del ciclista tal que no existe una etapa


de más de 200 km. que él no haya ganado”

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)”

SELECT nombre FROM Ciclista C


WHERE NOT EXISTS
(SELECT * FROM Etapa E
WHERE km > 200 AND C.dorsal <> E.dorsal );

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.

“Obtener el nombre del ciclista tal que no existe una etapa


de más de 300 km. que él no haya ganado (que la haya
ganado otro)”

SELECT nombre FROM Ciclista C


WHERE NOT EXISTS
(SELECT * FROM Etapa E
WHERE km > 300 AND C.dorsal <> E.dorsal)
AND EXISTS
(SELECT * FROM Etapa E
WHERE km > 300);
Nota: Puede que en esta base de datos NO haya etapas de más de 300 km.
54
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

55
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY

EJEMPLO: Obtener el nombre de cada equipo y la edad media


de los ciclistas de dicho equipo:

SELECT nomeq, AVG(edad) FROM Ciclista


GROUP BY nomeq;
nomeq edad nomeq edad
Banesto 22 Banesto 22 nomeq AVG(edad)
ONCE 25 Banesto 25 Banesto 25
PDM 32 Banesto 28 ONCE 27,5
 
Banesto 25 ONCE 25 PDM 32
Kelme 28 ONCE 30 Kelme 28,5
ONCE 30 PDM 32
Kelme 29 Kelme 28
Banesto 28 Kelme 29

56
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY

SINTAXIS

SELECT [ALL | DISTINCT] {expresión1, expresión2,..., expresiónn|*}


FROM tabla1, tabla2 …, tablan
[WHERE condición]
[GROUP BY comalista_referencia_col
[HAVING expresión_condicional]]
[ORDER BY columna1, columna2,..., columnan]

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;

La regla para asegurar el buen funcionamiento de las


consultas agrupadas es la siguiente:
“En la selección de una consulta agrupada, sólo
pueden aparecer
✓ columnas por las cuales se agrupa,
✓ funciones agregadas, o
✓ literales ”.

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

Características de Oracle y otros SGBD

Se puede indicar como realizar el group by indicando


el número de columna
SELECT nomeq, AVG(edad) FROM Ciclista
WHERE edad > 25
GROUP BY 1;

En las consultas agrupadas se pueden anidar las


funciones
SELECT MAX(AVG(edad)) FROM Ciclista
GROUP BY nomeq;
61
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY

GROUP, WHERE y HAVING

La cláusula HAVING, sólo puede ir en consultas agrupadas y es


similar a WHERE. El orden de aplicación es el siguiente:
1 Condición WHERE (se usa para las filas)
2 Agrupamiento y cálculo de valores agregados (group by)
3 Condición HAVING (se usa para los grupos)

En la cláusula HAVING sólo podrán aparecer


❑ columnas por las cuales se agrupa, o
❑ funciones agregadas.

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

EJEMPLO: Obtener el nombre de cada equipo y la edad media de sus


ciclistas con más de 25 años, de aquellos equipos con más de 3
corredores mayores de 25 años.

SELECT nomeq, AVG(edad)


FROM Ciclista
WHERE edad > 25
GROUP BY nomeq
HAVING COUNT(dorsal) > 3;

63
2 Introducción SELECT
2.4 Consultas complejas:Agrupación GROUP BY

EJEMPLO: Obtener el nombre de los ciclistas y el número de


puertos que han ganado, siendo la media de la pendiente de
éstos, superior a 6.

SELECT nombre, COUNT(nompuerto)


FROM Ciclista C, Puerto P
WHERE C.dorsal = P.dorsal
GROUP BY C.dorsal, nombre /* Agrupar en estos casos por C.P. */
HAVING AVG (pendiente) >6;

Nota: Si agrupamos sólo por nombre, dos ciclistas que se llamen


igual, los une en un mismo grupo, y la media de la pendiente de los
puertos ganados se calcularía con ciclistas distintos.

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

Corresponden a los operadores unión, diferencia e


intersección del Álgebra Relacional.
❑ UNION
❑ EXCEPT
❑ INTERSECT

Permiten combinar tablas que tengan


esquemas compatibles.

67
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Combinación Conjuntista: UNION

expresión_tabla UNION [ALL] expresión_tabla

❑ Realiza la unión de las filas de las tablas provenientes de las


dos expresiones.

❑ Se permitirán o no duplicados según se incluya o no la opción


ALL.

68
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Combinación Conjuntista

EJEMPLO: Obtener el nombre de los ciclistas que


han llevado un maillot o han ganado un puerto o una
etapa.
SELECT nombre FROM Ciclista
WHERE dorsal IN
(SELECT dorsal FROM Llevar
UNION
SELECT dorsal FROM Puerto
UNION
SELECT dorsal FROM Etapa)
69
2 Introducción SELECT
2.5 Operadores CONJUNTISTAS
Combinación Conjuntista en ORACLE10

❑ Los operadores de SQL: UNION, UNION ALL e


INTERSECT existen con la misma sintaxis en
ORACLE10.

❑ El operador de SQL EXCEPT se denomina MINUS


en ORACLE10 (con la misma sintaxis).

❑ Salvo en UNION ALL, todos los operadores


eliminan duplicados.

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

Corresponden a variantes del operador


concatenación de Álgebra Relacional.

➢ 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 α : >, >= , =, <, <=, <>

EJEMPLO: Obtener los nombres de los ciclistas pertenecientes al


equipo dirigido por ‘Alvaro Pino’.
SELECT nombre
FROM Ciclista C, Equipo E
WHERE C.nomeq = E.nomeq AND director = ‘Alvaro Pino’;

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 α : >, >= , =, <, <=, <>

EJEMPLO: Obtener los nombres de los puertos, el número


de la etapa en la que están y la longitud de la etapa, para
los puertos de altura superior a 800.

SELECT nompuerto, Puerto.netapa, km


FROM Puerto INNER JOIN Etapa
ON puerto.netapa=Etapa.netapa
WHERE altura>800

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 α : >, >= , =, <, <=, <>

EJEMPLO: Obtener los nombres de los puertos y el número de


la etapa en la que están, si la etapa anterior tiene más de
200 km.

SELECT nompuerto, P.netapa


FROM Puerto P JOIN Etapa E ON P.netapa= E.netapa+1
WHERE E.km>200

75
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Interna

Sintaxis completa (Estándar)

referencia_tabla1 [NATURAL] [INNER] JOIN referencia_tabla2


[ON condición | USING (columna1, columna2,…, columnan)]

Sintaxis completa (MSQL SERVER)

referencia_tabla1 [INNER] JOIN referencia_tabla2 ON condición

Condicion = referencia_tabla1.columna α referencia_tabla2.columna


Siendo α : >, >= , =, <, <=, <> 76
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Externa: LEFT JOIN
referencia_tabla1 LEFTJOIN referencia_tabla2 ON condicion
Condicion = referencia_tabla1.columna α referencia_tabla2.columna
Siendo α : >, >= , =, <, <=, <>

EJEMPLO: Obtener, para cada ciclista, su dorsal, su nombre, el código de


cada maillot que ha llevado y el número de etapa en la que lo ha llevado.

SELECT C.dorsal, nombre, codigo, netapa


FROM Ciclista C LEFT JOIN Llevar L
ON C.dorsal = L.dorsal

{concatenación INNER JOIN ON de las tuplas de tabla1 y tabla2}


UNION
{tuplas de tabla1 que no pueden concatenarse con tuplas de tabla2
extendidas con valores nulos para los atributos de tabla2}
77
2 Introducción SELECT
2.7 Operador JOIN
Concatenación Externa: LEFT JOIN

EJEMPLO: Obtener el nombre de todos los ciclistas y la


cantidad de etapas que ha ganado cada uno.

SELECT c.nombre, COUNT(E.netapa)


FROM Ciclista C LEFT JOIN Etapa E
ON C.dorsal=E.dorsal
GROUP BY c.dorsal, nombre

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 α : >, >= , =, <, <=, <>

EJEMPLO: Obtener, para cada ciclista, su dorsal, su nombre,


el código de cada maillot que ha llevado y el número de
etapa en la que lo ha llevado.
SELECT C.dorsal, nombre, codigo, netapa
FROM Llevar L RIGHT JOIN Ciclista C
ON C.dorsal=L.dorsal

{concatenación INNER JOIN ON de las tuplas de tabla1 y tabla2}


UNION
{tuplas de tabla 2 que no pueden concatenarse con tuplas de tabla1
extendidas con valores nulos para los atributos de tabla1}
79
2 Introducción SELECT
2.7 Operador JOIN
Producto Cartesiano: CROSS JOIN
referencia_tabla1 CROSS JOIN referencia_tabla2

Concatenacion Interna: INNER JOIN


referencia_tabla1 [INNER] JOIN referencia_tabla2 ON condición

Concatenacion Externa: OUTER JOIN


referencia_tabla1 { LEFT | RIGHT | FULL } [OUTER]
JOIN referencia_tabla2 ON condición

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)

ACTUALIZACIÓN DE LA BASE DE DATOS

Las instrucciones que modifican los datos sólo pueden


aplicarse a una tabla cada vez.

✓ INSERT : para la inserción de tuplas enteras


✓ DELETE : para el borrado de tuplas enteras
✓ UPDATE: para la modificación de uno o más
atributos en una o más tuplas

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

INSERT INTO tabla [(columna1, columna2,…, columnan)]


{DEFAULT VALUES | VALUES (valor1, valor2,…, valorn) | expresión_tabla}

❑ Si no se incluye la lista de columnas se deberán insertar filas


completas de tabla.
❑ Si se incluye la opción DEFAULT VALUES se insertará una única fila
en la tabla con los valores por defecto apropiados en cada columna
(según la definición de tabla).
❑ En la opción VALUES (valor1, valor2,…, valorn), un valor es una
expresión escalar del tipo de datos apropiado (texto, entero, etc…)
❑ Con la opción expresión_tabla, se insertarán las filas resultantes de
la ejecución de la expresión SELECT .
84
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 completa:

Añadir un ciclista de dorsal 101, nombre ‘Joan Peris’, y del


equipo ‘Kelme’ , de 27 años.

INSERT INTO Ciclista


VALUES (101, ‘Joan Peris’, 27,‘Kelme’);

INSERT INTO tabla [(columna1, columna2,…, columnan)]


{DEFAULT VALUES | VALUES (valor1, valor2,…, valorn) | expresión_tabla}

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:

Añadir un ciclista de dorsal 101, nombre ‘Joan Peris’, y del


equipo ‘Kelme’ (no sabemos la edad).

INSERT INTO Ciclista (dorsal, nombre, nomeq)


VALUES (101, ‘Joan Peris’, ‘Kelme’);

INSERT INTO tabla [(columna1, columna2,…, columnan)]


{DEFAULT VALUES | VALUES (valor1, valor2,…, valorn) | expresión_tabla}

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)

INSERT INTO tabla [(columna1, columna2,…, columnan)]


{DEFAULT VALUES | VALUES (valor1, valor2,…, valorn) | expresión_tabla}

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]

❑ Si se incluye la cláusula WHERE se eliminarán aquéllas


tuplas que hagan cierta la condición;
❑ Si no se incluye WHERE, se eliminarán todas las tuplas de
la tabla.
Ejemplo: Eliminar la información del ciclista ‘M. Indurain’ ya
que se ha jubilado.
DELETE FROM Ciclista WHERE nombre = ‘M. Indurain’;
89
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

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]

donde una asignación es de la forma:

columna = {DEFAULT | NULL | expresión_escalar}

Ejemplo:
Incrementar un 10% los premios de los maillots.

UPDATE Maillot SET premio = premio * 1.10

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]

Si se incluye la cláusula WHERE sólo se aplicará a las


filas que hagan cierta la condición.

Ejemplo:
Los ciclistas del Kelme se cambian todos al equipo K10
de nueva creación.

UPDATE Ciclista SET nomeq = ‘K10’


WHERE nomeq=‘Kelme’
92
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

93
4 Instrucciones de Control de Transacciones

INICIO DE TRANSACCIÓN: sin instrucción, es implícito en cada


sesión y cuando termina otra transacción.

FIN DE TRANSACCIÓN: hay dos instrucciones posibles

• COMMIT: indica el fin de una transacción que se desea


confirmar.
• ROLLBACK: indica el fin de una transacción que se descarta.

94
4 Instrucciones de Control de Transacciones

Ejemplo:

UPDATE Equipo SET nombre = ‘¿BanQué?’


WHERE nomeq = ‘Banesto’;

UPDATE Ciclista SET nomeq = ‘¿BanQué?’


WHERE nomeq = ‘Banesto’;

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

También podría gustarte