Вы находитесь на странице: 1из 31

1

TEMA 4: SQL

NOTA PRELIMINAR
Estos apuntes forman parte de la asignatura Bases de Datos de 1 de Ingeniera en Informtica de Gestin
de la Universidad de La Rioja, impartida por el profesor Angel Luis Rubio durante el curso 2002-2003.

La mayora de los ejemplos que aparecen en los apuntes fueron diseados para ejecutarse sobre una Base de
Datos ORACLE. El autor de esta pgina ha modificado o aadido parte del cdigo para permitir que los
ejemplos puedan ser ejecutados sobre una Base de Datos ACCESS.

APUNTES SQL: TEMARIO

0.- DEFINICIN DE LA BASE DE DATOS UNIVERSIDAD


Tablas que componen la Base de Datos UNIVERSIDAD.
Tipos de datos y propiedades.
Relaciones.

1.- INTRODUCCIN
Introduccin.
Base de datos relacional (Conceptos bsicos).
Intencin de uso.
Restricciones.

2.- DML (Data Management Languaje).


DML.
Comando SELECT.

3.- FUNCIONES DE AGRUPACIN. ALIAS.


Funciones de agrupacin (SUM, AVG, MAX, MIN y COUNT).
Renombramiento de campos con alias (AS).

4.- OPERADORES Y EXPRESIONES. COMANDO WHERE. OPERADOR BETWEEN.


Operadores (=, <, >, <=, >=, <>, AND, OR, NOT).
Tipos de expresiones.
WHERE.
BETWEEN.

5.- OPERADORES IN, LIKE, &, ||. FUNCIN ORDER BY.


IN.
LIKE.
Comodines (?, *, _, %).
OPERADORES DE CADENAS (& y ||).
FUNCIONES DE ORDENACIN (ORDER BY, ASC, DESC).

6.- CONSULTAS SOBRE VARIAS TABLAS - FROM.


Tablas relacionadas (FROM).
Proceso metdico de resolucin de consultas.
2

7.- CONSULTAS SOBRE TABLAS REPETIDAS - AS.


Tablas repetidas en el FROM.
Alias para tablas (AS).

8.- SENTENCIA DE AGRUPACIN - GROUP BY. HAVING.


Sentencia de agrupacin GROUP BY.
Condiciones sobre el agrupamiento HAVING.

9.- CONSULTAS ANIDADAS.


1 caso: La consulta anidada devuelve un slo dato.
2 caso: La consulta anidada devuelve ms de un valor.

10.- CONSULTAS AVANZADAS: CUANTIFICADORES ALL, ANY Y EXISTS.


Cuantificador ALL.
Cuantificador ANY.
Cuantificador EXISTS.

11.- OPERADORES DE TIPO CONJUNTO.


UNION.
INTERSECT (Oracle).
MINUS (Oracle).

12.- EJERCICIOS LMD. (Con soluciones)


90 ejercicios LMD de repaso del tema 1 al 11 realizados sobre la Base de Datos UNIVERSIDAD.

13.- INSERCIN, MODIFICACIN Y BORRADO DE DATOS.


INSERT.
UPDATE.
DELETE.

14.- TIPOS DE DATOS.


Tipos de datos en ORACLE.

14.- LENGUAJE DE DEFINICIN DE DATOS (LDD).


Crear tablas: CREATE TABLE.
Borrar tablas: DROP TABLE.
Renombrar tablas: RENAME TABLE.
Modificar columnas: ALTER TABLE.

APNDICES
A1.- LISTADO DE LOS EJEMPLOS DE LOS APUNTES.
Listado y enlaces a todos los ejemplos mostrados en estos apuntes.

A2.- LINKS SQL.


Enlaces a otras pginas sobre SQL.
3

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
Nomb Apelli Ciuda DireccionC DireccionN Telefon FechaNacimi Var
DNI
re do d alle um o ento on
1616161 Ramre 9411111
Luis Haro Pez 34 1/1/69 1
6A z 11
1717171 Madri 9121212
Laura Beltrn Gran Va 23 8/8/74 0
7A d 12
1818181 Madri 9131313
Pepe Prez Percebe 13 2/2/80 1
8A d 13
1919191 Snche 9441414
Juan Bilbao Melancola 7 3/3/66 1
9A z 14
2020202 Jimne 9411515
Luis Njera Cigea 15 3/3/79 1
0A z 15
2121212 9411616
Rosa Garca Haro Alegra 16 4/4/78 0
1A 16
2323232 Logro 9411717
Jorge Senz Luis Ulloa 17 9/9/78 1
3A o 17
2424242 Gutirr Logro Avda. de la 9411818
Mara 18 10/10/64 0
4A ez o Paz 18
2525252 Rosar Logro 9411919
Daz Percebe 19 11/11/71 0
5A io o 19
2626262 Gonzl Logro 9412020
Elena Percebe 20 5/5/75 0
6A ez o 20

