DB Universidad
Short Description
sql data...
Description
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 e o d lle um 1616161 Luis Ramíre Haro Pez 34 6A z 1717171 Laura Beltrán Madrid Gran Vía 23 7A 1818181 Pepe Pérez Madrid Percebe 13 8A 1919191 Sánche Juan Bilbao Melancolía 7 9A z 2020202 Jiméne Luis Nájera Cigüeña 15 0A z 2121212 Rosa García Haro Alegría 16 1A 2323232 Logroñ Jorge Sáenz o Luis Ulloa 17 3A 2424242 Gutiérr Logroñ Avda. de la María 18 4A ez o Paz 2525252 Logroñ Rosario Díaz Percebe 19 5A o 2626262 Gonzále Logroñ Elena z Percebe 20 6A o DNI
Telefono 9411111 11 9121212 12 9131313 13 9441414 14 9411515 15 9411616 16 9411717 17 9411818 18 9411919 19 9412020 20
FechaNacimie Varo nto n 1/1/69
1
8/8/74
0
2/2/80
1
3/3/66
1
3/3/79
1
4/4/78
0
9/9/78
1
10/10/64
0
11/11/71
0
5/5/75
0
ASIGNATURA IdAsignatur a 000115 130113 130122 150212 160002
Nombre Seguridad Vial Programació nI Análisis II Química Física Contabilidad
ALUMNO IdAlumno DNI A010101 21212121A A020202 18181818A
Credito Cuatrimestr CosteBasic IdProfeso IdTitulacio Curs s e o r n o 4,5
1
30,00 €
P204
9
1
60,00 €
P101
130110
1
9
2
60,00 €
P203
130110
2
4,5
2
70,00 €
P304
150210
1
6
1
70,00 €
P117
160000
1
A030303 A040404 A121212 A131313
20202020A 26262626A 16161616A 17171717A
PROFESOR IdAlumno P101 P117 P203 P204 P304
DNI 19191919A 25252525A 23232323A 26262626A 24242424A
TITULACION IdTitulacion Nombre 130110 Matemáticas 150210 Químicas 160000 Empresariales
ALUMNO_ASIGNATURA IdAlumno A010101 A020202 A020202 A030303 A030303 A030303 A040404 A121212 A131313
IdAsignatura 150212 130113 150212 130113 150212 130122 130122 000115 160002
NumeroMatricula 1 1 2 3 1 2 1 1 4
TIPOS DE DATOS PERSONA Campo DNI Nombre Apellido Ciudad DireccionCalle DireccionNum Telefono
Tipo dato Tamaño Texto-Varchar2 9 Texto 25 Texto 50 Texto 25 Texto 50 Texto 3 Texto 9
Otros Primary Key Requerido - Not Null Requerido - Not Null
FechaNacimiento Fecha/Hora Texto Varon
Fecha corta Fecha corta 1 Check (Varon In ('0','1'))
ASIGNATURA Campo IdAsignatura Nombre Creditos Cuatrimestre CosteBasico IdProfesor IdTitulacion Curso
Tipo dato Tamaño Otros Texto 6 Primary Key Texto 50 Not Null Numérico Simple Check (Creditos In (4.5,6,7.5,9)) Texto 1 Check (Cuatrimestre In ('1','2')) Numérico Simple Number(3,2) Texto 4 References PROFESOR(IdProfesor) Texto 6 References TITULACION(IdTitulacion) Fecha/Hora Fecha corta Check (Curso In ('1','2','3','4'))
ALUMNO Campo Tipo dato Tamaño Otros 7 Primary Key IdAlumno Texto Texto 9 References PERSONA(DNI) DNI
PROFESOR Campo Tipo dato Tamaño Otros 4 Primary Key IdProfesor Texto Texto 9 References PERSONA(DNI) DNI
TITULACION Campo Tipo dato Tamaño Otros 6 Primary Key IdTitulacion Texto Texto 20 Not Null - Unique Nombre
ALUMNO_ASIGNATURA Campo IdAlumno IdAsignatura
Tipo dato Texto Texto
NumeroMatricula Numérico
Tamaño
Otros
7 6
References ALUMNO(IdAlumno) References ASIGNATURA(IdAsignatura) Not Null - Check(NumeroMatricula>=1 AND NumeroMatricula < >= = 25 AND CosteBasico 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
Para
en
enlazar
cadenas
CADENAS ORACLE
utilizamos
(& ||
EJEMPLO
y
y en
||) & .
ACCESS
26:
Mostrar el nombre completo en una columna y la dirección completa en otra columna de las personas. ORACLE: SELECT Nombre||' '||Ciudad FROM PERSONA;
'||Apellido
DireccionCalle||',
'||DireccionNum||'
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 DESC - Orden descendente. (Por
Orden
defecto
el
creciente.
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
Construir las tablas anteriores en una base de datos nueva y ejecutar la siguiente consulta:
29:
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
2. Ver cuáles son las relaciones las relevantes para la consulta condiciones en 3. Poner
el
resto
de
condiciones
en
y
ponerlas
entre las en cuestión el el
WHERE,
en
el
FROM.
tablas, seleccionar y ponerlas como WHERE.
ORDER
BY u
otras.
4. Fijar las columnas a mostrar en el SELECT.
EJEMPLO
Nombre de asignaturas impartidas por profesores de Logroño. SELECT Asignatura.Nombre FROM ASIGNATURA, PROFESOR, PERSONA
30:
WHERE ASIGNATURA.IdProfesor = PROFESOR.IdProfesor AND PROFESOR.DNI = PERSONA.DNI AND Ciudad = "Logroño";
EJEMPLO
Nombre completo (nombre y apellido), en una sóla columna, de los alumnos.
31:
SELECT Nombre&" "&Apellido FROM PERSONA, ALUMNO WHERE PERSONA.DNI = ALUMNO.DNI;
EJEMPLO
DNI, Nombre y Apellido de los alumnos que viven en La Rioja. Como criterio usar el teléfono.
32:
SELECT PERSONA.DNI AS DNI, Nombre, Apellido FROM PERSONA, ALUMNO WHERE PERSONA.DNI = ALUMNO.DNI AND Telefono LIKE "941*";
EJEMPLO
DNI, Nombre y Apellido de los alumnos matriculados en la asignatura "Seguridad Vial".
33:
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
DNI de los alumnos a los que imparte el profesor Jorge Sáenz.
36:
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"; forma de hacer lo mismo es utilizando una subconsulta llamadas también consultas anidadas.
Otra 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 VALUES ();
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 () VALUES ();
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 SET = WHERE ;
EJEMPLO
Por error "Rosario Díez" se ha almacenado como "Díaz" . Modificarlo para corregir el error.
70:
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
Disminuir en un 10% el coste básico de las asignaturas en las que existan más de 100 matriculados.
72:
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 WHERE ;
EJEMPLO
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";
73:
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 ( [NOT NULL], [NOT NULL],
............................................ [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
Crear la tabla ASIGNATURA que se ha empleado en los temas anteriores.
74:
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 (, , ........) AS (SELECT ......... ............................................ );
EJEMPLO
Crear una tabla llamada PERSONA_ALUMNO que contenga los datos personales de los alumnos.
75:
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 ;
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 TO
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
INSERTAR UNA O VARIAS La sintaxis que se utiliza para insertar una columna nueva en una tabla es la siguiente:
una
tabla.
COLUMNAS
ALTER TABLE ADD ( [NOT NULL], [NOT NULL],
........................................... [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);
(Aparece en la BORRAR UNA COLUMNA La sintaxis que se utiliza para borrar una columna de una tabla es la siguiente:
versión
9
de
Oracle)
ALTER TABLE DROP ;
EJEMPLO
Borrar la columna creada en el ejemplo anterior.
80:
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
En la tabla PROFESOR_PRIMER eliminar la columna "DNIProfPrimer".
81:
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 MODIFY ( [] [NULL | NOT NULL]);
EJEMPLO
En la tabla ASIGNATURA no permitir nulos en el campo "IdTitulacion".
82:
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
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
83:
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".
View more...
Comments