0% encontró este documento útil (0 votos)
25 vistas28 páginas

Guía Básica de SQL para Estudiantes

Este documento presenta una introducción a SQL. Explica que SQL es el lenguaje estándar para definir, manipular y consultar bases de datos relacionales y puede ser utilizado en lenguajes de programación o lenguajes específicos de fabricantes de bases de datos. Divide SQL en lenguajes de definición de datos, manipulación de datos, consulta de datos y control de transacciones. También proporciona enlaces a tutoriales SQL y un resumen de las versiones del estándar SQL a través de los años.

Cargado por

Antonio Lopez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
25 vistas28 páginas

Guía Básica de SQL para Estudiantes

Este documento presenta una introducción a SQL. Explica que SQL es el lenguaje estándar para definir, manipular y consultar bases de datos relacionales y puede ser utilizado en lenguajes de programación o lenguajes específicos de fabricantes de bases de datos. Divide SQL en lenguajes de definición de datos, manipulación de datos, consulta de datos y control de transacciones. También proporciona enlaces a tutoriales SQL y un resumen de las versiones del estándar SQL a través de los años.

Cargado por

Antonio Lopez
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Introducción a SQL 20/09/2021

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.

 Puede ser utilizado en lenguajes de programación de propósito general


como Java, C, Python o bien en lenguajes específicos del fabricante (p.ej.
PL/SQL en Oracle, Transact SQL en MS SQLServer).

 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.

1989 SQL-89 Pocas modificaciones


1992 SQL-92 SQL2 Importantes modificaciones
1999 SQL:1999 SQL2000 Se agregaron expresiones regulares, consultas recursivas (para relaciones
SQL3 jerárquicas), triggers y algunas características orientadas a objetos.

2003 SQL:2003 Introduce características de XML, junto a la estandarización de objetos


sequence y los campos autonuméricos
2005 SQL:2005 Define la manera de usar SQL conjuntamente con XML

2008 SQL:2008 Modificaciones de ORDER BY, incluye disparadores tipo INSTEAD OF...

2011 SQL:2011 ORDER BY fuera de cursores


2016 SQL:2016 Patrones, tablas polimórficas, JSON

Ejemplo: Modelo Conceptual y Relacional

Departamentos(departamentoId, nombreDep, localidad)


PK(departamentoId)
AK(nombreDep, localidad)
Empleados(empleadoId, departamentoId, jefeId, nombre, salario, fechaInicial, fechaFinal, comision)
PK(empleadoId)
FK(departamentoId)/Departamentos
FK(jefeId)/Empleados

IISSI 4
Introducción a SQL 20/09/2021

Transformación del MR a SQL


 Se creará una tabla por cada relación del modelo
relacional.
 Será necesario la definición de claves primarias y ajenas.
 El resto de restricciones se definen mediante:
 CHECK <condición>. Limita los valores a insertar.
 UNIQUE. Para asegurar que no se repiten valores. (AK)
 NOT NULL. No admite nulos.
 En caso de restricciones que no se puedan definir mediante
CHECK:
 STORED PROCEDURE + TRIGGERS.

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

DDL – CREATE TABLE


Departamentos(departamentoId, nombreDep, localidad)
PK(departamentoId)
AK(nombreDep, localidad)

CREATE TABLE Departamentos(


departamentoId INT NOT NULL AUTO_INCREMENT,
nombreDep VARCHAR(32),
localidad VARCHAR(64),
PRIMARY KEY(departamentoId),
UNIQUE(nombreDep, localidad)
);

11

IISSI 6
Introducción a SQL 20/09/2021

DDL – CREATE TABLE


Empleados(empleadoId, departamentoId, jefeId, nombre, salario, fechaInicial, fechaFinal, comision)
PK(empleadoId)
FK(departamentoId)/Departamento
FK(jefeId)/Empleados
CREATE TABLE Empleados(
empleadoId INT NOT NULL AUTO_INCREMENT,
departamentoId INT,
jefe INT,
nombre VARCHAR(64) NOT NULL,
salario DECIMAL(6,2) DEFAULT 2000.00,
fechaInicial DATE,
fechaFinal DATE,
comision DOUBLE,
PRIMARY KEY(empleadoId),
FOREIGN KEY(departamentoId)
REFERENCES Departamentos(departamentoId)
ON DELETE SET NULL,
FOREIGN KEY(jefe)
REFERENCES Empleados(empleadoId),
UNIQUE(nombre),
CHECK (comision >=0 AND comision <=1),
CONSTRAINT fecha CHECK (fechaInicial < fechaFinal)
);

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

