Guía Básica de SQL para Estudiantes
Guía Básica de SQL para Estudiantes
Introducción a SQL
Departamento de Lenguajes y
Sistemas Informáticos
Universidad de Sevilla
Contenido
Introducción
Lenguaje de definición de datos (DDL)
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL)
Consultas complejas
IISSI 1
Introducción a SQL 20/09/2021
Contenido
Introducción
Lenguaje de definición de datos (DDL)
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL)
Consultas complejas
Introducción a SQL
Trazabilidad de modelos
A partir del modelo conceptual se puede obtener
un modelo relacional que se implementa
posteriormente en SQL para obtener el
esquema de la base de datos.
Requisitos
restricciones
c l a ss Ca t á l ogo de pr oduc t os
Laboratorios(laboratorioId, cif, nombre, dirección)
PK(laboratorioId) create table Laboratories (
La bor a t or i o Ca t á l ogo AK(cif)
c if
nom bre
publ i c a
f ec ha laboratoryId Autoincrement,
*
direc c ión
Almacenes(almacenId, nombre, dirección) cif String UNIQUE,
?
a l m a c e na Pr oduc t osEn
MC→ MR PK(almacenId) MR→ SQL nombre String,
* * AlmacenesLaboratorios(almacenLaboratioId, almacenId, laboratorioId) )
Al m a c é n Lí ne a D e Ca t á l ogo Pr oduc t o PK(almacenLaboratorioId)
nom bre
direc c ión
prec ioMenosDeCien
prec ioMásDeCien *
r e f e r e nc i a
1
c ódigo
nom bre FK(almacenId)/Almacenes ….
desc ripc ión
FK(laboratorioId)/Laboratorios
AK(almacenId, laboratorioId)
…
Modelo conceptual
Código SQL
IISSI 2
Introducción a SQL 20/09/2021
Introducción a SQL
SQL (Structured Query Language) es el lenguaje estándar para definir,
manipular y consultar bases de datos relacionales.
Se puede distinguir:
DDL (Data Definition Language): gestión del esquema de la base de datos
(creación, modificación y borrado de tablas, claves, etc.). CREATE, ALTER,
DROP
DML (Data Manipulation Language): gestión de los datos. INSERT, UPDATE,
DELETE
DCL (Data Control Language): Control de acceso y permisos. GRANT y
REVOKE
DQL (Data Query Language): Gestión de consultas. SELECT
TCL (Transaction Control Language): gestión de transacciones. COMMIT,
ROLLBACK, TRANSACTION
Introducción a SQL
Tutoriales SQL
http://www.w3schools.com/sql/
https://www.tutorialspoint.com/sql/index.htm
https://mariadb.com/kb/en/library/basic-sql-
statements/
https://www.hcoe.edu.np/uploads/attachments/r
96oytechsacgzi4.pdf
IISSI 3
Introducción a SQL 20/09/2021
Introducción a SQL
Año Nombre Alias Comentarios
1986 SQL-86 SQL-87
Primera publicación hecha por ANSI. Confirmada por ISO en 1987.
2008 SQL:2008 Modificaciones de ORDER BY, incluye disparadores tipo INSTEAD OF...
IISSI 4
Introducción a SQL 20/09/2021
Contenido
Introducción
Lenguaje de definición de datos (DDL)
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL)
Consultas complejas
IISSI 5
Introducción a SQL 20/09/2021
HeidiSQL
10
11
IISSI 6
Introducción a SQL 20/09/2021
12
DDL - CLAVES
Claves primarias:
PRIMARY KEY(tablaId)
Claves alternativas:
UNIQUE(atributo) o UNIQUE(atributo1, atributo2…)
Claves ajenas:
FOREIGN KEY(atributo)
REFERENCES OtraTabla(otraTablaId)
ON DELETE:
- RESTRICT (por defecto)
- CASCADE
- SET NULL
- SET DEFAULT
ON UPDATE: ...
13
IISSI 7
Introducción a SQL 20/09/2021
https://mariadb.com/kb/en/library/foreign-keys/
14
15
IISSI 8
Introducción a SQL 20/09/2021
16
17
IISSI 9
Introducción a SQL 20/09/2021
Contenido
Introducción
Lenguaje de definición de datos (DDL)
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL)
Consultas complejas
18
19
IISSI 10
Introducción a SQL 20/09/2021
20
21
IISSI 11
Introducción a SQL 20/09/2021
DML - UPDATE
/* Subir el sueldo de Pedro */
UPDATE Empleados SET salario='2500.00' WHERE empleadoId=1;
/* Despedir a José */
UPDATE Empleados SET fechaFinal='2019-08-15' WHERE empleadoId=2;
22
DML - UPDATE
23
IISSI 12
Introducción a SQL 20/09/2021
DML - DELETE
CREATE TABLE Empleados …
FOREIGN KEY(departamentoId)
REFERENCES Departamentos(departamentoId)
ON DELETE SET NULL,
FOREIGN KEY(jefe)
REFERENCES Empleados(empleadoId)
…
24
DML - DELETE
CREATE TABLE Empleados …
FOREIGN KEY(departamentoId)
REFERENCES Departamentos(departamentoId)
ON DELETE CASCADE,
FOREIGN KEY(jefe)
REFERENCES Empleados(empleadoId)
ON DELETE CASCADE,
…
/* Borrar departamento de Historia */
DELETE FROM Departamentos WHERE departamentoId=1;
25
IISSI 13
Introducción a SQL 20/09/2021
DML - DELETE
CREATE TABLE Empleados …
FOREIGN KEY(departamentoId)
REFERENCES Departamentos(departamentoId)
ON DELETE CASCADE,
FOREIGN KEY(jefe)
REFERENCES Empleados(empleadoId),
…
26
Inyecciones SQL
¡Ojo con insertar texto suministrado por el usuario
directamente en una sentencia SQL!
query = "INSERT INTO Multas VALUES (" + matricula + ")"
27
IISSI 14
Introducción a SQL 20/09/2021
Contenido
Introducción
Lenguaje de definición de datos (DDL)
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL)
Consultas complejas
28
DQL – SELECT
SELECT < lista de columnas > Π<𝑐𝑜𝑙𝑢𝑚𝑛𝑎𝑠> (𝜎<𝑐𝑜𝑛𝑑𝑖𝑐𝑖𝑜𝑛> (𝑇1 × 𝑇2 × ⋯ × 𝑇𝑛 ))
FROM < T1, T2,.. ,Tn >
WHERE < condición >
SELECT * 𝜎𝑠𝑎𝑙𝑎𝑟𝑖𝑜<2000(𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)
FROM Empleados
WHERE salario < 2000;
29
IISSI 15
Introducción a SQL 20/09/2021
Π𝑓𝑒𝑐ℎ𝑎𝐼𝑛𝑐𝑖𝑎𝑙,𝑓𝑒𝑐ℎ𝑎𝐹𝑖𝑛𝑎𝑙 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)
30
DQL – SELECT
La cláusula WHERE puede estar formada por:
Una combinación de AND, OR y NOT
Operador EXISTS
Operador IN
Operadores ALL, ANY o SOME
Operadores BETWEEN, UNIQUE, TOP, IS NULL, LIKE
31
IISSI 16
Introducción a SQL 20/09/2021
DQL - SELECT
https://mariadb.com/kb/en/library/select/
32
33
IISSI 17
Introducción a SQL 20/09/2021
34
35
IISSI 18
Introducción a SQL 20/09/2021
SELECT *
FROM Empleados
ORDER BY departamentoId, nombre;
36
SELECT *
FROM Empleados, Departamentos;
𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠 × 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠
37
IISSI 19
Introducción a SQL 20/09/2021
38
39
IISSI 20
Introducción a SQL 20/09/2021
https://es.wikipedia.org/wiki/Join
40
41
IISSI 21
Introducción a SQL 20/09/2021
𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠 −
Π𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑, 𝑛𝑜𝑚𝑏𝑟𝑒𝐷𝑒𝑝, 𝑙𝑜𝑐𝑎𝑙𝑖𝑑𝑎𝑑 (𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠 ⋈ 𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)
42
Contenido
Introducción
Lenguaje de definición de datos (DDL)
Lenguaje de manipulación de datos (DML)
Lenguaje de consulta de datos (DQL)
Consultas complejas
43
IISSI 22
Introducción a SQL 20/09/2021
Consultas complejas
44
Funciones agregadas
COUNT devuelve el número de filas o valores
especificados en una consulta.
SUM, MAX, MIN, AVG se aplican a un
conjunto o multiconjunto de valores numéricos y
devuelven respectivamente la suma, el valor
máximo, el mínimo y el promedio de dichos
valores.
Estas funciones se pueden usar con la cláusula
SELECT o con la cláusula HAVING.
45
IISSI 23
Introducción a SQL 20/09/2021
46
GROUP BY
Agrupa las tuplas que tienen el mismo valor
para ciertos atributos.
Permite aplicar las funciones de agregación
(sum, max, min, avg, count, etc.) a cada uno de
dichos grupos.
Los atributos de agrupación pueden aparecer en
la cláusula SELECT.
Es el equivalente AR:
𝑎𝑔𝑟𝑢𝑝𝑎𝑑𝑜𝑟,𝑓𝑢𝑛𝑐𝑖𝑜𝑛𝑒𝑠
𝛾𝑎𝑔𝑟𝑢𝑝𝑎𝑑𝑜𝑟 (𝑇𝑎𝑏𝑙𝑎)
47
IISSI 24
Introducción a SQL 20/09/2021
SELECT departamentoId,
COUNT(*),
AVG(salario) salarioMedio,
AVG(salario * (1+comision))
salarioConComision,
SUM(salario) gastoSalarios
FROM Empleados
GROUP BY departamentoId;
48
HAVING
Especifica una condición sobre el grupo de
tuplas asociado a cada valor de los atributos de
agrupación (clases de equivalencia).
Sólo los grupos que cumplan la condición
entrarán en el resultado de la consulta.
Primero se filtran las filas mediante WHERE,
luego se agrupan, y luego se filtran los grupos
mediante HAVING
49
IISSI 25
Introducción a SQL 20/09/2021
50
𝑎𝑣𝑔 𝑠𝑎𝑙𝑎𝑟𝑖𝑜
𝑆𝑎𝑙𝑎𝑟𝑖𝑜𝑀𝑒𝑑𝑖𝑜𝑀𝑎𝑥 ← 𝛾 max 𝑎𝑣𝑔 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 (𝛾𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))
(𝜎𝑠𝑎𝑙𝑎𝑟𝑖𝑜>𝑆𝑎𝑙𝑎𝑟𝑖𝑜𝑀𝑒𝑑𝑖𝑜𝑀𝑎𝑥 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))
(∗) Si es mayor que el máximo, es mayor que todos
51
IISSI 26
Introducción a SQL 20/09/2021
/* Opción 2 */
SELECT departamentoId FROM Empleados
GROUP BY departamentoId HAVING COUNT(*) =
( SELECT MAX(total) FROM
( SELECT COUNT(*) AS total
FROM Empleados
GROUP BY departamentoId
) NumEmpleados );
𝑐𝑜𝑢𝑛𝑡 ∗
𝑁𝑢𝑚𝑀𝑎𝑥 ← 𝛾 max 𝑐𝑜𝑢𝑛𝑡 ∗ (𝛾𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))
𝑐𝑜𝑢𝑛𝑡 ∗
𝜎𝑐ount ∗ >𝑁𝑢𝑚𝑀𝑎𝑥 (𝛾𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))
52
𝛾 m𝑎𝑥 𝑛𝑢𝑚𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠
(EstadísticasEmpleados)
53
IISSI 27
Introducción a SQL 20/09/2021
https://mariadb.com/kb/en/library/mariadb-error-codes/
54
Retos HackerRank
https://www.hackerrank.com/domains/sql
55
IISSI 28