You are on page 1of 26

4.

0 - LA BASE DE DATOS
UNIVERSIDAD.
En estos apuntes vamos a realizar consultas SQL sobre una Base de Datos que llamaremos "UNIVERSIDAD". Las tablas
que componen esta Base de Datos, su estructura, tipos de datos y relaciones son las siguientes:

TABLAS DE LA BASE DE DATOS UNIVERSIDAD

PERSONA
Nombr Apellid Ciuda DireccionCa DireccionN FechaNacimie Varo
DNI Telefono
e o d lle um nto n
1616161 Ramíre 9411111
Luis Haro Pez 34 1/1/69 1
6A z 11
1717171 9121212
Laura Beltrán Madrid Gran Vía 23 8/8/74 0
7A 12
1818181 9131313
Pepe Pérez Madrid Percebe 13 2/2/80 1
8A 13
1919191 Sánche 9441414
Juan Bilbao Melancolía 7 3/3/66 1
9A z 14
2020202 Jiméne 9411515
Luis Nájera Cigüeña 15 3/3/79 1
0A z 15
2121212 9411616
Rosa García Haro Alegría 16 4/4/78 0
1A 16
2323232 Logroñ 9411717
Jorge Sáenz Luis Ulloa 17 9/9/78 1
3A o 17
2424242 Gutiérr Logroñ Avda. de la 9411818
María 18 10/10/64 0
4A ez o Paz 18
2525252 Logroñ 9411919
Rosario Díaz Percebe 19 11/11/71 0
5A o 19
2626262 Gonzále Logroñ 9412020
Elena Percebe 20 5/5/75 0
6A z o 20

ASIGNATURA
IdAsignatur Credito Cuatrimestr CosteBasic IdProfeso IdTitulacio Curs
Nombre
a s e o r n o
Seguridad
000115 4,5 1 30,00 € P204
Vial
Programació
130113 9 1 60,00 € P101 130110 1
nI
130122 Análisis II 9 2 60,00 € P203 130110 2
Química
150212 4,5 2 70,00 € P304 150210 1
Física
160002 Contabilidad 6 1 70,00 € P117 160000 1

ALUMNO
IdAlumno DNI
A010101 21212121A
A020202 18181818A
A030303 20202020A
A040404 26262626A
A121212 16161616A
A131313 17171717A

PROFESOR
IdAlumno DNI
P101 19191919A
P117 25252525A
P203 23232323A
P204 26262626A
P304 24242424A

TITULACION
IdTitulacion Nombre
130110 Matemáticas
150210 Químicas
160000 Empresariales

ALUMNO_ASIGNATURA
IdAlumno IdAsignatura NumeroMatricula
A010101 150212 1
A020202 130113 1
A020202 150212 2
A030303 130113 3
A030303 150212 1
A030303 130122 2
A040404 130122 1
A121212 000115 1
A131313 160002 4

TIPOS DE DATOS

PERSONA
Campo Tipo dato Tamaño Otros
DNI Texto-Varchar2 9 Primary Key
Nombre Texto 25 Requerido - Not Null
Apellido Texto 50 Requerido - Not Null
Ciudad Texto 25
DireccionCalle Texto 50
DireccionNum Texto 3
Telefono Texto 9
FechaNacimiento Fecha/Hora Fecha corta Fecha corta
Varon Texto 1 Check (Varon In ('0','1'))

ASIGNATURA
Campo Tipo dato Tamaño Otros
IdAsignatura Texto 6 Primary Key
Nombre Texto 50 Not Null
Creditos Numérico Simple Check (Creditos In (4.5,6,7.5,9))
Cuatrimestre Texto 1 Check (Cuatrimestre In ('1','2'))
CosteBasico Numérico Simple Number(3,2)
IdProfesor Texto 4 References PROFESOR(IdProfesor)
IdTitulacion Texto 6 References TITULACION(IdTitulacion)
Curso Fecha/Hora Fecha corta Check (Curso In ('1','2','3','4'))

ALUMNO
Campo Tipo dato Tamaño Otros
IdAlumno Texto 7 Primary Key
DNI Texto 9 References PERSONA(DNI)

PROFESOR
Campo Tipo dato Tamaño Otros
IdProfesor Texto 4 Primary Key
DNI Texto 9 References PERSONA(DNI)

TITULACION
Campo Tipo dato Tamaño Otros
IdTitulacion Texto 6 Primary Key
Nombre Texto 20 Not Null - Unique

ALUMNO_ASIGNATURA
Tipo
Campo Tamaño Otros
dato
IdAlumno Texto 7 References ALUMNO(IdAlumno)
IdAsignatura Texto 6 References ASIGNATURA(IdAsignatura)
Not Null - Check(NumeroMatricula>=1 AND
NumeroMatricula Numérico Entero
NumeroMatricula<=6)
RELACIONES

SELECT
El comando más elemental es el SELECT. Se utiliza de la siguiente forma:
SELECT <Nombres de columna>
FROM <nombre de tabla>;
Los nombres de columna van separados por comas.

EJEMPLO 1:
Obtener los créditos de las asignaturas.
SELECT Creditos
FROM ASIGNATURA;
EJEMPLO 2:
Nombres y créditos de las asignaturas.
SELECT Nombre,Creditos
FROM ASIGNATURA;
EJEMPLO 3:
Posibles distintos créditos de asignaturas.
SELECT DISTINCT(Creditos)
FROM ASIGNATURA;
EJEMPLO 4:
Todos los datos de personas.
SELECT *
FROM PERSONA;

FUNCIONES DE AGRUPACIÓN
SUM - Calcula la suma de los valores de una columna.
AVG - Calcula la media de los valores de una columna.
MAX - Calcula el máximo de los valores de una columna.
MIN - Calcula el mínimo de los valores de una columna.
COUNT - Calcula número de filas de una columna.

