Curso SQL
Curso SQL
Curso SQL
Bases de datos
Rocío Parrilla
1. Introducción
2. SQL basics
3. SQL DML (Data Manipulation Language)
4. SQL DDL (Data Definition Language)
5. Materiales
6. Anexo: SQL avanzado
o Normalmente los datos de este almacén tienen algún tipo de relación o vínculo entre ellos.
o El gestor de base de datos (DBMS, Data Base Management System) es un software que
permite almacenar la información de manera estructurada y acceder a ella de forma rápida.
Definición Recuperación
Actualización Administración
▪ Modelo de grafos.
▪ …
▪ Modelo de grafos.
▪ …
o Es un tipo de base de datos que cumple con el modelo relacional (basado en la lógica de
predicados y teoría de conjuntos).
o Las bases del modelo relacional fueron postuladas por Edgar Frank Codd en el año 1970
cuando trabajaba en IBM.
▪ Las conexiones entre tablas se establecen entre las claves primarias y claves
foráneas.
Procedimientos
Relaciones Dominios
almacenados
▪ Esquema
▪ Clave primaria
▪ Datos
▪ Clave foránea
▪ Clave índice
Relaciones
Las relaciones permiten almacenar y consultar los datos. Existen dos tipos:
Restricciones
Son limitaciones sobre los campos de las tablas de base de datos. No son fundamentales
pero permiten mejorar la organización de los datos.
Dominios
Claves
▪ Clave foránea: referencia a una clave de otra tabla. No tienen porque ser claves
únicas en la tabla donde están, pero sí donde están referenciadas. Integridad de la
información.
▪ Clave índice: permiten un acceso más rápido a los datos. Se pueden crear como
combinación de los campos de una tabla.
Claves
Código ejecutable que se guarda en la base de datos. Cada motor de base de datos tiene su
propio lenguaje de programación (por ejemplo: SQL Server tiene Transact-SQL, Oracle tiene
PL/SQL…).
Estructuras
▪ Entidad: representa una cosa u objeto del mundo real. Pueden ser objetos con
existencia física (por ejemplo: persona…) o con existencia conceptual (por ejemplo:
cuenta bancaria…).
• Uno a uno (1:1): un registro de una entidad A se relaciona con un registro de una
entidad B.
• Uno a varios (1:n): un registro de una entidad A se relaciona con cero o varios
registros de una entidad B.
• Varios a uno (n:1): un registro de una entidad B se puede relacionar con cero o
varios registros de una entidad A.
• Varios a varios (n:m): una entidad A se relaciona con varios registros de la entidad
B y viceversa.
o Estas reglas se denominan Formas Normales. Las tres primeras formas normales son
suficientes para cumplir las necesidades de la mayoría de base de datos.
o En la práctica es complicado hacer cumplir todas las reglas de las Formas Normales.
o Este diseño de tabla no cumple la 2FN, ya que la columna “Ubicación del puesto
actual” no depende de la clave primaria en su totalidad, únicamente de
“Employee”.
Solución: emplear dos tablas diferentes: una para guardar las habilidades, la otra para
guardar las direcciones de trabajo.
Empleado Especialidades
Brown Light Cleaning Empleado Ubicación del puesto
Brown Typing actual
o Este diseño de tabla no cumple la 3FN, ya que la columna “Fecha de nacimiento del ganador”
depende transitivamente de la clave primaria, a través de la columna “Ganador”.
Solución: emplear dos tablas diferentes. Una para guardar los torneos, la otra para
guardar las fechas de nacimiento de los ganadores.
o Cada base de datos comercial cumple con el estándar de SQL, aunque existen ligeras
diferencias/peculiaridades de una a otra.
Actualizar o eliminar
Ejecutar consultas en
registros en una base de
una base de datos datos
Caso práctico 1
Supongamos que vamos a desarrollar una aplicación para escuchar música. Necesitaremos:
▪ Canciones
▪ Artistas
▪ Álbumes
▪ Usuarios
▪ Listas de reproducción
Caso práctico 1
Canción
▪ Título
▪ Duración
▪ Número de
reproducciones
▪ Id
Caso práctico 1
Canción Artistas
▪ Título ▪ Nombre
▪ Duración ▪ Biografía
▪ Número de ▪ Id
reproducciones
▪ Id
Caso práctico 1
Canción Artistas Álbum
Caso práctico 1
Canción Artistas Álbum
Playlist
▪ Título
▪ Pública / privada
▪ Id
Caso práctico 1
Canción Artistas Álbum
Playlist Usuario
▪ Título ▪ Nombre
▪ Pública / privada ▪ Nombre de usuario
▪ Id ▪ Correo electrónico
▪ Id
Caso práctico 1
Canción Artistas Álbum
Playlist Usuario
▪ Título ▪ Nombre
▪ Pública / privada ▪ Nombre de usuario
▪ Id ▪ Correo electrónico
▪ Id
Caso práctico 1
Sigue Sigue
Sigue
Tiene
Amigo
Caso práctico 1
Caso práctico 1
Convertir modelo en tablas de una base de datos.
Caso práctico 1
o Base de datos (DATABASE): se puede definir como un conjunto de objetos (tablas, índices,
restricciones, usuarios, datos…).
o Registro (REGISTER, ROW): son las filas de una tabla (también se pueden denominar
tuplas).
o Clave primaria (PK, PRIMARY KEY): identificador unívoco de una fila. Todas las PKs
tienen asociado un índice siempre.
o Clave foránea (FK, FOREIGN KEY): establece una relación entre dos tablas. La relación se
establece a una PK de otra tabla.
Exactos Aproximados
Int Float
Bool Double
Decimal o Numeric Real
Caso práctico 2
o Abrir MySql Workbench.
- Operación de resta.
/ Operación de división.
Caso práctico 3
o Ejecutar el fichero como si fuera un script:
UPDATE DELETE
Actualización Borrado
UPDATE DELETE
Actualización Borrado
UPDATE DELETE
Actualización Borrado
SELECT <column_list>
FROM <table_list>
[WHERE <conditions>];
FROM <table_list>
[WHERE <conditions>];
o <column_list>: lista de todos los atributos a recuperar por la QUERY. Separados por
comas. En el caso de no seleccionar atributos se emplea el asterisco (*). Es posible
renombrar una columna (o tabla) empleando AS. Se emplea sobre todo cuando se realizan
cruces de tablas que tengan campos con el mismo nombre, así evitamos ambigüedades.
o <table_list>: lista de las tablas que procesará la QUERY. Separadas por comas.
o <conditions>: expresión booleana que deberán cumplir los registros (tuplas) que devolverá
la QUERY. Es opcional, no tienen porque establecerse filtros.
▪ first_name – nombre
▪ last_name – apellido
▪ hire_date – fecha_contratacion
SELECT <column_list>
FROM <table_list>
WHERE <condition> [AND|OR <condition>];
o LEFT JOIN: devuelve todos los registros de la tabla de la izquierda, y las filas que
coinciden de la tabla de la derecha.
o RIGHT JOIN: devuelve todos los registros de la tabla de la derecha, y las filas que
coinciden de la tabla de la izquierda.
SELECT <column_list>
FROM TableA A
INNER JOIN TableB B
ON A.KEY = B.KEY;
o Crear una consulta que devuelva el nombre y apellidos de un empleado junto con su
salario actual.
SELECT <column_list>
FROM TableA A LEFT JOIN
TableB B ON A.KEY = B.KEY;
SELECT <column_list>
FROM TableA A LEFT JOIN
TableB B ON A.KEY = B.KEY;
SELECT <column_list>
FROM TableA A LEFT JOIN
TableB B ON A.KEY = B.KEY
WHERE B.KEY IS NULL;
Afi Escuela de Finanzas, 2021. Todos los derechos reservados 65
SQL DML (Data Manipulation Language)
o Modificar la consulta anterior para quedarte únicamente con aquellos empleados que no
son responsables.
SELECT <column_list>
FROM TableAA
FULL OUTER JOIN TableB B
ON A.KEY = B.KEY;
SELECT <column_list>
FROM TableAA
FULL OUTER JOIN TableB B
ON A.KEY = B.KEY
WHERE A.KEY IS NULL
OR B.KEY IS NULL
Función Operación
AVG(column) Calcula la media de la columna.
COUNT(column) Cuenta el número de filas.
FIRST(column) Devuelve el primer valor.
LAST(column) Devuelve el último valor.
MAX(column) Devuelve el valor máximo.
MIN(column) Devuelve el valor mínimo.
SUM(column) Calcula la suma de todos los registros de la columna.
SELECT <column_list>
FROM <table_list>
[WHERE <conditions>]
ORDER BY <column1> ASC|DESC, <column2> ASC|DESC;
o Obtener un listado de empleados con su nombre, apellidos y cargo. Ordena el listado según
el cargo de manera ascendente.
SELECT <column_list>
FROM table1
UNION [ALL]
SELECT <column_list>
FROM table2
UNION [ALL]
SELECT <column_list>
FROM table3;
SELECT <column_list>
FROM <table_list>
WHERE <column> LIKE pattern;
Un wildcards permite sustituir uno o varios caracteres por otros en una cadena de texto.
Wildcard Descripción
% Sustitución de cero o más caracteres
_ Sustitución de un único carácter.
SELECT <column_list>
FROM <table_list>
[WHERE <conditions>]
LIMIT n OFFSET m;
Funciones SQL
Igual que las funciones de agregación, realizan una determinada operación sobre los valores
de una de las columnas.
Función Operación
UCASE(column) Convierte el valor de la columna a mayúsculas.
LCASE(column) Convierte el valor de la columna a minúsculas.
LENGTH(column) Devuelve la longitud de la columna (número de
caracteres).
ROUND(column, decimals) Redondea el valor de una columna a los decimales
especificados.
NOW() Devuelve el día y la hora del sistema.
IFNULL(column, value) Convierte el valor de la columna por el parámetro value
en el caso de que sea NULL.
o Obtener un listado de todos los empleados cuyo apellido tenga más de 10 caracteres.
o Encontrar aquellos empleados que tuvieron una actualización de salario entre 2000 y hoy.
Ordenar el resultado por fecha de contratación de manera descendente y por el nombre
ascendentemente.
UPDATE <table_name>
SET <column1> = <value1>, <column2> = <value2>
[WHERE <conditions>];
DELETE
FROM <table_name>
[WHERE <conditions>];
USE <database_name>;
Desde el momento en que ejecutemos esta sentencia todas las operaciones (querys, updates,
creates, etc.) se ejecutarán en la base de datos seleccionada.
▪ PRIMARY KEY
▪ FOREIGN KEY
▪ DEFAULT
▪ NOT NULL
▪ UNIQUE
▪ CHECK
¡Atención! Las restricciones garantizan la integridad de la información de la base de datos, pero a su vez
consumen recursos en el momento de inserción/actualización/borrado. Sacrifican rendimiento por integridad.
Esto puede ser problemático en entornos con grandes volúmenes de información, en los que la velocidad de
procesado es crítica.
Las columnas de una clave primaria, simplemente por el hecho de serlo, siempre tienen dos
restricciones: son únicas (UNIQUE) y no puede contener valores nulos (NOT NULL).
Es posible establecer restricciones como las que hemos visto antes en el momento de creación
de las nuevas columnas.
¡Atención! Al cambiar una columna de tipo de dato los registros ya guardados en la tabla deben ser
compatibles con el tipo de dato. En caso contrario se producirá un error o una perdida de información
(por ejemplo al cambiar la precisión de un campo numérico).
Y borrarla:
Y borrarlas:
Y borrarlas.
Materiales
o Try SQL: https://www.codeschool.com/courses/try-sql
o SQL Tutorial: http://www.w3schools.com/sql/
Transacciones (I)
Mediante estas sentencias SQL podemos crear una transacción (operación ACID) sobre la
información de la base de datos. Al finalizar la modificación de información, podemos confirmar
los cambios o descartarlos.
START TRANSACTION;
<insert|update|delete statements>;
COMMIT|ROLLBACK;
o START TRANSACTION: comienza la transacción en base de datos.
o COMMIT: finaliza la transacción confirmando los cambios.
o ROLLBACK: finaliza la transacción descartando los cambios.
Transacciones (II)
Por defecto, MySQL se ejecuta con el modo autocommit habilitado. Esto quiere decir, que
tan pronto se ejecuta una actualización de información en base de datos, los cambios se
convierten en permanentes. No se puede dar marcha atrás a los cambios. Se puede cambiar
este modo de funcionamiento con la siguiente sentencia.
Ejecución de scripts
Para ejecutar un script (fichero con sentencias secuenciales de SQL) desde línea de
comandos.
source <file_path>;
o <file_path>: ruta al fichero/script que se desea ejecutar.
Desde MySQL Workbench existe una opción para ejecutar un fichero abierto en la aplicación
como un script.
Creación de usuarios
Los usuarios de una base de datos determinan quién puede tener acceso a la misma. También
se puede establecer a que objetos de la base de datos y que tipo de permisos sobre los objetos
tienen los usuarios (lectura, escritura, lectura/escritura…).