ASIGNATURA
IdAsignatur Credito Cuatrimestr CosteBasic IdProfes IdTitulacio Curs
Nombre
a s e o or n o
4

Seguridad
000115 4,5 1 30,00 P204
Vial
Programaci
130113 9 1 60,00 P101 130110 1
nI
130122 Anlisis II 9 2 60,00 P203 130110 2
Qumica
150212 4,5 2 70,00 P304 150210 1
Fsica
Contabilida
160002 6 1 70,00 P117 160000 1
d

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 Matemticas
150210 Qumicas
160000 Empresariales

ALUMNO_ASIGNATURA
IdAlumno IdAsignatura NumeroMatricula
A010101 150212 1
A020202 130113 1
A020202 150212 2
5

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 Tamao 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 Tamao Otros
IdAsignatura Texto 6 Primary Key
Nombre Texto 50 Not Null
Creditos Numrico Simple Check (Creditos In (4.5,6,7.5,9))
Cuatrimestre Texto 1 Check (Cuatrimestre In ('1','2'))
CosteBasico Numrico 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 Tamao Otros
IdAlumno Texto 7 Primary Key
DNI Texto 9 References PERSONA(DNI)
6

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

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

ALUMNO_ASIGNATURA
Campo Tipo dato Tamao Otros
IdAlumno Texto 7 References ALUMNO(IdAlumno)
IdAsignatura Texto 6 References ASIGNATURA(IdAsignatura)
Not Null - Check(NumeroMatricula>=1 AND
NumeroMatricula Numrico Entero
NumeroMatricula<=6)

RELACIONES
7

4.1.- INTRODUCCIN.

INTRODUCCIN

- Los SGBD (Sistema Gestor de Bases de Datos) se basan en un cierto modelo de datos (abstraccin de
datos -> separacin entre datos y programas).

El modelo de datos ms utilizado es el modelo relacional. Al gestionar Bases de Datos siguiendo el modelo
relacional se necesita un lenguaje de comunicacin con el gestor. El ms utilizado es SQL.

S.Q.L. (Structured Query Language - Lenguaje Estructurado de Consulta)

1974 - Inicios.
1981 - IBM lanza un programa comercial basado en SQL.
1986/87 - Se establece ANSI/ISO SQL.
1992 - SQL-2 SQL-92.
1999 - SQL-3 SQL-99.

SQL NO es un lenguaje de programacin sino un lenguaje de gestin de BD's.

BASE DE DATOS RELACIONAL (Conceptos bsicos)

Tabla - Estructura en la que se distinguen las siguientes partes:

col col col


col 1 cabecera
2 3 4

fila -> cuerpo

celda

CABECERA - Los datos de la cabecera se llaman nombre de columna.

CUERPO - Conjunto de filas (tuplas).

Si en una celda no hay nada se dice que hay un dato nulo (NULL).

SINNIMOS:
Cabecera = Esquema de la tabla = intensin.
Cuerpo = Extensin.
Fila = Tupla. Columna = Atributo.
Nombre de Columna = Nombre de Atributo.

- El orden de filas y columnas es indiferente, es decir que dos tablas que slo se diferencien en el orden de
filas y/o columnas son iguales.
8

- En una tabla pueden aparecer datos repetidos.

- Se admiten tablas sin cuerpo que llamaremos TABLAS VACAS.

- No se admiten tablas sin cabecera.

- No se admiten nombres de columna nulos.

- Es distinto una tabla vaca que una tabla con fila nula.

INTENCIN DE USO

- TABLA refiere a una familia de individuos.

- Un nombre de columna refiere genricamente a un tipo de propiedad de esos individuos.

- Un dato en el cuerpo refiere a una propiedad concreta de un individuo de los referidos por la tabla, de tal
manera que la propiedad est referida genricamente por el nombre de columna en la que est el dato.

- Una fila es un conjunto de propiedades, (o ausencia de propiedad), que refiere a un mismo individuo de los
referidos por la tabla.

- Si un dato es nulo, se interpreta como ausencia de la propiedad concreta.

RESTRICCIONES

- No se admiten nombres de columna repetidos.

- Se puede dar nombre a las tablas (en singular).

- Las tablas nominadas (con nombre) no deben contener filas repetidas. Las llamaremos TABLAS BASE.

- BASE DE DATOS TABULAR: Conjunto de tablas base de tal forma que los nombres de las tablas son
distintos.

- Habitualmente entre dos tablas base de una B.D. tabular existen relaciones que se muestran al comprobar
que hay "datos comunes" entre distintas tablas.

- Cualquier lenguaje de gestin de Bases de Datos tiene que tener al menos dos sublenguajes:
DML - Data Management Languaje.
DDL - Data Description Languaje.
9

4.2 - DML (Data Management Languaje).

SELECT
El comando ms 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 crditos de las asignaturas.
SELECT Creditos
FROM ASIGNATURA;
EJEMPLO 2:
Nombres y crditos de las asignaturas.
SELECT Nombre,Creditos
FROM ASIGNATURA;
EJEMPLO 3:
Posibles distintos crditos de asignaturas.
SELECT DISTINCT(Creditos)
FROM ASIGNATURA;
EJEMPLO 4:
Todos los datos de personas.
SELECT *
FROM PERSONA;

4.3 - FUNCIONES DE AGRUPACIN.

FUNCIONES DE AGRUPACIN

SUM - Calcula la suma de los valores de una columna.


AVG - Calcula la media de los valores de una columna.
MAX - Calcula el mximo de los valores de una columna.
MIN - Calcula el mnimo de los valores de una columna.
COUNT - Calcula nmero de filas de una columna.

EJEMPLO 5:
Mostrar la suma de todos los crditos de las asignaturas.
SELECT SUM(Creditos)
FROM ASIGNATURA;
EJEMPLO 6:
Media de coste bsico.
SELECT AVG(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 7:
Coste bsico de la asignatura ms cara.
SELECT MAX(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 8:
Coste bsico de la asignatura ms barata.
SELECT MIN(CosteBasico)
10

FROM ASIGNATURA;
EJEMPLO 9:
Cuantos costes bsicos hay.
SELECT COUNT(CosteBasico)
FROM ASIGNATURA;
EJEMPLO 10:
Cuantos costes bsicos distintos hay.
SELECT COUNT(DISTINCT(CosteBasico))
FROM ASIGNATURA;
Nota: Vlido para ORACLE, no para ACCESS.

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

RENOMBRAMIENTO DE CAMPOS

Podemos renombrar un campo con la instruccin AS en ACCESS o dejando un espacio en blanco en


ORACLE.

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

ACCESS:
SELECT SUM(Creditos) AS "TotalCreditos"
FROM ASIGNATURA;
ORACLE:
SELECT SUM(Creditos) "TotalCreditos"
FROM ASIGNATURA;

4.4 - OPERADORES. WHERE. BETWEEN.

OPERADORES
= Igual que.
> Mayor que.
< Menor que.
>= Mayor o igual que.
<= Menor o igual que
<> Distinto que.

AND Y Lgico.
OR Lgico.
NOT No Lgico.

TIPOS DE EXPRESIONES
11

- Un nombre de columna.
- Un valor constante.

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

EJEMPLO 13:
Nombre y crditos 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 bsico de las asignaturas de ms de 4,5 crditos.
SELECT Nombre, CosteBasico
FROM ASIGNATURA
WHERE Creditos > 4.5;
EJEMPLO 16:
Nombre de las asignaturas cuyo coste bsico 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';
12

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 crditos.

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 bsico est entre 25 y 35 euros. (Idem. 16). Ver ejemplo 16.
SELECT Nombre
FROM ASIGNATURA
WHERE CosteBasico BETWEEN 25 AND 35;

4.5 - IN, LIKE, &, ||. ORDER BY.

OPERADOR IN

La instruccin 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
13

La instruccin LIKE permite comparar un valor o dato con un patrn.

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 carcter ? _
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 crdito sea mayor de 8 euros.
SELECT Nombre
FROM ASIGNATURA
WHERE (CosteBasico/Creditos) > 8;
EJEMPLO 25:
Nombre y nmero 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 direccin 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 ORDENACIN: ORDER BY

Los resultados de un SELECT se pueden ordenar a gusto del usuario mediante la clasula ORDER BY.

Atributos de ordenacin:
14

ASC - Orden creciente.


DESC - Orden descendente.
(Por defecto el orden es creciente).

EJEMPLO 27:
Datos de personas por orden alfabtico de apellidos.
SELECT *
FROM PERSONA
ORDER BY Apellido;
EJEMPLO 28:
Datos de las asignaturas del 2 cuatrimestre por orden alfabtico de IdTitulacion. Para cada titulacin
ordenar por coste mostrando primero las asignaturas ms caras y para las asignaturas del mismo coste
mostrar por orden alfabtico de nombre de asignatura.
SELECT *
FROM ASIGNATURA
WHERE Cuatrimestre = "2"
ORDER BY IdTitulacion, CosteBasico DESC, Nombre;

4.6 - FROM CON VARIAS TABLAS.

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 RESOLUCIN DE CONSULTAS

1. Decidir qu tablas estn implicadas y ponerlas en el FROM.

2. Ver cules son las relaciones entre las tablas, seleccionar


las relevantes para la consulta en cuestin y ponerlas como
condiciones en el WHERE.
15

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 Logroo.
SELECT Asignatura.Nombre
FROM ASIGNATURA, PROFESOR, PERSONA
WHERE ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND PROFESOR.DNI = PERSONA.DNI
AND Ciudad = "Logroo";
EJEMPLO 31:
Nombre completo (nombre y apellido), en una sla 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 telfono.
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 titulacin si est matriculado en una asignatura de la titulacin.
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 Garca, mostrando tambin por cada asignatura,
el nmero de matrcula.
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 = "Garca";
EJEMPLO 36:
DNI de los alumnos a los que imparte el profesor Jorge Senz.
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"
16

AND PERSONA.Apellido = "Senz";


Otra forma de hacer lo mismo es utilizando una subconsulta llamadas tambin consultas anidadas. Este tipo
de consultas se vern ms 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 = "Senz");
EJEMPLO 37:
Cual sera el coste global de cursar la titulacin de Matemticas 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 = "Matemticas";

4.7 - TABLAS REPETIDAS - AS.

ALIAS EN EL FROM PARA TABLAS REPETIDAS (AS)

En el FROM puede aparecer varias veces una misma tabla. Hay que usar alias, de forma anloga a como
hacamos en el SELECT.

EJEMPLO 38:
Nombre de las asignaturas que tienen ms crditos que "Seguridad Vial".
SELECT DISTINCT(ASIG1.Nombre) AS NOMBRE_ASIGNATURA
FROM ASIGNATURA AS ASIG1, ASIGNATURA AS ASIG2
WHERE ASIG1.Creditos > ASIG2.Creditos
AND ASIG2.Nombre = "Seguridad Vial";
Otra forma con consultas anidadas. Este tipo de consultas se vern ms adelante a partir del ejercicio 49.
SELECT Nombre
FROM ASIGNATURA
WHERE Creditos > (SELECT Creditos
FROM ASIGNATURA
WHERE Nombre = "Seguridad Vial");
EJEMPLO 39:
DNI, Nombre y Apellido de los alumnos a los que imparte el profesor Jorge Senz.
SELECT P1.DNI AS DNI, P1.Nombre AS NOMBRE, P1.Apellido AS APELLIDO
FROM PERSONA AS P1, PERSONA AS P2,ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA, PROFESOR
WHERE P1.DNI = ALUMNO.DNI
AND P2.DNI = PROFESOR.DNI
AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdProfesor = PROFESOR.IdProfesor
AND P2.Nombre = "Jorge"
AND P2.Apellido = "Senz");
Otra forma de hacer lo mismo es utilizando una subconsulta llamadas tambin consultas anidadas. Este tipo
de consultas se vern ms adelante a partir del ejercicio 49.
SELECT PERSONA.DNI AS DNI, PERSONA.Nombre AS NOMBRE, PERSONA.Apellido AS APELLIDO
FROM ALUMNO, ALUMNO_ASIGNATURA, ASIGNATURA, PERSONA
17