EJEMPLO 5:
Mostrar la suma de todos los créditos de las asignaturas.
SELECT SUM(Creditos)
FROM ASIGNATURA;
EJEMPLO 6:
Media de coste básico.
SELECT AVG(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 7:
Coste básico de la asignatura más cara.
SELECT MAX(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 8:
Coste básico de la asignatura más barata.
SELECT MIN(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 9:
Cuantos costes básicos hay.
SELECT COUNT(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 10:
Cuantos costes básicos distintos hay.
SELECT COUNT(DISTINCT(CosteBasico))
FROM ASIGNATURA;
Nota: Válido para ORACLE, no para ACCESS.

EJEMPLO 11:
Cuantas asignaturas hay.
SELECT COUNT(*)
FROM ASIGNATURA;

RENOMBRAMIENTO DE CAMPOS
Podemos renombrar un campo con la instrucción AS en ACCESS o dejando un espacio en blanco
en ORACLE.

EJEMPLO 12:
Suma de los créditos de las asignaturas llamando a la columna resultante "TotalCreditos".

ACCESS:
SELECT SUM(Creditos) AS "TotalCreditos"
FROM ASIGNATURA;
ORACLE:
SELECT SUM(Creditos) "TotalCreditos"
FROM ASIGNATURA;
OPERADORES
= Igual que.
> Mayor que.
< Menor que.
>= Mayor o igual que.
<= Menor o igual que
<> Distinto que.

AND Y Lógico.
OR Ó Lógico.
NOT No Lógico.

TIPOS DE EXPRESIONES
- Un nombre de columna.
- Un valor constante.

COMANDO WHERE
SELECT <nombres de columna>
FROM <nombre de tabla>
WHERE <nombre de columna> <operador> <expresión>;
El conjunto (<nombre de columna> <operador> <expresión>) es una condición booleana, lo
que quiere decir que su valor debe ser Verdadero o Falso.

EJEMPLO 13:
Nombre y créditos de las asignaturas del primer cuatrimestre.
SELECT Nombre, Creditos
FROM ASIGNATURA
WHERE Cuatrimestre = "1";
- En ORACLE las cadenas de texto y fechas se encierran entre comillas simples ('cadena'). - En
ACCESS las cadenas de texto se encierran entre comillas dobles ("cadena") y las fechas entre
almoadillas (#fecha#).

EJEMPLO 14:
Nombre y Apellido de las personas nacidas antes del 1 de enero de 1975.

ACCESS:
SELECT Nombre, Apellido
FROM PERSONA
WHERE FechaNacimiento < #1/01/1975#;
ORACLE:
SELECT Nombre Apellido
FROM PERSONA
WHERE FechaNacimiento < '1/01/1975';
EJEMPLO 15:
Nombre y coste básico de las asignaturas de más de 4,5 créditos.
SELECT Nombre, CosteBasico
FROM ASIGNATURA
WHERE Creditos > 4.5;
EJEMPLO 16:
Nombre de las asignaturas cuyo coste básico esté entre 25 y 35 euros.
SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico >= 25 AND CosteBasico <= 35;
EJEMPLO 17:
Id de los alumnos matriculados en la asignatura '150212' ó en la '130113' ó en ambas.

ACCESS con repetidos:


SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113";
ACCESS sin repetidos:
SELECT DISTINCT(IdAlumno)
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113";
ORACLE con repetidos:
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = '150212' OR IdAsignatura = '130113';
ORACLE sin repetidos:
SELECT DISTINCT(IdAlumno)
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = '150212' OR IdAsignatura = '130113';
EJEMPLO 18:
Nombres de las asignaturas del 2º cuatrimestre que no sean de 6 créditos.

ACCESS:
SELECT Nombre
FROM ASIGNATURA
WHERE Cuatrimestre = "2"
AND NOT (Creditos = 6);
ORACLE:
SELECT Nombre
FROM ASIGNATURA
WHERE Cuatrimestre = '2'
AND NOT (Creditos = 6);
EJEMPLO 19:
Mostrar el identificador de los alumnos matriculados en cualquier asignatura excepto la '150212' y
la '130113'.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE NOT (IdAsignatura = "150212" OR IdAsignatura = "130113");
Nota: No está bien del todo. Ver ejemplo 49.

OPERADOR BETWEEN
Equivale a un rango de valores seguidos incluidos entre dos dados.

EJEMPLO 20:
Nombre de las asignaturas cuyo coste básico esté entre 25 y 35 euros. (Idem. 16). Ver ejemplo
16.
SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico BETWEEN 25 AND 35;

OPERADOR IN
La instrucción IN sirve para encontrar un dato entre un conjunto de valores dados.
Podemos utilizar NOT IN para discriminar un dato que no se encuentre en el conjunto de valores
dados.
EJEMPLO 21:
Id de los alumnos matriculados en la asignatura '150212' ó en la '130113' ó en ambas. (Idem. 17).
Ver ejemplo 17.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura IN ("150212", "130113");

LIKE
La instrucción LIKE permite comparar un valor o dato con un patrón.

EJEMPLO 22:
Nombre y apellido de las personas cuyo apellido comience por 'G'.
SELECT Nombre, Apellido
FROM PERSONA
WHERE Apellido LIKE "G%";
COMODINES:
ACCESS ORACLE
1 carácter ? _
varios caracteres * %

EJEMPLO 23 A:
Nombre de las asignaturas que no tienen dato para el IdTitulacion.
SELECT Nombre
FROM ASIGNATURA
WHERE IdTitulacion IS NULL;
EJEMPLO 23 B:
Nombre de las asignaturas que tienen dato para el IdTitulacion.
SELECT Nombre
FROM ASIGNATURA
WHERE IdTitulacion IS NOT NULL;
EJEMPLO 24:
Nombre de las asignaturas cuyo coste por crédito sea mayor de 8 euros.
SELECT Nombre
FROM ASIGNATURA
WHERE (CosteBasico/Creditos) > 8;
EJEMPLO 25:
Nombre y número de horas de todas las asignaturas. (1cred.=10 horas).
SELECT Nombre, Creditos*10 AS NUM_HORAS
FROM ASIGNATURA;

OPERADORES DE CADENAS (& y ||)


Para enlazar cadenas en ORACLE utilizamos || y en ACCESS &.

EJEMPLO 26:
Mostrar el nombre completo en una columna y la dirección completa en otra columna de las
personas.

ORACLE:
SELECT Nombre||' '||Apellido DireccionCalle||', '||DireccionNum||' -
'||Ciudad
FROM PERSONA;
ACCESS:
SELECT Nombre&" "&Apellido, DireccionCalle&", "&DireccionNum&" - "&Ciudad
FROM PERSONA;
FUNCIONES DE ORDENACIÓN: ORDER BY
Los resultados de un SELECT se pueden ordenar a gusto del usuario mediante la claúsula ORDER
BY.

Atributos de ordenación:
ASC - Orden creciente.
DESC - Orden descendente.
(Por defecto el orden es creciente).

EJEMPLO 27:
Datos de personas por orden alfabético de apellidos.
SELECT *
FROM PERSONA
ORDER BY Apellido;
EJEMPLO 28:
Datos de las asignaturas del 2º cuatrimestre por orden alfabético de IdTitulacion. Para cada
titulación ordenar por coste mostrando primero las asignaturas más caras y para las asignaturas del
mismo coste mostrar por orden alfabético de nombre de asignatura.
SELECT *
FROM ASIGNATURA
WHERE Cuatrimestre = "2"
ORDER BY IdTitulacion, CosteBasico DESC, Nombre;

TABLAS RELACIONADAS (FROM)


Las consultas pueden relacionar varias tablas que se encuentren nombradas en el FROM.

Por ejemplo si tenemos dos tablas TAB1 y TAB2 con dos columnas cada una llamadas T1C1, T1C2,
T2C1 y T2C2, 3 filas en TAB1 y 4 filas en TAB2, la siguiente consulta mostrará una macrotabla de 4
columnas por 12 filas.

EJEMPLO 29:
Construir las tablas anteriores en una base de datos nueva y ejecutar la siguiente consulta:
SELECT *
FROM TAB1, TAB2;
Guardar la base de datos como ejemplo_from.mdb.

EJEMPLO 29B:
Nombre y apellidos de los profesores.
SELECT Nombre, Apellido
FROM PERSONA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI;

PROCESO DE RESOLUCIÓN DE CONSULTAS


1. Decidir qué tablas están implicadas y ponerlas en el FROM.

2. Ver cuáles son las relaciones entre las tablas, seleccionar


las relevantes para la consulta en cuestión y ponerlas como
condiciones en el WHERE.

3. Poner el resto de condiciones en el WHERE, ORDER BY u otras.

4. Fijar las columnas a mostrar en el SELECT.

EJEMPLO 30:
Nombre de asignaturas impartidas por profesores de Logroño.
SELECT Asignatura.Nombre
FROM ASIGNATURA, PROFESOR, PERSONA
WHERE ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND PROFESOR.DNI = PERSONA.DNI
AND Ciudad = "Logroño";
EJEMPLO 31:
Nombre completo (nombre y apellido), en una sóla columna, de los alumnos.
SELECT Nombre&" "&Apellido
FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI;
EJEMPLO 32:
DNI, Nombre y Apellido de los alumnos que viven en La Rioja. Como criterio usar el teléfono.
SELECT PERSONA.DNI AS DNI, Nombre, Apellido
FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI
AND Telefono LIKE "941*";
EJEMPLO 33:
DNI, Nombre y Apellido de los alumnos matriculados en la asignatura "Seguridad Vial".
SELECT PERSONA.DNI AS DNI_, PERSONA.Nombre, Apellido
FROM PERSONA, ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA
WHERE PERSONA.DNI = ALUMNO.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.NOMBRE = "Seguridad Vial";
EJEMPLO 34:
Id de las titulaciones en las que está matriculado el alumno con DNI 20202020A. Un alumno está
matriculado en una titulación si está matriculado en una asignatura de la titulación.
SELECT DISTINCT(IdTitulacion)
FROM ASIGNATURA, ALUMNO_ASIGNATURA, ALUMNO
WHERE ASIGNATURA.IdAsignatura = ALUMNO_ASIGNATURA.IdAsignatura
AND ALUMNO_ASIGNATURA.IdAlumno = ALUMNO.IdAlumno
AND ALUMNO.DNI = "20202020A";
EJEMPLO 35:
Nombre de las asignaturas en las que está matriculada Rosa García, mostrando también por cada
asignatura, el número de matrícula.
SELECT ASIGNATURA.Nombre,ALUMNO_ASIGNATURA.IdAlumno
FROM PERSONA, ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA
WHERE PERSONA.DNI = ALUMNO.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND PERSONA.Nombre = "Rosa"
AND PERSONA.Apellido = "García";
EJEMPLO 36:
DNI de los alumnos a los que imparte el profesor Jorge Sáenz.
SELECT ALUMNO.DNI AS DNI_ALUMNO
FROM PERSONA, ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND PERSONA.Nombre = "Jorge"
AND PERSONA.Apellido = "Sáenz";
Otra forma de hacer lo mismo es utilizando una subconsulta llamadas también consultas anidadas.
Este tipo de consultas se verán más adelante a partir del ejercicio 49.
SELECT ALUMNO.DNI AS DNI_ALUMNO
FROM ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA
WHERE ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdProfesor IN (SELECT PROFESOR.IdProfesor
FROM PERSONA, PROFESOR
WHERE PERSONA.DNI = PROFESOR.DNI
AND PERSONA.Nombre = "Jorge"
AND PERSONA.Apellido = "Sáenz");
EJEMPLO 37:
Cual sería el coste global de cursar la titulación de Matemáticas si el coste de cada asignatura fuera
incrementado en un 7%.
SELECT SUM(CosteBasico*1.07)
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND TITULACION.Nombre = "Matemáticas";

ftp://iesjuandelacierva.com/pub/pilarbbdd2008-09/bloque%203%20-
%20sql/Apuntes%20Bloque%20SQL/index-2.html

EJERCICIO 1:
Nombres y apellidos de las personas. Ver SQL

EJERCICIO 2:
Códigos, nombres y créditos de las asignaturas. Ver SQL

EJERCICIO 3:
Datos de las personas de la Base de Datos. Ver SQL

EJERCICIO 4:
Posibilidades de créditos de las asignaturas (para usar DISTINCT). Ver SQL

EJERCICIO 5:
Posibilidades de coste, en cada curso de las asignaturas. Ver SQL

EJERCICIO 6:
Suma del coste de las asignaturas. Ver SQL

EJERCICIO 7:
Cuantas asignaturas hay. Ver SQL

EJERCICIO 8:
Coste de la asignatura más cara. Ver SQL

EJERCICIO 9:
Coste de la asignatura más barata. Ver SQL

EJERCICIO 10:
Coste máximo, mínimo y medio de las asignaturas. Ver SQL

EJERCICIO 11:
Cuantas posibilidades de créditos de asignatura hay. Ver SQL

EJERCICIO 12:
Cuantos cursos hay. Ver SQL

EJERCICIO 13:
Cuantas ciudades y nombres distintos hay. Ver SQL

EJERCICIO 14:
Nombre y créditos de las asignaturas del primer cuatrimestre Ver SQL

EJERCICIO 15:
Nombre y coste básico de las asignaturas de más de 4,5 créditos. Ver SQL
EJERCICIO 16:
Nombre de las asignaturas cuyo coste está entre 25 y 35 euros. (Con y sin BETWEEN). Ver SQL

EJERCICIO 17:
Mostrar el Id de los alumnos matriculados bien en la asignatura '150212' o bien en la '130113', o
en ambas. (Con y sin IN). Ver SQL

EJERCICIO 18:
Mostrar el Id de los alumnos matriculados en cualquier asignatura salvo la '150212' o la
'130113'. Ver SQL

EJERCICIO 19:
Nombre de las asignaturas del segundo cuatrimestre que no sean de 6 créditos. Ver SQL

EJERCICIO 20:
Mostrar el nombre de las asignaturas cuyo coste por crédito sea mayor de 8 euros. Ver SQL

EJERCICIO 21:
Nombre y número de horas de todas las asignaturas. (1cred = 10h). Ver SQL

EJERCICIO 22:
Mostrar el nombre y el apellido de las personas cuyo apellido comience por la letra 'G'. Ver SQL

EJERCICIO 23:
Datos de las personas que hayan nacido en 1978. Ver SQL

EJERCICIO 24:
Mostrar el nombre de las personas para las que se desconoce la fecha de nacimiento. Ver SQL

EJERCICIO 25:
Mostrar las asignaturas que no pertenecen a ninguna titulación. Ver SQL

EJERCICIO 26:
Listado del nombre completo de las personas, sus teléfonos y sus direcciones, llamando a la
columna del nombre "NombreCompleto" y a la de direcciones "Direccion". Ver SQL

EJERCICIO 27:
Cual es el día siguiente al día en que nacieron las personas de la B.D.. Ver SQL

EJERCICIO 28:
Años de las personas de la Base de Datos. Ver SQL

EJERCICIO 29:
Listado de personas ordenadas por apellidos y nombre. Ver SQL

EJERCICIO 30:
Listado de personas mayores de 25 años ordenadas por apellidos y nombre. Ver SQL

EJERCICIO 31:
Listado que muestre las asignaturas con su coste por crédito ordenadas por su coste por
crédito. Ver SQL

EJERCICIO 32:
Listado de nombres completos de todos los alumnos. Ver SQL

EJERCICIO 33:
Listado de alumnos matriculados que viven en La Rioja. Ver SQL
EJERCICIO 34:
Listado de asignaturas impartidas por profesores de Logroño. Ver SQL

EJERCICIO 35:
Listado de profesores que además son alumnos. Ver SQL

EJERCICIO 36:
Nombres completos de los profesores que además son alumnos. Ver SQL

EJERCICIO 37:
Nombres completos de los alumnos que cursan la asignatura de "Seguridad Vial". Ver SQL

EJERCICIO 38:
Nombres completos de los alumnos que cursan alguna asignatura del 2° cuatrimestre. Ver SQL

EJERCICIO 39:
Nombres de los profesores que imparten por lo menos una asignatura. Ver SQL

EJERCICIO 40:
Suma de los créditos de las asignaturas de Matemáticas. Ver SQL

EJERCICIO 41:
Número de asignaturas de la titulación de Matemáticas. Ver SQL

EJERCICIO 42:
Id de las titulaciones en las que está matriculado el alumno con DNI '18181818A' sabiendo que
para que un alumno esté matriculado en una titulación basta con que esté matriculado en alguna
de sus asignaturas. Ver SQL

EJERCICIO 43:
¿Cual sería el coste global de cursar la titulación de Matemáticas si el coste de cada asignatura
fuera incrementado un 7%? Ver SQL

EJERCICIO 44:
Profesores que son alumnos indicando la asignatura o asignaturas que cursan. Ver SQL

EJERCICIO 45:
Titulaciones (nombres) en las que imparte docencia cada profesor, junto con el nombre de cada
profesor. Ver SQL

EJERCICIO 46:
Listado ordenado por nombre de titulación y nombre de asignatura de todas las asignaturas,
mostrando además la titulación, nombre de asignatura y nombre del profesor. Ver SQL

EJERCICIO 47:
Nombres completos de alumnos matriculados en alguna asignatura mostrando cual es la
asignatura y la titulación a la que pertenecen las asignaturas. Ver SQL

EJERCICIO 48:
Listado que muestre, por cada asignatura, los nombres completos de los alumnos
matriculados. Ver SQL

EJERCICIO 48B:
Supongamos que tenemos la siguiente tabla, que clasifica los tamaños de las asignaturas en
función de su número de créditos.

NOMBRE DE LA TABLA: TAMANIOASIGNATURA


Tamanio CreditosMin CreditosMax

Corta 0 4.5

Media 6 7.5

Larga 9 100

Obtener un listado de las asignaturas junto con la calificación de su duración según la tabla
anterior. Ver SQL

EJERCICIO 49:
Asignaturas de la titulación de Matemáticas. Ver SQL

EJERCICIO 50:
Listado de asignaturas que tengan más créditos que "Seguridad Vial". Ver SQL

EJERCICIO 51:
Listado de alumnos que son más viejos que los profesores, indicando cada alumno y cada
profesor. Ver SQL

EJERCICIO 52:
Listado de alumnos que son más viejos que el profesor de mayor edad. Ver SQL

EJERCICIO 53:
Cual es el coste de la matrícula de cada titulación. Ver SQL

EJERCICIO 54:
Cuantos alumnos hay matriculados en cada asignatura. Ver SQL

EJERCICIO 55:
Cuanto paga cada alumno por su matrícula. Ver SQL

EJERCICIO 56:
Estadísticas (número y media de edad) de personas por ciudades y sexos. Ver SQL

EJERCICIO 57:
Lo mismo que la anterior pero por mes de nacimiento, y sólo para los alumnos. Ver SQL

EJERCICIO 58:
Coste medio de las asignaturas de cada titulación para aquellas titulaciones en las que el coste
total de la matrícula sea mayor de 60 euros. Ver SQL

EJERCICIO 59:
Visualiza la asignatura con más créditos, la media de créditos, la suma de los créditos y la
titulación a la que pertenecen, para titulaciones con más de 1 asignatura. Ver SQL

EJERCICIO 60:
Que alumnos (nombre completo) están matriculados al menos en dos asignaturas. Ordena el
resultado alfabéticamente. Ver SQL

EJERCICIO 61:
Listado de alumnos cuya matrícula haya supuesto un coste superior a 50 euros. Ver SQL

EJERCICIO 62:
Clasifica las titulaciones por orden descendente en función del total de créditos necesarios para
cursarlas. Ver SQL
EJERCICIO 63:
Edad del alumno más viejo de cada asignatura. Ver SQL

EJERCICIO 64:
Lista de gente ordenada por mes en el que cumplen los años. Ver SQL

EJERCICIO 65:
Alumnos matriculados en las asignaturas '150212' y '130113' a la vez. Ver SQL

EJERCICIO 66:
Nombre de las asignaturas de la titulación '130110' cuyo coste básico sobrepase el coste básico
promedio por asignatura en dicha titulación. Ver SQL

EJERCICIO 67:
Lista de las asignaturas en las que no se ha matriculado nadie. Ver SQL

EJERCICIO 68:
Nombre de las titulaciones que tengan al menos una asignatura de más de 4,5 créditos. Ver SQL

EJERCICIO 69:
Asignaturas con más créditos que alguna de las asignaturas de Matemáticas. Ver SQL

EJERCICIO 70:
Listado de personas de mayor edad que todas las personas de Haro. Ver SQL

EJERCICIO 71:
Listado de asignaturas que pertenecen al mismo cuatrimestre que la asignatura de menor coste y
que tienen unos créditos superiores a la media de las asignaturas. Ver SQL

EJERCICIO 72:
Listado de asignaturas cuyo coste es superior al coste medio de las asignaturas que no pertenecen
a ninguna titulación. Ver SQL

EJERCICIO 73:
Listado de personas que viven en la ciudad que vive más gente. Ver SQL

EJERCICIO 74:
Listado de alumnos que nacieron antes que el profesor más joven. Ver SQL

EJERCICIO 75:
Asignaturas de la titulación '130110' en las que no está matriculado el alumno 'A020202'. Ver
SQL

EJERCICIO 76:
Listado de alumnos cuya edad supera la media de la edad de los profesores. Ver SQL

EJERCICIO 77:
Listado de alumnos que asisten a alguna asignatura de las impartidas por los profesores varones
de Logroño y cuyo número de compañeros de asignatura sea menor que 10. Ver SQL

EJERCICIO 78:
Listado de las asignaturas no cursadas por alumnos de Logroño. Ver SQL

EJERCICIO 79:
Para cada asignatura con más de dos matriculados, encuentra el número de alumnos matriculados
en ella de más de 25 años. Ver SQL

EJERCICIO 80:
Listado de ciudades en las que ha nacido algún profesor pero no un alumno (y lo contrario). Ver
SQL

EJERCICIO 81:
Listado de ciudades en las que ha nacido algún profesor y también algún alumno. Ver SQL

EJERCICIO 82:
Listado de alumnos (ids) no matriculados en asignaturas de Matemáticas. Ver SQL

EJERCICIO 83:
Listar los ids de los alumnos para los que se cumpla que la suma de créditos de las asignaturas en
las que está matriculado sea superior a la suma de créditos de todas las asignaturas de
Empresariales. Ver SQL

EJERCICIO 84:
Identificadores de los alumnos más viejos de cada titulación. Ver SQL

EJERCICIO 85:
Listado del DNI de personas relacionadas con la asignatura 'Seguridad Vial', bien por ser profesor
de la misma o por estar matriculado en ella. Ver SQL

EJERCICIO 86:
Listado de nombres completos de personas relacionadas con la asignatura 'Seguridad Vial', bien
por ser profesor de la misma o por estar matriculado en ella. Ver SQL

EJERCICIO 87:
Escribir una consulta que permita verificar si todas las personas de la B.D. son o bien profesores o
bien alumnos, mostrando los DNIs de las personas que no lo cumplen. Ver SQL

EJERCICIO 88:
Mostrar el Id de los alumnos matriculados en todas las asignaturas de primer curso de la titulación
'130110'. Ver SQL

EJERCICIO 89:
Mostrar el Id de los alumnos matriculados en todas las asignaturas de primer curso de
Empresariales. Ver SQL

EJERCICIO 90:
Estadísticas por titulación (mostrando el nombre de la titulación): coste básico máximo, mínimo y
medio y créditos medios de sus asignaturas. Incluye en la lista las asignaturas que no tienen
asociada ninguna titulación, mostrando el texto "Asignatura de campus" en el nombre de la
titulación. Ver SQL

INSERCIÓN, MODIFICACIÓN Y BORRADO DE DATOS


Para insertar, modificar y/o borrar datos de una Base de Datos podemos utilizar los comandos: INSERT, UPDATE y
DELETE respectivamente, tal y como se explica en los siguientes ejemplos.

COMANDO INSERT
El comando INSERT se utilizará para añadir filas a una tabla.
INSERT INTO <NOMBRE_TABLA>
VALUES (<LISTA_VALORES>);
<LISTA_VALORES> debe tener tantos valores como columnas haya en la tabla y con el tipo de datos y orden de
colocación adecuados.

EJEMPLO 66:
Crear una nueva fila en la tabla TITULACION con los datos IdTitulacion = "180100" y Nombre = "Humanidades".
INSERT INTO TITULACION
VALUES ("180100","Humanidades");

En función de como esté definida la tabla se admitirá el valor NULL de forma explícita.

EJEMPLO 67:
Crear una nueva fila en la tabla TITULACION con los datos IdTitulacion = "180100" y Nombre = NULL.
INSERT INTO TITULACION
VALUES ("180100",NULL);

Podemos insertar los valores de algunas columnas sólamente, siempre que la definición de la tabla lo permita, utilizando
la siguiente estructura SQL:
INSERT INTO <NOMBRE_TABLA> (<LISTA_NOMBRES_DE_COLUMNA>)
VALUES (<LISTA_VALORES>);
<LISTA_NOMBRES_DE_COLUMNA> contiene el nombre de las columnas en las que queremos introducir un valor. No
es necesario incluir todas las columnas y podemos cambiar el orden. Todas las columnas que no aparezcan en la lista se
les da el valor NULL.

EJEMPLO 68:
Crear una nueva fila en la tabla TITULACION con los datos IdTitulacion = "180100" y Nombre = "Humanidades".
(Idem que el 66).
INSERT INTO TITULACION (IdTitulacion,Nombre)
VALUES ("180100","Humanidades");
O también:
INSERT INTO TITULACION (Nombre,Titulacion)
VALUES ("Humanidades","180100");

INSERTAR EL RESULTADO DE UNA CONSULTA SELECT:

Podemos sustituir los valores de VALUES por los devueltos por una consulta SELECT. Las columnas que aparezcan en el
SELECT deben tener el mismo número, tipo y orden que las de la tabla en la que se inserta.

Este método nos permite insertar varias filas a la vez.

EJEMPLO 69:
Supongamos que disponemos de una tabla nueva llamada ASIGNATURA_LIBRE_CONFIGURACION, con las mismas
columnas que la tabla ASIGNATURA. Insertar las filas de la tabla ASIGNATURA cuyo IdTitulación sea NULL.
INSERT INTO ASIGNATURA_LIBRE_CONFIGURACION
SELECT *
FROM ASIGNATURA
WHERE IdTitulacion IS NULL;
COMANDO UPDATE
El comando UPDATE nos permite modificar el valor o valores de una columna que cumplan una determinada condición. La
sintaxis que utilizamos es la siguiente:

UPDATE <NOMBRE_TABLA>
SET <NOMBRE_COLUMNA> = <VALOR_ACTUALIZADO>
WHERE <CONDICION>;

EJEMPLO 70:
Por error "Rosario Díez" se ha almacenado como "Díaz". Modificarlo para corregir el error.
UPDATE PERSONA
SET Apellido = "Díez"
WHERE Nombre = "Rosario" AND Apellido = "Díaz";

EJEMPLO 71:
Por motivos técnicos los prefijos telefónicos de La Rioja pasan a ser 991. Actualizar en la Base de Datos este cambio.

En ORACLE:
UPDATE PERSONA
SET Telefono = "991"&SUBSTR(Telefono,4)
WHERE SUBSTR(Telefono,1,3) = "941";
En ACCESS:
UPDATE PERSONA
SET Telefono = "991"&RIGHT(Telefono,6)
WHERE Telefono LIKE "941*";

EJEMPLO 72:
Disminuir en un 10% el coste básico de las asignaturas en las que existan más de 100 matriculados.
UPDATE ASIGNATURA
SET CosteBasico = CosteBasico*0.9
WHERE IdAsignatura IN (SELECT IdAsignatura
FROM ALUMNO_ASIGNATURA
GROUP BY IdAsignatura
HAVING COUNT(*) > 100);

COMANDO DELETE
El comando DELETE sirve para eliminar filas de una tabla que cumplan una determinada condición. La sintaxis que
utilizamos es la siguiente:

DELETE FROM <NOMBRE_TABLA>


WHERE <CONDICION>;

EJEMPLO 73:
La alumna Laura Beltrán deja la Universidad. Darle de baja en todas las tablas.
DELETE FROM ALUMNO_ASIGNATURA
WHERE IdAlumno = (SELECT IdAlumno
FROM ALUMNO, PERSONA
WHERE ALUMNO.DNI = PERSONA.DNI
AND Nombre = "Laura"
AND Apellido = "Beltrán");
DELETE FROM ALUMNO
WHERE DNI = (SELECT DNI
FROM PERSONA
WHERE Nombre = "Laura"
AND Apellido = "Beltrán");
DELETE FROM PERSONA
WHERE Nombre = "Laura"
AND Apellido = "Beltrán";
LENGUAJE DE DEFINICIÓN DE DATOS
LDD sirve para crear, borrar y modificar tablas de una Base de Datos.

CREATE TABLE
El comando CREATE TABLE se utilizará para crear una nueva tabla en la Base de Datos. Su sintaxis es la siguiente:
CREATE TABLE <NOMBRE_TABLA>
(<NOMBRE_COLUMNA_1> <TIPO_DE_DATO> [NOT NULL],
<NOMBRE_COLUMNA_2> <TIPO_DE_DATO> [NOT NULL],
............................................
<NOMBRE_COLUMNA_N> <TIPO_DE_DATO> [NOT NULL]);
[NOT NULL] es opcional. Por defecto las columnas son NULL, lo que quiere decir que por defecto en cualquier columna
se admiten valores nulos.
No puede haber dos nombres de columna iguales.

EJEMPLO 74:
Crear la tabla ASIGNATURA que se ha empleado en los temas anteriores.
CREATE TABLE ASIGNATURA
(IdAsignatura CHAR(6) NOT NULL,
Nombre VARCHAR(50) NOT NULL,
Creditos NUMBER(1,1),
Cuatrimestre CHAR,
CosteBasico NUMBER(3,2),
IdProfesor CHAR(4),
IdTitulacion CHAR(6),
Curso CHAR);
Otra posibilidad de uso de CREATE TABLE es crear una tabla a partir de la información devuelta por un SELECT.

CREATE TABLE <NOMBRE_TABLA> (<NOMBRE_COLUMNA_1>, <NOMBRE_COLUMNA_2>, ........)


AS (SELECT .........
............................................);
EJEMPLO 75:
Crear una tabla llamada PERSONA_ALUMNO que contenga los datos personales de los alumnos.
CREATE TABLE PERSONA_ALUMNO
AS (SELECT PERSONA.*
FROM PERSONA, ALUMNO
WHERE PERSONA.DNI = ALUMNO.DNI);
EJEMPLO 76:
Crear una tabla llamada PROFESOR_PRIMER con columnas "IdProfPrimer", "DNIProfPrimer", "IdAsignatura" que
almacene el identificador del profesor, su DNI y el identificador de la asignatura que imparte, para los profesores del primer
cuatrimestre.
CREATE TABLE PROFESOR_PRIMER (IdProfPrimer, DNIProfPrimer, IdAsignatura)
AS (SELECT PROFESOR.*, IdAsignatura
FROM PROFESOR, ASIGNATURA
WHERE PROFESOR.IdProfesor = ASIGNATURA.IdProfesor
AND Cuatrimestre = '1');
DROP TABLE
El comando DROP TABLE nos permite borrar una tabla. La sintaxis que utilizamos es la siguiente:

DROP TABLE <NOMBRE_TABLA>;

EJEMPLO 77:
Eliminar la tabla ASIGNATURA.
DROP TABLE ASIGNATURA;
Nota: Antes de borrar una tabla debemos tener en cuenta las restricciones de integridad de la Base de Datos y como las
manipula el Sistema Gestor de la Base de Datos, ya que podemos eliminar datos que afecten a otras tablas. Dependiendo
del SGBD puede que en tal caso elimine los datos en cascada, que nos muestre un mensaje de error o que borre la tabla
sin tener en cuenta las relaciones. En este último caso puede que la Base de Datos deje de funcionar correctamente.

RENAME
El comando RENAME nos permite renombrar una tabla. La sintaxis que utilizamos es la siguiente:

RENAME <NOMBRE_VIEJO> TO <NOMBRE_NUEVO>

EJEMPLO 78:
Renombrar la tabla PERSONA como PERSONAS.
RENAME PERSONA TO PERSONAS;

ALTER TABLE
El comando ALTER TABLE se utiliza insertar, borrar o modificar columnas de una tabla.

INSERTAR UNA O VARIAS COLUMNAS


La sintaxis que se utiliza para insertar una columna nueva en una tabla es la siguiente:
ALTER TABLE <NOMBRE_TABLA>
ADD (<NOMBRE_COLUMNA1> <TIPO_DE_DATO> [NOT NULL],
<NOMBRE_COLUMNA2> <TIPO_DE_DATO> [NOT NULL],
...........................................
<NOMBRE_COLUMNAn> <TIPO_DE_DATO> [NOT NULL]);

EJEMPLO 79:
Insertar una nueva columna en la tabla TITULACION que pueda almacenar el tipo de titulación. (p.e.: diplomatura,
ingeniería, licenciatura, etc.).
ALTER TABLE TITULACION
ADD (TipoTitulacion VARCHAR(50) NOT NULL);
BORRAR UNA COLUMNA (Aparece en la versión 9 de Oracle)
La sintaxis que se utiliza para borrar una columna de una tabla es la siguiente:
ALTER TABLE <NOMBRE_TABLA>
DROP <NOMBRE_COLUMNA>;
EJEMPLO 80:
Borrar la columna creada en el ejemplo anterior.
ALTER TABLE TITULACION
DROP TipoTitulacion;
Si no tenemos este comando disponible en nuestro SGBD podemos eliminar una columna realizando los siguientes pasos:

1. Crear una tabla auxiliar con todas las columnas y filas de la tabla que se quiere modificar excepto la columna o
columnas a eliminar.
2. Borrar la tabla original.
3. Renombrar la tabla auxiliar con el nombre original.

EJEMPLO 81:
En la tabla PROFESOR_PRIMER eliminar la columna "DNIProfPrimer".
CREATE TABLE AUXILIAR
AS SELECT IdProfPrimer, IdAsignatura
FROM PROFESOR_PRIMER;
DROP TABLE PROFESOR_PRIMER;
RENAME AUXILIAR TO PROFESOR_PRIMER;
MODIFICAR UNA COLUMNA
La sintaxis que se utiliza para modificar la definición de una columna de una tabla de la Base de Datos es la siguiente:
ALTER TABLE <NOMBRE_TABLA>
MODIFY (<NOMBRE_COLUMNA_A_MODIFICAR> [<TIPO_DE_DATO>] [NULL | NOT NULL]);
EJEMPLO 82:
En la tabla ASIGNATURA no permitir nulos en el campo "IdTitulacion".
ALTER TABLE ASIGNATURA
MODIFY (IdTitulacion NOT NULL);
RENOMBRAR UNA COLUMNA Para renombrar una columna debemos proceder de la siguiente manera:

1. Crear una tabla auxiliar con todas las columnas y filas de la tabla que se quiere modificar.
2. Borrar la tabla original.
3. Renombrar la tabla auxiliar con el nombre original.

EJEMPLO 83:
En la tabla PROFESOR_PRIMER cambiar el nombre de la columna "IdAsignatura" por "IdAsignaturaImpartida".
CREATE TABLE AUXILIAR (IdProfPrimer, IdAsignaturaImpartida)
AS SELECT *
FROM PROFESOR_PRIMER;
DROP TABLE PROFESOR_PRIMER;
RENAME AUXILIAR TO PROFESOR_PRIMER;

4.A1 - LISTADO DE LOS


EJEMPLOS.
4.A1 - LISTADO DE LOS
EJEMPLOS.

LISTADO DE EJEMPLOS DE LOS APUNTES


Los siguientes ejercicios corresponden a los mostrados en los temas de los apuntes de SQL. Cada uno de ellos incluye un
enlace a la página en la que aparece explicado y solucionado.

TEMA 4.2 DML (Data Management Languaje)


SELECT, FROM
Ej. 1: Obtener los créditos de las asignaturas.
Ej. 2: Nombres y créditos de las asignaturas.

DISTINCT
Ej. 3: Posibles distintos créditos de las asignaturas.

*
Ej. 4: Todos los datos de personas.

TEMA 4.3 FUNCIONES DE AGRUPACIÓN


SUM
Ej. 5: Mostrar la suma de todos los créditos de las asignaturas.

AVG
Ej. 6: Media de coste básico.

MAX
Ej. 7: Coste básico de la asignatura más cara.

MIN
Ej. 8: CCoste básico de la asignatura más barata.

COUNT
Ej. 9: Cuantos costes básicos hay.
Ej. 10: Cuantos costes básicos distintos hay.
Ej. 11: Cuantas asignaturas hay.

AS - Renombrar campos
Ej. 12: Suma de los créditos de las asignaturas llamando a la columna resultante "TotalCreditos".

TEMA 4.4 OPERADORES. TIPOS DE EXPRESIONES. WHERE. BETWEEN.


Operadores: <, <=, =, >, >=, NOT, AND, OR; Fechas; Comando WHERE
Ej. 13: Nombre y créditos de las asignaturas del primer cuatrimestre.
Ej. 14: Nombre y Apellido de las personas nacidas antes del 1 de enero de 1975.
Ej. 15: Nombre y coste básico de las asignaturas de más de 4,5 créditos.
Ej. 16: Nombre de las asignaturas cuyo coste básico está entre 25 y 35 euros.

DISTINCT
Ej. 17: Id de los alumnos matriculados en la asignatura '150212' o en la '130113', o en ambas.
Ej. 18: Nombre de las asignaturas del segundo cuatrimestre que no sean de 6 créditos.
Ej. 19: Mostrar el identificador de los alumnos matriculados en cualquier asignatura excepto la '150212' y la '130113'.

BETWEEN
Ej. 20: Nombre de las asignaturas cuyo coste básico esté entre 25 y 35 euros. (Idem. 16).

TEMA 4.5 OPERADORES IN, LIKE, & ||. FUNCIÓN ORDER BY.
Operador IN
Ej. 21: Id de los alumnos matriculados en la asignatura '150212' ó en la '130113' ó en ambas. (Idem. 17).

Operador LIKE. Comodines ?, _, *, %.


Ej. 22: Nombre y el apellido de las personas cuyo apellido comience por la letra 'G'.

Operador IS, IS NOT.


Ej. 23A: Nombre de las asignaturas que no tienen dato para el IdTitulacion.
Ej. 23B: Nombre de las asignaturas que tienen dato para el IdTitulacion.
Ej. 24: Nombre de las asignaturas cuyo coste por crédito sea mayor de 8 Euros.
Ej. 25: Nombre y número de horas de todas las asignaturas. (1cred.=10 horas).

Operadores de cadenas: &, ||.


Ej. 26: Mostrar el nombre completo en una columna y la dirección completa en otra columna de las personas.

ORDER BY, ASC, DESC.


Ej. 27: Datos de personas por orden alfabético de apellidos.
Ej. 28: Datos de las asignaturas del 2º cuatrimestre por orden alfabético de IdTitulacion. Para cada titulación ordenar por
coste mostrando primero las asignaturas más caras y para las asignaturas del mismo coste mostrar por orden alfabético
de nombre de asignatura.

TEMA 4.6 CONSULTAS SOBRE VARIAS TABLAS RELACIONADAS - FROM.


TABLAS RELACIONADAS (FROM)
Ej. 29: Tablas relacionadas.
Ej. 29B: Nombre y apellidos de los profesores.
Ej. 30: Nombre de asignaturas impartidas por profesores de Logroño.
Ej. 31: Nombre completo (nombre y apellido), en una sóla columna, de los alumnos.
Ej. 32: DNI, Nombre y Apellido de los alumnos que viven en La Rioja. Como criterio usar el teléfono.
Ej. 33: DNI, Nombre y Apellido de los alumnos matriculados en la asignatura "Seguridad Vial".
Ej. 34: Id de las titulaciones en las que está matriculado el alumno con DNI 20202020A. Un alumno está matriculado en
una titulación si está matriculado en una asignatura de la titulación.
Ej. 35: Nombre de las asignaturas en las que está matriculada Rosa García, mostrando también por cada asignatura, el
número de matrícula.

Subconsultas - Consultas anidadas.


Ej. 36: DNI de los alumnos a los que imparte el profesor Jorge Sáenz.
Ej. 37: Cual sería el coste global de cursar la titulación de Matemáticas si el coste de cada asignatura fuera incrementado
en un 7%.
TEMA 4.7 CONSULTAS SOBRE TABLAS REPETIDAS - AS.
Ej. 38: Nombre de las asignaturas que tienen más créditos que "Seguridad Vial".
Ej. 39: DNI, Nombre y Apellido de los alumnos a los que imparte el profesor Jorge Sáenz.
Ej. 40: DNI de los profesores que también son alumnos.

TEMA 4.8 SENTENCIA DE AGRUPACIÓN: GROUP BY - HAVING.


GROUP BY
Ej. 41: Cuantos alumnos hay matriculados en cada asignatura.
Ej. 41B: Idem que el ejemplo 41 pero mostrando el nombre de cada asignatura.
Ej. 42: Cual es el coste básico total en cada titulación. Crear otra variante mostrando el nombre de la titulación.
Ej. 43: Supongamos que cada matrícula adicional supone un 10% de aumento sobre el coste básico, es decir un 10% en
2ª matrícula, un 20% en 3ª matrícula, etc.. Mostrar cuanto ha pagado cada alumno en total por su matrícula.

Condiciones sobre el agrupamiento: HAVING.


Ej. 44: Coste medio de las asignaturas de cada titulación, para aquellas titulaciones en el que el coste total de la 1ª
matrícula sea mayor que 60 euros.
Ej. 45: Id de los alumnos matriculados en las asignaturas "150212" y "130113" a la vez.
Ej. 46: Id de los alumnos matriculados en las asignatura "150212" ó "130113", en una o en otra pero no en ambas a la
vez.

TEMA 4.9 CONSULTAS ANIDADAS - SUBCONSULTAS.


CASO 1° - La consulta anidada devuelve un sólo dato.
Ej. 47: Nombre de las asignaturas de la titulación "130110" cuyos costes básicos sobrepasen el coste básico promedio por
asignatura en esa titulación.

CASO 2° - La consulta anidada devuelve más de un valor.


Ej. 48: Nombre de las titulaciones que tengan al menos una asignatura de 4.5 créditos.
Ej. 49: Mostrar el identificador de los alumnos matriculados en cualquier asignatura excepto la "150212" y la "130113".
(Es el ejemplo 19 corregido).
Ej. 50: Id de los alumnos matriculados en la asignatura "150212" pero no en la "130113".
Ej. 51: Nombre de las asignaturas que tienen más créditos que "Seguridad Vial". (Es igual que el ejemplo 38).
Ej. 52: Id de los alumnos matriculados en todas las asignaturas de 1º de Empresariales.

TEMA 4.10 CONSULTAS AVANZADAS: ALL, ANY Y EXISTS.


ALL
Ej. 53: Nombre de las asignaturas que tengan más créditos.
Ej. 54: Personas que viven en la ciudad que vive más gente.

ANY
Ej. 54B: Personas que viven en cualquier ciudad excepto en la que vive más gente.

EXISTS
Ej. 55: Lista de asignaturas en las que no se ha matriculado nadie.
Ej. 56: Ciudades en las que vive algún profesor y también algún alumno.
Ej. 57: Ciudades en las que vive algún profesor pero ningún alumno.

TEMA 4.11 OPERADORES DE TIPO CONJUNTO.


UNION
Ej. 58: Mostrar el DNI de alumnos y profesores.
Ej. 59: Mostrar las personas que no son ni profesores ni alumnos.
Ej. 60: Id de los alumnos matriculados en la asignatura "150212" o en la "130113" o en ambas. (Igual que el ejemplo 17).

INTERSECT
Ej. 61: DNI de los profesores que también son alumnos. (Igual que el ejemplo 40).

MINUS
Ej. 62: DNI de personas que no son profesores ni alumnos. (Igual que el ejemplo 59).
Ej. 63: Lista de asignaturas en las que no se ha matriculado nadie. (Igual que el ejemplo 55).
Ej. 64: Ciudades en las que vive algún profesor y también algún alumno. (Igual que el ejemplo 56).
Ej. 65: Ciudades en las que vive algún profesor pero ningún alumno. (Igual que el ejemplo 57).

TEMA 4.12 EJERCICIOS LMD.


90 ejercicios SQL resueltos sobre los temas anteriores.
Ej. 1-90 LMD: Ver enunciados de los ejercicios.

TEMA 4.13 INSERCIÓN, MODIFICACIÓN Y BORRADO DE DATOS.


INSERT
Ej. 66: Crear una nueva fila en la tabla TITULACION con los datos siguientes: IdTitulacion = "180100" y Nombre =
"Humanidades".
Ej. 67: Crear una nueva fila en la tabla TITULACION con los datos IdTitulacion = "180100" y Nombre = NULL.
Ej. 68: Crear una nueva fila en la tabla TITULACION con los datos siguientes: IdTitulacion = "180100" y Nombre =
"Humanidades". (Idem que el 66).
Ej. 69: Supongamos que disponemos de una tabla nueva llamada ASIGNATURA_LIBRE_CONFIGURACION, con las
mismas columnas que la tabla ASIGNATURA. Insertar las filas de a tabla ASIGNATURA cuyo IdTitulación sea NULL.

UPDATE
Ej. 70: Por error "Rosario Díez" se ha almacenado como "Díaz". Modificarlo para corregir el error.
Ej. 71: Por motivos técnicos, los prefijos telefónicos de La Rioja pasan a ser 991. Actualizar en la Base de Datos este
cambio.
Ej. 72: Disminuir en un 10% el coste básico de las asignaturas en las que existan más de 100 matriculados.

DELETE
Ej. 73: La alumna Laura Beltrán deja la Universidad. Darle de baja en todas las tablas.
TEMA 4.15 LENGUAJE DE DEFINICIÓN DE DATOS (LDD).
CREATE TABLE
Ej. 74: Crear la tabla ASIGNATURA que se ha empleado en los temas anteriores.
Ej. 75: Crear una tabla llamada PERSONA_ALUMNO que contenga los datos personales de los alumnos.
Ej. 76: Crear una tabla llamada PROFESOR_PRIMER con columnas "IdProfPrimer", "DNIProfPrimer", "IdAsignatura" que
almacene el identificador del profesor, su DNI y el identificador de la asignatura que imparte, para los profesores del
primer cuatrimestre.

DROP TABLE
Ej. 77: Eliminar la tabla ASIGNATURA.

RENAME
Ej. 78: Renombrar la tabla PERSONA como PERSONAS.

ALTER TABLE
Ej. 79: Insertar una nueva columna en la tabla TITULACION que pueda almacenar el tipo de titulación. (p.e.:
diplomatura, ingeniería, licenciatura, etc.).
Ej. 80: Borrar la columna creada en el ejemplo anterior.
Ej. 81: En la tabla PROFESOR_PRIMER eliminar la columna "DNIProfPrimer".
Ej. 82: En la tabla ASIGNATURA no permitir nulos en el campo "IdTitulacion".
Ej. 83: En la tabla PROFESOR_PRIMER cambiar el nombre de la columna "IdAsignatura" por "IdAsignaturaImpartida".

You might also like