DDL – Integridad referencial

https://mariadb.com/kb/en/library/foreign-keys/

14

DDL – Reglas de negocio

atributo Tipo DEFAULT(valor)


Define cuál será el ‘valor’ que se le asigne al
‘atributo’ cuando no se especifique ningún valor.
CHECK (expr)
Define una restricción que deben cumplir los
valores de uno o varios atributos.
CONSTRAINT nombre CHECK (expr)
Similar al anterior, dando un nombre a la
restricción que aparecerá en caso de error.

15

IISSI 8
Introducción a SQL 20/09/2021

DDL – Reglas de negocio

CREATE TABLE Empleados(


empleadoId INT NOT NULL AUTO_INCREMENT,
departamentoId INT,
jefe INT,
nombre VARCHAR(64) NOT NULL,
salario DECIMAL(6,2) DEFAULT 2000.00,
fechaInicial DATE,
fechaFinal DATE,
comision DOUBLE,
PRIMARY KEY(empleadoId),
FOREIGN KEY(departamentoId)
REFERENCES Departamentos(departamentoId)
ON DELETE SET NULL,
FOREIGN KEY(jefe)
REFERENCES Empleados(empleadoId),
UNIQUE(nombre),
CHECK (comision >=0 AND comision <=1),
CONSTRAINT fecha CHECK (fechaInicial < fechaFinal)
);

16

DDL - Tipos de datos


https://mariadb.com/kb/en/library/data-types/
Numéricos:
 TINYINT, BOOLEAN, SMALLINT, MEDIUMINT, INT, BIGINT,
DECIMAL, FLOAT, DOUBLE, BIT…
Cadenas:
 CHAR, VARCHAR, TINYTEXT, TEXT, MEDIUMTEXT,
LONGTEXT, ENUM…
Binarios:
 BINARY, VARBINARY, TINYBLOB, BLOB, MEDIUMBLOB,
LONGBLOB…
Fechas:
 DATE, TIME, DATETIME, YEAR…
Geometrías:
 POINT, LINESTRING, POLYGON, MULTIPOINT…

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

DML – INSERT INTO

INSERT INTO Tabla (a1, a2, …an)


VALUES (v1, v2, …, vn);
/* Tres valores correctos */
INSERT INTO Departamentos (nombreDep, localidad)
VALUES ('Historia', NULL);
INSERT INTO Departamentos (nombreDep, localidad)
VALUES ('Informática', 'Sevilla');
INSERT INTO Departamentos (nombreDep, localidad)
VALUES ('Arte', 'Cádiz');
/* Valores repetidos */
INSERT INTO Departamentos (nombreDep, localidad)
VALUES ('Historia', NULL);
INSERT INTO Departamentos (nombreDep, localidad)
VALUES ('Informática', 'Sevilla');

19

IISSI 10
Introducción a SQL 20/09/2021

DML – INSERT INTO


