SQL 2024-1
SQL 2024-1
Ing. Topográfica
BASES DE DATOS G.T.C
Practica SQL
Para la presente práctica, crearemos nuestras propias tablas en el software
PGADMIN, y haremos las consultas en el mismo.
Introducción al SQL
Una consulta SQL está compuesta por una instrucción SQL que define esa
consulta. Se trata de un comando que puede ocupar cuantas líneas de texto se
desee, terminado en punto y coma (;). SQL es un lenguaje sencillo e intuitivo (No
procedural); las consultas se asemejan al lenguaje natural.
Esta instrucción recupera ciertos campos de los registros de una tabla que verifican
una condición. La cláusula WHERE es opcional. Si se omite, se seleccionan todos
los registros (se supone que la condición es siempre verdadera).
Este es un ejemplo
CONSULTA 2: Seleccionar los apellidos y nombres de los que han aprobado los
dos parciales.
CONSULTA 3: Generar un listado con los nombres y apellidos de los alumnos y sus
notas.
EJEMPLO
ES UN
EJEMPLO
Adición de campos
Así:
CONSULTA 4: Obtener los apellidos junto a la nota media, suponiendo que la media
de los parciales es el 80% y el resto se obtiene con las practicas.
CONSULTA 5: Obtener los nombres completos de los alumnos junto a su NIF.
ES UN
EJEMPLO
Operadores y expresiones
Las expresiones en SQL son semejantes a las utilizadas en la
mayoría de loslenguajes.
Se destacan los siguientes:
Ejemplo Consulta 6:
ES UN
EJEMPLO
Valores repetidos
CONSULTA 14: Obtener los apellidos y las notas de los parciales de los alumnos
que han sacado mejor nota en el primer parcial que en el segundo, ordenando
según la diferencia entre ambas notas (las mayores diferencias primero). En caso
de empate, ordenar por apellidos de forma ascendente.
Ejemplo:
Agrupamiento de datos
SQL permite definir consultas en la que se ofrecen tuplas que se obtengan como
resultado del agrupamiento de varias tuplas. Por ejemplo, valor promedio de un
campo, máximo, mínimo, cuenta, etc.
Para este tipo de consultas se proporcionan los siguientes operadores, que se
denominan funciones de agregado:
CONSULTA 17: Obtener la máxima nota del primer parcial de entre todos los
alumnos que no tengan 0 en las practicas.
Ejemplo
ES UN
EJEMPLO
Filtrado de tuplas de salida
En estas consultas puede aparecer una condición WHERE que permite descartar
las tuplas que no deben ser tenidas en cuenta a la hora de calculas las funciones
de agregado. Sin embargo, WHERE no permite descartar tuplas utilizando como
condición el resultado de la función de agregado.
Por ejemplo, supongamos la siguiente consulta: “seleccionar los nombres de
alumnos para los que haya más de 2 alumnos con el mismo nombre (3 Pedros, 4
Juanes,...)”. Intuitivamente podríamos hacer:
En resumen: WHERE selecciona las tuplas que intervienen para calcular las
funciones de agregado y HAVING selecciona las tuplas que se muestran
teniendo en cuenta los resultados de las funciones de agregado.
En todos los casos, la cláusula ORDER BY puede ser incluida. Evidentemente esta
cláusula afectará únicamente al orden en que se muestran las tuplas resultado, y
no al cálculo de las funciones de agregado. Los campos por los cuales puede
efectuarse la ordenación sólo pueden ser aquéllos susceptibles de ser también
mostrados, es decir, que los campos admisibles en la cláusula ORDER BY son los
mismos que sean admisibles en la cláusula SELECT: funciones de agregado y la
combinación de campos que aparezca en GROUP BY.
Recordemos el formato de una instrucción SQL de selección con todas las opciones
vistas hasta ahora:
SELECT <lista de campos> FROM <tabla>
WHERE <condición>
GROUP BY <lista de campos> HAVING <condición de agregado> ORDER BY <lista
de campos>;
Para añadir datos a una tabla sin utilizar otra tabla o consulta como origen de datos,
se puede utilizar la siguiente sintaxis:
INSERT INTO <tabla destino> (<lista campos destino>) VALUES <lista campos
origen>;
Como en el caso anterior, debe existir una correspondencia y compatibilidad exacta
entre la lista de campos de origen y la lista de campos de destino Ejemplos de
consultas de inserción:
Se debe hacer una tabla “Personas” (cada estudiante la hace libre, no
pueden existir dos tablas iguales en la clase), que contenga mínimo 5 tuplas con
los siguientes Atributos:
Apellido1 Apellido2 Nombre Cargo
* Para obtener el año actual se puede utilizar de forma combinada las funciones
Date() que proporciona la fecha actual (día, mes y año) y Year(), que acepta como
parámetro una fecha y devuelve el número de año.
CONSULTA 22: Supongamos una tabla Personas en la que se almacena
información sobre el nombre, apellidos y cargo (en campos Nombre, Apellidos y
Cargo) de todas las personas de la universidad. Añadir a esta tabla todos los
alumnos de la tabla Alumnos.
Consultas de actualización
Las consultas de actualización de datos permiten modificar los datos almacenados
en una tabla. Se trata de modificar los valores de determinados campos en los
registros que cumplan una determinada condición. La sintaxis de este tipo de
consultas es:
UPDATE <tabla>
SET <campo> = <nuevo valor>, <campo> = <nuevo valor>, <campo> =
<nuevo valor> WHERE <condición>;
Veamos:
CONSULTA 24: Aprobar el primer parcial a todos los alumnos que tengan una nota
entre 45 y 50.
CONSULTA 25: Poner un 1 en las practicas a todos los alumnos que no tengan
ninguna nota en prácticas y tengan en el primer parcial por lo menos 50 y en el
segundo parcial por lo menos 40 y una nota media entre ambos mayores que 40.
REDONDEAR
Consultas de borrado
Las consultas de actualización de datos permiten eliminar tuplas de una tabla de
forma selectiva: los registros que cumplan una determinada condición. La sintaxis
de este tipo de consultas es:
DELETE [<tabla>.*] FROM tabla
WHERE <condición>;
Las consultas de borrado no permiten borrar campos; sólo tuplas completas.
Por eso la parte <tabla>.* es opcional. Para eliminar el valor de los campos debe
utilizarse una consulta de actualización, cambiando el valor de los campos a NULL.
Si no se especifica ninguna condición, se eliminan todas las tuplas.
No se elimina la tabla, ya que la estructura sigue existiendo, aunque no contenga
ningún registro.
Consultas de borrado:
CONSULTA 29: Eliminar a los alumnos que hayan aprobado todo.
CONSULTA 38: Eliminar el índice definido para el DNI (el de consulta anterior).
CONSULTA 39: Crear un índice en la tabla Alumnos, sobre los campos
Apellido1 y Apellido2. Permite valores repetidos.
ELIMINAR EL ÍNDICE
Modificación y acceso a los datos de una consulta. Vistas.
La utilización de consultas en bases de datos persigue dos objetivos:
La obtención de resultados sobre los datos almacenados. Es lo que hemos
visto hasta ahora.
La generación de vistas.
Las vistas son consultas de selección que se utilizan como si se tratara de tablas.
De forma transparente al usuario, las vistas muestran el contenido de una tabla con
un formato, orden y contenido adecuado a las necesidades del usuario. Por ejemplo,
si no queremos que un usuario tenga acceso a los datos DNI de la tabla de alumnos,
podemos crear una consulta que proporcione todos los datos (excepto el DNI) de
todos los alumnos, y presentarle la consulta como si fuera la propia tabla. De la
misma forma, podemos ocultarle la existencia de determinados alumnos, etc.
Una consulta se puede presentar a casi todos los efectos de la misma forma que
una tabla. Se pueden hacer consultas sobre consultas, añadir, modificar o eliminar
datos sobre la presentación del resultado de una consulta, crear formularios e
informes sobre consultas (en vez de tablas), etc.
Si embargo existe una limitación: determinadas operaciones no se permiten sobre
determinadas consultas empleadas como vistas. Esta limitación está impuesta por
la posibilidad o imposibilidad de que Access inserte de forma automáticamente los
valores a los que lo se tiene acceso mediante la vista. Supongamos una consulta
como:
SELECT * FROM Alumnos WHERE (Edad > 21) ORDER BY NIF;
Esta consulta de selección puede utilizarse como una vista, ya que es trivial
averiguar a qué fila y campo de la tabla de alumnos corresponde cada fila o campo
de la vista: cualquier modificación, inserción o borrado puede transmitirse a la tabla
base. Es importante reseñar que las tuplas que se añadan pueden no verificar la
condición WHERE o la cláusula ORDER BY. Sin embargo, esto no representa una
falta a ninguna regla de integridad y es perfectamente legal. La próxima vez que se
reconsulte la vista, las tuplas que no verifiquen la condición no volverán a aparecer,
pero estarán en la tabla original.
No ocurre lo mismo con una consulta como:
SELECT AVG (Parcial1) AS MediaP1 FROM Alumnos;
Si intentáramos utilizar esta tabla como una vista sobre la tabla Alumnos, ¿cómo se
introducirían los datos en Alumnos al añadir un nuevo registro en esta vista? Lo
mismo ocurre con muchas otras consultas.
Los siguientes tipos de consultas pueden funcionar como vistas:
Consultas de selección simple, con o sin condición WHERE, que añadan
o filtren campos, con cualquier tipo de orden.
Consultas de unión utilizando INNER JOIN.
Los siguientes tipos de consultas no pueden funcionar como vistas debido a la
imposibilidad de reconocer la ubicación de los datos en la tabla original a partir de
los de la vista: