Lenguaje SQL
BASES DE DATOS I
SQL – Introducción
SQL (Structured Query Language)
Es el lenguaje más universalmente usado para
bases de datos relacionales
Lenguaje declarativo de alto nivel
Desarrollado por IBM (1974-1977)
Se convirtió en un standard definido por :
◦ ANSI (American National Standards Institute) e
◦ ISO (International Standards Organization)
SQL
Lenguaje de Consultas Estruturado (SQL)
◦ Lenguaje de trabajo estándard para modelo relacional
◦ Componentes
◦ DDL: Data Definition Language
◦ DML: Data Manipulation Language (AR y CRT)
3
SQL
◦ DDL - Lenguaje de definición de datos.
◦ Definición de esquemas,relaciones, indices y vistas (una vista es una
tabla virtual, ya que sus filas no se almacenan físicamente, sino que son
producto de una consulta)
◦ Autorizaciones al acceso a datos
◦ Definición de reglas de integridad.
◦ Control de Concurrencia
◦ DML - Lenguaje interactivo de manipulación de datos.
◦ Consultar datos almacenados.
◦ Modificar el contenido de los datos almacenados.
4
DDL - Create table
CREATE TABLE empleados (
enombre char(15) NOT NULL,
ecod integer NOT NULL,
efnac date,
dcod integer
)
Crea la tabla empleados con 4 columnas. La tabla no tendrá
ninguna fila, hasta que no se ejecute un insert.
DDL - Create table
CREATE TABLE empleados (
enombre char(15) NOT NULL,
ecod integer NOT NULL,
efnac date,
dcod integer
)
Primary Key (edoc)
Es posible definir una clave primaria
DDL - Create table
CREATE TABLE empleados (
enombre char(15) NOT NULL,
ecod integer NOT NULL,
efnac date,
dcod integer
) Primary Key (edoc)
Foreign Key dcod References Deptos
Define la columna dcod como clave foránea apuntando a Deptos
DDL – Sentencia Drop table
•DROP TABLE table;
Ejemplo:
DROP TABLE empleados;
Borra la tabla y todas sus filas
DDL – Alter table
Permite:
◦ agregar columnas
◦ cambiar la definición de columnas
◦ agregar o borrar constraints
ALTER TABLE table
ADD (column datatype [DEFAULT expr]);
•ALTER TABLE table
MODIFY (column datatype [DEFAULT expr] );
•ALTER TABLE table
ADD FOREIGN KEY (column [,...]),]
REFERENCES table((column [,...]);
SQL
Select
◦ * (incluye todos los atributos de las tablas que
aparecen en el from)
◦ Distinct (eliminan tuplas duplicadas)
◦ All (valor por defecto, aparecen todas las tuplas)
10
SQL
◦ Ej2: nombres de las sucursales en la relación préstamo sin
repetición
◦ Operaciones en el select
◦ Select nombre, saldo * 3
From cliente
◦ Where
◦ Operadores lógicos
◦ Ej3: préstamos hechos en sucursal X y monto superior a 20000$
◦ Between
◦ Ej4: préstamos cuyo monto este entre 20000 y 30000$
11
SQL
◦ From: producto cartesiano
◦ Ej5: nombre de cliente y # prestamo, de la sucursal X.
◦ Renombre: tanto para relaciones como para atributos
◦ Atributos: presentarlo con otro nombre
◦ Select T1.Pac_numero AS Nro_Paciente,
from Atenciones AS T1
◦ Relaciones: un producto cartesiano contra si mismo
◦ Ej 6: nombre de las sucursales que poseen activo mayor que al menos una
sucursal situada en Buenos Aires.
12
SQL
◦ Operaciones sobre strings
◦ Like, %, _
◦ “Alfa%”: cualquier cadena que empiece con Alfa
◦ “%casa%”: cualquier cadena que tenga casa en su interior
◦ “_ _ _”: cualquier cadena con tres caracteres
◦ “_ _ _%”: cualquier cadena con al menos tres caracteres.
◦ Ej7: nombre del clientes cuya domicilio contenga el string XXX
13
SQL
◦ Ordenamiento de las tuplas resultado
◦ Order By atributo: especifica el atributo por el cual las tuplas serán
ordenadas
◦ Ej8: presentar todos los clientes ordenados por nombre.
◦ Desc, asc: por defecto ascendente, se puede especificar
descendente.
◦ Facturas=(Nro,Fecha,Hora)
◦ Ej9: presentar las facturas del mes de agosto ordenadas por fecha desde
el 31 al 1 de agosto y por hora de realización.
14
SQL
◦ Operaciones sobre conjuntos
◦ Unión: agrupa las tuplas resultantes de dos subconsultas. Union all
conserva duplicados
◦ Las dos sentencias SELECT tienen que tener el mismo número de
columnas, con el mismo tipo de dato y en el mismo orden
◦ Ej10: clientes con cuentas o prestamos en un banco
◦ Intersección: (intersect) idem anterior.
◦ Ej11: clientes con cuentas y préstamos en un banco
◦ Diferencia: (except)
◦ Ej12: clientes con cuentas y sin préstamos en un banco
15
SQL
◦Funciones de agregación:
◦ Promedio (avg): aplicable a atributos numéricos, retorna el
promedio de la cuenta
◦ Mínimo (min): retorna el menor elemento no nulo dentro de
las tuplas para ese atributo
◦ Máximo (max): retorna el mayor elemento no nulo dentro de
las tuplas para ese atributo
◦ Total (sum): aplicable a atributos numéricos, realiza la suma
matemática
◦ Cuenta (count): cuenta las tuplas resultantes.
16
SQL
◦ Agrupamientos (group by):
◦ Permite agrupar un conjunto de tuplas por algun criterio
◦ Ej13: obtener el saldo promedio de las cuentas de cada sucursal.
◦ Ej14: contar el número de clientes que tiene cada sucursal.
◦ Having: permite aplicar condiciones a los grupos
◦ Ej15: presentar las sucursales y su saldo promedio siempre y
cuando superen 20000$
◦ Ej16: saldo promedio de cada cliente que vive en La Plata, y
tienen al menos 3 cuentas.
17
SQL
◦ Valores nulos:
◦ Ej17: Mostrar aquellos préstamos que tengan el importe nulo. (no significa
0)
◦ Subconsultas anidadas
◦ Pertenecia a conjuntos: IN
◦ Ej18: clientes con prestamos y cuentas en el banco, cualquier sucursal
(otra forma)
◦ Ej19: clientes que tengan prestamo y cuenta en la sucursal llamada “La
Plata”
18
SQL
◦ Comparación de Conjuntos
◦ > some ( <, =, >=, <=, <>)
◦ Ej20:presentar las sucursales que tengan activo mayor que alguna otra
(otra forma)
◦ > all ( <, =, >=, <=, <>)
◦ Ej21: presentar la sucursal que tenga activo superior a todas (otra forma)
◦ Ej22: encontrar la sucursal que tiene el mayor saldo promedio.
19
SQL
◦ Cláusula Exist: devuelve verdadero si la
subconsulta argumento no es vacía.
◦ Ej23: obtener los clientes que tienen tanto una cuenta
como un préstamo en el banco.
◦ Ej24: obtener los clientes que tienen cuentas en todas
las sucursales de la ciudad de Buenos Aires.
20
SQL
◦ Comprobación de tuplas duplicadas.
◦ Unique: devuelve verdadero si la subconsulta
argumento no produce tuplas duplicadas.
◦ Ej25: clientes que tienen una sola cuenta en la sucursal
llamada XXX.
21
SQL
◦Creación de vistas
◦ Una vista es un objeto que no contiene datos por si
mismo. Es una clase de tabla cuyo contenido es tomado
de otras tablas por medio de la ejecución de una consulta.
◦ Create View nombre as <expresion>
◦ Ej26: crea una vista con todos los clientes y consultar de
ahí todos los de sucursal XXX
22
SQL
◦Modificación de la BD
◦ Borrado: eliminar una o mas filas de una tabla:
◦ DELETE FROM tab_name
[WHERE condición];
◦ Ej27: borrar las cuentas de una sucursal
◦ Ej28: borrar las cuentas con saldo entre 100 y 200.
23
SQL
◦ Inserción:
◦ INSERT INTO tab_name (<column_name>,) VALUES (<valor>,)
◦ Existen dos maneras básicas de insertar.
◦ Insertar la fila completa
◦ Insertar sólo algunas columnas de una fila
◦ En el segundo caso se debe necesariamente especificar los
nombres de las columnas que se van a completar.
◦ Ej29: agregar una cuenta
24
SQL
◦ Actualización
◦ Ej30: modificar el saldo de las cuenta incrementar en un 5%.
◦ Unión de relaciones
◦ Realizar en cláusula From productos naturales
◦ Inner Join: producto natural entre atributos que se indican, quedando el
atributo en común repetido
◦ Ej31: producto entre préstamo y propietarioprestamo
25
SQL
◦ Left outer Join: primero se calcula el inner join (idem anterior) y luego
cadat tupla t perteneciente a la relación de la izquierda que no encontro
par aparece en el resultado con valores nulos en los atributos del
segundo lado.
◦ Right outer Join: idem anterior pero aparecen las tuplas t de la relación
de la derecha
◦ Full outer join: aparecen las tuplas colgadas de ambos lados.
◦ Otras variantes:
◦ Natural: evita que el atributo común (por el que se hace la unión
aparezca dos veces)
26
QBE
Query By Example:
◦ Sintaxis bidimensional: una consulta se expresa como una tabla
◦ Se expresa la consulta con un “ejemplo”
◦ Se basa en el cálculo relacional de dominios
◦ Ejemplos en Access
27
SQL
Ejercicios:
◦ Tablas
◦ Proveedor=(#prov, prnombre, situación, ciudad)
◦ Partes(#par, color, panombre, situación, ciudad)
◦ Proyectos=(#proy, proynombre, ciudad)
◦ RPPP=(#prov, #par, #proy, cantidad)
28
SQL
◦ Ejercicios
A. Obtener todos los detalles de los proyectos de Córdoba
B. #prov, que suministre parte al proyecto A1 ordenado por
proveedor
C. Envios con cantidad entre 300 y 500
D. #prov, #proy, #par para aquellas tuplas donde los tres
elementos sean de la misma ciudad
E. #parte suministradas por un proveedor de Córdoba a un
Proyecto de Córdoba
F. Cantidad de proyectos que tenga a S1 como proveedor
G. Cantidad total de partes P1 suminstradas por S1
29
SQL
H. Envíos que no tengan la cantidad nula
I. Obtener los colores de las partes suministras por proveedor
S1.
J. Obtener proyectos para los cuales s1 es el único proveedor
K. Cambiar a Gris el color de las partes Rojas
L. Eliminar el proyecto que no tenga envíos.
M. Proveedor que vivan en igual ciudad que el proveedor S1.
N. Proveedor que tenga máxima su situación
O. Todos los proveedores menos el que tenga máxima su
situación
P. Nombres de los proveedores que suministran la parte P2.
30
SQL
Q. Presentar aquellos proveedores que suministren todas las
partes existentes en la tabla
R. Obtener los número de partes provistas por más de un
proveedor. Para este caso considerar que un proveedor sólo
participa en un proyecto.
S. Informar el número de parte que se suministre a un
proyecto cualquiera tal que en promedio se suministro
supere 200.
31