/* Pedro de Historia */
INSERT INTO Empleados(departamentoId, jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (1, NULL, 'Pedro', 2300.00, '2017-09-15', NULL, 0.2);
/* José de Historia*/
INSERT INTO Empleados(departamentoId, jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (1, NULL, 'José', 2500.00, '2018-08-15', NULL, 0.5);
/* Lola de Informática */
INSERT INTO Empleados(departamentoId, jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (2, NULL, 'Lola', 2300.00, '2018-08-15', NULL, 0.3);
/* Luis trabajó para Pedro 3 meses */
INSERT INTO Empleados(departamentoId, jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (1, 1, 'Luis', 1300.00, '2018-08-15', '2018-11-15', 0);
/* Ana trabajó para Pedro 3 meses */
INSERT INTO Empleados(departamentoId, jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (1, 1, 'Ana', 1300.00, '2018-08-15', '2018-11-15', 0);

20

DML – INSERT INTO


/* Manuel de Electrónica */
INSERT INTO Empleados(departamentoId,
jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (5, null, 'Manuel', 2300.00,
'2017-08-15', NULL, 0.6);

/* Francisco trabajo para Yolanda */


INSERT INTO Empleados(departamentoId,
jefe, nombre, salario, fechaInicial,
fechaFinal, comision)
VALUES (1, 23, 'Francisco', 1300.00,
'2017-08-15', '2017-11-15', 0);

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

UPDATE Departamentos SET localidad='Sevilla' WHERE departamentoId=4;

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)

/* Borrar departamento de Historia */


DELETE FROM Departamentos WHERE departamentoId=1;

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),

/* Borrar departamento de Historia */


DELETE FROM Departamentos WHERE departamentoId=1;

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 nombre, salario Π𝑛𝑜𝑚𝑏𝑟𝑒,𝑠𝑎𝑙𝑎𝑟𝑖𝑜 (𝜎𝑠𝑎𝑙𝑎𝑟𝑖𝑜<2000 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))


FROM Empleados
WHERE salario < 2000;

SELECT * 𝜎𝑠𝑎𝑙𝑎𝑟𝑖𝑜<2000(𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)
FROM Empleados
WHERE salario < 2000;

29

IISSI 15
Introducción a SQL 20/09/2021

DQL – SELECT DISTINCT

SELECT ALL fechaInicial, fechaFinal


FROM Empleados;

Los operadores del AR siempre devuelven


relaciones (derivadas), es decir, sin tuplas
repetidas

SELECT DISTINCT fechaInicial,


fechaFinal
FROM Empleados;

Π𝑓𝑒𝑐ℎ𝑎𝐼𝑛𝑐𝑖𝑎𝑙,𝑓𝑒𝑐ℎ𝑎𝐹𝑖𝑛𝑎𝑙 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)

(*) En AR no hay filas duplicadas ya que son conjuntos

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

DQL – SELECT (BETWEEN)

SELECT DISTINCT nombre, salario


FROM Empleados
WHERE salario >=2000 AND salario <=3000;

SELECT DISTINCT nombre, salario


FROM Empleados
WHERE salario BETWEEN 2000 AND 3000;

Π𝑛𝑜𝑚𝑏𝑟𝑒,𝑠𝑎𝑙𝑎𝑟𝑖𝑜 (𝜎 𝑠𝑎𝑙𝑎𝑟𝑖𝑜≥2000 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))


∧ 𝑠𝑎𝑙𝑎𝑟𝑖𝑜≤3000

33

IISSI 17
Introducción a SQL 20/09/2021

DQL – SELECT (IN)


Permite comparar un valor individual v (un nombre de atributo) con un conjunto
de valores V (generalmente una consulta anidada). Devuelve TRUE si v es
uno de los elementos de V.

SELECT DISTINCT nombre, salario


FROM Empleados
WHERE salario IN (1000,2500,3000);

Π𝑛𝑜𝑚𝑏𝑟𝑒,𝑠𝑎𝑙𝑎𝑟𝑖𝑜 (𝜎𝑠𝑎𝑙𝑎𝑟𝑖𝑜=1000 ∨ (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))


𝑠𝑎𝑙𝑎𝑟𝑖𝑜=2500 ∨
𝑠𝑎𝑙𝑎𝑟𝑖𝑜=3000

34

DQL – SELECT (LIKE)


Para comparar cadenas de caracteres se utiliza el operador de comparación
LIKE.
Las cadenas parciales se especifican mediante los caracteres reservados % y _:
• % representa cualquier cadena de caracteres
• _ representa un único carácter

/* Empleados con una 'o' en la segunda posición de su nombre


o que son jefes */
SELECT *
FROM Empleados
WHERE nombre LIKE '_o%' OR jefe IS NULL;

(*) En AR no hay expresión equivalente

35

IISSI 18
Introducción a SQL 20/09/2021

DQL – SELECT (ORDER BY)

Ordena por departamento descendente y a igual departamento


por nombre del empleado alfabético

SELECT *
FROM Empleados
ORDER BY departamentoId, nombre;

(*) En AR no se puede definir orden, son conjuntos

36

DQL – SELECT (producto cartesiano)


El producto cartesiano devuelve una nueva relación con todas las
posibles combinaciones entre las tuplas de las relaciones involucradas.

SELECT *
FROM Empleados, Departamentos;

𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠 × 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠

37

IISSI 19
Introducción a SQL 20/09/2021

DQL – SELECT (NATURAL JOIN)


SELECT nombre, salario, fechaInicial, nombreDep
FROM Empleados E, Departamentos D
WHERE E.departamentoId=D.departamentoId;

SELECT nombre, salario, fechaInicial, nombreDep


FROM Empleados NATURAL JOIN Departamentos;

Π𝑛𝑜𝑚𝑏𝑟𝑒,𝑠𝑎𝑙𝑎𝑟𝑖𝑜,𝑓𝑒𝑐ℎ𝑎𝐼𝑛𝑖𝑐𝑖𝑎𝑙,𝑛𝑜𝑚𝑏𝑟𝑒𝐷𝑒𝑝 (𝜎𝐸.𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑=𝐷.𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠 × 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠)

Π𝑛𝑜𝑚𝑏𝑟𝑒,𝑠𝑎𝑙𝑎𝑟𝑖𝑜,𝑓𝑒𝑐ℎ𝑎𝐼𝑛𝑖𝑐𝑖𝑎𝑙,𝑛𝑜𝑚𝑏𝑟𝑒𝐷𝑒𝑝 𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠 ⋈ 𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠

38

DQL – SELECT (LEFT/RIGHT JOIN)


T1 RIGHT/LEFT JOINT T2 ON <cond>
Devuelve todas las filas de la tabla derecha/izquierda, y todas las filas que
cumplen de la tabla de la izquierda/derecha que cumplen la condición.

UPDATE Empleados SET departamentoId=NULL WHERE empleadoId=5;

SELECT nombre, salario, fechaInicial, nombreDep


FROM Empleados E
LEFT/RIGHT JOIN Departamentos D
ON E.departamentoId=D.departamentoId;

Left Join Right Join

(*) En AR no está definido

39

IISSI 20
Introducción a SQL 20/09/2021

DQL – SELECT (JOIN)

https://es.wikipedia.org/wiki/Join

40

DQL – SELECT (UNION)


SELECT *
FROM Empleados E
LEFT JOIN Departamentos D
ON E.departamentoId=D.departamentoId
UNION
SELECT *
FROM Empleados E
RIGHT JOIN Departamentos D
ON E.departamentoId=D.departamentoId;

El conjunto de tuplas resultado contiene el “join” de todos empleados


(aunque no estén en un departamento) con todos los departamentos (aunque
no tengan ningún empleado)

41

IISSI 21
Introducción a SQL 20/09/2021

DQL – SELECT (EXISTS)


/* Departamentos sin Empleados */
SELECT *
FROM Departamentos D
WHERE NOT EXISTS (
SELECT * FROM Empleados E
WHERE D.departamentoId=E.departamentoId
);
/* Departamentos con Empleados */
SELECT *
FROM Departamentos D
WHERE EXISTS (
SELECT * FROM Empleados E
WHERE D.departamentoId=E.departamentoId
);

𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠 −
Π𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑, 𝑛𝑜𝑚𝑏𝑟𝑒𝐷𝑒𝑝, 𝑙𝑜𝑐𝑎𝑙𝑖𝑑𝑎𝑑 (𝐷𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝑠 ⋈ 𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)

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

Están enfocadas a los niveles táctico y estratégico de


un sistema de información.

Presentan los datos agrupados a partir de los


registros individuales que corresponden a las
operaciones diarias

44

Consultas complejas (Agregados)

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

Consultas complejas (Agregados)


/* Estadísticas salarios de los empleados */
SELECT COUNT(*), MIN(salario), MAX(salario), AVG(salario), SUM(salario)
FROM Empleados;

𝛾 𝑐𝑜𝑢𝑛𝑡 ∗ , min 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 , m𝑎𝑥 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 , avg 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 , 𝑠𝑢𝑚(𝑠𝑎𝑙𝑎𝑟𝑖𝑜)


(𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)

46

Consultas complejas (GROUP BY)

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

Consultas complejas (GROUP BY)

Calcular para cada departamento el número de empleados, el salario medio


de los mismos, el salario con las comisiones, y el gasto total en salarios

SELECT departamentoId,
COUNT(*),
AVG(salario) salarioMedio,
AVG(salario * (1+comision))
salarioConComision,
SUM(salario) gastoSalarios
FROM Empleados
GROUP BY departamentoId;

𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑,𝑐𝑜𝑢𝑛𝑡 ∗ ,𝑎𝑣𝑔 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 …


𝛾𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠)