WHERE PERSONA.DNI = ALUMNO.DNI


AND ALUMNO.IdAlumno = ALUMNO_ASIGNATURA.IdAlumno
AND ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdProfesor IN (SELECT PROFESOR.IdProfesor
FROM PERSONA, PROFESOR, ASIGNATURA
WHERE PERSONA.DNI = PROFESOR.DNI
AND PROFESOR.IdProfesor = ASIGNATURA.IdProfesor
AND PERSONA.Nombre = "Jorge"
AND PERSONA.Apellido = "Senz");
EJEMPLO 40:
DNI de los profesores que tambin son alumnos.
SELECT PROFESOR.DNI AS DNI
FROM PROFESOR, ALUMNO
WHERE PROFESOR.DNI = ALUMNO.DNI;

4.8 - GROUP BY. HAVING.

SENTENCIA DE AGRUPACIN GROUP BY

Para agrupar valores utilizaremos la clausula GROUP BY.

EJEMPLO 41:
Cuantos alumnos hay matriculados en cada asignatura.
SELECT IdAsignatura, COUNT(IdAlumno) AS NUM
FROM ALUMNO_ASIGNATURA
GROUP BY IdAsignatura;
Nota: Todos los campos que aparecen en el SELECT junto a una orden de agrupacin deben aparecer en el
GROUP BY.

EJEMPLO 41 B:
Idem que el ejemplo 41 pero mostrando el nombre de cada asignatura.
SELECT Nombre, COUNT(IdAlumno) AS NUM
FROM ASIGNATURA, ALUMNO_ASIGNATURA
WHERE ASIGNATURA.IdAsignatura = ALUMNO_ASIGNATURA.IdAsignatura
GROUP BY ASIGNATURA.IdAsignatura, Nombre;
EJEMPLO 42:
Cual es el coste bsico total en cada titulacin. Crear otra variante mostrando el nombre de la titulacin.
SELECT SUM(CosteBasico) AS COSTE_TOTAL
FROM ASIGNATURA
GROUP BY IdTitulacion;
SELECT TITULACION.Nombre AS NOMBRE_TIT, SUM(CosteBasico) AS COSTE_TOTAL
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
GROUP BY TITULACION.NOMBRE;
Nota: Si en el enunciado aparece la palabra cada va ir asociada a GROUP BY y si aparece la palabra en total
va ir asociada a SUM.

