• No se han encontrado resultados

DB Universidad

N/A
N/A
Protected

Academic year: 2021

Share "DB Universidad"

Copied!
26
0
0

Texto completo

(1)

4.0 - LA BASE DE DATOS

4.0 - LA BASE DE DATOS

UNIVERSIDAD.

UNIVERSIDAD.

En estos apuntes vamos a realizar consultas SQL sobre

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

TABLAS DE LA BASE DE DATOS UNIVERSIDAD

TABLAS DE LA BASE DE DATOS UNIVERSIDAD

PERSONA

PERSONA

DNI

DNI NombrNombree ApellidApellidoo CiudaCiudadd DireccionCaDireccionCallelle DireccionNDireccionNumum TelefonoTelefono FechaNacimieFechaNacimientonto VaroVaronn 1616161

1616161 6A

6A LuisLuis RamíreRamírezz Haro Haro Pez Pez 3434 941111194111111111 1/1/69 1/1/69 11 1717171

1717171 7A

7A Laura Laura Beltrán Beltrán Madrid Madrid Gran Gran Vía Vía 2323 912121291212121212 8/8/74 8/8/74 00 1818181

1818181 8A

8A Pepe Pepe Pérez Pérez Madrid Madrid Percebe Percebe 1313 913131391313131313 2/2/80 2/2/80 11 1919191

1919191 9A

9A JuanJuan SáncheSánchezz Bilbao Bilbao Melancolía Melancolía 77 944141494414141414 3/3/66 3/3/66 11 2020202

2020202 0A

0A LuisLuis JiméneJiménezz Nájera Nájera Cigüeña Cigüeña 1515 941151594115151515 3/3/79 3/3/79 11 2121212

2121212 1A

1A Rosa Rosa García García Haro Haro Alegría Alegría 1616 941161694116161616 4/4/78 4/4/78 00 2323232

2323232 3A

3A Jorge SáenzJorge Sáenz LogroñLogroñoo Luis Luis Ulloa Ulloa 1717 941171794117171717 9/9/78 9/9/78 11 2424242

2424242 4A

4A MaríaMaría GutiérrGutiérrezez LogroñLogroñoo PazPazAvda. de laAvda. de la 1818 941181894118181818 10/10/64 10/10/64 00 2525252

2525252 5A

5A Rosario DíazRosario Díaz LogroñLogroñoo Percebe Percebe 1919 941191994119191919 11/11/71 11/11/71 00 2626262

2626262 6A

6A ElenaElena GonzáleGonzálezz LogroñLogroñoo Percebe Percebe 2020 941202094120202020 5/5/75 5/5/75 00

ASIGNATURA

ASIGNATURA

IdAsignatur IdAsignatur

a

a NombreNombre CreditoCreditoss CuatrimestrCuatrimestree CosteBasicCosteBasicoo IdProfesoIdProfesorr IdTitulacioIdTitulacionn CursCursoo 000115

000115 SeguridadSeguridadVialVial 4,5 4,5 11 30,00 €30,00 €   P204P204

130113

130113 ProgramacióProgramación In I 9 9 11 60,00 €60,00 € P101 P101 130110 130110 11

130122

130122 Análisis Análisis II II 9 9 22 60,00 €60,00 € P203 P203 130110 130110 22

150212

150212 QuímicaFísicaFísicaQuímica 4,5 4,5 22 70,00 €70,00 € P304 P304 150210 150210 11

160002 160002 Contabilidad Contabilidad 6 6 11 70,00 €70,00 € P117 P117 160000 160000 11

ALUMNO

ALUMNO

IdAlumno DNI IdAlumno DNI A010101 21212121A A010101 21212121A A020202 18181818A A020202 18181818A

(2)

A030303 20202020A A030303 20202020A A040404 26262626A A040404 26262626A A121212 16161616A A121212 16161616A A131313 17171717A A131313 17171717A

PROFESOR

PROFESOR

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

TITULACION

TITULACION

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

ALUMNO_ASIGNATURA

ALUMNO_ASIGNATURA

IdAlumno IdAsignatura NumeroMatricula IdAlumno IdAsignatura NumeroMatricula A010101 A010101 150212 150212 11 A020202 A020202 130113 130113 11 A020202 A020202 150212 150212 22 A030303 A030303 130113 130113 33 A030303 A030303 150212 150212 11 A030303 A030303 130122 130122 22 A040404 A040404 130122 130122 11 A121212 A121212 000115 000115 11 A131313 A131313 160002 160002 44

TIPOS DE DATOS

TIPOS DE DATOS

PERSONA

PERSONA

Campo

Campo Tipo Tipo dato dato Tamaño Tamaño OtrosOtros

DNI

DNI Texto-Varchar2 Texto-Varchar2 9 9 Primary Primary KeyKey Nombre

Nombre Texto Texto 25 25 Requerido - Requerido - Not Not NullNull Apellido

Apellido Texto Texto 50 50 Requerido - Requerido - Not Not NullNull Ciudad

Ciudad Texto Texto 2525 DireccionCalle

DireccionCalle Texto Texto 5050 DireccionNum

DireccionNum Texto Texto 33 Telefono

(3)

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

Campo datoTipo Tamaño Otros

IdAlumno Texto 7 References ALUMNO(IdAlumno) IdAsignatura Texto 6 References ASIGNATURA(IdAsignatura) NumeroMatricula Numérico Entero Not Null - Check(NumeroMatricula>=1 ANDNumeroMatricula<=6)

(4)

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.

(5)

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;

(6)

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:

(7)

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.

(8)

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;

(9)

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

(10)

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

(11)

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:

(12)

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:

(13)

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.

(14)

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

(15)

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

(16)

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.

(17)

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

(18)

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

(19)

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

(20)

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.

(21)

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.

(22)

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

(23)

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

(24)

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

(25)

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"  yNombre = "Humanidades" .

Ej. 67: Crear una nueva fila en la tabla TITULACION con los datos IdTitulacion ="180100"  yNombre = NULL.

Ej. 68: Crear una nueva fila en la tabla TITULACION con los datos siguientes: IdTitulacion = "180100"  yNombre = "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

(26)

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

Referencias

Documento similar