48

Consultas complejas (HAVING)

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

Consultas complejas (HAVING)

Calcular para cada departamento con más de un empleado, el salario medio


de los mismos, el salario con las comisiones, y el gasto total en salarios
SELECT departamentoId, SELECT * FROM (
SELECT departamentoId,
COUNT(*), COUNT(*) numEmpleados,
AVG(salario) salarioMedio, AVG(salario) salarioMedio,
AVG(salario * (1+comision)) AVG(salario * (1+comision))
salarioConComision,
salarioConComision, SUM(salario) gastoSalarios
SUM(salario) gastoSalarios FROM Empleados
FROM Empleados GROUP BY departamentoId
) Estadistica
GROUP BY departamentoId HAVING COUNT(*)>1; WHERE numEmpleados>1;

𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑,𝑐𝑜𝑢𝑛𝑡 ∗ ,𝑎𝑣𝑔 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 …


𝜎𝑐ount ∗ >1 (𝛾𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))

50

Consultas complejas (ALL, ANY)


Permite comparar un valor individual v (nombre de atributo) con un conjunto de
valores V (consulta anidada).
Por ejemplo, obtener los empleados con salario mayor que el salario medio en
todos los departamento:

SELECT * FROM Empleados


WHERE salario >
ALL (SELECT AVG(salario)
FROM Empleados
GROUP BY departamentoId);