EJEMPLO 43:
Supongamos que cada matrcula adicional supone un 10% de aumento sobre el coste bsico, es decir un 10%
en 2 matrcula, un 20% en 3 matrcula, etc.. Mostrar cuanto ha pagado cada alumno en total por su
matrcula.
SELECT IdAlumno, SUM(CosteBasico*(1+(NumeroMatricula-1)*0.1)) AS
CosteTotalMatricula
FROM ASIGNATURA, ALUMNO_ASIGNATURA
18

WHERE ASIGNATURA.IdAsignatura = ALUMNO_ASIGNATURA.IdAsignatura


GROUP BY IdAlumno;

CONDICIONES SOBRE EL AGRUPAMIENTO - HAVING

Para filtrar los registros combinados por GROUP BY debemos utilizar la sentencia HAVING que funciona
de una manera similar a como lo hace la sentencia WHERE con los registros construidos por la sentencia
FROM.

EJEMPLO 44:
Coste medio de las asignaturas de cada titulacin, para aquellas titulaciones en el que el coste total de la 1
matrcula sea mayor que 60 euros.
SELECT IdTitulacion, AVG(CosteBasico) AS CosteMedio
FROM ASIGNATURA
GROUP BY IdTitulacion
HAVING SUM(CosteBasico) > 60;
EJEMPLO 45:
Id de los alumnos matriculados en las asignaturas "150212" y "130113" a la vez.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113"
GROUP BY IdAlumno
HAVING COUNT(IdAlumno) = 2;
EJEMPLO 46:
Id de los alumnos matriculados en las asignatura "150212" "130113", en una o en otra pero no en ambas a
la vez.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113"
GROUP BY IdAlumno
HAVING COUNT(IdAlumno) = 1;

4.9 - CONSULTAS ANIDADAS.

CONSULTAS ANIDADAS

Podemos crear concultas anidadas en los que algn valor o valores de la consulta padre es devuelto por otra
consulta hijo.

La consulta anidada puede devolver uno o ms datos.

CASO 1 - La consulta anidada devuelve un slo dato.

En este caso se usarn los operadores =, <, <=, >=, > asociados a la consulta anidada.

EJEMPLO 47:
19

Nombre de las asignaturas de la titulacin "130110" cuyos costes bsicos sobrepasen el coste bsico
promedio por asignatura en esa titulacin.
SELECT Nombre FROM ASIGNATURA
WHERE CosteBasico > (SELECT AVG(CosteBasico)
FROM ASIGNATURA
WHERE IdTitulacion = "130110")
AND IdTitulacion = "130110";

CASO 2 - La consulta anidada devuelve ms de un valor.

Si la consulta anidada devuelve ms de un valor usaremos los operadores IN, NOT IN o los operadores
anteriores asociados a cuantificadores como ALL y ANY o tambin el cuantificador EXITS. Estos
cuantificadores se vern ms adelante a partir del ejemplo 54.

EJEMPLO 48:
Nombre de las titulaciones que tengan al menos una asignatura de 4.5 crditos.
SELECT Nombre
FROM TITULACION
WHERE IdTitulacion IN (SELECT DISTINCT IdTitulacion
FROM ASIGNATURA
WHERE Creditos = 4.5);
Otra forma:
SELECT DISTINCT IdTitulacion.Nombre
FROM TITULACION, ASIGNATURA
WHERE TITULACION.IdTitulacion = ASIGNATURA.IdTitulacion
AND Creditos = 4.5;
EJEMPLO 49:
Mostrar el identificador de los alumnos matriculados en cualquier asignatura excepto la "150212" y la
"130113". (Es el ejemplo 19 corregido).
Ver ejemplo 19.
SELECT IdAlumno
FROM ALUMNO
WHERE IdAlumno NOT IN (SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212" OR IdAsignatura = "130113");
EJEMPLO 50:
Id de los alumnos matriculados en la asignatura "150212" pero no en la "130113".
SELECT IdAlumno
FROM ALUMNO
WHERE IdAlumno IN (SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212")
AND IdAlumno NOT IN (SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "130113");
EJEMPLO 51:
Nombre de las asignaturas que tienen ms crditos que "Seguridad Vial". (Es igual que el ejemplo 38).
Ver ejemplo 38.
SELECT Nombre
FROM ASIGNATURA
WHERE Creditos > (SELECT Creditos
FROM ASIGNATURA
WHERE Nombre = "Seguridad Vial");
20

EJEMPLO 52:
Id de los alumnos matriculados en todas las asignaturas de 1 de Empresariales.
SELECT IdAlumno
FROM ASIGNATURA, ALUMNO_ASIGNATURA, TITULACION
WHERE ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura
AND ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND Curso = "1"
GROUP BY IdAlumno
HAVING COUNT(IdAlumno) = (SELECT COUNT(IdAsignatura)
FROM ASIGNATURA, TITULACION
WHERE ASIGNATURA.IdTitulacion = TITULACION.IdTitulacion
AND TITULACION.Nombre = "Empresariales"
AND Curso = "1");

CONSULTAS AVANZADAS: CUANTIFICADORES ALL, ANY Y EXISTS

En relacin con consultas anidadas existen 3 cuantificadores ALL y ANY y EXITS.

CUANTIFICADOR ALL.

Se utilizar de forma conjunta con una consulta anidada que devuelva ms de un valor y un operador de
comparacin que no sea la igualdad.

Sirve para seleccionar los valores que cumplan una determinada condicin para todos los valores de la
consulta anidada. (No se suele utilizar con igualdad).

EJEMPLO 53:
Nombre de las asignaturas que tengan ms crditos.
SELECT Nombre
FROM ASIGNATURA
WHERE Creditos >= ALL (SELECT Creditos
FROM ASIGNATURA);
Otra forma:
SELECT Nombre
FROM ASIGNATURA
WHERE Creditos = (SELECT MAX(Creditos)
FROM ASIGNATURA);
EJEMPLO 54:
Personas que viven en la ciudad que vive ms gente.
SELECT *
FROM PERSONA
WHERE Ciudad IN (SELECT Ciudad
FROM PERSONA
GROUP BY Ciudad
HAVING COUNT(*) >= ALL (SELECT COUNT(*)
FROM PERSONA
21

GROUP BY Ciudad));

CUANTIFICADOR ANY.

En conjuncin con una consulta anidada que devuelve varios valores, sirve para determinar cuando una
determinada condicin se verifica para al menos uno de los valores que devuelve la subconsulta. (No se
suele utilizar con desigualdad).

EJEMPLO 54B:
Personas que viven en cualquier ciudad excepto en la que vive ms gente.
SELECT *
FROM PERSONA
WHERE Ciudad IN (SELECT Ciudad
FROM PERSONA
GROUP BY Ciudad
HAVING COUNT(*) < ANY (SELECT COUNT(*)
FROM PERSONA
GROUP BY Ciudad));

CUANTIFICADOR EXISTS.

En conjuncin con una consulta anidada sirve para determinar si existen filas en dicha subconsulta. Podemos
utilizar anlogamente NOT EXISTS.

Este tipo de consultas se llaman correlacionadas ya que hay una relaccin entre la consulta principal y la
subconsulta.

EJEMPLO 55:
Lista de asignaturas en las que no se ha matriculado nadie.
SELECT *
FROM ASIGNATURA
WHERE NOT EXISTS (SELECT *
FROM ALUMNO_ASIGNATURA
WHERE ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura);
EJEMPLO 56:
Ciudades en las que vive algn profesor y tambin algn alumno.
SELECT DISTINCT Ciudad
FROM PERSONA AS PP, PROFESOR
WHERE PP.DNI = PROFESOR.DNI
AND EXISTS (SELECT *
FROM PERSONA AS PA, ALUMNO
WHERE PA.DNI = ALUMNO.DNI
AND PA.Ciudad = PP.Ciudad);
Otra forma:
SELECT DISTINCT PP.Ciudad
FROM PERSONA AS PP, PROFESOR, PERSONA AS PA, ALUMNO
WHERE PP.DNI = PROFESOR.DNI
AND PA.DNI = ALUMNO.DNI
AND PA.Ciudad = PP.Ciudad;
EJEMPLO 57:
Ciudades en las que vive algn profesor pero ningn alumno.
SELECT DISTINCT Ciudad
FROM PERSONA AS PP, PROFESOR
WHERE PP.DNI = PROFESOR.DNI
22

AND NOT EXISTS (SELECT *


FROM PERSONA AS PA, ALUMNO
WHERE PA.DNI = ALUMNO.DNI
AND PA.Ciudad = PP.Ciudad);

OPERADORES DE TIPO CONJUNTO

Si entendemos las tablas como un conjunto de filas, podemos entonces aplicar las operaciones bsicas de
conjuntos: UNIN, INTERSECCIN y SUSTRACCIN siendo sus equivalentes en SQL UNION,
INTERSECT y MINUS.

(Las dos ltimas no funcionan en ACCESS pero s en ORACLE).

Suponiendo que aplicamos alguno de los operadores anteriores a dos tablas A y B, stas deben ser
compatibles, es decir el nmero y el tipo de las columnas debe ser el mismo.

No es necesario que el nombre de las columnas coincida en ambas tablas.

El nombre de la columna resultado AUB es el mismo que A.

Se pueden aplicar estos operadores a ms de dos tablas a la vez en una misma consulta.

OPERADOR UNION.

El operador UNION se utilizar para crear una consulta de unin entre dos o ms consultas o tablas
independientes.

El resultado de esta consulta devuelve la suma de todas las filas de las consultas o tablas implicadas
omitiendo aqullas que estn repetidas. Podemos forzar que las tuplas repetidas sean devueltas utilizando el
predicado ALL.

EJEMPLO 58:
Mostrar el DNI de alumnos y profesores.
SELECT DNI
FROM ALUMNO
UNION
SELECT DNI
FROM PROFESOR;
Lo mismo pero con filas repetidas:
SELECT DNI
FROM ALUMNO
UNION ALL
23

SELECT DNI
FROM PROFESOR;
EJEMPLO 59:
Mostrar las personas que no son ni profesores ni alumnos.
SELECT *
FROM PERSONA
WHERE DNI NOT IN (SELECT DNI
FROM ALUMNO
UNION
SELECT DNI
FROM PROFESOR);
La consulta anterior no es aceptada por ACCESS. Una variante que devuelve el mismo resultado es la
siguiente:
SELECT *
FROM PERSONA
WHERE DNI NOT IN (SELECT DNI
FROM ALUMNO)
AND DNI NOT IN (SELECT DNI
FROM PROFESOR);
EJEMPLO 60:
Id de los alumnos matriculados en la asignatura "150212" o en la "130113" o en ambas. (Igual que el
ejemplo 17).
Ver ejemplo 17.
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "150212"
UNION
SELECT IdAlumno
FROM ALUMNO_ASIGNATURA
WHERE IdAsignatura = "130113";

OPERADOR INTERSECT.

EJEMPLO 61:
DNI de los profesores que tambin son alumnos. (Igual que el ejemplo 40).
Ver ejemplo 40.
SELECT DNI
FROM PROFESOR
INTERSECT
SELECT DNI
FROM ALUMNO;

La consulta anterior no funciona en ACCESS.

OPERADOR MINUS.

EJEMPLO 62:
DNI de personas que no son profesores ni alumnos. (Igual que el ejemplo 59).
Ver ejemplo 59.
SELECT DNI
FROM PERSONA
MINUS
(SELECT DNI
24

FROM PROFESOR
UNION
SELECT DNI
FROM ALUMNO);

La consulta anterior no funciona en ACCESS.

EJEMPLO 63:
Lista de asignaturas en las que no se ha matriculado nadie. (Igual que el ejemplo 55).
Ver ejemplo 55.
SELECT *
FROM ASIGNATURA
MINUS
SELECT ASIGNATURA.*
FROM ASIGNATURA, ALUMNO_ASIGNATURA
WHERE ALUMNO_ASIGNATURA.IdAsignatura = ASIGNATURA.IdAsignatura;
EJEMPLO 64:
Ciudades en las que vive algn profesor y tambin algn alumno. (Igual que el ejemplo 56).
Ver ejemplo 56.
SELECT Ciudad
FROM PROFESOR,PERSONA
WHERE PROFESOR.DNI = PERSONA.DNI
INTERSECT
SELECT Ciudad
FROM ALUMNO, PERSONA
WHERE ALUMNO.DNI = PERSONA.DNI;
EJEMPLO 65:
Ciudades en las que vive algn profesor pero ningn alumno. (Igual que el ejemplo 57).
Ver ejemplo 57.
SELECT Ciudad
FROM PROFESOR,PERSONA
WHERE PROFESOR.DNI = PERSONA.DNI
MINUS
SELECT Ciudad
FROM ALUMNO, PERSONA
WHERE ALUMNO.DNI = PERSONA.DNI;

4.12 - EJERCICIOS LMD.

90 EJERCICIOS LMD DE REPASO DEL TEMA 1 AL 11 (Resueltos)

Los siguientes 90 ejercicios son un repaso de los temas anteriores que permiten practicar y afianzar todo lo
que se ha explicado hasta ahora.

Algunos ejercicios coinciden con los ejemplos que ya hemos descrito.

Todos los ejercicios estn pensados para realizar consultas sobre la Base de datos UNIVERSIDAD que
hemos utilizado en todos los temas anteriores.
25

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

EJERCICIO 2:
Cdigos, nombres y crditos de las asignaturas. Ver SQL

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

EJERCICIO 4:
Posibilidades de crditos 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 ms cara. Ver SQL

EJERCICIO 9:
Coste de la asignatura ms barata. Ver SQL

EJERCICIO 10:
Coste mximo, mnimo y medio de las asignaturas. Ver SQL

EJERCICIO 11:
Cuantas posibilidades de crditos 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 crditos de las asignaturas del primer cuatrimestre Ver SQL

EJERCICIO 15:
Nombre y coste bsico de las asignaturas de ms de 4,5 crditos. Ver SQL

EJERCICIO 16:
Nombre de las asignaturas cuyo coste est entre 25 y 35 euros. (Con y sin BETWEEN). Ver SQL
26

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 crditos. Ver SQL

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

EJERCICIO 21:
Nombre y nmero 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 titulacin. Ver SQL

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

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

EJERCICIO 28:
Aos 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 aos ordenadas por apellidos y nombre. Ver SQL

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

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

EJERCICIO 33:
Listado de alumnos matriculados que viven en La Rioja. Ver SQL

EJERCICIO 34:
Listado de asignaturas impartidas por profesores de Logroo. Ver SQL

EJERCICIO 35:
Listado de profesores que adems son alumnos. Ver SQL

EJERCICIO 36:
Nombres completos de los profesores que adems 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 crditos de las asignaturas de Matemticas. Ver SQL

EJERCICIO 41:
Nmero de asignaturas de la titulacin de Matemticas. 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 titulacin basta con que est matriculado en alguna de sus asignaturas. Ver
SQL

EJERCICIO 43:
Cual sera el coste global de cursar la titulacin de Matemticas 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 titulacin y nombre de asignatura de todas las asignaturas, mostrando
adems la titulacin, nombre de asignatura y nombre del profesor. Ver SQL

EJERCICIO 47:
28

Nombres completos de alumnos matriculados en alguna asignatura mostrando cual es la asignatura y la


titulacin 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 tamaos de las asignaturas en funcin de su
nmero de crditos.

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 calificacin de su duracin segn la tabla anterior. Ver
SQL

EJERCICIO 49:
Asignaturas de la titulacin de Matemticas. Ver SQL

EJERCICIO 50:
Listado de asignaturas que tengan ms crditos que "Seguridad Vial". Ver SQL

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

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

EJERCICIO 53:
Cual es el coste de la matrcula de cada titulacin. Ver SQL

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

EJERCICIO 55:
Cuanto paga cada alumno por su matrcula. Ver SQL

EJERCICIO 56:
Estadsticas (nmero 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 slo para los alumnos. Ver SQL
29

EJERCICIO 58:
Coste medio de las asignaturas de cada titulacin para aquellas titulaciones en las que el coste total de la
matrcula sea mayor de 60 euros. Ver SQL

EJERCICIO 59:
Visualiza la asignatura con ms crditos, la media de crditos, la suma de los crditos y la titulacin a la que
pertenecen, para titulaciones con ms de 1 asignatura. Ver SQL

EJERCICIO 60:
Que alumnos (nombre completo) estn matriculados al menos en dos asignaturas. Ordena el resultado
alfabticamente. Ver SQL

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

EJERCICIO 62:
Clasifica las titulaciones por orden descendente en funcin del total de crditos necesarios para
cursarlas. Ver SQL

EJERCICIO 63:
Edad del alumno ms viejo de cada asignatura. Ver SQL

EJERCICIO 64:
Lista de gente ordenada por mes en el que cumplen los aos. 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 titulacin '130110' cuyo coste bsico sobrepase el coste bsico promedio
por asignatura en dicha titulacin. 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 ms de 4,5 crditos. Ver SQL

EJERCICIO 69:
Asignaturas con ms crditos que alguna de las asignaturas de Matemticas. 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 crditos superiores a la media de las asignaturas. Ver SQL

EJERCICIO 72:
30

Listado de asignaturas cuyo coste es superior al coste medio de las asignaturas que no pertenecen a ninguna
titulacin. Ver SQL

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

EJERCICIO 74:
Listado de alumnos que nacieron antes que el profesor ms joven. Ver SQL

EJERCICIO 75:
Asignaturas de la titulacin '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 Logroo
y cuyo nmero de compaeros de asignatura sea menor que 10. Ver SQL

EJERCICIO 78:
Listado de las asignaturas no cursadas por alumnos de Logroo. Ver SQL

EJERCICIO 79:
Para cada asignatura con ms de dos matriculados, encuentra el nmero de alumnos matriculados en ella de
ms de 25 aos. Ver SQL

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

EJERCICIO 81:
Listado de ciudades en las que ha nacido algn profesor y tambin algn alumno. Ver SQL

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

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

EJERCICIO 84:
Identificadores de los alumnos ms viejos de cada titulacin. 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
31

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 titulacin
'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:
Estadsticas por titulacin (mostrando el nombre de la titulacin): coste bsico mximo, mnimo y medio y
crditos medios de sus asignaturas. Incluye en la lista las asignaturas que no tienen asociada ninguna
titulacin, mostrando el texto "Asignatura de campus" en el nombre de la titulacin. Ver SQL

Вам также может понравиться