𝑎𝑣𝑔 𝑠𝑎𝑙𝑎𝑟𝑖𝑜
𝑆𝑎𝑙𝑎𝑟𝑖𝑜𝑀𝑒𝑑𝑖𝑜𝑀𝑎𝑥 ← 𝛾 max 𝑎𝑣𝑔 𝑠𝑎𝑙𝑎𝑟𝑖𝑜 (𝛾𝑑𝑒𝑝𝑎𝑟𝑡𝑎𝑚𝑒𝑛𝑡𝑜𝐼𝑑 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))

(𝜎𝑠𝑎𝑙𝑎𝑟𝑖𝑜>𝑆𝑎𝑙𝑎𝑟𝑖𝑜𝑀𝑒𝑑𝑖𝑜𝑀𝑎𝑥 (𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠))
(∗) Si es mayor que el máximo, es mayor que todos

51

IISSI 26
Introducción a SQL 20/09/2021

Consultas complejas (ALL, ANY)


/* Departamento con más empleados */
/* Opción 1 */
SELECT departamentoId FROM Empleados
GROUP BY departamentoId HAVING COUNT(*)>= ALL
( SELECT COUNT(*)
FROM Empleados
GROUP BY departamentoId );

/* 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

Consultas complejas. Views


CREATE OR REPLACE VIEW [vista] AS [SELECT…]
 Crea una nueva tabla con nombre “vista”, cuyo
contenido es el de la consulta
 Mejora el tiempo de CPU
 Optimiza el espacio de almacenamiento
/* Vista con las estadísticas de los Empleados por Departamento */
CREATE OR REPLACE VIEW EstadísticasEmpleados AS
SELECT departamentoId,
COUNT(*) AS numEmpleados,
AVG(salario) salarioMedio,
AVG(salario * (1+comision)) salarioConComision,
SUM(salario) gastoSalarios
FROM Empleados
GROUP BY departamentoId;

/* Número de empleados que tiene el departamento con más empleados */


SELECT MAX(numEmpleados)
FROM EstadísticasEmpleados;

𝛾 m𝑎𝑥 𝑛𝑢𝑚𝐸𝑚𝑝𝑙𝑒𝑎𝑑𝑜𝑠
(EstadísticasEmpleados)

53

IISSI 27
Introducción a SQL 20/09/2021

MariaDB Error Codes

https://mariadb.com/kb/en/library/mariadb-error-codes/

54

Retos HackerRank

https://www.hackerrank.com/domains/sql

55

IISSI 28

También podría gustarte