Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
1
02/03/2022
Lenguaje estructurado de
consultas
Unidad 4
Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para
uso de los cursos de Bases de Datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
2
02/03/2022
Objetivo general de la Unidad 4
Aplicar sentencias del lenguaje SQL para manipular de datos en tablas,
administrar objetos de la base de datos y controlar la ejecución de
transacciones como mecanismo para mantener la integridad de los
datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
3
02/03/2022
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
4
02/03/2022
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
5
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
6
02/03/2022
DDL: Data Definition Language
▪ El lenguaje de definición de datos SQL (DDL) permite
la especificación de información sobre relaciones,
incluyendo:
▪ El esquema para cada relación.
▪ Dominio de valores asociados con cada atributo.
▪ Restricciones de integridad
▪ Y como veremos más adelante, también otra información
como
▪ El conjunto de índices a mantener para cada relación.
▪ Información de seguridad y autorización para cada relación.
▪ La estructura de almacenamiento físico de cada relación en el
disco.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
7
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
8
02/03/2022
SQL, el Modelo Relacional, y Diagrama E/R
➢ SQL se basa en el
modelo relacional.
➢ Tiene muchas de las
mismas ideas.
➢ Las bases de datos que
admiten SQL a menudo
se describen como base
de datos relacionales.
➢ No siempre es fiel al
modelo
➢ Los diagramas E/R
pueden ser
implementados en SQL
➢ Las entidades, los
atributos y las relaciones
se pueden expresar en
terminos de SQL.
➢ Los relaciones de
muchos a muchos son un
problema, así que deben
ser eliminadas.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
9
02/03/2022
Relaciones, Entidades, Tablas
Modelo Relacional
Relacion
Registros
Atributo
Clave Foránea
Clave Primaria
Diagrama E/R
Entidad
Instancia
Atributo
Relación M:1
SQL
Tabla
Fila
Columna (campo)
Clave Foránea
Clave Primaria
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
10
02/03/2022
Implementando Diagramas E/R
➢ Dado un diagrama E/R
➢ Las entidades se
convierten en tablas
SQL
➢ Los atributos de una
entidad se convierten
en columnas de tablas.
➢ Las relaciones pueden
estar representadas
como claves foráneas
Enrolment
Student
Module
In
Has
ID
Code
Title
Name
Address
Year
Assignment
Exam
Assignment
Exam
Credits
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
11
02/03/2022
Entidades y Atributos
➢ Cada entidad se
convierte en una tabla
de la base de datos.
➢ El nombre de la tabla
suele ser el nombre de
la entidad
➢ Los atributos se
convierten en columnas
de la tabla con el
mismo nombre
➢ Una tabla llamada
estudiante
➢ Con columnas: ID,
Name, Address, and
Year
Student
ID
Name
Address
Year
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
12
02/03/2022
Creación de Tablas
CREATE TABLE
<name> (
<col-def-1>,
<col-def-2>,
:
<col-def-n>,
<constraint-1>,
:
<constraint-k>)
➢ Usted establece…
➢ Un nombre para la tabla
➢ Una lista de definiciones de
columnas
➢ Una lista de restricciones
(como las claves)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
13
02/03/2022
Definición de Columnas
<col-name> <type>
[NULL|NOT NULL]
[DEFAULT <val>]
[constraint-1 [,
constraint-2[,
...]]]
➢ Cada columna tiene un
nombre y un tipo.
➢ Tipos comunes:
➢ INT
➢ REAL
➢ CHAR(n)
➢ VARCHAR(n)
➢ DATE
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
14
02/03/2022
Definición de Columnas
➢ Columnas pueden ser
NULL o NOT NULL
➢ Las columnas NOT
NULL no pueden
tener valores faltantes.
➢ Si no se especifica, por
defecto se asume
NULL.
➢ Columnas pueden
tener un valor por
defecto
➢ Solo necesitas usar la
palabra reservada
DEFAULT seguido
por el valor, ej:
➢ num INT DEFAULT 0
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
15
02/03/2022
Ejemplo
CREATE TABLE Student (
stuID INT NOT NULL,
stuName VARCHAR(50) NOT NULL,
stuAddress VARCHAR(50),
stuYear INT DEFAULT 1)
Student
ID
Name
Address
Year
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
16
02/03/2022
Constraints - Restricciones
CONSTRAINT
<name>
<type>
<details>
➢ Common <type>s
➢ PRIMARY KEY
➢ UNIQUE
➢ FOREIGN KEY
➢ INDEX
➢ Cada restricción recibe
un nombre – MS Access
requiere un nombre,
pero algunos DBMS no
lo necesitan
➢ Constraints que se
refieren a columnas
individuales pueden ser
incluidas en la definición.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
17
02/03/2022
Primary Keys
➢ Los Primary Keys son definidos
a través de constraints.
➢ Una PRIMARY KEY también
incluye un constraint UNIQUE
y hace que las columnas
involucradas sean NOT
NULL
➢ Los <details> de una
clave principal son la lista de
columnas de las que se
compone la clave.
CONSTRAINT <name>
PRIMARY KEY
(col1, col2, …)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
18
02/03/2022
Unique Constraints
➢ Además de una primary key
única, cualquier conjunto de
columnas se puede especificar
como UNIQUE
➢ Esto tiene el efecto de hacer
claves candidatas en la tabla.
➢ Los <details> de un
unique constraint son la lista
de columnas que componen
una clave candidata.
CONSTRAINT <name>
UNIQUE
(col1, col2, …)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
19
02/03/2022
Ejemplo
CREATE TABLE Student (
stuID INT NOT NULL,
stuName VARCHAR(50) NOT NULL,
stuAddress VARCHAR(50),
stuYear INT DEFAULT 1,
CONSTRAINT pkStudent
PRIMARY KEY (stuID))
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
20
02/03/2022
Relaciones
➢ Depende del tipo
➢ 1:1 normalmente no se
utilizan o pueden
tratarse como un caso
especial de M:1
➢ M:1 son representados
como clave foránea
desde el lado M al 1.
➢ M:M se dividen en dos
relaciones de M:1
Enrolment
Student
Module
In
Has
ID
Code
Title
Name
Address
Year
Assignment
Exam
Assignment
Exam
Credits
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
21
02/03/2022
Representando Relaciones
➢ La tabla ENROLMENT:
➢ Tendrá columnas para los
atributos Exam y
Assignment.
➢ Tendrá una clave foránea
para Student por la
relación ‘Has’.
➢ Tendrá una clave foránea
con Module por la relación
‘In’
Enrolment
Student
Module
In
Has
ID
Code
Title
Name
Address
Year
Assignment
Exam
Assignment
Exam
Credits
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
22
02/03/2022
Foreign Keys
➢ Las claves foráneas
también se definen como
constraints.
➢ Tu necesitas otorgar
➢ Las columnas que
componen la FK
➢ La tabla referenciada
➢ Las columnas a las que
hace referencia el FK
CONSTRAINT <name>
FOREIGN KEY
(col1,col2,…)
REFERENCES
<table>
[(ref1,ref2,…)]
➢ If the FK references the PK
of <table> you don’t
need to list the columns
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
23
02/03/2022
Ejemplo
CREATE TABLE Enrolment (
stuID INT NOT NULL,
modCode CHAR(6) NOT NULL,
enrAssignment INT,
enrExam INT,
CONSTRAINT enrPK
PRIMARY KEY (stuID, modCode),
CONSTRAINT enrStu FOREIGN KEY (stuID)
REFERENCES Student (stuID),
CONSTRAINT enrMod FOREIGN KEY (modCode)
REFERENCES Module (modCode))
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
24
02/03/2022
Consideraciones de diseño de InnoDB
(MySql)
Emula la arquitectura de Oracle
▪ Sistemas únicos
▪ Buffering de inserts
▪ Index hash
▪ DataDictionary Interno
▪ Undo
▪ Insert Buffer
▪ MySQL Replication info
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
25
02/03/2022
Limites de tamaño con InnoDB
(MySql)
▪ Tamaño máximo de una tabla: 32GB
▪ Columnas por tabla: 1000
▪ Tamaño máximo de la llave 3500 caracteres
▪ Tamaño máximo del tablespace 64TB
▪ Numero máximo de transacciones concurrentes:
1023
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
26
02/03/2022
Convertir tipos de Engines
(MySql)
▪ Para crear una tabla con un Engine predefinido
▪ CREATE TABLE Test (rid INT) ENGINE=INNODB;
▪ Para definir el default por sesión:
▪ SET STORAGE_ENGINE=INNODB
▪ Convertir tablas de un Engine a otro
▪ ALTER TABLE Test ENGINE=INNODB
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
27
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
28
02/03/2022
Modificando Tablas
➢ Algunas veces desea
cambiar la estructura
de una tabla existente
➢ Una forma es eliminarlo
(DROP) y luego crearlo
➢ Esto es peligroso, por
lo que existe la opción
ALTER TABLE en su
lugar
➢ ALTER TABLE permite:
➢ Agregar una nueva
columna
➢ Remover una columna
existente.
➢ Agregar un Nuevo
constraint
➢ Remover un constraint
existente.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
29
02/03/2022
ALTERando Columnas
Para agregar o remover
columnas use…
ALTER TABLE <table>
ADD COLUMN <col>
ALTER TABLE <table>
DROP COLUMN <name>
Ejemplos:
ALTER TABLE Student
ADD COLUMN
Degree VARCHAR(50)
ALTER TABLE Student
DROP COLUMN Degree
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
30
02/03/2022
ALTERando Constraints
Para agregar o remover
restricciones use…
ALTER TABLE <table>
ADD CONSTRAINT
<definition>
ALTER TABLE <table>
DROP CONSTRAINT
<name>
Ejemplos:
ALTER TABLE Module
ADD CONSTRAINT
ck UNIQUE (title)
ALTER TABLE Module
DROP CONSTRAINT ck
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
31
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
32
02/03/2022
Deleting Tables
➢ Para borrar una tabla
existente:
DROP TABLE
[IF EXISTS]
<name>
➢ Ejemplo:
DROP TABLE Module
➢ Tenga cuidado con
alguna sentencia SQL con
DROP en ella pues…
➢ También eliminará
cualquier información de la
tabla
➢ Normalmente no se le
pedirá que confirme la
ejecución de la sentencia
➢ No hay una manera fácil de
deshacer los cambios.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
33
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
34
02/03/2022
TRUNCATE
▪ Este comando se utiliza para eliminar o
borrar los datos que contiene una tabla.
▪ Es útil cuando sólo se quiere borrar los
datos, pero no se quiere borrar la tabla.
▪ Este comando deja vacía una tabla, es
decir, sin datos.
▪ Sintaxis:
TRUNCATE TABLE nombretabla
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
35
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
36
02/03/2022
ALTER (RENAME)
▪ En ocasiones podemos querer cambiar el nombre de
nuestra tabla para darle un nombre mas relevante. Para
este propósito, podemos usar ALTER TABLE para
cambiar el nombre de una tabla.
▪ A las columnas también se les puede dar un nombre nuevo
con el uso de ALTER TABLE.
ALTER TABLE table_name RENAME TO new_table_name;
ALTER TABLE table_name RENAME COLUMN old_name
TO new_name;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
37
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
38
02/03/2022
DML: Data Manipulation Language
▪ El Lenguaje de Manipulación de Datos es un idioma
proporcionado por los sistemas gestores de bases de
datos que permite a los usuarios de la misma llevar a
cabo las tareas de consulta o modificación de los datos
contenidos en las Tablas de las Bases de Datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
39
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
40
02/03/2022
La instrucción INSERT
▪ La inserción de tuplas se realiza con la sentencia INSERT,
▪ Es posible insertar directamente valores.
▪ O bien insertar el conjunto de resultados de una consulta.
▪ En cualquier caso, los valores que se insertan deben pertenecer al
dominio de cada uno de los atributos de la relación.
▪ Ejemplos: CLIENTES (DNI, NOMBRE, DIR)
▪ La inserción
▪ INSERT INTO CLIENTES VALUES (1111,'Mario',
'C/. Mayor, 3');
▪ Es equivalente a las siguientes sentencias
▪ INSERT INTO CLIENTES (NOMBRE,DIR,DNI)
VALUES ('Mario','C/. Mayor, 3',1111);
▪ INSERT INTO CLIENTES (DNI,DIR,NOMBRE)
VALUES (1111,'C/. Mayor, 3’,'Mario');
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
41
02/03/2022
Añadir una fila
INSERT INTO TESTEMP
VALUES ('000111', 'SMITH', 'C01', '1998-06-25', 25000, NULL)
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
25000.00
1998-06-25 -
C01
SMITH
000111
INSERT INTO TESTEMP(EMPNO, LASTNAME, WORKDEPT, HIREDATE, SALARY)
VALUES ('000111', 'SMITH', 'C01', '1998-06-25', 25000)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
42
02/03/2022
Añadir varias filas
▪ Ejemplo:
▪ Para la siguiente base de datos, queremos incluir en la relación GRUPOS a todos
los grupos, junto con su número de álbumes publicados:
▪ GRUPOS (NOMBRE, ALBUMES) LP (TIT, GRUPO, ANIO, NUM_CANC)
▪ Solución:
▪ En SQL se prohíbe que la consulta que se incluye en una cláusula INSERT
haga referencia a la misma tabla en la que se quieren insertar las tuplas.
▪ En ORACLE sí está permitido
INSERT INTO GRUPOS
SELECT GRUPO, COUNT (DISTINCT TIT) FROM LP
GROUP BY GRUPO;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
43
02/03/2022
Añadir varias filas (cont.)
TESTEMP
INSERT INTO TESTEMP
SELECT
FROM EMPLOYEE
WHERE EMPNO < = '000050'
EMPNO,LASTNAME,WORKDEPT,HIREDATE,SALARY,BONUS
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
1000.00
800.00
800.00
800.00
- - - - -
52750.00
41250.00
38250.00
40175.00
25000.00
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
A00
B01
C01
E01
C01
HAAS
THOMPSON
KWAN
GEYER
SMITH
000010
000020
000030
000050
000111
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
44
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
45
02/03/2022
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
46
02/03/2022
La instrucción DELETE
▪ La eliminación de tuplas se realiza con la sentencia DELETE:
▪ DELETE FROM R WHERE P; -- WHERE es opcional
▪ Elimina tuplas completas, no columnas. Puede incluir subconsultas.
▪ Ejemplos: para la BD de CLIENTES, CUENTAS, SUCURSALES.
▪ Eliminar todas cuentas con código entre 1000 y 1100.
▪ DELETE FROM CUENTAS WHERE COD BETWEEN 1000 AND 1100;
▪ Eliminar todas las cuentas del cliente “Jose María García”.
▪ DELETE FROM CUENTAS WHERE DNI IN
(SELECT DNI FROM CLIENTES
WHERE NOMBRE LIKE 'Jose María García');
▪ Eliminar todas las cuentas de sucursales situadas en "Chinchón".
▪ DELETE FROM CUENTAS WHERE NSUCURS IN
(SELECT NSUC FROM SUCURSALES
WHERE CIUDAD LIKE 'Chinchón');
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
47
02/03/2022
Borrar filas
DELETE FROM TESTEMP
WHERE EMPNO = '000111'
Antes:
Después:
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
1000.00
800.00
800.00
800.00
- - - - -
52750.00
41250.00
38250.00
40175.00
25000.00
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
A00
B01
C01
E01
C01
HAAS
THOMPSON
KWAN
GEYER
SMITH
000010
000020
000030
000050
000111
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
1000.00
800.00
800.00
800.00
52750.00
41250.00
38250.00
40175.00
1965-01-01
1973-10-10
1975-04-05
1949-08-17
A00
B01
C01
E01
HAAS
THOMPSON
KWAN
GEYER
000010
000020
000030
000050
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
48
02/03/2022
Borrar filas
▪ Eliminar todas las tuplas de cuentas en la sucursal de
‘Perryridge’
delete from account
where branch_name = 'Perryridge'
▪ Eliminar todas las cuentas en cada sucursal ubicada en la
ciudad ‘Needham’.
delete from account
where branch_name in (select branch_name
from branch
where branch_city = 'Needham')
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
49
02/03/2022
Eliminación mediante consulta
▪ Eliminar el registro de todas las cuentas con saldos
por debajo del promedio en el banco.
delete from account
where balance < (select avg (balance )
from account )
Problema: a medida que eliminamos tuplas del depósito, el saldo
promedio cambia
Solución usada en SQL:
1. Primero, calcule el balance promedio (avg) y encuentre todas las
tuplas que deben ser eliminadas
2. Luego, elimine las tuplas encontradas en el paso anterior (sin
recalcular el avg o volviendo a seleccionar las tuplas)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
50
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
51
02/03/2022
La instrucción UPDATE
▪ La modificación de tuplas se realiza con la sentencia UPDATE,
▪ Es posible elegir el conjunto de tuplas que se van a actualizar usando la clausula
WHERE.
▪ Ejemplos: CUENTAS (COD, DNI, NSUCURS, SALDO)
▪ Suma del 5% de interés a los saldos de todas las cuentas.
▪ UPDATE CUENTAS SET SALDO = SALDO * 1.05;
▪ Suma del 1% de bonificación a aquellas cuentas cuyo saldo sea superior a
100.000 €.
▪ UPDATE CUENTAS SET SALDO = SALDO * 1.01
WHERE SALDO > 100000;
▪ Modificación de DNI y saldo simultáneamente para el código 898.
▪ UPDATE CUENTAS SET DNI='555', SALDO=10000
WHERE COD LIKE '898';
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
52
02/03/2022
Modificar datos
UPDATE TESTEMP
SET SALARY = SALARY + 1000
WHERE WORKDEPT = 'C01'
Antes:
Después:
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
1000.00
800.00
800.00
800.00
- - - - -
52750.00
41250.00
38250.00
40175.00
25000.00
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
A00
B01
C01
E01
C01
HAAS
THOMPSON
KWAN
GEYER
SMITH
000010
000020
000030
000050
000111
EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS
1000.00
800.00
800.00
800.00
- - - - -
52750.00
41250.00
39250.00
40175.00
26000.00
1965-01-01
1973-10-10
1975-04-05
1949-08-17
1998-06-25
A00
B01
C01
E01
C01
HAAS
THOMPSON
KWAN
GEYER
SMITH
000010
000020
000030
000050
000111
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
53
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
54
02/03/2022
Estructura de consulta básica
▪ SQL se basa en operaciones relacionales y de conjuntos con
ciertas modificaciones y mejoras
▪ Una consulta SQL típica tiene la forma:
select A1, A2, ..., An
from r1, r2, ..., rm
where P
▪ Ai representa un atributo
▪ Ri representa una relación
▪ P es un predicado (condición).
▪ Esta consulta es equivalente a la expresión del álgebra relacional.
▪ El resultado de una consulta SQL es una relación.
))
(
( 2
1
,
,
, 2
1 m
P
A
A
A
r
r
r
n



 


Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
55
02/03/2022
Estructura básica de la sentencia
SELECT
▪ Consta de tres cláusulas:
▪ SELECT
▪ La lista de los atributos que se incluirán en el resultado de una consulta.
▪ FROM
▪ Especifica las relaciones que se van a usar como origen en el proceso de la
consulta.
▪ WHERE
▪ Especifica la condición de filtro sobre las tuplas en términos de los atributos de las
relaciones de la cláusula FROM.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
56
02/03/2022
Estructura básica de la
sentencia SELECT
▪ Una consulta SQL tiene la forma:
SELECT A1, ..., An /* Lista de atributos */
FROM R1, ..., Rm /* Lista de relaciones. A
veces opcional */
WHERE P; /* Condición. Cláusula
opcional */
▪ Es posible que exista el mismo nombre de atributo en
dos relaciones distintas.
▪ Se añade "NOMBRE_RELACION." antes del nombre
para desambiguar.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
57
02/03/2022
La cláusula SELECT
▪ La clausula select lista los atributos deseados en el resultado de
una consulta
▪ corresponde a la operación de proyección del álgebra relacional
▪ Ejemplo: encontrar los nombres de todas las sucursales en la
relación de préstamo (loan):
select branch_name
from loan
▪ En el álgebra relacional, la consulta sería:
branch_name (loan)
▪ NOTA: Los nombres de SQL no distinguen entre mayúsculas y
minúsculas (es decir, puede usar letras mayúsculas o
minúsculas).
▪ Ej.: Branch_Name ≡ BRANCH_NAME ≡ branch_name
▪ Algunas personas usan mayúsculas donde usamos negrita.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
58
02/03/2022
La cláusula SELECT(Cont.)
▪ SQL permite valores duplicados tanto en las relaciones como
en los resultados de las consultas..
▪ Para forzar la eliminación de duplicados, inserte la palabra
clave distinct después de select
▪ Encuentre los nombres de todas las sucursales en las
relaciones de préstamo (loan) y elimine los duplicados
select distinct branch_name
from loan
▪ La palabra clave all especifica que los valores duplicados no
serán eliminados.
select all branch_name
from loan
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
59
02/03/2022
La cláusula SELECT(Cont.)
▪ Un asterisco en la cláusula de selección denota "todos los
atributos"
select *
from loan
▪ La cláusula select puede contener expresiones aritméticas que
involucran la operación, +, –, , y /, y que operan sobre
constantes o atributos de tuplas.
▪ La consulta (query):
select loan_number, branch_name, amount  100
from loan
devolvería una relación que es la misma que la relación de
préstamo (loan), excepto que el valor del atributo amount se
multiplica por 100
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
60
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
61
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
62
02/03/2022
MERGE
▪ MERGE es la combinación de tres instrucciones:
INSERT, DELETE y UPDATE.
▪ Si hay una tabla de origen y una tabla de destino
que deseamos fusionar, con la ayuda de la
declaración MERGE podemos realizar las tres
operaciones (INSERTAR, ACTUALIZAR,
ELIMINAR) a la vez
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
63
02/03/2022
MERGE
▪ Ejemplo: Supongamos que hay dos tablas:
• PRODUCT_LIST: tabla que contiene los detalles
actuales sobre los productos disponibles con los
campos P_ID, P_NAME y P_PRICE correspondientes al
ID, nombre y precio de cada producto.
• UPDATED_LIST tabla que contiene los nuevos
detalles sobre los productos disponibles con los
campos P_ID, P_NAME y P_PRICE correspondientes al
ID, nombre y precio de cada producto.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
64
02/03/2022
MERGE
La tarea es actualizar los detalles de los productos en
PRODUCT_LIST según la UPDATED_LIST.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
65
02/03/2022
MERGE
▪ Solución: Ahora, para explicar mejor este
ejemplo, dividamos el ejemplo en pasos.
▪ Paso 1: Reconocer la tabla TARGET y
SOURCE Entonces, en este ejemplo, dado que se
solicita actualizar los productos en PRODUCT_LIST
según UPDATED_LIST,
▪ PRODUCT_LIST actuará como tabla TARGET y
▪ UPDATED_LIST actuará como tabla SOURCE.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
66
02/03/2022
MERGE
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
67
02/03/2022
MERGE
▪ Paso 2: Reconocer las operaciones a
realizar. Ahora, como se puede ver, hay tres
discrepancias entre la tabla TARGET y SOURCE,
que son:
▪ 1. El costo del COFFEE en TARGET es de 15,00 mientras
que en SOURCE es 25.00
PRODUCT_LIST
102 COFFEE 15.00
UPDATED_LIST
102 COFFEE 25.00
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
68
02/03/2022
MERGE
▪ 2. No hay ningún producto BISCUIT en SOURCE pero sí
en TARGET
▪ 3. No hay ningún producto CHIPS en TARGET pero sí en
SOURCE
PRODUCT_LIST
103 BISCUIT 20.00
UPDATED_LIST
104 CHIPS 22.00
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
69
02/03/2022
MERGE
▪ Por lo tanto, se deben realizar tres operaciones en el
TARGET de acuerdo con las discrepancias anteriores.
Estas son :
▪ 1. UPDATE operation
▪ 2. DELETE operation
▪ 3. INSERT operation
102 COFFEE 25.00
103 BISCUIT 20.00
104 CHIPS 22.00
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
70
02/03/2022
MERGE
▪ Paso 3: escribir la consulta SQL. La consulta SQL para
realizar las operaciones mencionadas anteriormente con
la ayuda de la instrucción MERGE es:
/* Seleccionar el Target (objetivo) y Source (fuente) */
MERGE PRODUCT_LIST AS TARGET
USING UPDATE_LIST AS SOURCE
/* 1. Performing the UPDATE operation */
/* If the P_ID is same,
check for change in P_NAME or P_PRICE */
ON (TARGET.P_ID = SOURCE.P_ID)
WHEN MATCHED
AND TARGET.P_NAME <> SOURCE.P_NAME
OR TARGET.P_PRICE <> SOURCE.P_PRICE
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
71
02/03/2022
MERGE
/* Update the records in TARGET */
THEN UPDATE
SET TARGET.P_NAME = SOURCE.P_NAME,
TARGET.P_PRICE = SOURCE.P_PRICE
/* 2. Performing the INSERT operation */
/* When no records are matched with TARGET table
Then insert the records in the target table */
WHEN NOT MATCHED BY TARGET
THEN INSERT (P_ID, P_NAME, P_PRICE)
VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE)
/* 3. Performing the DELETE operation */
/* When no records are matched with SOURCE table
Then delete the records from the target table */
WHEN NOT MATCHED BY SOURCE
THEN DELETE
/* END OF MERGE */
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
72
02/03/2022
MERGE
▪ Salida
▪ Entonces, de esta manera, todos podemos realizar
estas tres declaraciones principales en SQL junto con
la ayuda de la declaración MERGE.
▪ Nota: En la sintaxis MERGE se puede utilizar
cualquier nombre que no sea TARGET y SOURCE. Se
usan solo para darte una mejor explicación.
PRODUCT_LIST
P_ID P_NAME P_PRICE
101 TEA 10.00
102 COFFEE 25.00
104 CHIPS 22.00
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
73
02/03/2022
MERGE en MySql
▪ MERGE no es compatible con MySQL. Sin
embargo, hay otra forma posible de hacer lo
mismo:
▪ INSERT ... ON DUPLICATE KEY UPDATE Statement
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
74
02/03/2022
INSERT ... ON DUPLICATE KEY
UPDATE (MySql)
▪ Si especifica una cláusula ON DUPLICATE KEY
UPDATE y la inserción de una fila provocaría un
valor duplicado en un índice UNIQUE o PRIMARY
KEY, se produce un UPDATE de la fila anterior.
▪ Por ejemplo, si la columna a se declara como
UNIQUE y contiene el valor 1:
▪ INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON
DUPLICATE KEY UPDATE c=c+1;
▪ La eliminación tiene que manejarse aparte
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
75
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
76
02/03/2022
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
77
02/03/2022
Data Control Language
▪ Objetivos
▪ Conocer los mecanismos de seguridad implementados
en un RDBMS y cómo usarlos
▪ Contenido
▪ Identificación de usuarios
▪ Privilegios
▪ La Declaración GRANT
▪ La Declaración REVOKE
▪ El catálogo del sistema
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
78
02/03/2022
Identificación de usuarios
Admin
FRED
Ventas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
79
02/03/2022
Privilegios
▪ Privilegios Permitidos
▪ SELECT, INSERT, UPDATE, DELETE
▪ CREATE Table, View, Procedure, Trigger, Rule, Default
▪ El propietario/creador de una tabla
automáticamente tiene todos los privilegios
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
80
02/03/2022
Privilegios Directos
Clientes Pedidos Productos Personal
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
81
02/03/2022
Privilegios indirectos
Clientes Pedidos Productos Personal
Programa
Usuario
Administrador
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
82
02/03/2022
Requerimientos de seguridad
▪ Integridad de la base de datos física
▪ Integridad de la base de datos lógica
▪ Integridad del elemento
▪ Auditabilidad
▪ Control de acceso
▪ Autenticación de usuario
▪ Disponibilidad
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
83
02/03/2022
Requerimientos de seguridad
▪ Integridad de la base de datos física
▪ inmunidad a catástrofes físicas, como cortes de
energía, fallas de medios
▪ hardware de seguridad física, UPS
▪ Respaldos regulares (regular backups)
▪ Integridad de la base de datos lógica
▪ capacidad de reconstrucción
▪ mantener un log (registro) de transacciones
▪ reverso de operaciones a partir del log para restaurar los
sistemas a un punto estable
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
84
02/03/2022
Requerimientos de seguridad
▪ Integridad del elemento
▪ la integridad de los elementos específicos de la base de datos es
su corrección o precisión
▪ verificaciones de campo
– permitir solo valores aceptables
▪ controles de acceso
– permitir que solo los usuarios autorizados actualicen elementos
▪ registro de cambios (change log)
– Usado para deshacer cambios que produjeron un error
▪ Integridad referencial (key integrity concerns)
▪ proceso de bloqueo de dos fases (two phase locking process)
▪ Auditabilidad
▪ log de operaciones read/write sobre la base de datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
85
02/03/2022
Requerimientos de seguridad
▪ Controles de acceso (similar a los Sistemas Operativos)
▪ separación lógica de usuarios por privilegios de acceso
▪ Mas complicado que en los SO debido a la complejidad de las BDs
(granularidad/inferencia/agregación)
▪ Autenticación de Usuario
▪ Puede estar separado del SO
▪ puede ser riguroso
▪ Disponibilidad
▪ Usuarios concurrentes
▪ granularity of locking
▪ reliability
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
86
02/03/2022
Autorización en SQL
Formas de autorización sobre partes de la base de datos:
▪ Read authorization - permite la lectura, pero no la
modificación de los datos.
▪ Insert authorization - permite la inserción de nuevos
datos, pero no la modificación de los datos existentes.
▪ Update authorization - permite la modificación, pero
no la eliminación de datos.
▪ Delete authorization - permite la eliminación de datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
87
02/03/2022
Autorización en SQL (Cont.)
Formas de autorización para modificar el esquema de
la base de datos:
▪ Index authorization - permite la creación y
eliminación de índices.
▪ Resources authorization - permite la creación de
nuevas relaciones.
▪ Alteration authorization - permite agregar o
eliminar atributos en una relación.
▪ Drop authorization - permite eliminar relaciones.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
88
02/03/2022
Vistas
▪ Proporcione un mecanismo para ocultar ciertos
datos de la vista de ciertos usuarios.
▪ Para crear una vista usamos el comando :
create view v as <query expression>
donde:
▪ <query expression> es cualquier expresión legal
▪ El nombre de la vista está representado por v
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
89
02/03/2022
Autorización y Vistas
▪ Los usuarios pueden recibir autorización sobre las vistas, sin
que se les otorgue ninguna autorización sobre las relaciones
utilizadas en la definición de la vista.
▪ La capacidad de las vistas para ocultar datos sirve tanto para
simplificar el uso del sistema como para mejorar la seguridad
al permitir que los usuarios accedan solo a los datos que
necesitan para su trabajo.
▪ Se puede usar una combinación de seguridad a nivel
relacional y seguridad a nivel de vista para limitar el acceso
de un usuario a los datos que necesita.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
90
02/03/2022
Ejemplo de una Vista
▪ Supongamos que un empleado de banco necesita saber los
nombres de los clientes de cada sucursal, pero no está
autorizado para ver información específica del préstamo (loan).
▪ Enfoque: denegar el acceso directo a la relación de préstamo, pero
otorgar acceso a la vista de préstamos de clientes, que consta solo
de los nombres de los clientes y las sucursales en las que tienen
un préstamo
▪ La vista de préstamos al cliente se define en SQL de la siguiente
manera :
create view cust-loan as
select branchname, customer-name
from borrower, loan
where borrower.loan-number = loan.loan-number
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
91
02/03/2022
Ejemplo de una Vista (Cont.)
▪ El oficinista está autorizado a ver el resultado de la consulta:
select *
from cust-loan
▪ Cuando el procesador de consultas traduce el resultado en
una consulta sobre las relaciones reales en la base de datos,
obtenemos una consulta sobre prestatario y préstamo.
▪ Se debe verificar la autorización en la consulta del empleado
antes de que el procesamiento de la consulta reemplace una
vista por la definición de la vista.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
92
02/03/2022
Autorización sobre Vistas
▪ La creación de la vista no requiere autorización de
recursos ya que no se está creando una relación real.
▪ El creador de una vista obtiene solo aquellos privilegios
que no proporcionan autorización adicional más allá de
la que ya tenía.
▪ P.ej. si el creador del view cust-loan solo había leído (read)
la autorización en el prestatario (borrower) y el préstamo
(loan), solo obtiene la autorización de lectura en cust-loan
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
93
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
94
02/03/2022
Otorgamiento de privilegios
▪ El paso de la autorización de un usuario a otro puede
representarse mediante un gráfico de autorización.
▪ Los nodos de este gráfico son los usuarios.
▪ La raíz del gráfico es el administrador de la base de datos.
▪ Considere gráfico para autorización de actualización en
loan
▪ Una flecha Ui → Uj indica que el
usuario Ui ha concedido autorización
de actualización en loan a Uj.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
95
02/03/2022
Grafo de concesión de autorización
▪ Requerimiento: Todas las flechas en un grafo de autorización deben ser
parte de alguna ruta que se origine con el administrador de la base de
datos.
▪ Si un DBA revoca la autorización sobre U1:
▪ La autorización debe ser revocada de U4 ya que U1 ya no tiene autorización
▪ La autorización no debe ser revocada de U5 ya que U5 tiene otra ruta de
autorización de DBA a través de U2
▪ Debe evitar ciclos de autorizaciones sin camino
desde la raíz :
▪ DBA concede autorización a U7
▪ U7 concede autorización a U8
▪ U8 concede autorización a U7
▪ DBA revoca autorización de U7
▪ Debe revocarse la autorización de U7 a U8 y
desde U8 a U7 ya que ya no hay una ruta de
DBA a U7 o U8.
u7
u8
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
96
02/03/2022
Especificación de autorización en SQL
▪ La declaración grant se utiliza para conferir autorización.
grant <lista de privilegios>
on <nombre de la relación o de la vista> to <lista de usuarios>
▪ <lista de usuarios> is:
▪ un user-id
▪ public, que permite a todos los usuarios válidos el privilegio concedido
▪ Un rol (se revisará más de esto después)
▪ Otorgar un privilegio sobre una vista no implica otorgar ningún
privilegio sobre las relaciones subyacentes.
▪ El otorgante del privilegio ya debe tener el privilegio sobre el
elemento especificado (o ser el administrador de la base de datos).
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
97
02/03/2022
Autorización
Formas de autorización sobre partes de la base de datos:
▪ Read - permite la lectura, pero no la modificación de los datos.
▪ Insert - permite la inserción de nuevos datos, pero no la modificación de los
datos existentes.
▪ Update - permite la modificación, pero no la eliminación de datos.
▪ Delete - permite la eliminación de datos.
Formas de autorización para modificar el esquema de la base de datos:
▪ Index - permite la creación y eliminación de índices.
▪ Resources - permite la creación de nuevas relaciones.
▪ Alteration - permite agregar o eliminar atributos en una relación.
▪ Drop - permite borrar relaciones.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
98
02/03/2022
Privilegios en SQL
▪ select: permite el acceso de lectura a la relación, o la capacidad de
consultar usando la vista
▪ Ejemplo: conceder a usuarios U1, U2, y U3 la autorización select
sobre la relación branch:
grant select on branch to U1, U2, U3
▪ insert: la posibilidad de insertar tuplas(registros)
▪ update: la capacidad de actualizar usando la declaración de
actualización de SQL
▪ delete: la posibilidad de eliminar tuplas.
▪ references: capacidad de declarar claves foráneas al crear relaciones.
▪ usage: En SQL-92; autoriza a un usuario a usar un dominio específico
▪ all privileges: utilizado como una forma abreviada para todos los
privilegios permitidos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
99
02/03/2022
Privilegio Para otorgar privilegios
▪ with grant option: permite que un usuario, al que
se le otorga un privilegio, pase el privilegio a otros
usuarios.
▪ Ejemplo:
grant select on branch to U1 with grant option
otorga a U1 los privilegios de select sobre branch y permite que
U1 conceda este privilegio a otros
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
100
02/03/2022
Roles
▪ Los roles permiten que los
privilegios comunes para
una clase de usuarios se
puedan especificar solo una
vez creando un "rol"
correspondiente.
▪ Los privilegios se pueden
otorgar o revocar a los roles,
de la misma forma que se lo
hace con los usuarios
▪ Los roles se pueden asignar
a los usuarios, e incluso a
otros roles
create role teller
create role manager
grant select on branch to teller
grant update (balance) on
account to teller
grant all privileges on account
to manager
grant teller to manager
grant teller to alice, bob
grant manager to avi
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
101
02/03/2022
Revocación de autorizaciones en SQL
▪ La sentencia revoke es utilizada para revocar la autorización.
revoke<privilege list>
on <relation name or view name> from <user list> [restrict|cascade]
▪ Ejemplo:
revoke select on branch from U1, U2, U3 cascade
▪ La revocación de un privilegio de un usuario puede causar que
otros usuarios también pierdan ese privilegio; denominada
cascada de revoke.
▪ Podemos evitar la cascada especificando restrict:
revoke select on branch from U1, U2, U3 restrict
Con restrict, el comando revoke fallará si se requieren
revocaciones en cascada.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
102
02/03/2022
Revocación de autorizaciones en SQL
(Cont.)
▪ <privilege-list> puede ser all para revocar todos los
privilegios que pueden tener los revocados(revokee).
▪ Si <revokee-list> incluye public, entonces todos los
usuarios pierden el privilegio excepto aquellos que se
lo otorgan explícitamente.
▪ Si el mismo privilegio fue otorgado dos veces al mismo
usuario por diferentes beneficiarios, el usuario puede
conservar el privilegio después de la revocación.
▪ Todos los privilegios que dependen del privilegio que
se revoca también se revocan.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
103
02/03/2022
Limitaciones de la autorización en SQL
▪ SQL no admite la autorización a nivel de tupla
▪ P.ej. no podemos restringir a los estudiantes para que solo
vean (las tuplas que almacenan) sus propias calificaciones
▪ Con el crecimiento del acceso web a las bases de datos, los
accesos a las bases de datos provienen principalmente de los
servidores de aplicaciones.
▪ Los usuarios finales no tienen ID de usuario de base de
datos, todos están asignados al mismo ID de usuario de
base de datos
▪ Todos los usuarios finales de una aplicación (como una
aplicación web) pueden asignarse a un solo usuario de base de
datos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
104
02/03/2022
Limitaciones de la autorización en SQL
▪ La tarea de autorización en los casos anteriores recae en el
programa de aplicación, sin soporte de SQL
▪ Beneficio: la aplicación puede implementar autorizaciones
detalladas, como tuplas individuales.
▪ Inconveniente: la autorización debe realizarse en el código
de la aplicación y puede estar dispersa por toda la
aplicación
▪ Verificar la ausencia de lagunas de autorización se vuelve
muy difícil ya que requiere leer grandes cantidades de
código de aplicación
▪ ¿Solución? Programación Orientada a aspectos-> Se revisará en
la asignatura de “Diseño y Arquitectura de Software”
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
105
02/03/2022
Resumen
▪ Identificación de usuarios
▪ Los usuarios del sistema se pueden agrupar para facilitar el manejo de la
seguridad
▪ Privilegios
▪ Los permisos se pueden otorgar en varios niveles y se pueden otorgar directa
o indirectamente utilizando vistas y procedimientos almacenados.
▪ La declaración GRANT
▪ Se utiliza para otorgar permisos a las personas sobre los objetos de la base de
datos.
▪ La declaración REVOKE
▪ Se utiliza para quitar permisos.
▪ El catálogo del sistema
▪ Toda la información sobre los permisos se almacena dentro del catálogo.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
106
02/03/2022
GRANT/ REVOKE
▪ GRANT privilege ON tablename TO list
[ WITH GRANT OPTION]
▪ Ejemplo:
GRANT ALL ON dept TO John
GRANT SELECT ON dept TO sally WITH GRANT OPTION
GRANT SELECT, UPDATE, INSERT ON dept TO Jim, Mike, Howard
REVOKE privilege ON tablename FROM list [CASCADE]
e.g REVOKE SELECT ON dept FROM Sally CASCADE
▪ Sin embargo, en gran medida se hace en estos días a
través de casillas de verificación en cuadrículas en
herramientas GUI de administración de la BD
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
107
02/03/2022
DCL Lenguaje De Control De Datos:
SENTENCIA GRANT
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON {tbl_name | * | *.* | db_name.*}
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
[REQUIRE
NONE |
[{SSL| X509}]
[CIPHER 'cipher' [AND]]
[ISSUER 'issuer' [AND]]
[SUBJECT 'subject']]
[WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR count |
MAX_UPDATES_PER_HOUR count |
MAX_CONNECTIONS_PER_HOUR count |
MAX_USER_CONNECTIONS count]]
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
108
02/03/2022
DCL Lenguaje De Control De Datos:
SENTENCIA GRANT
Ejemplo:
• GRANT SELECT ON sucursal TO u1, u2, u3;
• GRANT SELECT, INSERT, UPDATE ON prueba.estudiante TO mzabala IDENTIFIED
BY ‘1234‘;
• GRANT USAGE ON * TO anonimo@localhost IDENTIFIED BY 'clave';
• GRANT USAGE ON * TO anonimo@10.28.56.15 IDENTIFIED BY 'clave';
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON {tbl_name | * | *.* | db_name.*}
FROM user [, user] ...
SENTENCIA REVOKE
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
Ejemplo:
REVOKE SELECT ON prueba.estudiante FROM mzabala;
REVOKE SELECT ON prueba.gente FROM anonimo;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
109
02/03/2022
DCL Lenguaje De Control De Datos:
DROP USER
La sentencia DROP USER elimina la o las cuentas de usuario MySQL.
• Para usarla se debe revocar los privilegios asignados al usuario.
• La sentencia DROP USER debe poseer el privilegio GRANT OPTION
para la base de datos mysql. Cada cuenta se nombra usando el
mismo formato que para GRANT o REVOKE; por ejemplo,
'jeffrey'@'localhost'. Las partes del usuario y la máquina del nombre
de la cuenta corresponden a los valores de las columnas User y Host
del registro de la tabla user para la cuenta.
• DROP USER se añadió en MySQL 4.1.1 y originalmente sólo borra
cuentas que no tengan privilegios, en MySQL 5.0.2, fue modificada
para borrar también cuentas que tengan privilegios.
DROP USER user;
Ejemplo:
DROP USER mzabala;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
110
02/03/2022
DCL Lenguaje De Control De Datos:
SHOW GRANTS
La sentencia SHOW GRANTS permite visualizar los privilegios que
posee un usuario definido en MySQL, para posteriormente poder ser
revocados en caso que se desee eliminarlos.
Ejemplo:
SHOW GRANTS FOR 'root'@'localhost';
SHOW GRANTS FOR user;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
111
02/03/2022
Non-ANSI Privileges
▪ Sample Non ANSI Table Privileges
GRANT ALTER ON dept TO Sally
GRANT INDEX ON dept TO John
▪ Sample Non ANSI Database Privileges
GRANT CONNECT ON database TO John, Ann
GRANT RESOURCE TO Alex
GRANT DBA TO Simon
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
112
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
113
02/03/2022
Transacciones
▪ Una transacción es una acción, o una serie de
acciones, realizadas por un solo usuario o un
programa de aplicación, que lee o actualiza el
contenido de una base de datos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
114
02/03/2022
Transacciones
▪ Una transacción es una o más sentencias que se toman
como una unidad (todo termina bien o todo se aborta)
▪ Una transacción es una unidad lógica de trabajo
▪ Definida para las reglas del negocio
▪ Típicamente incluye al menos una modificación de datos
▪ Pasa la base de datos de un estado consistente a otro
▪ Una transacción tiene dos posibles salidas:
▪ Committed
▪ Todas las modificaciones quedan en firme
▪ Rolled back
▪ Las modificaciones retornan a su estado inicial
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
115
02/03/2022
Rol de las transacciones
▪ Proteger los datos de las fallas del software,
hardware, y potencia eléctrica
▪ Permitir el aislamiento de datos de tal forma que
varios usuarios pueden acceder simultáneamente a
los datos sin interferencia
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
116
02/03/2022
Cuándo usar transacciones?
▪ Cuando un conjunto de sentencias se deben
comportar como una unidad
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
117
02/03/2022
Lenguaje de Control de Transacciones
(TCL)
▪ Los comandos del lenguaje de control de
transacciones se utilizan para administrar
transacciones en la base de datos.
▪ Estos se utilizan para administrar los cambios
realizados por las declaraciones DML.
▪ También permite que las declaraciones se agrupen
en transacciones lógicas.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
118
02/03/2022
Sentencias para transacciones
▪ COMMIT: se utiliza para guardar permanentemente
cualquier transacción en la base de datos.
▪ ROLLBACK: restaura la base de datos al último
estado confirmado. También se usa con el
comando savepoint para saltar a un punto de
guardado en una transacción.
▪ SAVEPOINT: se usa para guardar temporalmente
una transacción para que pueda retroceder a ese
punto cuando sea necesario.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
119
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
120
02/03/2022
Transacciones
➢ Una transacción es una
"unidad lógica de
trabajo" en una base
de datos
➢ Cada transacción hace
algo en la base de
datos
➢ Ninguna parte de él por
sí sola logra nada de
utilidad o interés
➢ Las transacciones son la
unidad de recuperación,
consistencia e integridad
también.
➢ Propiedades ACID
➢ Atomicidad
➢ Consistencia
➢ Isolation (Aislamiento)
➢ Durabilidad
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
121
02/03/2022
Atomicidad y Consistencia
➢ Atomicidad
➢ Transacciones son
atómicas – no tienen
partes (conceptualmente)
➢ No pueden ser
ejecutadas parcialmente;
no debe ser detectable
que se intercalan con
otra transacción.
➢ Consistencia
➢ Las transacciones
llevan la base de datos
de un estado
consistente a otro
➢ En medio de una
transacción, la base de
datos puede no ser
consistente
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
122
02/03/2022
Isolation y Durabilidad
➢ Isolation
➢ Los efectos de una
transacción no son visibles
para otras transacciones
hasta que se haya
completado
➢ Desde fuera la transacción
ha ocurrido o no
➢ Para mí, esto en realidad
suena como una
consecuencia de la
atomicidad...
➢ Durabilidad
➢ Una vez que se ha
completado una
transacción, sus cambios
se hacen permanentes
➢ Incluso si el sistema falla,
los efectos de una
transacción deben
permanecer en su lugar
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
123
02/03/2022
Ejemplo de transacción
➢ Transferir $50 desde una
cuenta A a una cuenta B
Read(A)
A = A - 50
Write(A)
Read(B)
B = B+50
Write(B)
Atomicity - no debe tomar
dinero de A sin dárselo a B
Consistency - el dinero no se
pierde ni se gana
Isolation - otras consultas no
deberían ver cambios en A o
B hasta que se completen
las operaciones
Durability - el dinero no vuelve
a A
transacción
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
124
02/03/2022
El manejador de Transacciones
➢ El administrador de
transacciones aplica
las propiedades ACID
➢ Programa las
operaciones de
transacciones
➢ COMMIT y ROLLBACK
son utilizados para
asegurar la atomicidad
➢ Se utilizan bloqueos(Locks)
o marcas de
tiempo(timestamps) para
garantizar la consistencia y
el aislamiento de las
transacciones simultáneas
➢ Se mantiene un
registro(log) para
garantizar la durabilidad en
caso de falla del sistema
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
125
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Filtros
▪ Agrupación
▪ Ordenación
▪ Filtros de grupo
▪ Subconsultas
▪ Consultas multitablas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
126
02/03/2022
Sentencias para transacciones
▪ Cuatro sentencias definen la estructura de una
transacción
▪ start tran
▪ commit tran
▪ rollback tran
▪ savepoint
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
127
02/03/2022
start tran y commit tran
▪ start tran
▪ Inicia la transacción
▪ commit tran
▪ Finaliza la transacción
▪ Todas las modificaciones quedan en firme
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
128
02/03/2022
start tran y commit tran
▪ Sintaxis:
start { tran | transaction } [ transaction_name ]
commit [ tran | transaction | work ] [ transaction_name | savepoint_name ]
▪ Ejemplo:
-- @amount is a monetary amount to be transferred.
-- @from_account is the account to be debited.
-- @to_account is the account to be credited.
start tran
update accounts
set balance = balance - @amount
where account = @from_account
update accounts
set balance = balance + @amount
where account = @to_account
commit tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
129
02/03/2022
Ejemplo de start tran y commit tran
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
130
02/03/2022
COMMIT y ROLLBACK
➢ COMMIT señala el final
exitoso de una transacción
➢ Cualquier cambio realizado
por la transacción debe
guardarse
➢ Estos cambios ahora son
visibles para otras
transacciones
➢ ROLLBACK señala el final
fallido de una transacción
➢ Cualquier cambio realizado
por la transacción debe ser
deshecho
➢ Ahora es como si la
transacción nunca hubiera
existido.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
131
02/03/2022
rollback tran
▪ rollback tran termina una transacción
▪ Deshace las modificaciones que se hayan hecho
▪ La ejecución continua con la instrucción siguiente a
rollback
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
132
02/03/2022
Sintaxis para rollback tran
▪ Sintaxis:
rollback [ tran [ transaction_name | savepoint_name ] |
transaction [ transaction_name | savepoint_name ] |
work [ transaction_name | savepoint_name ] ]
▪ Ejemplo:
-- If @from_account is below 0, abort the transfer
start tran
update accounts
set balance = balance - @amount
where account = @from_account
update accounts
set balance = balance + @amount
where account = @to_account
if (select balance from accounts
where account = @from_account) < 0
rollback tran
else
commit tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
133
02/03/2022
Ejemplo
para
rollback
tran DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE cliente (
id INT UNSIGNED PRIMARY KEY,
nombre CHAR (20) );
START TRANSACTION;
INSERT INTO cliente VALUES (1, 'Pepe’);
COMMIT;
-- 1. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
SET AUTOCOMMIT=0;
INSERT INTO cliente VALUES (2, 'Maria’);
INSERT INTO cliente VALUES (20, 'Juan’);
DELETE FROM cliente WHERE nombre = 'Pepe’;
-- 2. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
ROLLBACK;
-- 3. ¿Qué devolverá esta consulta?
SELECT * FROM cliente;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
134
02/03/2022
Ejemplo con begin tran, commit tran,
rollback tran
▪ Crear una tabla:
select * into mytitles
from pubs2..titles
▪ Iniciar una transacción:
start tran
▪ Borrar todas las filas de la tabla:
delete from mytitles
select * from mytitles
▪ Deshacer el borrado:
rollback tran
select * from mytitles
▪ Iniciar una transacción:
start tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
135
02/03/2022
• Borrar todas las filas de la tabla:
delete from mytitles
select * from mytitles
• Dejar en firme el borrado:
commit tran
select * from mytitles
• Borrar los objetos de base de datos
creados:
drop table mytitles
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
136
02/03/2022
savepoint
▪ savepoint crea un nombre de un punto de
grabación
▪ Es una extensión SQL que permite rollbacks parciales
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
137
02/03/2022
Sintaxis para savepoint
▪ Sintaxis:
savepoint { transaction | tran } savepoint_name
▪ Ejemplo:
-- The rollback rolls back to point1. This undoes
-- the delete of business books, but not the
-- delete of mod_cook books. Execution resumes
-- with the statement after the rollback, which
-- deletes popular_comp books.
start tran
delete from titles where type = "mod_cook"
savepoint tran point1
delete from titles where type = "business"
rollback tran point1
delete from titles where type = "popular_comp"
commit tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
138
02/03/2022
Ejemplo con savepoints
▪ Crear una tabla:
select * into mytitles
from pubs2..titles
▪ Iniciar una transacción:
start tran
▪ Borrar datos de una tabla:
delete from mytitles
where type = "psychology"
select * from mytitles
▪ Establecer un savepoint:
savepoint tran title_sav
▪ Borrar los restantes datos de la tabla:
delete from mytitles
select * from mytitles
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
139
02/03/2022
• Restaurar hasta el savepoint:
rollback tran title_sav
select * from mytitles
• Dejar en firme la transacción:
commit tran
• Borrar los objetos de base de datos
creados:
drop table mytitles
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
140
02/03/2022
Ejemplo
con
savepoints DROP DATABASE IF EXISTS test;
CREATE DATABASE test CHARACTER SET utf8mb4;
USE test;
CREATE TABLE producto (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL, precio DOUBLE );
INSERT INTO producto (id, nombre) VALUES (1, 'Primero’);
INSERT INTO producto (id, nombre) VALUES (2, 'Segundo’);
INSERT INTO producto (id, nombre) VALUES (3, 'Tercero’);
-- 1. Comprobamos las filas que existen en la tabla
SELECT * FROM producto;
-- 2. Ejecutamos una transacción que incluye un SAVEPOINT
START TRANSACTION;
INSERT INTO producto (id, nombre) VALUES (4, 'Cuarto’);
SAVEPOINT sp1;
INSERT INTO producto (id, nombre) VALUES (5, 'Cinco’);
INSERT INTO producto (id, nombre) VALUES (6, 'Seis’);
ROLLBACK TO sp1;
-- 3. ¿Qué devolverá esta consulta?
SELECT * FROM producto;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
141
02/03/2022
Transacciones anidadas
▪ Se pueden tener transacciones anidadas:
▪ El start y commit más externos comienzan y finalizan
las transacciones
▪ Las sentencias start y commit internos solamente
guardan un registro del nivel de anidamiento
▪ Ejemplo:
start tran
delete from titles where type = "mod_cook"
start tran
delete from titles where type = "business"
start tran
delete from titles where type = "trad_cook"
commit tran -- No deletes committed yet.
commit tran -- No deletes committed yet.
commit tran -- All deletes committed here.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
142
02/03/2022
Rollbacks anidados
▪ Cuando se ejecutan rollback anidados sin puntos de
grabación:
▪ El rollback deshace todas las transacciones en progreso,
sin importar el nivel de anidamiento del rollback
▪ Termina la transacción
▪ La ejecución continúa con la sentencia siguiente al rollback
▪ Ejemplo:
start tran
delete from titles where type = "mod_cook"
start tran
delete from titles where type = "business"
start tran
delete from titles where type = "trad_cook"
rollback tran -- Entire transaction rolled back
commit tran -- This statement has no effect
commit tran -- This statement has no effect
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
143
02/03/2022
Transacciones y el registro de transacciones
▪ El registro de transacciones almacena los efectos de
cada insert, update y delete
▪ El sistema utiliza el registro de transacciones para
rehacer las transacciones que se reversaron
▪ Se registra el comienzo de una transacción, los
commits y rollbacks
▪ Si un servidor falla durante una transacción, no hay registro
de un rollback o commit
▪ Durante la recuperación (recovery), las modificaciones en
transacciones sin un registro de rollback o commit no
tendrán efecto. Si las modificaciones fueron grabadas en
disco, se revertirán.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
144
02/03/2022
Modo de transacción
▪ Un modo de transacción especifica cómo el
servidor debe definir las transacciones
▪ Dos modos de transacción
▪ Unchained
▪ Chained
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
145
02/03/2022
Modo unchained
▪ En modo unchained, se requiere explícitamente de una
sentencia start tran
▪ También se requiere de commit tran o rollback tran
explícitos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
146
02/03/2022
Ejemplo de modo Unchained
set chained off
start tran
delete salesdetail
where stor_id = "5023"
and ord_num = "AB-123-DEF-425-1Z3"
if @@error <> 0
begin
rollback tran
return
end
delete sales
where stor_id = "5023"
and ord_num = "AB-123-DEF-425-1Z3"
if @@error <> 0
begin
rollback tran
return
end
commit tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
147
02/03/2022
Modo chained
▪ En modo chained, el servidor ejecuta un start implícito
antes de:
▪ Sentencias DML– insert, update, delete, select
▪ Sentencias de Cursor– open, fetch
▪ Se requiere de commit tran o rollback tran explícitos
▪ Este modo es ANSI compliant
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
148
02/03/2022
Ejemplo de modo chained
set chained on
-- The server executes an implicit begin tran before
-- the next statement.
delete salesdetail
where stor_id = "5023"
and ord_num = "AB-123-DEF-425-1Z3"
if @@error <> 0
begin
rollback tran
return
end
delete sales
where stor_id = "5023"
and ord_num = "AB-123-DEF-425-1Z3"
if @@error <> 0
begin
rollback tran
return
end
commit tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
149
02/03/2022
Ejemplo
start tran
insert sales values
("5023", "AB-123-DEF-425-1Z3", "Oct 31 1985")
if @@error <> 0
begin
rollback transaction
return
end
insert salesdetail values
("5023", "AB-123-DEF-425-1Z3", "TC4203",
2500, 60.5)
if @@error <> 0
begin
rollback transaction
return
end
commit transaction
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
150
02/03/2022
Ejemplo
start tran
update publishers
set pub_id = "9999"
where pub_id = "9988"
/* check for system error or no rows affected
*/
if @@error <> 0 or @@rowcount <> 1
begin
rollback tran /* Rollback to begin
tran*/
return
end
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
151
02/03/2022
update titles
set pub_id = "9999" -- cascade change to titles
where pub_id = "9988"
if @@error <> 0
begin
rollback tran /* Rollback both updates*/
return
end
/* You might not check @@rowcount for the
** update to the titles table because a publisher
** may not have any titles associated with it.
** A message sent by a print or raiserror
** statement may be used to advise the user that
** no rows were modified in titles. */
commit tran
Ejemplo
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
152
02/03/2022
Ejemplo
• Batch que contiene transacción:
declare @err int, @rows int
start tran
update publishers
set pub_id = "x999"
where pub_id = "0736"
select @err = @@error, @rows = @@rowcount
if @err <> 0
begin
rollback tran
raiserror 31001, "0736"
return
end
if @rows = 0
begin
rollback tran
raiserror 35001, "publishers"
return
end
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
153
02/03/2022
Ejemplo
update titles -- cascade change to titles
set pub_id = "x999"
where pub_id = "0736"
select @err = @@error
if @err <> 0
begin
rollback tran
raiserror 31002, "0736"
return
end
commit tran
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
154
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Agrupación
▪ Consultas multitablas
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
155
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
156
02/03/2022
Esquema de ejemplos - DB Employees
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
157
02/03/2022
Esquema de ejemplos - DB Employees
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
158
02/03/2022
Esquema de ejemplos - DB Employees
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
159
02/03/2022
Tablas para Ejemplos - Employee
CREATE TABLE EMPLOYEE
(EMPNO CHARACTER(6) PRIMARY KEY
,FIRSTNME VARCHAR(12) NOT NULL
,MIDINIT CHARACTER(1)
,LASTNAME VARCHAR(15) NOT NULL
,WORKDEPT CHARACTER(3)
,PHONENO CHARACTER(4)
,HIREDATE DATE
,JOB CHARACTER(8)
,EDLEVEL SMALLINT NOT NULL
,SEX CHARACTER(1)
,BIRTHDATE DATE
,SALARY DECIMAL(9,2)
,BONUS DECIMAL(9,2)
,COMM DECIMAL(9,2))
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
160
02/03/2022
Tablas para Ejemplos - Employee
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
161
02/03/2022
Tablas para Ejemplos - Department
CREATE TABLE DEPARTMENT
(DEPTNO CHARACTER(3) PRIMARY KEY
,DEPTNAME VARCHAR(36) NOT NULL
,MGRNO CHARACTER(6)
,ADMRDEPT CHARACTER(3) NOT NULL
,LOCATION CHARACTER(16));
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
162
02/03/2022
Tablas para Ejemplos - Project
CREATE TABLE `DEPARTMENT` (
`DEPTNO` char(3) NOT NULL,
`DEPTNAME` varchar(36) NOT NULL,
`MGRNO` char(6) DEFAULT NULL,
`ADMRDEPT` char(3) NOT NULL,
`LOCATION` char(16) DEFAULT NULL);
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
163
02/03/2022
Proyección de algunas columnas
DEPTNAME ADMRDEPT
DEPTNO
SPIFFY COMPUTER SERVICE DIV.
PLANNING
INFORMATION CENTER
DEVELOPMENTCENTER
MANUFACTURING SYSTEMS
ADMINISTRATION SYSTEMS
SUPPORT SERVICES
OPERATIONS
SOFTWARE SUPPORT
A00
A00
A00
A00
D01
D01
A00
E01
E01
A00
B01
C01
D01
D11
D21
E01
E11
E21
SELECT DEPTNO, DEPTNAME, ADMRDEPT
FROM DEPARTMENT
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
164
02/03/2022
Eliminación de filas duplicadas
▪ SQL permite duplicados en el resultado
▪ Para eliminar las tuplas repetidas se utiliza la cláusula DISTINCT.
▪ También es posible pedir explícitamente la inclusión de filas repetidas
mediante el uso de la cláusula ALL.
ADMRDEPT
A00
A00
A00
A00
D01
D01
A00
E01
E01
SELECT ADMRDEPT
FROM DEPARTMENT
ADMRDEPT
A00
D01
E01
SELECT DISTINCT ADMRDEPT
FROM DEPARTMENT
SELECT ALL ADMRDEPT
FROM DEPARTMENT
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
165
02/03/2022
Eliminación de filas duplicadas
▪ ¿Qué trabajos realiza cada departamento?
WORKDEPT
A00
A00
A00
B01
C01
C01
D11
D11
D21
D21
E01
E11
E11
E21
E21
JOB
CLERK
PRES
SALESREP
MANAGER
ANALYST
MANAGER
DESIGNER
MANAGER
CLERK
MANAGER
MANAGER
MANAGER
OPERATOR
FIELDREP
MANAGER
SELECT DISTINCT WORKDEPT, JOB
FROM EMPLOYEE
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
166
02/03/2022
Proyección de todos los atributos
▪ Se puede pedir la proyección de todos los atributos de
la consulta mediante utilizando el símbolo '*'
▪ La tabla resultante contendrá todos los atributos de las
tablas que aparecen en la cláusula FROM.
SELECT * FROM DEPARTMENT
SPIFFY COMPUTER SERVICE DIV.
PLANNING
INFORMATION CENTER
DEVELOPMENTCENTER
MANUFACTURING SYSTEMS
ADMINISTRATION SYSTEMS
SUPPORT SERVICES
OPERATIONS
SOFTWARE SUPPORT
DEPTNAME ADMRDEPT LOCATION
MGRNO
DEPTNO
A00
A00
A00
A00
D01
D01
A00
E01
E01
000010
000020
000030
- - - - - -
000060
000070
000050
000090
000100
A00
B01
C01
D01
D11
D21
E01
E11
E21
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
167
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Consultas multitablas
▪ Agrupación
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
168
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
169
02/03/2022
Salida ordenada
▪ SQL permite controlar el orden en el que se presentan las tuplas
de una relación mediante la cláusula ORDER BY.
▪ La cláusula ORDER BY tiene la forma
ORDER BY A1 <DIRECCION>, ..., An <DIRECCION>
▪ A1, ..., An son atributos de la relación resultante de la consulta
▪ Ai <DIRECCION> controla si la ordenación es Ascendente 'ASC' o
descendente 'DESC' por el campo Ai. Por defecto la ordenación se
realiza de manera ascendente.
▪ La ordenación se realiza tras haber ejecutado la consulta sobre
las tuplas resultantes.
▪ La ordenación puede convertirse en una operación costosa
dependiendo del tamaño de la relación resultante.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
170
02/03/2022
Salida ordenada (cont.)
SELECT DEPTNO, DEPTNAME, ADMRDEPT
FROM DEPARTMENT
ORDER BY ADMRDEPT ASC
SPIFFY COMPUTER SERVICE DIV.
INFORMATION CENTER
PLANNING
SUPPORTSERVICES
DEVELOPMENTCENTER
MANUFACTURING SYSTEMS
ADMINISTRATION SYSTEMS
SOFTWARE SUPPORT
OPERATIONS
DEPTNAME ADMRDEPT
DEPTNO
A00
A00
A00
A00
A00
D01
D01
E01
E01
A00
C01
B01
E01
D01
D11
D21
E21
E11
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
171
02/03/2022
Salida ordenada (cont.)
SELECT DEPTNO, DEPTNAME, ADMRDEPT
FROM DEPARTMENT
ORDER BY ADMRDEPT ASC, DEPTNO DESC
SUPPORT SERVICES
DEVELOPMENT CENTER
INFORMATION CENTER
PLANNING
SPIFFY COMPUTER SERVICE DIV.
ADMINISTRATION SYSTEMS
MANUFACTURING SYSTEMS
SOFTWARE SUPPORT
OPERATIONS
DEPTNAME DEPTNO
ADMRDEPT
A00
A00
A00
A00
A00
D01
D01
E01
E01
E01
D01
C01
B01
A00
D21
D11
E21
E11
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
172
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Consultas multitablas
▪ Agrupación
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
173
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
174
02/03/2022
Selección de filas
▪ La cláusula WHERE permite filtrar las filas de la relación
resultante.
▪ La condición de filtrado se especifica como un predicado.
▪ El predicado de la cláusula WHERE puede ser simple o complejo
▪ Se utilizan los conectores lógicos AND (conjunción), OR (disyunción) y
NOT (negación)
▪ Las expresiones pueden contener
▪ Predicados de comparación
▪ BETWEEN / NOT BETWEEN
▪ IN / NOT IN (con y sin subconsultas)
▪ LIKE / NOT LIKE
▪ IS NULL / IS NOT NULL
▪ ALL, SOME/ANY (subconsultas)
▪ EXISTS (subconsultas)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
175
02/03/2022
Selección de filas (cont.)
▪ Predicados de comparación
▪ Operadores: =, <> (es el ≠), <, <=, >=. >
▪ BETWEEN Op1 AND Op2
▪ Es el operador de comparación para intervalos de valores o
fechas.
▪ IN es el operador que permite comprobar si un valor
se encuentra en un conjunto.
▪ Puede especificarse un conjunto de valores (Val1,
Val2, …)
▪ Puede utilizarse el resultado de otra consulta SELECT.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
176
02/03/2022
Selección de filas (cont.)
▪ LIKE es el operador de comparación de cadenas de
caracteres.
▪ SQL distingue entre mayúsculas y minúsculas
▪ Las cadenas de caracteres se incluyen entre comillas
simples
▪ SQL permite definir patrones a través de los siguientes
caracteres:
▪ '%', que es equivalente a "cualquier subcadena de caracteres"
▪ '_', que es equivalente a "cualquier carácter"
▪ IS NULL es el operador de comparación de valores
nulos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
177
02/03/2022
Ejemplo de selección de filas
▪ ¿Qué departamentos informan al A00?
SELECT DEPTNO, ADMRDEPT
FROM DEPARTMENT
WHERE ADMRDEPT='A00'
DEPTNO ADMRDEPT
A00
B01
C01
D01
E01
A00
A00
A00
A00
A00
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
178
02/03/2022
Ejemplo de selección de filas
▪ Necesito el apellido y el nivel de formación de los
empleados cuyo nivel de formación es mayor o
igual a 19
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
WHERE EDLEVEL >= 19
EDLEVEL
LASTNAME
KWAN
LUCCHESSI
20
19
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
179
02/03/2022
Ejemplo de selección de filas
▪ Necesito el número de empleado, apellido y fecha de
nacimiento de aquellos que hayan nacido después del 1 de
enero de 1955 (inclusive).
SELECT EMPNO, LASTNAME, BIRTHDATE
FROM EMPLOYEE
WHERE BIRTHDATE >='1955-01-01'
ORDER BY BIRTHDATE
BIRTHDATE
EMPNO
000160
000100
LASTNAME
PIANKA
SPENCER
1955-04-12
1956-12-18
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
180
02/03/2022
Múltiples condiciones - AND
▪ Necesito el número de empleado, el trabajo y el
nivel de formación de los analistas con un nivel de
educación 16
SELECT EMPNO, JOB, EDLEVEL
FROM EMPLOYEE
WHERE JOB='ANALYST' AND EDLEVEL=16
EMPNO JOB EDLEVEL
000130 ANALYST 16
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
181
02/03/2022
Múltiples condiciones – AND/OR
▪ Obtener el número de empleado, el trabajo y el nivel de
formación de todos los analistas con un nivel 16 y de todos
los empleados de nivel 18. La salida se ordena por trabajo
y nivel SELECT EMPNO, JOB, EDLEVEL
FROM EMPLOYEE
WHERE (JOB='ANALYST' AND EDLEVEL=16)
OR EDLEVEL=18
ORDER BY JOB, EDLEVEL
EMPNO JOB EDLEVEL
000130
000140
000220
000020
000010
ANALYST
ANALYST
DESIGNER
MANAGER
PRES
16
18
18
18
18
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
182
02/03/2022
SELECT con BETWEEN
▪ Obtener el número de empleado y el nivel de todos
los empleados con un nivel entre 12 y 15
SELECT EMPNO, EDLEVEL
FROM EMPLOYEE
WHERE EDLEVEL BETWEEN 12 AND 15
ORDER BY EDLEVEL
000250
EMPNO EDLEVEL
000310
000290
000300
000330
000100
000230
000120
000270
12
12
14
14
14
14
14
15
15
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
183
02/03/2022
SELECT con IN
▪ Listar los apellidos y nivel de formación de todos los
empleados de nivel 14, 19 o 20.
▪ El resultado clasificado por nivel y apellido
SELECT LASTNAME, EDLEVEL
FROM EMPLOYEE
WHERE EDLEVEL IN (14, 19, 20)
ORDER BY EDLEVEL, LASTNAME
LASTNAME EDLEVEL
JEFFERSON
LEE
O'CONNELL
SMITH
SPENSER
LUCCHESI
KWAN
14
14
14
14
14
19
20
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
184
02/03/2022
Búsqueda parcial - LIKE
▪ Obtener el apellido de todos los empleados cuyo
apellido empiece por G
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE 'G%';
LASTNAME
GEYER
GOUNOT
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
185
02/03/2022
Búsqueda parcial – LIKE
Ejemplos con %
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE '%SON';
THOMPSON
HENDERSON
ADAMSON
JEFFERSON
JOHNSON
THOMPSON
ADAMSON
MARINO
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE '%M%N%';
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
186
02/03/2022
Búsqueda parcial – LIKE
Ejemplos con _
▪ ¿Qué empleados tienen una C como segunda letra
de su apellido?
SELECT LASTNAME
FROM EMPLOYEE
WHERE LASTNAME LIKE '_C%';
LASTNAME
SCOUTTEN
SCHNEIDER
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
187
02/03/2022
Búsqueda parcial – NOT LIKE
▪ Necesito todos los departamentos excepto aquellos
cuyo número NO empiece por 'D'
SELECT DEPTNO, DEPTNAME
FROM DEPARTMENT
WHERE DEPTNO NOT LIKE 'D%';
DEPTNAME
DEPTNO
SPIFFY COMPUTER SERVICE DIV.
PLANNING
INFORMATION CENTER
SUPPORT SERVICES
OPERATIONS
SOFTWARE SUPPORT
A00
B01
C01
E01
E11
E21
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
188
02/03/2022
Expresiones y renombramiento de columnas
SELECT EMPNO, SALARY, COMM,
SALARY+COMM AS INCOME
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
SALARY COMM INCOME
EMPNO
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
1462.00
1534.00
1380.00
1227.00
1420.00
1272.00
1596.00
19732.00
20714.00
18630.00
16567.00
19170.00
17172.00
21546.00
000210
000250
000260
000290
000300
000310
000320
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
189
02/03/2022
Renombramiento de tablas
▪ Es posible obtener “copias” de una tabla situando etiquetas
junto al nombre de las tablas.
▪ Ejemplo: en el siguiente esquema de base de datos,
queremos obtener el nombre de los empleados con al menos
dos hijos.
EMP (DNI, NOM) HIJOS (DNI, NOMH)
▪ Realiza el producto cartesiano de las tres tablas y da como
resultado aquellas tuplas con igual DNI en las tres y con
distinto nombre en los hijos. ¿Solución a la repetición de
nombres de distintos empleados?
SELECT NOM
FROM EMP, HIJOS H1, HIJOS H2
WHERE EMP.DNI = H1.DNI AND EMP.DNI = H2.DNI AND
H1.NOMH <> H2.NOMH;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
190
02/03/2022
Renombramiento de tablas
(cont.)
▪ Utilizar clausula DISTINCT (elimina filas repetidas) e
incluir la clave de la tabla:
▪ Ejemplo: en el siguiente esquema de base de datos, se
piden los apellidos de cada empleado y de su supervisor.
▪ EMP (DNI, NOM, AP, SUELDO, ND, DNISUPERV)
▪ Las etiquetas también sirven para desambiguar.
SELECT DISTINCT EMP.NOM, EMP.DNI
FROM EMP, HIJOS H1, HIJOS H2
WHERE EMP.DNI = H1.DNI AND EMP.DNI = H2.DNI AND
H1.NOMH <> H2.NOMH;
SELECT E.AP, S.AP
FROM EMP E, EMP S
WHERE E.DNISUPERV = S.DNI;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
191
02/03/2022
Tipos SQL y valores literales
▪ La norma SQL define un conjunto de tipos para las
columnas de las tablas.
▪ Habitualmente cada SGBD tiene tipos propios o
particularidades para los tipos de la norma SQL.
▪ Es necesario consultar el manual del SGBD para
obtener información acerca de los tamaños máximos
de almacenamiento.
▪ En el caso de cadenas, cual es la longitud máxima de
almacenamiento.
▪ En el caso de tipos numéricos, cual es el rango de valores
posibles.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
192
02/03/2022
Tipos SQL y valores literales
Tipo Ejemplo
BIGINT 8589934592
INTEGER 186282
SMALLINT 186
NUMERIC(8,2) 999999.99 (precisión, escala)
DECIMAL(8,2) 999999.99 (precisión, escala)
REAL 6.02257E23
DOUBLE PRECISION 3.141592653589
FLOAT 6.02257E23
CHARACTER(max) 'GREECE ' (15 caracteres)
VARCHAR(n) 'hola'
DATE date 'YYYY-MM-DD'
TIME time 'hh:mm:ss.ccc'
TIMESTAMP timestamp 'YYYY-MM-DD hh:mm:ss.ccc'
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
193
02/03/2022
Expresiones
▪ Aunque SQL no es un lenguaje de programación de
propósito general, permite definir expresiones calculadas.
▪ Estas expresiones pueden contener
▪ Referencias a columnas
▪ Valores literales
▪ Operadores aritméticos
▪ Llamadas a funciones
▪ Los operadores aritméticos son los habituales: +, -, * y /
▪ Estos operadores sólo funcionan con valores numéricos.
▪ Los operadores '+' y '–' habitualmente funcionan para fechas.
▪ Aunque las normas SQL definen un conjunto mínimo de
funciones, los SGBD proporcionan una gran variedad.
▪ Es necesario consultar el manual del SGBD particular.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
194
02/03/2022
Funciones matemáticas
comunes
Descripción IBM DB2
SQL
Server
Oracle MySQL
Valor absoluto ABSs ABS ABS ABS
Menor entero >= valor CEIL CEILING CEIL CEILING
Menor entero <= valor FLOOR FLOOR FLOOR FLOOR
Potencia POWER POWER POWER POWER
Redondeo a un número
de cifras decimales
ROUND ROUND ROUND ROUND
Módulo MOD. % MOD. %
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
195
02/03/2022
Funciones de cadena
Descripción IBM DB2 SQL Server Oracle MySQL
Convierte todos los caracteres a
minúsculas
LOWER LOWER LOWER LOWER
Convierte todos los caracteres a
mayúsculas
UPPER UPPER UPPER UPPER
Elimina los blancos del final de la
cadena
RTRIM RTRIM RTRIM RTRIM
Elimina los blancos del comienzo
de la cadena
LTRIM LTRIM LTRIM LTRIM
Devuelve una subcadena SUBSTR SUBSTRING SUBSTR SUBSTRING
Concatena dos cadenas CONCAT + CONCAT CONCAT
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
196
02/03/2022
Operaciones aritméticas
▪ Necesito obtener el salario, la comisión y los ingresos
totales de todos los empleados que tengan un salario
menor de 20000€ , clasificado por número de empleado
SELECT EMPNO, SALARY, COMM,
SALARY + COMM
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
1462.00
1534.00
1380.00
1227.00
1420.00
1272.00
1596.00
19732.00
20714.00
18630.00
16567.00
19170.00
17172.00
21546.00
SALARY COMM
EMPNO
000210
000250
000260
000290
000300
000310
000320
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
197
02/03/2022
Operaciones aritméticas
(cont.) SELECT EMPNO, SALARY,
SALARY*1.0375
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
SALARY
EMPNO
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
18955.125000
19899.250000
17896.875000
15915.250000
18415.625000
16496.250000
20698.125000
000210
000250
000260
000290
000300
000310
000320
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
198
02/03/2022
Expresiones en predicados
SELECT EMPNO, SALARY,
(COMM/SALARY)*100
FROM EMPLOYEE
WHERE (COMM/SALARY) * 100 > 8
ORDER BY EMPNO
SALARY
EMPNO
2274.00
1462.00
2301.00
2030.00
28420.00
18270.00
28760.00
25370.00
000140
000210
000240
000330
COMM
8.001400
8.002100
8.000600
8.001500
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
199
02/03/2022
Uso de funciones
SELECT EMPNO, SALARY,
TRUNCATE(SALARY*1.0375, 2)
FROM EMPLOYEE
WHERE SALARY < 20000
ORDER BY EMPNO
SALARY
EMPNO
18270.00
19180.00
17250.00
15340.00
17750.00
15900.00
19950.00
18955.12
19899.25
17896.87
15915.25
18415.62
16496.25
20698.12
000210
000250
000260
000290
000300
000310
000320
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
200
02/03/2022
Uso de funciones (cont.)
SELECT CONCAT(LASTNAME,' , ',FIRSTNAME ) AS NAME
FROM EMPLOYEE
WHERE WORKDEPT = 'A00'
ORDER BY NAME
NAME
HAAS, CHRISTA
LUCCHESI, VINCENZO
O'CONNELL, SEAN
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
201
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Consultas multitablas
▪ Agrupación
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
202
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
203
02/03/2022
Operadores de conjunto
▪ SQL incluye las operaciones:
▪ UNION
▪ INTERSECT
▪ EXCEPT (MINUS en Oracle)
▪ Por definición los operadores de conjunto eliminan
las tuplas duplicadas.
▪ Para retener duplicados se debe utilizar
<Operador> ALL
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
204
02/03/2022
Operadores de conjunto
Encuentre todos los clientes que tienen un préstamo, una cuenta o
ambos :
(select customer-name from depositor)
except
(select customer-name from borrower)
(select customer-name from depositor)
intersect
(select customer-name from borrower)
Encuentre todos los clientes que tienen una cuenta pero no un préstamo.
(select customer-name from depositor)
union
(select customer-name from borrower)
Encuentre todos los clientes que tienen un préstamo y una cuenta.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
205
02/03/2022
UNION
▪ Cada SELECT debe tener el mismo número de
columnas
▪ Las columnas correspondientes deben tener tipos
de datos compatibles
▪ UNION elimina duplicados
▪ Si se indica, el ORDER BY debe ser la última
cláusula de la sentencia
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
206
02/03/2022
UNION
Mgr.:
Dept.:
Mgr.:
Dept.:
Mgr.:
Dept.:
Mgr.:
Dept.:
HAAS
SPIFFY COMPUTER SERVICE DIV.
THOMPSON
PLANNING
KWAN
INFORMATION CENTER
GEYER
SUPPORT SERVICES
DEPTNAME
MGRNO
000010
000010
000020
000020
000030
000030
000050
000050
Cada entrada debe tener 2 lineas: la
primera debe incluir el número y
nombre del director y la seguna el
número y el nombre del
departamento.
SELECT MGRNO , 'Dept.:', DEPTNAME
FROM DEPARTMENT
UNION
SELECT MGRNO, 'Mgr.:', LASTNAME
FROM DEPARTMENT D, EMPLOYEE E
WHERE D.MGRNO = E.EMPNO
ORDER BY 1,2 DESC
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
207
02/03/2022
Consultar más de una tabla
EMPLOYEE
DEPTNAME
LASTNAME WORKDEPT
. . .
. . .
DEPARTMENT
EMPNO
DEPTNO
A00
C01
D01
D21
SPIFFY COMPUTER SERVICE DIV.
INFORMATION CENTER
DEVELOPMENT CENTER
ADMINISTRATION SYSTEMS
000010
000020
000030
000040
A00
C01
C01
D21
HAAS
THOMPSON
KWAN
PULASKI
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
208
02/03/2022
Sintaxis del JOIN: formato 1
HAAS
WORKDEPT DEPTNAME
LASTNAME
A00 SPIFFY COMPUTER SERVICE DIV.
000010
SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME
FROM EMPLOYEE,
DEPARTMENT
WHERE WORKDEPT = DEPTNO
AND LASTNAME = 'HAAS'
EMPNO
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
209
02/03/2022
JOIN de tres tablas
FIRSTNME LASTNAME
MIDINIT
DEPTNAME MGRNO
PROJNAME DEPTNO
. . .
DEPARTMENT
EMPLOYEE
EMPNO
DEPTNO
PROJNO
AD3100
AD3110
AD3111
AD3112
AD3113
IF1000
ADMIN SERVICES
GENERAL AD SYSTEMS
PAYROLL PROGRAMMING
PERSONELL PROGRAMMING
ACCOUNT. PROGRAMMING
QUERY SERVICES
D01
D21
D21
D21
D21
C01
A00
B01
C01
D01
D11
D21
E01
000010
000020
000030
- - - - - -
000060
000070
000050
SPIFFY COMPUTER SERVICE DIV.
PLANNING
INFORMATION CENTER
DEVELOPMENT CENTER
MANUFACTURING SYSTEMS
ADMINISTRATION SYSTEMS
SUPPORT SERVICES
HAAS
THOMPSON
KWAN
GEYER
STERN
PULASKI
HENDERSON
SPENSER
I
L
A
B
F
D
W
Q
CHRISTA
MICHAEL
SALLY
JOHN
IRVING
EVA
EILEEN
THEODORE
000010
000020
000030
000050
000060
000070
000090
000100
PROJECT
. . .
. . .
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
210
02/03/2022
JOIN de tres tablas
DEPTNO DEPTNAME MGRNO LASTNAME
PROJNO
D21
D21
D21
D21
ADMINISTRATION SYSTEMS
ADMINISTRATION SYSTEMS
ADMINISTRATION SYSTEMS
ADMINISTRATION SYSTEMS
000070
000070
000070
000070
PULASKI
PULASKI
PULASKI
PULASKI
AD3110
AD3111
AD3112
AD3113
SELECT PROJNO, PROJECT.DEPTNO, DEPTNAME, MGRNO, LASTNAME
FROM PROJECT,
DEPARTMENT,
EMPLOYEE
WHERE PROJECT.DEPTNO = DEPARTMENT.DEPTNO
AND DEPARTMENT.MGRNO = EMPLOYEE.EMPNO
AND DEPARTMENT.DEPTNO = 'D21'
ORDER BY PROJNO
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
211
02/03/2022
Nombre de correlación (P, D, E)
DEPTNO DEPTNAME MGRNO LASTNAME
PROJNO
D21
D21
D21
D21
ADMINISTRATION SYSTEMS
ADMINISTRATION SYSTEMS
ADMINISTRATION SYSTEMS
ADMINISTRATION SYSTEMS
000070
000070
000070
000070
PULASKI
PULASKI
PULASKI
PULASKI
AD3110
AD3111
AD3112
AD3113
SELECT PROJNO, P.DEPTNO, DEPTNAME, MGRNO, LASTNAME
FROM PROJECT P,
DEPARTMENT D,
EMPLOYEE E
WHERE P.DEPTNO = D.DEPTNO
AND D.MGRNO = E.EMPNO
AND D.DEPTNO = 'D21'
ORDER BY PROJNO
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
212
02/03/2022
JOIN de una tabla consigo misma
DEPTNAME ADMRDEPT
LASTNAME
LASTNAME
WORKDEPT
WORKDEPT
BIRTHDATE
BIRTHDATE
.
.
. . .
2. Recuperar el nº deparatamento de DEPARTMENT (D)
3. Recuperar el director en EMPLOYEE (M)
DEPTNO
EMPNO
EMPNO
000100
000330
SPENSER
LEE
E21
E21
1956-12-18
1941-07-18
E21 E21
.
.
000100
.
.
SOFTWARE SUPPORT
.
.
000100
000330
SPENSER
LEE
E21
E21
1956-12-18
1941-07-18
MGRNO
. . . . . .
. . . . . . . . .
1. Recuperar la fila de un empleado de la tabla EMPLOYEE (E)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
213
02/03/2022
JOIN de una tabla consigo misma
EMPNO LASTNAME BIRTHDATE EMPNO
LUCCHESI
QUINTANA
BROWN
JEFFERSON
SMITH
JOHNSON
SCHNEIDER
SMITH
SETRIGHT
MEHTA
LEE
GOUNOT
¿Qué empleados
son mayores que
su director? SELECT E.EMPNO, E.LASTNAME,
E.BIRTHDATE, M.BIRTHDATE, M.EMPNO
FROM EMPLOYEE E, EMPLOYEE M,
DEPARTMENT D
WHERE E.WORKDEPT = D.DEPTNO
AND D.MGRNO = M.EMPNO
AND E.BIRTHDATE < M.BIRTHDATE
000110
000130
000200
000230
000250
000260
000280
000300
000310
000320
000330
000340
1929-11-05
1925-09-15
1941-05-29
1935-05-30
1939-11-12
1936-10-05
1936-03-28
1936-10-27
1931-04-21
1932-08-11
1941-07-18
1926-05-17
000010
000030
000060
000070
000070
000070
000090
000090
000090
000100
000100
000100
1933-08-14
1941-05-11
1945-07-07
1953-05-26
1953-05-26
1953-05-26
1941-05-15
1941-05-15
1941-05-15
1956-12-18
1956-12-18
1956-12-18
BIRTHDATE
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
214
02/03/2022
Joined Relations**
▪ Join operations toma dos relaciones(tablas) y devuelve como
resultado otra relación.
▪ Estas operaciones adicionales se utilizan normalmente como
expresiones de subconsulta en la cláusula from
▪ Join condition – define qué tuplas en las dos relaciones
coinciden y qué atributos están presentes en el resultado del join.
▪ Join type – define cómo se tratan las tuplas de cada relación que
no coinciden con ninguna tupla de la otra relación (según la
condición del join).
Join Types
inner join
left outer join
right outer join
full outer join
Join Conditions
natural
on <predicate>
using (A1, A2, ..., An)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
215
02/03/2022
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
216
02/03/2022
Joined Relations – Esquema de Ejemplos
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
217
02/03/2022
Joined Relations – Tablas para ejemplos
▪ Nota: falta información del borrower para L-260 y falta información de loan
para L-155
amount
3000
4000
1700
branch-name
Downtown
Redwood
Perryridge
loan-number
L-170
L-230
L-260
loan (prestamos)
customer-name loan-number
Jones
Smith
Hayes
L-170
L-230
L-155
borrower (prestatario)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
218
02/03/2022
Joined Relations – Ejemplos
▪ Select * from loan inner join borrower on
loan.loan_number = borrower.loan_number
▪ Select * from loan left outer join borrower on
loan.loan_number = borrower.loan_number
branch-name amount
Downtown
Redwood
3000
4000
customer-name loan-number
Jones
Smith
L-170
L-230
loan-number
L-170
L-230
branch-name amount
Downtown
Redwood
Perryridge
3000
4000
1700
customer-name loan-number
Jones
Smith
null
L-170
L-230
null
loan-number
L-170
L-230
L-260
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
219
02/03/2022
Joined Relations – Natural join
En MySQL,
NATURAL JOIN es
una unión que realiza la
misma tarea que una
INNER o LEFT JOIN,
en la que la cláusula
ON o USING se refiere
a todas las columnas
que tienen en común
las tablas que se van a
unir.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
220
02/03/2022
Joined Relations – Ejemplos
▪ Select * from loan natural join borrower
▪ Select * from loan natural right outer join borrower
La combinación natural analiza todos los campos en común, no
solo uno. En general, es mejor evitar las uniones naturales, porque
"ocultan" información sobre lo que está haciendo la consulta y
pueden conducir fácilmente a errores/resultados inesperados.
branch-name amount
Downtown
Redwood
3000
4000
customer-name loan-number
Jones
Smith
L-170
L-230
loan-number
L-170
L-230
branch-name amount
Downtown
Redwood
null
3000
4000
null
customer-name
Jones
Smith
Hayes
loan-number
L-170
L-230
L-155
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
221
02/03/2022
Joined Relations – Ejemplos
▪ Select * from loan full outer join borrower using (loan_number)
▪ MySQL no ofrece sintaxis para una full outer join, pero se puede
implementar una mediante la unión de left join y right join.
▪ Dado que es probable que no se utilicen índices, espere que estos
resultados tomen mucho tiempo en tablas de cualquier tamaño
significativo.
Select * from loan left outer join borrower using (loan_number)
union
Select * from loan right outer join borrower using (loan_number)
branch-name amount
Downtown
Redwood
Perryridge
null
3000
4000
1700
null
customer-name
Jones
Smith
null
Hayes
loan-number
L-170
L-230
L-260
L-155
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
222
02/03/2022
Joined Relations – Ejemplos
▪ Encuentre todos los clientes que tienen una cuenta o un préstamo
(pero no ambos) en el banco.
select customer_name from
(select * from depositor natural left outer join borrower
union
select * from depositor natural right outer join borrower) as t
where t.account_number is null or t.loan_number is null
select customer_name
from (depositor natural full outer join borrower )
where account_number is null or loan_number is null
No soportado en MySql
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
223
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Consultas multitablas
▪ Agrupación
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
224
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
225
02/03/2022
Funciones de columna
▪ Las funciones de columna o funciones de agregación
son funciones que toman una colección (conjunto o
multiconjunto) de valores de entrada y devuelve un
solo valor.
▪ Las funciones de columna disponibles son: AVG, MIN,
MAX, SUM, COUNT.
▪ Los datos de entrada para SUM y AVG deben ser una
colección de números, pero el resto de operadores
pueden operar sobre colecciones de datos de tipo no
numérico.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
226
02/03/2022
Funciones de columna
▪ Por defecto las funciones se aplican a todas las tuplas
resultantes de la consulta.
▪ Podemos agrupar las tuplas resultantes para poder aplicar
las funciones de columna a grupos específicos utilizando la
cláusula GROUP BY.
▪ En la cláusula SELECT de consultas que utilizan funciones
de columna solamente pueden aparecer funciones de
columna.
▪ En caso de utilizar GROUP BY, también pueden aparecer
columnas utilizadas en la agrupación.
▪ Adicionalmente se pueden aplicar condiciones sobre los
grupos utilizando la cláusula HAVING.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
227
02/03/2022
Funciones de columna
▪ Cálculo del total → SUM (expresión)
▪ Cálculo de la media → AVG (expresión)
▪ Obtener el valor mínimo → MIN (expresión)
▪ Obtener el valor máximo → MAX (expresión)
▪ Contar el número de filas que satisfacen la condición
de búsqueda → COUNT(*)
▪ Los valores NULL SI se cuentan.
▪ Contar el número de valores distintos en una columna
→ COUNT (DISTINCT nombre-columna)
▪ Los valores NULL NO se cuenta.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
228
02/03/2022
Funciones de columna
AVG MIN MAX COUNT DEPT
SUM
27303.59375000 15340.00 52750.00 32 8
873715.00
SELECT SUM(SALARY) AS SUM,
AVG(SALARY) AS AVG,
MIN(SALARY ) AS MIN,
MAX(SALARY) AS MAX,
COUNT(*) AS COUNT,
COUNT(DISTINCT WORKDEPT) AS DEPT
FROM EMPLOYEE
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
229
02/03/2022
GROUP BY
SUM
WORKDEPT
A00
B01
C01
Necesito conocer los salarios de todos los
empleados de los departamentos A00, B01,
y C01. Además, para estos departamentos
quiero conocer su masa salarial.
SELECT WORKDEPT, SALARY
FROM EMPLOYEE
WHERE WORKDEPT IN ('A00', 'B01', 'C01')
ORDER BY WORKDEPT
SELECT WORKDEPT, SUM(SALARY) AS SUM
FROM EMPLOYEE
WHERE WORKDEPT IN ('A00', 'B01', 'C01')
GROUP BY WORKDEPT
ORDER BY WORKDEPT
128500.00
41250.00
90470.00
WORKDEPT
SALARY
A00
A00
A00
B01
C01
C01
C01
52750.00
46500.00
29250.00
41250.00
38250.00
23800.00
28420.00
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
230
02/03/2022
Función Descripción Ejemplo
COUNT() Retorna el numero de
registros del SELECT. Cuenta
el numero de filas agrupadas.
• SELECT COUNT(*) FROM clientes;
• SELECT COUNT(sucursal) , sexo
FROM clientes
GROUP BY sexo;
AVG() Retorna el promedio de los
valores de un campo
determinado. Calcula el valor
medio de todos los valores de
la columna indicada en ().
• SELECT AVG(numventas) FROM clientes;
• SELECT AVG(numventas) , sexo
FROM clientes
GROUP BY sexo;
MAX() Retorna el valor maximo de
un campo especificio.
• SELECT MAX(precio) FROM articulos;
• SELECT MAX(precio), codcat
FROM articulos
GROUP BY codcat;
MIN() Retorna el valor minimo de un
campo especificio.
• SELECT MIN(precio) FROM articulos;
• SELECT MIN(precio), codcat
FROM articulos
GROUP BY codcat;
Funciones de Agrupación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
231
02/03/2022
Función Descripción Ejemplo
SUM() Calcula la suma de los valores de una
columna.
• SELECT SUM(precio) FROM articulos;
• SELECT SUM(precio), codcat
FROM articulos
GROUP BY codcat;
STDDEV() Calcula la desviacion tipica de los
valores de la columna sin tener en
cuenta los valores nulos.
• SELECT STDDEV(precio) FROM articulos;
• SELECT codcat ,STDDEV(precio)
FROM articulos
GROUP BY codcat;
VARIANCE() Calcula la varianza de los valores de la
columna sin tener en cuenta los valores
nulos.
• SELECT VARIANCE(precio) FROM
articulos;
• SELECT VARIANCE(precio), codcat
FROM articulos
GROUP BY codcat;
Funciones de Agrupación
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
232
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Consultas multitablas
▪ Agrupación
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
233
02/03/2022
Estructura de la sentencia SELECT
- Nombres de las tablas / vistas
- Condiciones (filtros) de selección de filas
- Nombre de las columnas
- Condiciones de selección de grupo
- Nombres de columnas
SELECT A1, …, An
FROM T1, …, Tn
WHERE P
GROUP BY Ai1, …, Ain
HAVING Q
ORDER BY Aj1, …, Ajn
-Describe la salida deseada con:
•Nombres de columnas
•Expresiones aritméticas
•Literales
•Funciones escalares
•Funciones de columna
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
234
02/03/2022
GROUP BY-HAVING
SUM
A00
C01
Ahora sólo quiero ver los departamentos
cuya masa salarial sea superior a 50000
SELECT WORKDEPT, SUM(SALARY) AS SUM
FROM EMPLOYEE
WHERE WORKDEPT IN ('A00', 'B01', 'C01')
GROUP BY WORKDEPT
HAVING SUM(SALARY) > 50000
ORDER BY WORKDEPT
128500.00
90470.00
WORKDEPT
SELECT WORKDEPT, SUM(SALARY) AS SUM
FROM EMPLOYEE
WHERE WORKDEPT IN ('A00', 'B01', 'C01')
GROUP BY WORKDEPT
ORDER BY WORKDEPT
SUM
A00
B01
C01
128500.00
41250.00
90470.00
WORKDEPT
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
235
02/03/2022
GROUP BY-HAVING
CLERK
PRES
SALESREP
ANALYST
29250.00000000
52750.00000000
46500.00000000
26110.00000000
JOB AVG
WORKDEPT
A00
A00
A00
C01
Necesito, agrupado por departmento, los
trabajadores que no sean managers,
designer, y fieldrep, con una media de
salario mayor que 25000€.
SELECT WORKDEPT, JOB,
AVG(SALARY) AS AVG
FROM EMPLOYEE
WHERE JOB NOT IN ('MANAGER', 'DESIGNER', 'FIELDREP')
GROUP BY WORKDEPT, JOB
HAVING AVG(SALARY) > 25000
ORDER BY WORKDEPT, JOB
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
236
02/03/2022
GROUP BY-HAVING
1
1
3
3
4
5
6
9
3
3
4
5
6
9
NUMB
NUMB
WORKDEPT
WORKDEPT
SELECT 1 SELECT 2
B01
E01
A00
C01
E21
E11
D21
D11
A00
C01
E21
E11
D21
D11
SELECT WORKDEPT, COUNT(* ) AS NUMB
FROM EMPLOYEE
GROUP BY WORKDEPT
ORDER BY NUMB, WORKDEPT
SELECT WORKDEPT, COUNT(* ) AS NUMB
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING COUNT(*) > 1
ORDER BY NUMB, WORKDEPT
Mostrar los departamentos con más de un empleado
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
237
02/03/2022
GROUP BY-HAVING
14
15
15
16
16
17
18
18
15
16
17
27
31
22
49
24
35
24
23
31
49
35
ED
ED
YEARS
YEARS
WORKDEPT
WORKDEPT
SELECT 1
SELECT 2
E11
E21
D21
E01
D11
A00
B01
C01
E21
E01
A00
SELECT WORKDEPT, AVG(EDLEVEL) AS ED,
AVG(YEAR(CURRENT_DATE-HIREDATE))
AS YEARS
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING AVG(YEAR(CURRENT_DATE-HIREDATE)) > = 30
ORDER BY 2
SELECT WORKDEPT, AVG(EDLEVEL) AS ED,
AVG(YEAR(CURRENT_DATE-HIREDATE))
AS YEARS
FROM EMPLOYEE
GROUP BY WORKDEPT
ORDER BY 2
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
238
02/03/2022
GROUP BY-HAVING
17
18
18
16
15
16
14
14
15
600.00
800.00
500.00
400.00
300.00
800.00
300.00
300.00
300.00
ED
ED
MIN
MIN
WORKDEPT
WORKDEPT
SELECT 1
SELECT 2
A00
B01
C01
D11
D21
E01
E11
E11
D21
SELECT WORKDEPT, AVG(EDLEVEL) AS ED,
MIN(BONUS) AS MIN
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING MIN(BONUS) = 300
ORDER BY 2
SELECT WORKDEPT, AVG(EDLEVEL) AS ED,
MIN(BONUS) AS MIN
FROM EMPLOYEE
GROUP BY WORKDEPT
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
239
02/03/2022
Ejecución de consultas SELECT
El orden de ejecución de una consulta es el siguiente:
1. Se aplica el predicado WHERE a las tuplas del producto
cartesiano/join/vista que hay en el FROM.
2. Las tuplas que satisfacen el predicado de WHERE son
colocadas en grupos siguiendo el patrón GROUP BY.
3. Se ejecutan la cláusula HAVING para cada grupo de tuplas
anterior.
4. Los grupos obtenidos tras aplicar HAVING son los que
serán procesados por SELECT, que calculará, en los
casos que se incluyan, las funciones de agregación que le
acompañan.
5. A las tuplas resultantes de los pasos anteriores se le aplica
la ordenación descrita en la cláusula ORDER BY.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
240
02/03/2022
Contenido
▪ Lenguaje de Definición de Datos
(DDL)
▪ Sentencia Create
▪ Sentencia Alter
▪ Sentencia Drop
▪ Sentencia Truncate.
▪ Sentencia Rename
▪ Lenguaje de Manipulación de
Datos (DML)
▪ Sentencia Insert
▪ Sentencia Delete
▪ Sentencia Update
▪ Sentencia Select
▪ Sentencia Merge
▪ Lenguaje de Control de Datos
(DCL)
▪ Sentencias Grant y Revoke
▪ Lenguaje de Control de
Transacciones (TCL)
▪ Propiedades ACID (Atomicidad,
Consistency, Isolation, Durability)
▪ Sentencias Commit, Rollback y
Savepoint
▪ Consultas SQL básicas
▪ Ordenación
▪ Filtros
▪ Consultas multitablas
▪ Agrupación
▪ Filtros de grupo
▪ Subconsultas
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
241
02/03/2022
Subconsultas anidadas
(Nested Subqueries)
▪ SQL proporciona un mecanismo para el
anidamiento de subconsultas.
▪ Un subquery es una expresión select-from-where
que está anidada(nested) dentro de otra consulta.
▪ Un uso común de las subconsultas es realizar
pruebas de pertenencia a conjuntos,
comparaciones de conjuntos y cardinalidad de
conjuntos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
242
02/03/2022
Tipos de subconsultas
1. Subconsulta de una sola fila: subconsulta que devuelve
resultados de una sola fila. Marcan el uso de operadores de
comparación de una sola fila, cuando se usan en condiciones
WHERE.
2. Subconsulta de varias filas: subconsulta que devuelve una
salida de varias filas. Hacen uso de múltiples operadores de
comparación de filas como IN, ANY, ALL. También puede haber
subconsultas que devuelvan varias columnas.
3. Subconsulta correlacionada: las subconsultas correlacionadas
dependen de los datos proporcionados por la consulta externa.
Este tipo de subconsulta también incluye subconsultas que usan
el operador EXISTS para probar la existencia de filas de datos
que cumplen criterios específicos.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
243
02/03/2022
1) Subconsulta de una sola fila
▪ Se utiliza una subconsulta de una sola fila cuando los resultados
de la consulta externa se basan en un único valor desconocido.
▪ Aunque este tipo de consulta se denomina formalmente "fila
única", el nombre implica que la consulta devuelve varias
columnas, pero solo una fila de resultados. Sin embargo, una
subconsulta de una sola fila puede devolver solo una fila de
resultados que consta de una sola columna para la consulta
externa.
▪ En la siguiente consulta SELECT, el SQL interno devuelve solo
una fila, es decir, el salario mínimo de la empresa. A su vez, utiliza
este valor para comparar el salario de todos los empleados y
muestra solo aquellos cuyo salario es igual al salario mínimo.
SELECT FIRSTNAME, SALARY, WORKDEPT
FROM EMPLOYEE
WHERE SALARY =
(SELECT MIN(SALARY) FROM EMPLOYEE);
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
244
02/03/2022
1) Subconsulta de una sola fila
▪ Una cláusula HAVING se usa cuando los resultados
del grupo de una consulta deben restringirse en función
de alguna condición.
▪ Si el resultado de una subconsulta debe compararse
con una función de grupo, debe anidar la consulta
interna en la cláusula HAVING de la consulta externa.
SELECT WORKDEPT, MIN(SALARY)
FROM EMPLOYEE
GROUP BY WORKDEPT
HAVING MIN(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
245
02/03/2022
2) Subconsulta de varias filas
▪ Las subconsultas de varias filas son consultas anidadas que
pueden devolver más de una fila de resultados a la consulta
principal. Las subconsultas de varias filas se utilizan con
mayor frecuencia en las cláusulas WHERE y HAVING.
▪ Dado que devuelve varias filas, debe ser manejado por
operadores de comparación de conjuntos (IN, ALL, ANY).
▪ El operador IN tiene el mismo significado que se discutió
anteriormente
▪ El operador ANY compara un valor específico con cada valor
devuelto por la subconsulta
▪ El operador ALL compara un valor con cada valor devuelto por
una subconsulta.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
246
02/03/2022
2) Subconsulta de varias filas
SPIFFY COMPUTER SERVICE
SPIFFY COMPUTER SERVICE
PLANNING
INFORMATION CENTER
DEPTNAME
DEPTNAME
DEPTNO
DEPTNO
Tabla DEPARTMENT
Resultado final
A00
B01
C01
D01
D11
D21
E01
E11
E21
A00
B01
C01
SELECT DEPTNO, DEPTNAME
FROM DEPARTMENT
WHERE DEPTNO NOT IN (SELECT DEPTNO
FROM PROJECT)
. . . . . .
Resultado subconsulta
¿Qué departamentos no
tienen proyectos
asignados?
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
247
02/03/2022
2) Subconsulta de varias filas
Clausula any/some
F <comp> any r   t  r s.t. (F <comp> t)
Donde <comp> puede ser:    = 
0
5
6
(5< any ) = true
0
5
0
) = false
5
0
5
(5  any ) = true (dado que 0  5)
(se lee como: 5 < alguna tupla en la relación)
(5< any
) = true
(5 = any
(= any)  in
Sin embargo, ( any)  not in
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
248
02/03/2022
2) Subconsulta de varias filas
Clausula all
F <comp> all r   t  r (F <comp> t)
0
5
6
(5< all ) = false
6
10
4
) = true
5
4
6
(5  all ) = true (dado que 5  4 y 5  6)
(5< all
) = false
(5 = all
( all)  not in
Sin embargo, (= all)  in
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
249
02/03/2022
2) Subconsulta de varias filas
Uso de operadores de varias filas
▪ [> ALL] Más que el valor más alto devuelto por la
subconsulta
▪ [< ALL] Menos que el valor más bajo devuelto por la
subconsulta
▪ [< ANY] Menos que el valor más alto devuelto por la
subconsulta
▪ [> ANY] Más que el valor más bajo devuelto por la
subconsulta
▪ [= ANY] Igual a cualquier valor devuelto por la subconsulta
(igual que IN)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
250
02/03/2022
2) Subconsulta de varias filas
▪ La siguiente consulta muestra el error cuando la
subconsulta de una sola fila devuelve varias filas.
SELECT FIRSTNAME,WORKDEPT
FROM EMPLOYEE
WHERE WORKDEPT =
(SELECT DEPTNO
FROM DEPARTMENT
WHERE MGRNO<>NULL)
WORKDEPT = (select * ERROR at line 4: ORA-01427:
single-row subquery returns more than one row
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
251
02/03/2022
2) Subconsulta de varias filas
▪ El SQL anterior se puede reescribir usando el operador IN como
se muestra a continuación.
▪ Tenga en cuenta que en la consulta anterior, IN coincide con los
ID de departamento devueltos por la subconsulta, lo compara con
el de la consulta principal y devuelve el nombre del empleado que
cumple la condición.
▪ Una combinación join sería una mejor solución para la consulta
anterior, pero con fines ilustrativos, se ha utilizado una
subconsulta en ella.
SELECT FIRSTNAME,WORKDEPT
FROM EMPLOYEE
WHERE WORKDEPT IN
(SELECT DEPTNO
FROM DEPARTMENT
WHERE MGRNO<>NULL)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
252
02/03/2022
2) Subconsulta de varias filas
▪ Encuentre todos los clientes que tienen una cuenta y un
préstamo en el banco.
▪ Encuentre todos los clientes que tienen un préstamo en el
banco pero no tienen una cuenta en el banco
select distinct customer_name
from borrower
where customer_name not in (select customer_name
from depositor )
select distinct customer_name
from borrower
where customer_name in (select customer_name
from depositor )
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
253
02/03/2022
3) Subconsulta correlacionada
▪ A diferencia de una subconsulta normal, en la que la
consulta externa depende de los valores
proporcionados por la consulta interna, una
subconsulta correlacionada es aquella en la que la
consulta interna depende de los valores
proporcionados por la consulta externa.
▪ Esto significa que en una subconsulta correlacionada, la
consulta interna se ejecuta repetidamente, una vez por cada
fila que podría seleccionar la consulta externa.
▪ Las subconsultas correlacionadas pueden producir
tablas de resultados que respondan preguntas de
gestión complejas.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
254
02/03/2022
3) Subconsulta correlacionada
▪ Considere la siguiente consulta SELECT. A diferencia de las
subconsultas consideradas anteriormente, la subconsulta en
esta declaración SELECT no se puede resolver
independientemente de la consulta principal.
▪ Observe que la consulta externa especifica que las filas se
seleccionan de la tabla de empleados con un nombre de
alias E.
▪ La consulta interna compara la columna de Código de
departamento de la tabla de empleados con alias T con la
misma columna para el nombre de tabla de alias E.
SELECT E.EMPNO ,E.SALARY,E.WORKDEPT
FROM EMPLOYEE E
WHERE E.SALARY> (SELECT AVG(T.SALARY)
FROM EMPLOYEE T
WHERE E.WORKDEPT=T.WORKDEPT)
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
255
02/03/2022
3) Subconsulta correlacionada
usando la cláusula With
▪ Encuentre todas las sucursales donde el depósito total de
la cuenta es mayor que el promedio de los depósitos
totales de la cuenta en todas las sucursales.
with branch_total (branch_name, value) as
select branch_name, sum (balance)
from account
group by branch_name
with branch_total_avg (value) as
select avg (value)
from branch_total
select branch_name
from branch_total, branch_total_avg
where branch_total.value >= branch_total_avg.value
https://dev.mysql.com/doc/refman/8.0/en/with.html
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
256
02/03/2022
4) Subconsulta de varias columnas
▪ Una subconsulta de varias columnas devuelve más de una
columna a la consulta externa y se puede enumerar en la
cláusula FROM, WHERE o HAVING de la consulta externa.
▪ Por ejemplo, la siguiente consulta muestra los detalles
históricos del empleado cuyo salario actual está en el rango
de 1000 y 2000 y que trabajan en el departamento 10 o 20.
SELECT first_name, job_id, salary
FROM emp_history
WHERE (salary, department_id) in (SELECT salary, department_id
FROM employees
WHERE salary BETWEEN 1000 and 2000
AND department_id BETWEEN 10 and 20)
ORDER BY first_name;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
257
02/03/2022
4) Subconsulta de varias columnas
▪ Encuentre todos los clientes que tienen tanto una cuenta
como un préstamo en la sucursal de Perryridge
Nota: La consulta anterior se puede escribir de una manera mucho más
simple. La formulación anterior es simplemente para ilustrar las
características de SQL.
select distinct customer_name
from borrower, loan
where borrower.loan_number = loan.loan_number and
branch_name = 'Perryridge' and
(branch_name, customer_name ) in
(select branch_name, customer_name
from depositor, account
where depositor.account_number =
account.account_number )
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
258
02/03/2022
4) Subconsulta de varias columnas
▪ Cuando se utiliza una subconsulta de varias columnas
en la cláusula FROM de la consulta externa, se crea
una tabla temporal a la que pueden hacer referencia
otras cláusulas de la consulta externa. Esta tabla
temporal se denomina más formalmente vista en línea
(inline view).
▪ Los resultados de la subconsulta se tratan como
cualquier otra tabla en la cláusula FROM. Si la tabla
temporal contiene datos agrupados, los subconjuntos
agrupados se tratan como filas de datos
independientes en una tabla.
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
259
02/03/2022
4) Subconsulta de varias columnas
▪ Considere la cláusula FROM en la siguiente
consulta. La vista en línea formada por la
subconsulta es la fuente de datos para la consulta
principal.
SELECT * FROM
(SELECT `SALARY`, `WORKDEPT`
FROM EMPLOYEE
WHERE SALARY BETWEEN 20000 AND 30000)AS T;
Bases de Datos
Ph.D. Franklin Parrales
Carrera de Software
260
02/03/2022
Lenguaje estructurado de
consultas
Unidad 4
Final de la unidad
Y del curso…. !Muchas gracias
a todos!

Más contenido relacionado

PPTX
Comandos básicos para bases de datos mysql y workbench
PPTX
Sql DML Lenguaje de manipulación de datos
PDF
DB1 Unidad 6: Indices
PDF
DB1 Unidad 5: SQL Avanzado
PPTX
Diapositivas de sgbd
PDF
DB1 Unidad 7: Desnormalizacion
PPTX
Unidad 1. Fundamentos de Base de Datos
Comandos básicos para bases de datos mysql y workbench
Sql DML Lenguaje de manipulación de datos
DB1 Unidad 6: Indices
DB1 Unidad 5: SQL Avanzado
Diapositivas de sgbd
DB1 Unidad 7: Desnormalizacion
Unidad 1. Fundamentos de Base de Datos

La actualidad más candente (20)

PPT
Introducción a Sql
PPT
Normalizacion boyce codd_4_fn
PDF
Desnormalización de Base de Datos
PPTX
Constraints (restricciones).pptx
PPT
Diseño de bases de datos
PPTX
Tipos de usuarios de base de datos diapositivas
PDF
Normalizacion de base de datos
PPTX
Implementacion de bases de datos en mysql
PDF
Generación código intermedio 2
PPTX
Rational rose
PPTX
Procedimientos Almacenados SQL SEVER.pptx
PPTX
Structured Query Language
PDF
Transacciones
PPTX
Taller de Base de Datos - Unidad 7 Conectividad
PPTX
cliente servidor
PPT
Diseño de entraday_salida
PPTX
Etapas en el diseño de Base de Datos
PPT
Lenguaje SQL
PDF
DB1 Unidad 2: Modelo ER y modelo relacional
PPTX
Normalizacion de bases de datos
Introducción a Sql
Normalizacion boyce codd_4_fn
Desnormalización de Base de Datos
Constraints (restricciones).pptx
Diseño de bases de datos
Tipos de usuarios de base de datos diapositivas
Normalizacion de base de datos
Implementacion de bases de datos en mysql
Generación código intermedio 2
Rational rose
Procedimientos Almacenados SQL SEVER.pptx
Structured Query Language
Transacciones
Taller de Base de Datos - Unidad 7 Conectividad
cliente servidor
Diseño de entraday_salida
Etapas en el diseño de Base de Datos
Lenguaje SQL
DB1 Unidad 2: Modelo ER y modelo relacional
Normalizacion de bases de datos
Publicidad

Similar a DB1 Unidad 4: SQL (20)

PPTX
TABLAS Y TIPOS DE DATOS
PDF
Almacenamiento en bases de datos ejercicio maestria
PPTX
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
PDF
DB1 Unidad 1: Sistemas de almacenamiento de la información
PPT
Como cerar una base de datos con myql server.ppt
PDF
Bases de datos relacionales
PDF
Bd (1)
PDF
Base sql rivera & g
DOCX
Curso bases de datos es un indice de cursos.docx
PPTX
base de datos ppPPPPPPPPPPPPPPPPPPPPPPPPPPt.pptx
PDF
Bases de datos SQL...............................
PPTX
Sql DDL Lenguaje de definición de datos
PPTX
introducionBASE DE DATOSnfdnndndndndndnd
PPT
Base De Datos I
PPTX
PRESENTACION DE ANALISIS DE DATOS
PDF
04-SQLBuenaPresentaciónyConceptos.pdf
PDF
04-SQL.pdf
PPTX
SQL-BASES FUNDAMENTOS EN PROGRAMACI.pptx
DOC
MySQL BD .doc
TABLAS Y TIPOS DE DATOS
Almacenamiento en bases de datos ejercicio maestria
OVA DISEÑO ORACLE Introducción Bases de Datos .pptx
DB1 Unidad 1: Sistemas de almacenamiento de la información
Como cerar una base de datos con myql server.ppt
Bases de datos relacionales
Bd (1)
Base sql rivera & g
Curso bases de datos es un indice de cursos.docx
base de datos ppPPPPPPPPPPPPPPPPPPPPPPPPPPt.pptx
Bases de datos SQL...............................
Sql DDL Lenguaje de definición de datos
introducionBASE DE DATOSnfdnndndndndndnd
Base De Datos I
PRESENTACION DE ANALISIS DE DATOS
04-SQLBuenaPresentaciónyConceptos.pdf
04-SQL.pdf
SQL-BASES FUNDAMENTOS EN PROGRAMACI.pptx
MySQL BD .doc
Publicidad

Más de Franklin Parrales Bravo (20)

PPT
KLewin metodologia hkdgbm,nw iohddkjdj dl
PPT
DESIGN_THINKING jhuyrwughñlkskjsislhsklhshksh
PDF
GCSW Unidad3: Gestión integrada de proyectos
PDF
Webinar: Serious Games en Ingeniería de Requisitos
PDF
From Descriptive to Prescriptive Analytics on Time Series
PDF
50 ways to tweak your wonderfull and magnific paper
PPTX
IEEE_IC_ASET2024_Virtual_Assistant-PPT.pptx
PDF
Presentacion del congreso ETCM del 2021 en Cuenca
PDF
IW Unidad 1: Introducción a la Ingeniería Web
PDF
IW Unidad 4: Web accesible, semántica y ubicua
PDF
IW Unidad 3: Ingeniería Web dirigida por modelos
PDF
MOD Unidad 2: Tipos de modelado
PDF
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
PDF
AD Unidad4: Programación paralela y distribuida
PDF
AD Unidad3: Tecnologías de aplicaciones distribuidas
PDF
EP Unidad03: Planificación financiera y análisis de riesgos
PDF
AD Unidad2: Diseño de programas paralelos y distribuidos
PDF
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
PDF
EP Unidad01: Principios básicos de la metodología de proyectos
PDF
EP Unidad02: Conceptos para el alcance, tiempo y muestra
KLewin metodologia hkdgbm,nw iohddkjdj dl
DESIGN_THINKING jhuyrwughñlkskjsislhsklhshksh
GCSW Unidad3: Gestión integrada de proyectos
Webinar: Serious Games en Ingeniería de Requisitos
From Descriptive to Prescriptive Analytics on Time Series
50 ways to tweak your wonderfull and magnific paper
IEEE_IC_ASET2024_Virtual_Assistant-PPT.pptx
Presentacion del congreso ETCM del 2021 en Cuenca
IW Unidad 1: Introducción a la Ingeniería Web
IW Unidad 4: Web accesible, semántica y ubicua
IW Unidad 3: Ingeniería Web dirigida por modelos
MOD Unidad 2: Tipos de modelado
IW Unidad 2: Metodologías y Técnicas de la Ingeniería Web
AD Unidad4: Programación paralela y distribuida
AD Unidad3: Tecnologías de aplicaciones distribuidas
EP Unidad03: Planificación financiera y análisis de riesgos
AD Unidad2: Diseño de programas paralelos y distribuidos
AD Unidad1: Fundamentos de sistemas paralelos y distribuidos
EP Unidad01: Principios básicos de la metodología de proyectos
EP Unidad02: Conceptos para el alcance, tiempo y muestra

Último (9)

PPTX
Competencias digitales.PPT.SOTFWAREPTT.0
PDF
Manual de mantenimiento de soporte y mantenimiento
PDF
Estudio de factibilidad para requisiciones de soporte técnico utilizando OSTi...
PPTX
presentación de introducción a las metodologías agiles .pptx
PDF
Manual de mantenimiento de soporte y mantenimiento
PPTX
hojas_de_calculo_aplicado para microsoft office
PDF
Presentacion de compiladores e interpretes
PPTX
Programación Orientada a Objetos POO.pptx
PDF
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES
Competencias digitales.PPT.SOTFWAREPTT.0
Manual de mantenimiento de soporte y mantenimiento
Estudio de factibilidad para requisiciones de soporte técnico utilizando OSTi...
presentación de introducción a las metodologías agiles .pptx
Manual de mantenimiento de soporte y mantenimiento
hojas_de_calculo_aplicado para microsoft office
Presentacion de compiladores e interpretes
Programación Orientada a Objetos POO.pptx
DNS_SERVIDORES PARA ASER PRACTICAS EN REDES

DB1 Unidad 4: SQL

  • 1. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 1 02/03/2022 Lenguaje estructurado de consultas Unidad 4 Material docente compilado por el profesor Ph.D. Franklin Parrales Bravo para uso de los cursos de Bases de Datos
  • 2. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 2 02/03/2022 Objetivo general de la Unidad 4 Aplicar sentencias del lenguaje SQL para manipular de datos en tablas, administrar objetos de la base de datos y controlar la ejecución de transacciones como mecanismo para mantener la integridad de los datos
  • 3. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 3 02/03/2022
  • 4. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 4 02/03/2022
  • 5. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 5 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 6. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 6 02/03/2022 DDL: Data Definition Language ▪ El lenguaje de definición de datos SQL (DDL) permite la especificación de información sobre relaciones, incluyendo: ▪ El esquema para cada relación. ▪ Dominio de valores asociados con cada atributo. ▪ Restricciones de integridad ▪ Y como veremos más adelante, también otra información como ▪ El conjunto de índices a mantener para cada relación. ▪ Información de seguridad y autorización para cada relación. ▪ La estructura de almacenamiento físico de cada relación en el disco.
  • 7. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 7 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 8. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 8 02/03/2022 SQL, el Modelo Relacional, y Diagrama E/R ➢ SQL se basa en el modelo relacional. ➢ Tiene muchas de las mismas ideas. ➢ Las bases de datos que admiten SQL a menudo se describen como base de datos relacionales. ➢ No siempre es fiel al modelo ➢ Los diagramas E/R pueden ser implementados en SQL ➢ Las entidades, los atributos y las relaciones se pueden expresar en terminos de SQL. ➢ Los relaciones de muchos a muchos son un problema, así que deben ser eliminadas.
  • 9. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 9 02/03/2022 Relaciones, Entidades, Tablas Modelo Relacional Relacion Registros Atributo Clave Foránea Clave Primaria Diagrama E/R Entidad Instancia Atributo Relación M:1 SQL Tabla Fila Columna (campo) Clave Foránea Clave Primaria
  • 10. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 10 02/03/2022 Implementando Diagramas E/R ➢ Dado un diagrama E/R ➢ Las entidades se convierten en tablas SQL ➢ Los atributos de una entidad se convierten en columnas de tablas. ➢ Las relaciones pueden estar representadas como claves foráneas Enrolment Student Module In Has ID Code Title Name Address Year Assignment Exam Assignment Exam Credits
  • 11. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 11 02/03/2022 Entidades y Atributos ➢ Cada entidad se convierte en una tabla de la base de datos. ➢ El nombre de la tabla suele ser el nombre de la entidad ➢ Los atributos se convierten en columnas de la tabla con el mismo nombre ➢ Una tabla llamada estudiante ➢ Con columnas: ID, Name, Address, and Year Student ID Name Address Year
  • 12. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 12 02/03/2022 Creación de Tablas CREATE TABLE <name> ( <col-def-1>, <col-def-2>, : <col-def-n>, <constraint-1>, : <constraint-k>) ➢ Usted establece… ➢ Un nombre para la tabla ➢ Una lista de definiciones de columnas ➢ Una lista de restricciones (como las claves)
  • 13. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 13 02/03/2022 Definición de Columnas <col-name> <type> [NULL|NOT NULL] [DEFAULT <val>] [constraint-1 [, constraint-2[, ...]]] ➢ Cada columna tiene un nombre y un tipo. ➢ Tipos comunes: ➢ INT ➢ REAL ➢ CHAR(n) ➢ VARCHAR(n) ➢ DATE
  • 14. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 14 02/03/2022 Definición de Columnas ➢ Columnas pueden ser NULL o NOT NULL ➢ Las columnas NOT NULL no pueden tener valores faltantes. ➢ Si no se especifica, por defecto se asume NULL. ➢ Columnas pueden tener un valor por defecto ➢ Solo necesitas usar la palabra reservada DEFAULT seguido por el valor, ej: ➢ num INT DEFAULT 0
  • 15. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 15 02/03/2022 Ejemplo CREATE TABLE Student ( stuID INT NOT NULL, stuName VARCHAR(50) NOT NULL, stuAddress VARCHAR(50), stuYear INT DEFAULT 1) Student ID Name Address Year
  • 16. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 16 02/03/2022 Constraints - Restricciones CONSTRAINT <name> <type> <details> ➢ Common <type>s ➢ PRIMARY KEY ➢ UNIQUE ➢ FOREIGN KEY ➢ INDEX ➢ Cada restricción recibe un nombre – MS Access requiere un nombre, pero algunos DBMS no lo necesitan ➢ Constraints que se refieren a columnas individuales pueden ser incluidas en la definición.
  • 17. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 17 02/03/2022 Primary Keys ➢ Los Primary Keys son definidos a través de constraints. ➢ Una PRIMARY KEY también incluye un constraint UNIQUE y hace que las columnas involucradas sean NOT NULL ➢ Los <details> de una clave principal son la lista de columnas de las que se compone la clave. CONSTRAINT <name> PRIMARY KEY (col1, col2, …)
  • 18. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 18 02/03/2022 Unique Constraints ➢ Además de una primary key única, cualquier conjunto de columnas se puede especificar como UNIQUE ➢ Esto tiene el efecto de hacer claves candidatas en la tabla. ➢ Los <details> de un unique constraint son la lista de columnas que componen una clave candidata. CONSTRAINT <name> UNIQUE (col1, col2, …)
  • 19. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 19 02/03/2022 Ejemplo CREATE TABLE Student ( stuID INT NOT NULL, stuName VARCHAR(50) NOT NULL, stuAddress VARCHAR(50), stuYear INT DEFAULT 1, CONSTRAINT pkStudent PRIMARY KEY (stuID))
  • 20. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 20 02/03/2022 Relaciones ➢ Depende del tipo ➢ 1:1 normalmente no se utilizan o pueden tratarse como un caso especial de M:1 ➢ M:1 son representados como clave foránea desde el lado M al 1. ➢ M:M se dividen en dos relaciones de M:1 Enrolment Student Module In Has ID Code Title Name Address Year Assignment Exam Assignment Exam Credits
  • 21. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 21 02/03/2022 Representando Relaciones ➢ La tabla ENROLMENT: ➢ Tendrá columnas para los atributos Exam y Assignment. ➢ Tendrá una clave foránea para Student por la relación ‘Has’. ➢ Tendrá una clave foránea con Module por la relación ‘In’ Enrolment Student Module In Has ID Code Title Name Address Year Assignment Exam Assignment Exam Credits
  • 22. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 22 02/03/2022 Foreign Keys ➢ Las claves foráneas también se definen como constraints. ➢ Tu necesitas otorgar ➢ Las columnas que componen la FK ➢ La tabla referenciada ➢ Las columnas a las que hace referencia el FK CONSTRAINT <name> FOREIGN KEY (col1,col2,…) REFERENCES <table> [(ref1,ref2,…)] ➢ If the FK references the PK of <table> you don’t need to list the columns
  • 23. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 23 02/03/2022 Ejemplo CREATE TABLE Enrolment ( stuID INT NOT NULL, modCode CHAR(6) NOT NULL, enrAssignment INT, enrExam INT, CONSTRAINT enrPK PRIMARY KEY (stuID, modCode), CONSTRAINT enrStu FOREIGN KEY (stuID) REFERENCES Student (stuID), CONSTRAINT enrMod FOREIGN KEY (modCode) REFERENCES Module (modCode))
  • 24. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 24 02/03/2022 Consideraciones de diseño de InnoDB (MySql) Emula la arquitectura de Oracle ▪ Sistemas únicos ▪ Buffering de inserts ▪ Index hash ▪ DataDictionary Interno ▪ Undo ▪ Insert Buffer ▪ MySQL Replication info
  • 25. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 25 02/03/2022 Limites de tamaño con InnoDB (MySql) ▪ Tamaño máximo de una tabla: 32GB ▪ Columnas por tabla: 1000 ▪ Tamaño máximo de la llave 3500 caracteres ▪ Tamaño máximo del tablespace 64TB ▪ Numero máximo de transacciones concurrentes: 1023
  • 26. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 26 02/03/2022 Convertir tipos de Engines (MySql) ▪ Para crear una tabla con un Engine predefinido ▪ CREATE TABLE Test (rid INT) ENGINE=INNODB; ▪ Para definir el default por sesión: ▪ SET STORAGE_ENGINE=INNODB ▪ Convertir tablas de un Engine a otro ▪ ALTER TABLE Test ENGINE=INNODB
  • 27. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 27 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 28. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 28 02/03/2022 Modificando Tablas ➢ Algunas veces desea cambiar la estructura de una tabla existente ➢ Una forma es eliminarlo (DROP) y luego crearlo ➢ Esto es peligroso, por lo que existe la opción ALTER TABLE en su lugar ➢ ALTER TABLE permite: ➢ Agregar una nueva columna ➢ Remover una columna existente. ➢ Agregar un Nuevo constraint ➢ Remover un constraint existente.
  • 29. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 29 02/03/2022 ALTERando Columnas Para agregar o remover columnas use… ALTER TABLE <table> ADD COLUMN <col> ALTER TABLE <table> DROP COLUMN <name> Ejemplos: ALTER TABLE Student ADD COLUMN Degree VARCHAR(50) ALTER TABLE Student DROP COLUMN Degree
  • 30. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 30 02/03/2022 ALTERando Constraints Para agregar o remover restricciones use… ALTER TABLE <table> ADD CONSTRAINT <definition> ALTER TABLE <table> DROP CONSTRAINT <name> Ejemplos: ALTER TABLE Module ADD CONSTRAINT ck UNIQUE (title) ALTER TABLE Module DROP CONSTRAINT ck
  • 31. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 31 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 32. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 32 02/03/2022 Deleting Tables ➢ Para borrar una tabla existente: DROP TABLE [IF EXISTS] <name> ➢ Ejemplo: DROP TABLE Module ➢ Tenga cuidado con alguna sentencia SQL con DROP en ella pues… ➢ También eliminará cualquier información de la tabla ➢ Normalmente no se le pedirá que confirme la ejecución de la sentencia ➢ No hay una manera fácil de deshacer los cambios.
  • 33. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 33 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 34. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 34 02/03/2022 TRUNCATE ▪ Este comando se utiliza para eliminar o borrar los datos que contiene una tabla. ▪ Es útil cuando sólo se quiere borrar los datos, pero no se quiere borrar la tabla. ▪ Este comando deja vacía una tabla, es decir, sin datos. ▪ Sintaxis: TRUNCATE TABLE nombretabla
  • 35. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 35 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 36. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 36 02/03/2022 ALTER (RENAME) ▪ En ocasiones podemos querer cambiar el nombre de nuestra tabla para darle un nombre mas relevante. Para este propósito, podemos usar ALTER TABLE para cambiar el nombre de una tabla. ▪ A las columnas también se les puede dar un nombre nuevo con el uso de ALTER TABLE. ALTER TABLE table_name RENAME TO new_table_name; ALTER TABLE table_name RENAME COLUMN old_name TO new_name;
  • 37. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 37 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 38. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 38 02/03/2022 DML: Data Manipulation Language ▪ El Lenguaje de Manipulación de Datos es un idioma proporcionado por los sistemas gestores de bases de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o modificación de los datos contenidos en las Tablas de las Bases de Datos
  • 39. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 39 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 40. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 40 02/03/2022 La instrucción INSERT ▪ La inserción de tuplas se realiza con la sentencia INSERT, ▪ Es posible insertar directamente valores. ▪ O bien insertar el conjunto de resultados de una consulta. ▪ En cualquier caso, los valores que se insertan deben pertenecer al dominio de cada uno de los atributos de la relación. ▪ Ejemplos: CLIENTES (DNI, NOMBRE, DIR) ▪ La inserción ▪ INSERT INTO CLIENTES VALUES (1111,'Mario', 'C/. Mayor, 3'); ▪ Es equivalente a las siguientes sentencias ▪ INSERT INTO CLIENTES (NOMBRE,DIR,DNI) VALUES ('Mario','C/. Mayor, 3',1111); ▪ INSERT INTO CLIENTES (DNI,DIR,NOMBRE) VALUES (1111,'C/. Mayor, 3’,'Mario');
  • 41. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 41 02/03/2022 Añadir una fila INSERT INTO TESTEMP VALUES ('000111', 'SMITH', 'C01', '1998-06-25', 25000, NULL) EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS 25000.00 1998-06-25 - C01 SMITH 000111 INSERT INTO TESTEMP(EMPNO, LASTNAME, WORKDEPT, HIREDATE, SALARY) VALUES ('000111', 'SMITH', 'C01', '1998-06-25', 25000)
  • 42. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 42 02/03/2022 Añadir varias filas ▪ Ejemplo: ▪ Para la siguiente base de datos, queremos incluir en la relación GRUPOS a todos los grupos, junto con su número de álbumes publicados: ▪ GRUPOS (NOMBRE, ALBUMES) LP (TIT, GRUPO, ANIO, NUM_CANC) ▪ Solución: ▪ En SQL se prohíbe que la consulta que se incluye en una cláusula INSERT haga referencia a la misma tabla en la que se quieren insertar las tuplas. ▪ En ORACLE sí está permitido INSERT INTO GRUPOS SELECT GRUPO, COUNT (DISTINCT TIT) FROM LP GROUP BY GRUPO;
  • 43. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 43 02/03/2022 Añadir varias filas (cont.) TESTEMP INSERT INTO TESTEMP SELECT FROM EMPLOYEE WHERE EMPNO < = '000050' EMPNO,LASTNAME,WORKDEPT,HIREDATE,SALARY,BONUS EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS 1000.00 800.00 800.00 800.00 - - - - - 52750.00 41250.00 38250.00 40175.00 25000.00 1965-01-01 1973-10-10 1975-04-05 1949-08-17 1998-06-25 A00 B01 C01 E01 C01 HAAS THOMPSON KWAN GEYER SMITH 000010 000020 000030 000050 000111
  • 44. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 44 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 45. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 45 02/03/2022
  • 46. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 46 02/03/2022 La instrucción DELETE ▪ La eliminación de tuplas se realiza con la sentencia DELETE: ▪ DELETE FROM R WHERE P; -- WHERE es opcional ▪ Elimina tuplas completas, no columnas. Puede incluir subconsultas. ▪ Ejemplos: para la BD de CLIENTES, CUENTAS, SUCURSALES. ▪ Eliminar todas cuentas con código entre 1000 y 1100. ▪ DELETE FROM CUENTAS WHERE COD BETWEEN 1000 AND 1100; ▪ Eliminar todas las cuentas del cliente “Jose María García”. ▪ DELETE FROM CUENTAS WHERE DNI IN (SELECT DNI FROM CLIENTES WHERE NOMBRE LIKE 'Jose María García'); ▪ Eliminar todas las cuentas de sucursales situadas en "Chinchón". ▪ DELETE FROM CUENTAS WHERE NSUCURS IN (SELECT NSUC FROM SUCURSALES WHERE CIUDAD LIKE 'Chinchón');
  • 47. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 47 02/03/2022 Borrar filas DELETE FROM TESTEMP WHERE EMPNO = '000111' Antes: Después: EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS 1000.00 800.00 800.00 800.00 - - - - - 52750.00 41250.00 38250.00 40175.00 25000.00 1965-01-01 1973-10-10 1975-04-05 1949-08-17 1998-06-25 A00 B01 C01 E01 C01 HAAS THOMPSON KWAN GEYER SMITH 000010 000020 000030 000050 000111 EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS 1000.00 800.00 800.00 800.00 52750.00 41250.00 38250.00 40175.00 1965-01-01 1973-10-10 1975-04-05 1949-08-17 A00 B01 C01 E01 HAAS THOMPSON KWAN GEYER 000010 000020 000030 000050
  • 48. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 48 02/03/2022 Borrar filas ▪ Eliminar todas las tuplas de cuentas en la sucursal de ‘Perryridge’ delete from account where branch_name = 'Perryridge' ▪ Eliminar todas las cuentas en cada sucursal ubicada en la ciudad ‘Needham’. delete from account where branch_name in (select branch_name from branch where branch_city = 'Needham')
  • 49. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 49 02/03/2022 Eliminación mediante consulta ▪ Eliminar el registro de todas las cuentas con saldos por debajo del promedio en el banco. delete from account where balance < (select avg (balance ) from account ) Problema: a medida que eliminamos tuplas del depósito, el saldo promedio cambia Solución usada en SQL: 1. Primero, calcule el balance promedio (avg) y encuentre todas las tuplas que deben ser eliminadas 2. Luego, elimine las tuplas encontradas en el paso anterior (sin recalcular el avg o volviendo a seleccionar las tuplas)
  • 50. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 50 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 51. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 51 02/03/2022 La instrucción UPDATE ▪ La modificación de tuplas se realiza con la sentencia UPDATE, ▪ Es posible elegir el conjunto de tuplas que se van a actualizar usando la clausula WHERE. ▪ Ejemplos: CUENTAS (COD, DNI, NSUCURS, SALDO) ▪ Suma del 5% de interés a los saldos de todas las cuentas. ▪ UPDATE CUENTAS SET SALDO = SALDO * 1.05; ▪ Suma del 1% de bonificación a aquellas cuentas cuyo saldo sea superior a 100.000 €. ▪ UPDATE CUENTAS SET SALDO = SALDO * 1.01 WHERE SALDO > 100000; ▪ Modificación de DNI y saldo simultáneamente para el código 898. ▪ UPDATE CUENTAS SET DNI='555', SALDO=10000 WHERE COD LIKE '898';
  • 52. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 52 02/03/2022 Modificar datos UPDATE TESTEMP SET SALARY = SALARY + 1000 WHERE WORKDEPT = 'C01' Antes: Después: EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS 1000.00 800.00 800.00 800.00 - - - - - 52750.00 41250.00 38250.00 40175.00 25000.00 1965-01-01 1973-10-10 1975-04-05 1949-08-17 1998-06-25 A00 B01 C01 E01 C01 HAAS THOMPSON KWAN GEYER SMITH 000010 000020 000030 000050 000111 EMPNO LASTNAME WORKDEPT HIREDATE SALARY BONUS 1000.00 800.00 800.00 800.00 - - - - - 52750.00 41250.00 39250.00 40175.00 26000.00 1965-01-01 1973-10-10 1975-04-05 1949-08-17 1998-06-25 A00 B01 C01 E01 C01 HAAS THOMPSON KWAN GEYER SMITH 000010 000020 000030 000050 000111
  • 53. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 53 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 54. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 54 02/03/2022 Estructura de consulta básica ▪ SQL se basa en operaciones relacionales y de conjuntos con ciertas modificaciones y mejoras ▪ Una consulta SQL típica tiene la forma: select A1, A2, ..., An from r1, r2, ..., rm where P ▪ Ai representa un atributo ▪ Ri representa una relación ▪ P es un predicado (condición). ▪ Esta consulta es equivalente a la expresión del álgebra relacional. ▪ El resultado de una consulta SQL es una relación. )) ( ( 2 1 , , , 2 1 m P A A A r r r n       
  • 55. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 55 02/03/2022 Estructura básica de la sentencia SELECT ▪ Consta de tres cláusulas: ▪ SELECT ▪ La lista de los atributos que se incluirán en el resultado de una consulta. ▪ FROM ▪ Especifica las relaciones que se van a usar como origen en el proceso de la consulta. ▪ WHERE ▪ Especifica la condición de filtro sobre las tuplas en términos de los atributos de las relaciones de la cláusula FROM.
  • 56. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 56 02/03/2022 Estructura básica de la sentencia SELECT ▪ Una consulta SQL tiene la forma: SELECT A1, ..., An /* Lista de atributos */ FROM R1, ..., Rm /* Lista de relaciones. A veces opcional */ WHERE P; /* Condición. Cláusula opcional */ ▪ Es posible que exista el mismo nombre de atributo en dos relaciones distintas. ▪ Se añade "NOMBRE_RELACION." antes del nombre para desambiguar.
  • 57. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 57 02/03/2022 La cláusula SELECT ▪ La clausula select lista los atributos deseados en el resultado de una consulta ▪ corresponde a la operación de proyección del álgebra relacional ▪ Ejemplo: encontrar los nombres de todas las sucursales en la relación de préstamo (loan): select branch_name from loan ▪ En el álgebra relacional, la consulta sería: branch_name (loan) ▪ NOTA: Los nombres de SQL no distinguen entre mayúsculas y minúsculas (es decir, puede usar letras mayúsculas o minúsculas). ▪ Ej.: Branch_Name ≡ BRANCH_NAME ≡ branch_name ▪ Algunas personas usan mayúsculas donde usamos negrita.
  • 58. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 58 02/03/2022 La cláusula SELECT(Cont.) ▪ SQL permite valores duplicados tanto en las relaciones como en los resultados de las consultas.. ▪ Para forzar la eliminación de duplicados, inserte la palabra clave distinct después de select ▪ Encuentre los nombres de todas las sucursales en las relaciones de préstamo (loan) y elimine los duplicados select distinct branch_name from loan ▪ La palabra clave all especifica que los valores duplicados no serán eliminados. select all branch_name from loan
  • 59. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 59 02/03/2022 La cláusula SELECT(Cont.) ▪ Un asterisco en la cláusula de selección denota "todos los atributos" select * from loan ▪ La cláusula select puede contener expresiones aritméticas que involucran la operación, +, –, , y /, y que operan sobre constantes o atributos de tuplas. ▪ La consulta (query): select loan_number, branch_name, amount  100 from loan devolvería una relación que es la misma que la relación de préstamo (loan), excepto que el valor del atributo amount se multiplica por 100
  • 60. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 60 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 61. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 61 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 62. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 62 02/03/2022 MERGE ▪ MERGE es la combinación de tres instrucciones: INSERT, DELETE y UPDATE. ▪ Si hay una tabla de origen y una tabla de destino que deseamos fusionar, con la ayuda de la declaración MERGE podemos realizar las tres operaciones (INSERTAR, ACTUALIZAR, ELIMINAR) a la vez
  • 63. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 63 02/03/2022 MERGE ▪ Ejemplo: Supongamos que hay dos tablas: • PRODUCT_LIST: tabla que contiene los detalles actuales sobre los productos disponibles con los campos P_ID, P_NAME y P_PRICE correspondientes al ID, nombre y precio de cada producto. • UPDATED_LIST tabla que contiene los nuevos detalles sobre los productos disponibles con los campos P_ID, P_NAME y P_PRICE correspondientes al ID, nombre y precio de cada producto.
  • 64. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 64 02/03/2022 MERGE La tarea es actualizar los detalles de los productos en PRODUCT_LIST según la UPDATED_LIST.
  • 65. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 65 02/03/2022 MERGE ▪ Solución: Ahora, para explicar mejor este ejemplo, dividamos el ejemplo en pasos. ▪ Paso 1: Reconocer la tabla TARGET y SOURCE Entonces, en este ejemplo, dado que se solicita actualizar los productos en PRODUCT_LIST según UPDATED_LIST, ▪ PRODUCT_LIST actuará como tabla TARGET y ▪ UPDATED_LIST actuará como tabla SOURCE.
  • 66. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 66 02/03/2022 MERGE
  • 67. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 67 02/03/2022 MERGE ▪ Paso 2: Reconocer las operaciones a realizar. Ahora, como se puede ver, hay tres discrepancias entre la tabla TARGET y SOURCE, que son: ▪ 1. El costo del COFFEE en TARGET es de 15,00 mientras que en SOURCE es 25.00 PRODUCT_LIST 102 COFFEE 15.00 UPDATED_LIST 102 COFFEE 25.00
  • 68. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 68 02/03/2022 MERGE ▪ 2. No hay ningún producto BISCUIT en SOURCE pero sí en TARGET ▪ 3. No hay ningún producto CHIPS en TARGET pero sí en SOURCE PRODUCT_LIST 103 BISCUIT 20.00 UPDATED_LIST 104 CHIPS 22.00
  • 69. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 69 02/03/2022 MERGE ▪ Por lo tanto, se deben realizar tres operaciones en el TARGET de acuerdo con las discrepancias anteriores. Estas son : ▪ 1. UPDATE operation ▪ 2. DELETE operation ▪ 3. INSERT operation 102 COFFEE 25.00 103 BISCUIT 20.00 104 CHIPS 22.00
  • 70. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 70 02/03/2022 MERGE ▪ Paso 3: escribir la consulta SQL. La consulta SQL para realizar las operaciones mencionadas anteriormente con la ayuda de la instrucción MERGE es: /* Seleccionar el Target (objetivo) y Source (fuente) */ MERGE PRODUCT_LIST AS TARGET USING UPDATE_LIST AS SOURCE /* 1. Performing the UPDATE operation */ /* If the P_ID is same, check for change in P_NAME or P_PRICE */ ON (TARGET.P_ID = SOURCE.P_ID) WHEN MATCHED AND TARGET.P_NAME <> SOURCE.P_NAME OR TARGET.P_PRICE <> SOURCE.P_PRICE
  • 71. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 71 02/03/2022 MERGE /* Update the records in TARGET */ THEN UPDATE SET TARGET.P_NAME = SOURCE.P_NAME, TARGET.P_PRICE = SOURCE.P_PRICE /* 2. Performing the INSERT operation */ /* When no records are matched with TARGET table Then insert the records in the target table */ WHEN NOT MATCHED BY TARGET THEN INSERT (P_ID, P_NAME, P_PRICE) VALUES (SOURCE.P_ID, SOURCE.P_NAME, SOURCE.P_PRICE) /* 3. Performing the DELETE operation */ /* When no records are matched with SOURCE table Then delete the records from the target table */ WHEN NOT MATCHED BY SOURCE THEN DELETE /* END OF MERGE */
  • 72. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 72 02/03/2022 MERGE ▪ Salida ▪ Entonces, de esta manera, todos podemos realizar estas tres declaraciones principales en SQL junto con la ayuda de la declaración MERGE. ▪ Nota: En la sintaxis MERGE se puede utilizar cualquier nombre que no sea TARGET y SOURCE. Se usan solo para darte una mejor explicación. PRODUCT_LIST P_ID P_NAME P_PRICE 101 TEA 10.00 102 COFFEE 25.00 104 CHIPS 22.00
  • 73. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 73 02/03/2022 MERGE en MySql ▪ MERGE no es compatible con MySQL. Sin embargo, hay otra forma posible de hacer lo mismo: ▪ INSERT ... ON DUPLICATE KEY UPDATE Statement
  • 74. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 74 02/03/2022 INSERT ... ON DUPLICATE KEY UPDATE (MySql) ▪ Si especifica una cláusula ON DUPLICATE KEY UPDATE y la inserción de una fila provocaría un valor duplicado en un índice UNIQUE o PRIMARY KEY, se produce un UPDATE de la fila anterior. ▪ Por ejemplo, si la columna a se declara como UNIQUE y contiene el valor 1: ▪ INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; ▪ La eliminación tiene que manejarse aparte https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
  • 75. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 75 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 76. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 76 02/03/2022
  • 77. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 77 02/03/2022 Data Control Language ▪ Objetivos ▪ Conocer los mecanismos de seguridad implementados en un RDBMS y cómo usarlos ▪ Contenido ▪ Identificación de usuarios ▪ Privilegios ▪ La Declaración GRANT ▪ La Declaración REVOKE ▪ El catálogo del sistema
  • 78. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 78 02/03/2022 Identificación de usuarios Admin FRED Ventas
  • 79. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 79 02/03/2022 Privilegios ▪ Privilegios Permitidos ▪ SELECT, INSERT, UPDATE, DELETE ▪ CREATE Table, View, Procedure, Trigger, Rule, Default ▪ El propietario/creador de una tabla automáticamente tiene todos los privilegios
  • 80. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 80 02/03/2022 Privilegios Directos Clientes Pedidos Productos Personal
  • 81. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 81 02/03/2022 Privilegios indirectos Clientes Pedidos Productos Personal Programa Usuario Administrador
  • 82. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 82 02/03/2022 Requerimientos de seguridad ▪ Integridad de la base de datos física ▪ Integridad de la base de datos lógica ▪ Integridad del elemento ▪ Auditabilidad ▪ Control de acceso ▪ Autenticación de usuario ▪ Disponibilidad
  • 83. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 83 02/03/2022 Requerimientos de seguridad ▪ Integridad de la base de datos física ▪ inmunidad a catástrofes físicas, como cortes de energía, fallas de medios ▪ hardware de seguridad física, UPS ▪ Respaldos regulares (regular backups) ▪ Integridad de la base de datos lógica ▪ capacidad de reconstrucción ▪ mantener un log (registro) de transacciones ▪ reverso de operaciones a partir del log para restaurar los sistemas a un punto estable
  • 84. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 84 02/03/2022 Requerimientos de seguridad ▪ Integridad del elemento ▪ la integridad de los elementos específicos de la base de datos es su corrección o precisión ▪ verificaciones de campo – permitir solo valores aceptables ▪ controles de acceso – permitir que solo los usuarios autorizados actualicen elementos ▪ registro de cambios (change log) – Usado para deshacer cambios que produjeron un error ▪ Integridad referencial (key integrity concerns) ▪ proceso de bloqueo de dos fases (two phase locking process) ▪ Auditabilidad ▪ log de operaciones read/write sobre la base de datos
  • 85. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 85 02/03/2022 Requerimientos de seguridad ▪ Controles de acceso (similar a los Sistemas Operativos) ▪ separación lógica de usuarios por privilegios de acceso ▪ Mas complicado que en los SO debido a la complejidad de las BDs (granularidad/inferencia/agregación) ▪ Autenticación de Usuario ▪ Puede estar separado del SO ▪ puede ser riguroso ▪ Disponibilidad ▪ Usuarios concurrentes ▪ granularity of locking ▪ reliability
  • 86. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 86 02/03/2022 Autorización en SQL Formas de autorización sobre partes de la base de datos: ▪ Read authorization - permite la lectura, pero no la modificación de los datos. ▪ Insert authorization - permite la inserción de nuevos datos, pero no la modificación de los datos existentes. ▪ Update authorization - permite la modificación, pero no la eliminación de datos. ▪ Delete authorization - permite la eliminación de datos
  • 87. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 87 02/03/2022 Autorización en SQL (Cont.) Formas de autorización para modificar el esquema de la base de datos: ▪ Index authorization - permite la creación y eliminación de índices. ▪ Resources authorization - permite la creación de nuevas relaciones. ▪ Alteration authorization - permite agregar o eliminar atributos en una relación. ▪ Drop authorization - permite eliminar relaciones.
  • 88. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 88 02/03/2022 Vistas ▪ Proporcione un mecanismo para ocultar ciertos datos de la vista de ciertos usuarios. ▪ Para crear una vista usamos el comando : create view v as <query expression> donde: ▪ <query expression> es cualquier expresión legal ▪ El nombre de la vista está representado por v
  • 89. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 89 02/03/2022 Autorización y Vistas ▪ Los usuarios pueden recibir autorización sobre las vistas, sin que se les otorgue ninguna autorización sobre las relaciones utilizadas en la definición de la vista. ▪ La capacidad de las vistas para ocultar datos sirve tanto para simplificar el uso del sistema como para mejorar la seguridad al permitir que los usuarios accedan solo a los datos que necesitan para su trabajo. ▪ Se puede usar una combinación de seguridad a nivel relacional y seguridad a nivel de vista para limitar el acceso de un usuario a los datos que necesita.
  • 90. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 90 02/03/2022 Ejemplo de una Vista ▪ Supongamos que un empleado de banco necesita saber los nombres de los clientes de cada sucursal, pero no está autorizado para ver información específica del préstamo (loan). ▪ Enfoque: denegar el acceso directo a la relación de préstamo, pero otorgar acceso a la vista de préstamos de clientes, que consta solo de los nombres de los clientes y las sucursales en las que tienen un préstamo ▪ La vista de préstamos al cliente se define en SQL de la siguiente manera : create view cust-loan as select branchname, customer-name from borrower, loan where borrower.loan-number = loan.loan-number
  • 91. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 91 02/03/2022 Ejemplo de una Vista (Cont.) ▪ El oficinista está autorizado a ver el resultado de la consulta: select * from cust-loan ▪ Cuando el procesador de consultas traduce el resultado en una consulta sobre las relaciones reales en la base de datos, obtenemos una consulta sobre prestatario y préstamo. ▪ Se debe verificar la autorización en la consulta del empleado antes de que el procesamiento de la consulta reemplace una vista por la definición de la vista.
  • 92. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 92 02/03/2022 Autorización sobre Vistas ▪ La creación de la vista no requiere autorización de recursos ya que no se está creando una relación real. ▪ El creador de una vista obtiene solo aquellos privilegios que no proporcionan autorización adicional más allá de la que ya tenía. ▪ P.ej. si el creador del view cust-loan solo había leído (read) la autorización en el prestatario (borrower) y el préstamo (loan), solo obtiene la autorización de lectura en cust-loan
  • 93. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 93 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 94. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 94 02/03/2022 Otorgamiento de privilegios ▪ El paso de la autorización de un usuario a otro puede representarse mediante un gráfico de autorización. ▪ Los nodos de este gráfico son los usuarios. ▪ La raíz del gráfico es el administrador de la base de datos. ▪ Considere gráfico para autorización de actualización en loan ▪ Una flecha Ui → Uj indica que el usuario Ui ha concedido autorización de actualización en loan a Uj.
  • 95. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 95 02/03/2022 Grafo de concesión de autorización ▪ Requerimiento: Todas las flechas en un grafo de autorización deben ser parte de alguna ruta que se origine con el administrador de la base de datos. ▪ Si un DBA revoca la autorización sobre U1: ▪ La autorización debe ser revocada de U4 ya que U1 ya no tiene autorización ▪ La autorización no debe ser revocada de U5 ya que U5 tiene otra ruta de autorización de DBA a través de U2 ▪ Debe evitar ciclos de autorizaciones sin camino desde la raíz : ▪ DBA concede autorización a U7 ▪ U7 concede autorización a U8 ▪ U8 concede autorización a U7 ▪ DBA revoca autorización de U7 ▪ Debe revocarse la autorización de U7 a U8 y desde U8 a U7 ya que ya no hay una ruta de DBA a U7 o U8. u7 u8
  • 96. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 96 02/03/2022 Especificación de autorización en SQL ▪ La declaración grant se utiliza para conferir autorización. grant <lista de privilegios> on <nombre de la relación o de la vista> to <lista de usuarios> ▪ <lista de usuarios> is: ▪ un user-id ▪ public, que permite a todos los usuarios válidos el privilegio concedido ▪ Un rol (se revisará más de esto después) ▪ Otorgar un privilegio sobre una vista no implica otorgar ningún privilegio sobre las relaciones subyacentes. ▪ El otorgante del privilegio ya debe tener el privilegio sobre el elemento especificado (o ser el administrador de la base de datos).
  • 97. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 97 02/03/2022 Autorización Formas de autorización sobre partes de la base de datos: ▪ Read - permite la lectura, pero no la modificación de los datos. ▪ Insert - permite la inserción de nuevos datos, pero no la modificación de los datos existentes. ▪ Update - permite la modificación, pero no la eliminación de datos. ▪ Delete - permite la eliminación de datos. Formas de autorización para modificar el esquema de la base de datos: ▪ Index - permite la creación y eliminación de índices. ▪ Resources - permite la creación de nuevas relaciones. ▪ Alteration - permite agregar o eliminar atributos en una relación. ▪ Drop - permite borrar relaciones.
  • 98. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 98 02/03/2022 Privilegios en SQL ▪ select: permite el acceso de lectura a la relación, o la capacidad de consultar usando la vista ▪ Ejemplo: conceder a usuarios U1, U2, y U3 la autorización select sobre la relación branch: grant select on branch to U1, U2, U3 ▪ insert: la posibilidad de insertar tuplas(registros) ▪ update: la capacidad de actualizar usando la declaración de actualización de SQL ▪ delete: la posibilidad de eliminar tuplas. ▪ references: capacidad de declarar claves foráneas al crear relaciones. ▪ usage: En SQL-92; autoriza a un usuario a usar un dominio específico ▪ all privileges: utilizado como una forma abreviada para todos los privilegios permitidos
  • 99. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 99 02/03/2022 Privilegio Para otorgar privilegios ▪ with grant option: permite que un usuario, al que se le otorga un privilegio, pase el privilegio a otros usuarios. ▪ Ejemplo: grant select on branch to U1 with grant option otorga a U1 los privilegios de select sobre branch y permite que U1 conceda este privilegio a otros
  • 100. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 100 02/03/2022 Roles ▪ Los roles permiten que los privilegios comunes para una clase de usuarios se puedan especificar solo una vez creando un "rol" correspondiente. ▪ Los privilegios se pueden otorgar o revocar a los roles, de la misma forma que se lo hace con los usuarios ▪ Los roles se pueden asignar a los usuarios, e incluso a otros roles create role teller create role manager grant select on branch to teller grant update (balance) on account to teller grant all privileges on account to manager grant teller to manager grant teller to alice, bob grant manager to avi
  • 101. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 101 02/03/2022 Revocación de autorizaciones en SQL ▪ La sentencia revoke es utilizada para revocar la autorización. revoke<privilege list> on <relation name or view name> from <user list> [restrict|cascade] ▪ Ejemplo: revoke select on branch from U1, U2, U3 cascade ▪ La revocación de un privilegio de un usuario puede causar que otros usuarios también pierdan ese privilegio; denominada cascada de revoke. ▪ Podemos evitar la cascada especificando restrict: revoke select on branch from U1, U2, U3 restrict Con restrict, el comando revoke fallará si se requieren revocaciones en cascada.
  • 102. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 102 02/03/2022 Revocación de autorizaciones en SQL (Cont.) ▪ <privilege-list> puede ser all para revocar todos los privilegios que pueden tener los revocados(revokee). ▪ Si <revokee-list> incluye public, entonces todos los usuarios pierden el privilegio excepto aquellos que se lo otorgan explícitamente. ▪ Si el mismo privilegio fue otorgado dos veces al mismo usuario por diferentes beneficiarios, el usuario puede conservar el privilegio después de la revocación. ▪ Todos los privilegios que dependen del privilegio que se revoca también se revocan.
  • 103. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 103 02/03/2022 Limitaciones de la autorización en SQL ▪ SQL no admite la autorización a nivel de tupla ▪ P.ej. no podemos restringir a los estudiantes para que solo vean (las tuplas que almacenan) sus propias calificaciones ▪ Con el crecimiento del acceso web a las bases de datos, los accesos a las bases de datos provienen principalmente de los servidores de aplicaciones. ▪ Los usuarios finales no tienen ID de usuario de base de datos, todos están asignados al mismo ID de usuario de base de datos ▪ Todos los usuarios finales de una aplicación (como una aplicación web) pueden asignarse a un solo usuario de base de datos
  • 104. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 104 02/03/2022 Limitaciones de la autorización en SQL ▪ La tarea de autorización en los casos anteriores recae en el programa de aplicación, sin soporte de SQL ▪ Beneficio: la aplicación puede implementar autorizaciones detalladas, como tuplas individuales. ▪ Inconveniente: la autorización debe realizarse en el código de la aplicación y puede estar dispersa por toda la aplicación ▪ Verificar la ausencia de lagunas de autorización se vuelve muy difícil ya que requiere leer grandes cantidades de código de aplicación ▪ ¿Solución? Programación Orientada a aspectos-> Se revisará en la asignatura de “Diseño y Arquitectura de Software”
  • 105. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 105 02/03/2022 Resumen ▪ Identificación de usuarios ▪ Los usuarios del sistema se pueden agrupar para facilitar el manejo de la seguridad ▪ Privilegios ▪ Los permisos se pueden otorgar en varios niveles y se pueden otorgar directa o indirectamente utilizando vistas y procedimientos almacenados. ▪ La declaración GRANT ▪ Se utiliza para otorgar permisos a las personas sobre los objetos de la base de datos. ▪ La declaración REVOKE ▪ Se utiliza para quitar permisos. ▪ El catálogo del sistema ▪ Toda la información sobre los permisos se almacena dentro del catálogo.
  • 106. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 106 02/03/2022 GRANT/ REVOKE ▪ GRANT privilege ON tablename TO list [ WITH GRANT OPTION] ▪ Ejemplo: GRANT ALL ON dept TO John GRANT SELECT ON dept TO sally WITH GRANT OPTION GRANT SELECT, UPDATE, INSERT ON dept TO Jim, Mike, Howard REVOKE privilege ON tablename FROM list [CASCADE] e.g REVOKE SELECT ON dept FROM Sally CASCADE ▪ Sin embargo, en gran medida se hace en estos días a través de casillas de verificación en cuadrículas en herramientas GUI de administración de la BD
  • 107. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 107 02/03/2022 DCL Lenguaje De Control De Datos: SENTENCIA GRANT GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON {tbl_name | * | *.* | db_name.*} TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user [IDENTIFIED BY [PASSWORD] 'password']] ... [REQUIRE NONE | [{SSL| X509}] [CIPHER 'cipher' [AND]] [ISSUER 'issuer' [AND]] [SUBJECT 'subject']] [WITH [GRANT OPTION | MAX_QUERIES_PER_HOUR count | MAX_UPDATES_PER_HOUR count | MAX_CONNECTIONS_PER_HOUR count | MAX_USER_CONNECTIONS count]]
  • 108. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 108 02/03/2022 DCL Lenguaje De Control De Datos: SENTENCIA GRANT Ejemplo: • GRANT SELECT ON sucursal TO u1, u2, u3; • GRANT SELECT, INSERT, UPDATE ON prueba.estudiante TO mzabala IDENTIFIED BY ‘1234‘; • GRANT USAGE ON * TO anonimo@localhost IDENTIFIED BY 'clave'; • GRANT USAGE ON * TO anonimo@10.28.56.15 IDENTIFIED BY 'clave'; REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON {tbl_name | * | *.* | db_name.*} FROM user [, user] ... SENTENCIA REVOKE REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ... Ejemplo: REVOKE SELECT ON prueba.estudiante FROM mzabala; REVOKE SELECT ON prueba.gente FROM anonimo;
  • 109. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 109 02/03/2022 DCL Lenguaje De Control De Datos: DROP USER La sentencia DROP USER elimina la o las cuentas de usuario MySQL. • Para usarla se debe revocar los privilegios asignados al usuario. • La sentencia DROP USER debe poseer el privilegio GRANT OPTION para la base de datos mysql. Cada cuenta se nombra usando el mismo formato que para GRANT o REVOKE; por ejemplo, 'jeffrey'@'localhost'. Las partes del usuario y la máquina del nombre de la cuenta corresponden a los valores de las columnas User y Host del registro de la tabla user para la cuenta. • DROP USER se añadió en MySQL 4.1.1 y originalmente sólo borra cuentas que no tengan privilegios, en MySQL 5.0.2, fue modificada para borrar también cuentas que tengan privilegios. DROP USER user; Ejemplo: DROP USER mzabala;
  • 110. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 110 02/03/2022 DCL Lenguaje De Control De Datos: SHOW GRANTS La sentencia SHOW GRANTS permite visualizar los privilegios que posee un usuario definido en MySQL, para posteriormente poder ser revocados en caso que se desee eliminarlos. Ejemplo: SHOW GRANTS FOR 'root'@'localhost'; SHOW GRANTS FOR user;
  • 111. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 111 02/03/2022 Non-ANSI Privileges ▪ Sample Non ANSI Table Privileges GRANT ALTER ON dept TO Sally GRANT INDEX ON dept TO John ▪ Sample Non ANSI Database Privileges GRANT CONNECT ON database TO John, Ann GRANT RESOURCE TO Alex GRANT DBA TO Simon
  • 112. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 112 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 113. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 113 02/03/2022 Transacciones ▪ Una transacción es una acción, o una serie de acciones, realizadas por un solo usuario o un programa de aplicación, que lee o actualiza el contenido de una base de datos.
  • 114. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 114 02/03/2022 Transacciones ▪ Una transacción es una o más sentencias que se toman como una unidad (todo termina bien o todo se aborta) ▪ Una transacción es una unidad lógica de trabajo ▪ Definida para las reglas del negocio ▪ Típicamente incluye al menos una modificación de datos ▪ Pasa la base de datos de un estado consistente a otro ▪ Una transacción tiene dos posibles salidas: ▪ Committed ▪ Todas las modificaciones quedan en firme ▪ Rolled back ▪ Las modificaciones retornan a su estado inicial
  • 115. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 115 02/03/2022 Rol de las transacciones ▪ Proteger los datos de las fallas del software, hardware, y potencia eléctrica ▪ Permitir el aislamiento de datos de tal forma que varios usuarios pueden acceder simultáneamente a los datos sin interferencia
  • 116. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 116 02/03/2022 Cuándo usar transacciones? ▪ Cuando un conjunto de sentencias se deben comportar como una unidad
  • 117. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 117 02/03/2022 Lenguaje de Control de Transacciones (TCL) ▪ Los comandos del lenguaje de control de transacciones se utilizan para administrar transacciones en la base de datos. ▪ Estos se utilizan para administrar los cambios realizados por las declaraciones DML. ▪ También permite que las declaraciones se agrupen en transacciones lógicas.
  • 118. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 118 02/03/2022 Sentencias para transacciones ▪ COMMIT: se utiliza para guardar permanentemente cualquier transacción en la base de datos. ▪ ROLLBACK: restaura la base de datos al último estado confirmado. También se usa con el comando savepoint para saltar a un punto de guardado en una transacción. ▪ SAVEPOINT: se usa para guardar temporalmente una transacción para que pueda retroceder a ese punto cuando sea necesario.
  • 119. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 119 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 120. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 120 02/03/2022 Transacciones ➢ Una transacción es una "unidad lógica de trabajo" en una base de datos ➢ Cada transacción hace algo en la base de datos ➢ Ninguna parte de él por sí sola logra nada de utilidad o interés ➢ Las transacciones son la unidad de recuperación, consistencia e integridad también. ➢ Propiedades ACID ➢ Atomicidad ➢ Consistencia ➢ Isolation (Aislamiento) ➢ Durabilidad
  • 121. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 121 02/03/2022 Atomicidad y Consistencia ➢ Atomicidad ➢ Transacciones son atómicas – no tienen partes (conceptualmente) ➢ No pueden ser ejecutadas parcialmente; no debe ser detectable que se intercalan con otra transacción. ➢ Consistencia ➢ Las transacciones llevan la base de datos de un estado consistente a otro ➢ En medio de una transacción, la base de datos puede no ser consistente
  • 122. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 122 02/03/2022 Isolation y Durabilidad ➢ Isolation ➢ Los efectos de una transacción no son visibles para otras transacciones hasta que se haya completado ➢ Desde fuera la transacción ha ocurrido o no ➢ Para mí, esto en realidad suena como una consecuencia de la atomicidad... ➢ Durabilidad ➢ Una vez que se ha completado una transacción, sus cambios se hacen permanentes ➢ Incluso si el sistema falla, los efectos de una transacción deben permanecer en su lugar
  • 123. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 123 02/03/2022 Ejemplo de transacción ➢ Transferir $50 desde una cuenta A a una cuenta B Read(A) A = A - 50 Write(A) Read(B) B = B+50 Write(B) Atomicity - no debe tomar dinero de A sin dárselo a B Consistency - el dinero no se pierde ni se gana Isolation - otras consultas no deberían ver cambios en A o B hasta que se completen las operaciones Durability - el dinero no vuelve a A transacción
  • 124. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 124 02/03/2022 El manejador de Transacciones ➢ El administrador de transacciones aplica las propiedades ACID ➢ Programa las operaciones de transacciones ➢ COMMIT y ROLLBACK son utilizados para asegurar la atomicidad ➢ Se utilizan bloqueos(Locks) o marcas de tiempo(timestamps) para garantizar la consistencia y el aislamiento de las transacciones simultáneas ➢ Se mantiene un registro(log) para garantizar la durabilidad en caso de falla del sistema
  • 125. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 125 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Filtros ▪ Agrupación ▪ Ordenación ▪ Filtros de grupo ▪ Subconsultas ▪ Consultas multitablas
  • 126. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 126 02/03/2022 Sentencias para transacciones ▪ Cuatro sentencias definen la estructura de una transacción ▪ start tran ▪ commit tran ▪ rollback tran ▪ savepoint
  • 127. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 127 02/03/2022 start tran y commit tran ▪ start tran ▪ Inicia la transacción ▪ commit tran ▪ Finaliza la transacción ▪ Todas las modificaciones quedan en firme
  • 128. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 128 02/03/2022 start tran y commit tran ▪ Sintaxis: start { tran | transaction } [ transaction_name ] commit [ tran | transaction | work ] [ transaction_name | savepoint_name ] ▪ Ejemplo: -- @amount is a monetary amount to be transferred. -- @from_account is the account to be debited. -- @to_account is the account to be credited. start tran update accounts set balance = balance - @amount where account = @from_account update accounts set balance = balance + @amount where account = @to_account commit tran
  • 129. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 129 02/03/2022 Ejemplo de start tran y commit tran START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;
  • 130. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 130 02/03/2022 COMMIT y ROLLBACK ➢ COMMIT señala el final exitoso de una transacción ➢ Cualquier cambio realizado por la transacción debe guardarse ➢ Estos cambios ahora son visibles para otras transacciones ➢ ROLLBACK señala el final fallido de una transacción ➢ Cualquier cambio realizado por la transacción debe ser deshecho ➢ Ahora es como si la transacción nunca hubiera existido.
  • 131. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 131 02/03/2022 rollback tran ▪ rollback tran termina una transacción ▪ Deshace las modificaciones que se hayan hecho ▪ La ejecución continua con la instrucción siguiente a rollback
  • 132. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 132 02/03/2022 Sintaxis para rollback tran ▪ Sintaxis: rollback [ tran [ transaction_name | savepoint_name ] | transaction [ transaction_name | savepoint_name ] | work [ transaction_name | savepoint_name ] ] ▪ Ejemplo: -- If @from_account is below 0, abort the transfer start tran update accounts set balance = balance - @amount where account = @from_account update accounts set balance = balance + @amount where account = @to_account if (select balance from accounts where account = @from_account) < 0 rollback tran else commit tran
  • 133. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 133 02/03/2022 Ejemplo para rollback tran DROP DATABASE IF EXISTS test; CREATE DATABASE test CHARACTER SET utf8mb4; USE test; CREATE TABLE cliente ( id INT UNSIGNED PRIMARY KEY, nombre CHAR (20) ); START TRANSACTION; INSERT INTO cliente VALUES (1, 'Pepe’); COMMIT; -- 1. ¿Qué devolverá esta consulta? SELECT * FROM cliente; SET AUTOCOMMIT=0; INSERT INTO cliente VALUES (2, 'Maria’); INSERT INTO cliente VALUES (20, 'Juan’); DELETE FROM cliente WHERE nombre = 'Pepe’; -- 2. ¿Qué devolverá esta consulta? SELECT * FROM cliente; ROLLBACK; -- 3. ¿Qué devolverá esta consulta? SELECT * FROM cliente;
  • 134. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 134 02/03/2022 Ejemplo con begin tran, commit tran, rollback tran ▪ Crear una tabla: select * into mytitles from pubs2..titles ▪ Iniciar una transacción: start tran ▪ Borrar todas las filas de la tabla: delete from mytitles select * from mytitles ▪ Deshacer el borrado: rollback tran select * from mytitles ▪ Iniciar una transacción: start tran
  • 135. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 135 02/03/2022 • Borrar todas las filas de la tabla: delete from mytitles select * from mytitles • Dejar en firme el borrado: commit tran select * from mytitles • Borrar los objetos de base de datos creados: drop table mytitles
  • 136. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 136 02/03/2022 savepoint ▪ savepoint crea un nombre de un punto de grabación ▪ Es una extensión SQL que permite rollbacks parciales
  • 137. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 137 02/03/2022 Sintaxis para savepoint ▪ Sintaxis: savepoint { transaction | tran } savepoint_name ▪ Ejemplo: -- The rollback rolls back to point1. This undoes -- the delete of business books, but not the -- delete of mod_cook books. Execution resumes -- with the statement after the rollback, which -- deletes popular_comp books. start tran delete from titles where type = "mod_cook" savepoint tran point1 delete from titles where type = "business" rollback tran point1 delete from titles where type = "popular_comp" commit tran
  • 138. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 138 02/03/2022 Ejemplo con savepoints ▪ Crear una tabla: select * into mytitles from pubs2..titles ▪ Iniciar una transacción: start tran ▪ Borrar datos de una tabla: delete from mytitles where type = "psychology" select * from mytitles ▪ Establecer un savepoint: savepoint tran title_sav ▪ Borrar los restantes datos de la tabla: delete from mytitles select * from mytitles
  • 139. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 139 02/03/2022 • Restaurar hasta el savepoint: rollback tran title_sav select * from mytitles • Dejar en firme la transacción: commit tran • Borrar los objetos de base de datos creados: drop table mytitles
  • 140. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 140 02/03/2022 Ejemplo con savepoints DROP DATABASE IF EXISTS test; CREATE DATABASE test CHARACTER SET utf8mb4; USE test; CREATE TABLE producto ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100) NOT NULL, precio DOUBLE ); INSERT INTO producto (id, nombre) VALUES (1, 'Primero’); INSERT INTO producto (id, nombre) VALUES (2, 'Segundo’); INSERT INTO producto (id, nombre) VALUES (3, 'Tercero’); -- 1. Comprobamos las filas que existen en la tabla SELECT * FROM producto; -- 2. Ejecutamos una transacción que incluye un SAVEPOINT START TRANSACTION; INSERT INTO producto (id, nombre) VALUES (4, 'Cuarto’); SAVEPOINT sp1; INSERT INTO producto (id, nombre) VALUES (5, 'Cinco’); INSERT INTO producto (id, nombre) VALUES (6, 'Seis’); ROLLBACK TO sp1; -- 3. ¿Qué devolverá esta consulta? SELECT * FROM producto;
  • 141. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 141 02/03/2022 Transacciones anidadas ▪ Se pueden tener transacciones anidadas: ▪ El start y commit más externos comienzan y finalizan las transacciones ▪ Las sentencias start y commit internos solamente guardan un registro del nivel de anidamiento ▪ Ejemplo: start tran delete from titles where type = "mod_cook" start tran delete from titles where type = "business" start tran delete from titles where type = "trad_cook" commit tran -- No deletes committed yet. commit tran -- No deletes committed yet. commit tran -- All deletes committed here.
  • 142. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 142 02/03/2022 Rollbacks anidados ▪ Cuando se ejecutan rollback anidados sin puntos de grabación: ▪ El rollback deshace todas las transacciones en progreso, sin importar el nivel de anidamiento del rollback ▪ Termina la transacción ▪ La ejecución continúa con la sentencia siguiente al rollback ▪ Ejemplo: start tran delete from titles where type = "mod_cook" start tran delete from titles where type = "business" start tran delete from titles where type = "trad_cook" rollback tran -- Entire transaction rolled back commit tran -- This statement has no effect commit tran -- This statement has no effect
  • 143. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 143 02/03/2022 Transacciones y el registro de transacciones ▪ El registro de transacciones almacena los efectos de cada insert, update y delete ▪ El sistema utiliza el registro de transacciones para rehacer las transacciones que se reversaron ▪ Se registra el comienzo de una transacción, los commits y rollbacks ▪ Si un servidor falla durante una transacción, no hay registro de un rollback o commit ▪ Durante la recuperación (recovery), las modificaciones en transacciones sin un registro de rollback o commit no tendrán efecto. Si las modificaciones fueron grabadas en disco, se revertirán.
  • 144. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 144 02/03/2022 Modo de transacción ▪ Un modo de transacción especifica cómo el servidor debe definir las transacciones ▪ Dos modos de transacción ▪ Unchained ▪ Chained
  • 145. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 145 02/03/2022 Modo unchained ▪ En modo unchained, se requiere explícitamente de una sentencia start tran ▪ También se requiere de commit tran o rollback tran explícitos
  • 146. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 146 02/03/2022 Ejemplo de modo Unchained set chained off start tran delete salesdetail where stor_id = "5023" and ord_num = "AB-123-DEF-425-1Z3" if @@error <> 0 begin rollback tran return end delete sales where stor_id = "5023" and ord_num = "AB-123-DEF-425-1Z3" if @@error <> 0 begin rollback tran return end commit tran
  • 147. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 147 02/03/2022 Modo chained ▪ En modo chained, el servidor ejecuta un start implícito antes de: ▪ Sentencias DML– insert, update, delete, select ▪ Sentencias de Cursor– open, fetch ▪ Se requiere de commit tran o rollback tran explícitos ▪ Este modo es ANSI compliant
  • 148. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 148 02/03/2022 Ejemplo de modo chained set chained on -- The server executes an implicit begin tran before -- the next statement. delete salesdetail where stor_id = "5023" and ord_num = "AB-123-DEF-425-1Z3" if @@error <> 0 begin rollback tran return end delete sales where stor_id = "5023" and ord_num = "AB-123-DEF-425-1Z3" if @@error <> 0 begin rollback tran return end commit tran
  • 149. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 149 02/03/2022 Ejemplo start tran insert sales values ("5023", "AB-123-DEF-425-1Z3", "Oct 31 1985") if @@error <> 0 begin rollback transaction return end insert salesdetail values ("5023", "AB-123-DEF-425-1Z3", "TC4203", 2500, 60.5) if @@error <> 0 begin rollback transaction return end commit transaction
  • 150. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 150 02/03/2022 Ejemplo start tran update publishers set pub_id = "9999" where pub_id = "9988" /* check for system error or no rows affected */ if @@error <> 0 or @@rowcount <> 1 begin rollback tran /* Rollback to begin tran*/ return end
  • 151. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 151 02/03/2022 update titles set pub_id = "9999" -- cascade change to titles where pub_id = "9988" if @@error <> 0 begin rollback tran /* Rollback both updates*/ return end /* You might not check @@rowcount for the ** update to the titles table because a publisher ** may not have any titles associated with it. ** A message sent by a print or raiserror ** statement may be used to advise the user that ** no rows were modified in titles. */ commit tran Ejemplo
  • 152. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 152 02/03/2022 Ejemplo • Batch que contiene transacción: declare @err int, @rows int start tran update publishers set pub_id = "x999" where pub_id = "0736" select @err = @@error, @rows = @@rowcount if @err <> 0 begin rollback tran raiserror 31001, "0736" return end if @rows = 0 begin rollback tran raiserror 35001, "publishers" return end
  • 153. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 153 02/03/2022 Ejemplo update titles -- cascade change to titles set pub_id = "x999" where pub_id = "0736" select @err = @@error if @err <> 0 begin rollback tran raiserror 31002, "0736" return end commit tran
  • 154. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 154 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Agrupación ▪ Consultas multitablas ▪ Filtros de grupo ▪ Subconsultas
  • 155. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 155 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 156. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 156 02/03/2022 Esquema de ejemplos - DB Employees
  • 157. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 157 02/03/2022 Esquema de ejemplos - DB Employees
  • 158. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 158 02/03/2022 Esquema de ejemplos - DB Employees
  • 159. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 159 02/03/2022 Tablas para Ejemplos - Employee CREATE TABLE EMPLOYEE (EMPNO CHARACTER(6) PRIMARY KEY ,FIRSTNME VARCHAR(12) NOT NULL ,MIDINIT CHARACTER(1) ,LASTNAME VARCHAR(15) NOT NULL ,WORKDEPT CHARACTER(3) ,PHONENO CHARACTER(4) ,HIREDATE DATE ,JOB CHARACTER(8) ,EDLEVEL SMALLINT NOT NULL ,SEX CHARACTER(1) ,BIRTHDATE DATE ,SALARY DECIMAL(9,2) ,BONUS DECIMAL(9,2) ,COMM DECIMAL(9,2))
  • 160. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 160 02/03/2022 Tablas para Ejemplos - Employee
  • 161. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 161 02/03/2022 Tablas para Ejemplos - Department CREATE TABLE DEPARTMENT (DEPTNO CHARACTER(3) PRIMARY KEY ,DEPTNAME VARCHAR(36) NOT NULL ,MGRNO CHARACTER(6) ,ADMRDEPT CHARACTER(3) NOT NULL ,LOCATION CHARACTER(16));
  • 162. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 162 02/03/2022 Tablas para Ejemplos - Project CREATE TABLE `DEPARTMENT` ( `DEPTNO` char(3) NOT NULL, `DEPTNAME` varchar(36) NOT NULL, `MGRNO` char(6) DEFAULT NULL, `ADMRDEPT` char(3) NOT NULL, `LOCATION` char(16) DEFAULT NULL);
  • 163. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 163 02/03/2022 Proyección de algunas columnas DEPTNAME ADMRDEPT DEPTNO SPIFFY COMPUTER SERVICE DIV. PLANNING INFORMATION CENTER DEVELOPMENTCENTER MANUFACTURING SYSTEMS ADMINISTRATION SYSTEMS SUPPORT SERVICES OPERATIONS SOFTWARE SUPPORT A00 A00 A00 A00 D01 D01 A00 E01 E01 A00 B01 C01 D01 D11 D21 E01 E11 E21 SELECT DEPTNO, DEPTNAME, ADMRDEPT FROM DEPARTMENT
  • 164. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 164 02/03/2022 Eliminación de filas duplicadas ▪ SQL permite duplicados en el resultado ▪ Para eliminar las tuplas repetidas se utiliza la cláusula DISTINCT. ▪ También es posible pedir explícitamente la inclusión de filas repetidas mediante el uso de la cláusula ALL. ADMRDEPT A00 A00 A00 A00 D01 D01 A00 E01 E01 SELECT ADMRDEPT FROM DEPARTMENT ADMRDEPT A00 D01 E01 SELECT DISTINCT ADMRDEPT FROM DEPARTMENT SELECT ALL ADMRDEPT FROM DEPARTMENT
  • 165. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 165 02/03/2022 Eliminación de filas duplicadas ▪ ¿Qué trabajos realiza cada departamento? WORKDEPT A00 A00 A00 B01 C01 C01 D11 D11 D21 D21 E01 E11 E11 E21 E21 JOB CLERK PRES SALESREP MANAGER ANALYST MANAGER DESIGNER MANAGER CLERK MANAGER MANAGER MANAGER OPERATOR FIELDREP MANAGER SELECT DISTINCT WORKDEPT, JOB FROM EMPLOYEE
  • 166. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 166 02/03/2022 Proyección de todos los atributos ▪ Se puede pedir la proyección de todos los atributos de la consulta mediante utilizando el símbolo '*' ▪ La tabla resultante contendrá todos los atributos de las tablas que aparecen en la cláusula FROM. SELECT * FROM DEPARTMENT SPIFFY COMPUTER SERVICE DIV. PLANNING INFORMATION CENTER DEVELOPMENTCENTER MANUFACTURING SYSTEMS ADMINISTRATION SYSTEMS SUPPORT SERVICES OPERATIONS SOFTWARE SUPPORT DEPTNAME ADMRDEPT LOCATION MGRNO DEPTNO A00 A00 A00 A00 D01 D01 A00 E01 E01 000010 000020 000030 - - - - - - 000060 000070 000050 000090 000100 A00 B01 C01 D01 D11 D21 E01 E11 E21
  • 167. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 167 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Consultas multitablas ▪ Agrupación ▪ Filtros de grupo ▪ Subconsultas
  • 168. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 168 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 169. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 169 02/03/2022 Salida ordenada ▪ SQL permite controlar el orden en el que se presentan las tuplas de una relación mediante la cláusula ORDER BY. ▪ La cláusula ORDER BY tiene la forma ORDER BY A1 <DIRECCION>, ..., An <DIRECCION> ▪ A1, ..., An son atributos de la relación resultante de la consulta ▪ Ai <DIRECCION> controla si la ordenación es Ascendente 'ASC' o descendente 'DESC' por el campo Ai. Por defecto la ordenación se realiza de manera ascendente. ▪ La ordenación se realiza tras haber ejecutado la consulta sobre las tuplas resultantes. ▪ La ordenación puede convertirse en una operación costosa dependiendo del tamaño de la relación resultante.
  • 170. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 170 02/03/2022 Salida ordenada (cont.) SELECT DEPTNO, DEPTNAME, ADMRDEPT FROM DEPARTMENT ORDER BY ADMRDEPT ASC SPIFFY COMPUTER SERVICE DIV. INFORMATION CENTER PLANNING SUPPORTSERVICES DEVELOPMENTCENTER MANUFACTURING SYSTEMS ADMINISTRATION SYSTEMS SOFTWARE SUPPORT OPERATIONS DEPTNAME ADMRDEPT DEPTNO A00 A00 A00 A00 A00 D01 D01 E01 E01 A00 C01 B01 E01 D01 D11 D21 E21 E11
  • 171. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 171 02/03/2022 Salida ordenada (cont.) SELECT DEPTNO, DEPTNAME, ADMRDEPT FROM DEPARTMENT ORDER BY ADMRDEPT ASC, DEPTNO DESC SUPPORT SERVICES DEVELOPMENT CENTER INFORMATION CENTER PLANNING SPIFFY COMPUTER SERVICE DIV. ADMINISTRATION SYSTEMS MANUFACTURING SYSTEMS SOFTWARE SUPPORT OPERATIONS DEPTNAME DEPTNO ADMRDEPT A00 A00 A00 A00 A00 D01 D01 E01 E01 E01 D01 C01 B01 A00 D21 D11 E21 E11
  • 172. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 172 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Consultas multitablas ▪ Agrupación ▪ Filtros de grupo ▪ Subconsultas
  • 173. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 173 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 174. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 174 02/03/2022 Selección de filas ▪ La cláusula WHERE permite filtrar las filas de la relación resultante. ▪ La condición de filtrado se especifica como un predicado. ▪ El predicado de la cláusula WHERE puede ser simple o complejo ▪ Se utilizan los conectores lógicos AND (conjunción), OR (disyunción) y NOT (negación) ▪ Las expresiones pueden contener ▪ Predicados de comparación ▪ BETWEEN / NOT BETWEEN ▪ IN / NOT IN (con y sin subconsultas) ▪ LIKE / NOT LIKE ▪ IS NULL / IS NOT NULL ▪ ALL, SOME/ANY (subconsultas) ▪ EXISTS (subconsultas)
  • 175. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 175 02/03/2022 Selección de filas (cont.) ▪ Predicados de comparación ▪ Operadores: =, <> (es el ≠), <, <=, >=. > ▪ BETWEEN Op1 AND Op2 ▪ Es el operador de comparación para intervalos de valores o fechas. ▪ IN es el operador que permite comprobar si un valor se encuentra en un conjunto. ▪ Puede especificarse un conjunto de valores (Val1, Val2, …) ▪ Puede utilizarse el resultado de otra consulta SELECT.
  • 176. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 176 02/03/2022 Selección de filas (cont.) ▪ LIKE es el operador de comparación de cadenas de caracteres. ▪ SQL distingue entre mayúsculas y minúsculas ▪ Las cadenas de caracteres se incluyen entre comillas simples ▪ SQL permite definir patrones a través de los siguientes caracteres: ▪ '%', que es equivalente a "cualquier subcadena de caracteres" ▪ '_', que es equivalente a "cualquier carácter" ▪ IS NULL es el operador de comparación de valores nulos.
  • 177. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 177 02/03/2022 Ejemplo de selección de filas ▪ ¿Qué departamentos informan al A00? SELECT DEPTNO, ADMRDEPT FROM DEPARTMENT WHERE ADMRDEPT='A00' DEPTNO ADMRDEPT A00 B01 C01 D01 E01 A00 A00 A00 A00 A00
  • 178. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 178 02/03/2022 Ejemplo de selección de filas ▪ Necesito el apellido y el nivel de formación de los empleados cuyo nivel de formación es mayor o igual a 19 SELECT LASTNAME, EDLEVEL FROM EMPLOYEE WHERE EDLEVEL >= 19 EDLEVEL LASTNAME KWAN LUCCHESSI 20 19
  • 179. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 179 02/03/2022 Ejemplo de selección de filas ▪ Necesito el número de empleado, apellido y fecha de nacimiento de aquellos que hayan nacido después del 1 de enero de 1955 (inclusive). SELECT EMPNO, LASTNAME, BIRTHDATE FROM EMPLOYEE WHERE BIRTHDATE >='1955-01-01' ORDER BY BIRTHDATE BIRTHDATE EMPNO 000160 000100 LASTNAME PIANKA SPENCER 1955-04-12 1956-12-18
  • 180. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 180 02/03/2022 Múltiples condiciones - AND ▪ Necesito el número de empleado, el trabajo y el nivel de formación de los analistas con un nivel de educación 16 SELECT EMPNO, JOB, EDLEVEL FROM EMPLOYEE WHERE JOB='ANALYST' AND EDLEVEL=16 EMPNO JOB EDLEVEL 000130 ANALYST 16
  • 181. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 181 02/03/2022 Múltiples condiciones – AND/OR ▪ Obtener el número de empleado, el trabajo y el nivel de formación de todos los analistas con un nivel 16 y de todos los empleados de nivel 18. La salida se ordena por trabajo y nivel SELECT EMPNO, JOB, EDLEVEL FROM EMPLOYEE WHERE (JOB='ANALYST' AND EDLEVEL=16) OR EDLEVEL=18 ORDER BY JOB, EDLEVEL EMPNO JOB EDLEVEL 000130 000140 000220 000020 000010 ANALYST ANALYST DESIGNER MANAGER PRES 16 18 18 18 18
  • 182. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 182 02/03/2022 SELECT con BETWEEN ▪ Obtener el número de empleado y el nivel de todos los empleados con un nivel entre 12 y 15 SELECT EMPNO, EDLEVEL FROM EMPLOYEE WHERE EDLEVEL BETWEEN 12 AND 15 ORDER BY EDLEVEL 000250 EMPNO EDLEVEL 000310 000290 000300 000330 000100 000230 000120 000270 12 12 14 14 14 14 14 15 15
  • 183. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 183 02/03/2022 SELECT con IN ▪ Listar los apellidos y nivel de formación de todos los empleados de nivel 14, 19 o 20. ▪ El resultado clasificado por nivel y apellido SELECT LASTNAME, EDLEVEL FROM EMPLOYEE WHERE EDLEVEL IN (14, 19, 20) ORDER BY EDLEVEL, LASTNAME LASTNAME EDLEVEL JEFFERSON LEE O'CONNELL SMITH SPENSER LUCCHESI KWAN 14 14 14 14 14 19 20
  • 184. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 184 02/03/2022 Búsqueda parcial - LIKE ▪ Obtener el apellido de todos los empleados cuyo apellido empiece por G SELECT LASTNAME FROM EMPLOYEE WHERE LASTNAME LIKE 'G%'; LASTNAME GEYER GOUNOT
  • 185. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 185 02/03/2022 Búsqueda parcial – LIKE Ejemplos con % SELECT LASTNAME FROM EMPLOYEE WHERE LASTNAME LIKE '%SON'; THOMPSON HENDERSON ADAMSON JEFFERSON JOHNSON THOMPSON ADAMSON MARINO SELECT LASTNAME FROM EMPLOYEE WHERE LASTNAME LIKE '%M%N%';
  • 186. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 186 02/03/2022 Búsqueda parcial – LIKE Ejemplos con _ ▪ ¿Qué empleados tienen una C como segunda letra de su apellido? SELECT LASTNAME FROM EMPLOYEE WHERE LASTNAME LIKE '_C%'; LASTNAME SCOUTTEN SCHNEIDER
  • 187. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 187 02/03/2022 Búsqueda parcial – NOT LIKE ▪ Necesito todos los departamentos excepto aquellos cuyo número NO empiece por 'D' SELECT DEPTNO, DEPTNAME FROM DEPARTMENT WHERE DEPTNO NOT LIKE 'D%'; DEPTNAME DEPTNO SPIFFY COMPUTER SERVICE DIV. PLANNING INFORMATION CENTER SUPPORT SERVICES OPERATIONS SOFTWARE SUPPORT A00 B01 C01 E01 E11 E21
  • 188. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 188 02/03/2022 Expresiones y renombramiento de columnas SELECT EMPNO, SALARY, COMM, SALARY+COMM AS INCOME FROM EMPLOYEE WHERE SALARY < 20000 ORDER BY EMPNO SALARY COMM INCOME EMPNO 18270.00 19180.00 17250.00 15340.00 17750.00 15900.00 19950.00 1462.00 1534.00 1380.00 1227.00 1420.00 1272.00 1596.00 19732.00 20714.00 18630.00 16567.00 19170.00 17172.00 21546.00 000210 000250 000260 000290 000300 000310 000320
  • 189. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 189 02/03/2022 Renombramiento de tablas ▪ Es posible obtener “copias” de una tabla situando etiquetas junto al nombre de las tablas. ▪ Ejemplo: en el siguiente esquema de base de datos, queremos obtener el nombre de los empleados con al menos dos hijos. EMP (DNI, NOM) HIJOS (DNI, NOMH) ▪ Realiza el producto cartesiano de las tres tablas y da como resultado aquellas tuplas con igual DNI en las tres y con distinto nombre en los hijos. ¿Solución a la repetición de nombres de distintos empleados? SELECT NOM FROM EMP, HIJOS H1, HIJOS H2 WHERE EMP.DNI = H1.DNI AND EMP.DNI = H2.DNI AND H1.NOMH <> H2.NOMH;
  • 190. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 190 02/03/2022 Renombramiento de tablas (cont.) ▪ Utilizar clausula DISTINCT (elimina filas repetidas) e incluir la clave de la tabla: ▪ Ejemplo: en el siguiente esquema de base de datos, se piden los apellidos de cada empleado y de su supervisor. ▪ EMP (DNI, NOM, AP, SUELDO, ND, DNISUPERV) ▪ Las etiquetas también sirven para desambiguar. SELECT DISTINCT EMP.NOM, EMP.DNI FROM EMP, HIJOS H1, HIJOS H2 WHERE EMP.DNI = H1.DNI AND EMP.DNI = H2.DNI AND H1.NOMH <> H2.NOMH; SELECT E.AP, S.AP FROM EMP E, EMP S WHERE E.DNISUPERV = S.DNI;
  • 191. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 191 02/03/2022 Tipos SQL y valores literales ▪ La norma SQL define un conjunto de tipos para las columnas de las tablas. ▪ Habitualmente cada SGBD tiene tipos propios o particularidades para los tipos de la norma SQL. ▪ Es necesario consultar el manual del SGBD para obtener información acerca de los tamaños máximos de almacenamiento. ▪ En el caso de cadenas, cual es la longitud máxima de almacenamiento. ▪ En el caso de tipos numéricos, cual es el rango de valores posibles.
  • 192. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 192 02/03/2022 Tipos SQL y valores literales Tipo Ejemplo BIGINT 8589934592 INTEGER 186282 SMALLINT 186 NUMERIC(8,2) 999999.99 (precisión, escala) DECIMAL(8,2) 999999.99 (precisión, escala) REAL 6.02257E23 DOUBLE PRECISION 3.141592653589 FLOAT 6.02257E23 CHARACTER(max) 'GREECE ' (15 caracteres) VARCHAR(n) 'hola' DATE date 'YYYY-MM-DD' TIME time 'hh:mm:ss.ccc' TIMESTAMP timestamp 'YYYY-MM-DD hh:mm:ss.ccc'
  • 193. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 193 02/03/2022 Expresiones ▪ Aunque SQL no es un lenguaje de programación de propósito general, permite definir expresiones calculadas. ▪ Estas expresiones pueden contener ▪ Referencias a columnas ▪ Valores literales ▪ Operadores aritméticos ▪ Llamadas a funciones ▪ Los operadores aritméticos son los habituales: +, -, * y / ▪ Estos operadores sólo funcionan con valores numéricos. ▪ Los operadores '+' y '–' habitualmente funcionan para fechas. ▪ Aunque las normas SQL definen un conjunto mínimo de funciones, los SGBD proporcionan una gran variedad. ▪ Es necesario consultar el manual del SGBD particular.
  • 194. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 194 02/03/2022 Funciones matemáticas comunes Descripción IBM DB2 SQL Server Oracle MySQL Valor absoluto ABSs ABS ABS ABS Menor entero >= valor CEIL CEILING CEIL CEILING Menor entero <= valor FLOOR FLOOR FLOOR FLOOR Potencia POWER POWER POWER POWER Redondeo a un número de cifras decimales ROUND ROUND ROUND ROUND Módulo MOD. % MOD. %
  • 195. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 195 02/03/2022 Funciones de cadena Descripción IBM DB2 SQL Server Oracle MySQL Convierte todos los caracteres a minúsculas LOWER LOWER LOWER LOWER Convierte todos los caracteres a mayúsculas UPPER UPPER UPPER UPPER Elimina los blancos del final de la cadena RTRIM RTRIM RTRIM RTRIM Elimina los blancos del comienzo de la cadena LTRIM LTRIM LTRIM LTRIM Devuelve una subcadena SUBSTR SUBSTRING SUBSTR SUBSTRING Concatena dos cadenas CONCAT + CONCAT CONCAT
  • 196. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 196 02/03/2022 Operaciones aritméticas ▪ Necesito obtener el salario, la comisión y los ingresos totales de todos los empleados que tengan un salario menor de 20000€ , clasificado por número de empleado SELECT EMPNO, SALARY, COMM, SALARY + COMM FROM EMPLOYEE WHERE SALARY < 20000 ORDER BY EMPNO 18270.00 19180.00 17250.00 15340.00 17750.00 15900.00 19950.00 1462.00 1534.00 1380.00 1227.00 1420.00 1272.00 1596.00 19732.00 20714.00 18630.00 16567.00 19170.00 17172.00 21546.00 SALARY COMM EMPNO 000210 000250 000260 000290 000300 000310 000320
  • 197. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 197 02/03/2022 Operaciones aritméticas (cont.) SELECT EMPNO, SALARY, SALARY*1.0375 FROM EMPLOYEE WHERE SALARY < 20000 ORDER BY EMPNO SALARY EMPNO 18270.00 19180.00 17250.00 15340.00 17750.00 15900.00 19950.00 18955.125000 19899.250000 17896.875000 15915.250000 18415.625000 16496.250000 20698.125000 000210 000250 000260 000290 000300 000310 000320
  • 198. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 198 02/03/2022 Expresiones en predicados SELECT EMPNO, SALARY, (COMM/SALARY)*100 FROM EMPLOYEE WHERE (COMM/SALARY) * 100 > 8 ORDER BY EMPNO SALARY EMPNO 2274.00 1462.00 2301.00 2030.00 28420.00 18270.00 28760.00 25370.00 000140 000210 000240 000330 COMM 8.001400 8.002100 8.000600 8.001500
  • 199. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 199 02/03/2022 Uso de funciones SELECT EMPNO, SALARY, TRUNCATE(SALARY*1.0375, 2) FROM EMPLOYEE WHERE SALARY < 20000 ORDER BY EMPNO SALARY EMPNO 18270.00 19180.00 17250.00 15340.00 17750.00 15900.00 19950.00 18955.12 19899.25 17896.87 15915.25 18415.62 16496.25 20698.12 000210 000250 000260 000290 000300 000310 000320
  • 200. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 200 02/03/2022 Uso de funciones (cont.) SELECT CONCAT(LASTNAME,' , ',FIRSTNAME ) AS NAME FROM EMPLOYEE WHERE WORKDEPT = 'A00' ORDER BY NAME NAME HAAS, CHRISTA LUCCHESI, VINCENZO O'CONNELL, SEAN
  • 201. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 201 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Consultas multitablas ▪ Agrupación ▪ Filtros de grupo ▪ Subconsultas
  • 202. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 202 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 203. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 203 02/03/2022 Operadores de conjunto ▪ SQL incluye las operaciones: ▪ UNION ▪ INTERSECT ▪ EXCEPT (MINUS en Oracle) ▪ Por definición los operadores de conjunto eliminan las tuplas duplicadas. ▪ Para retener duplicados se debe utilizar <Operador> ALL
  • 204. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 204 02/03/2022 Operadores de conjunto Encuentre todos los clientes que tienen un préstamo, una cuenta o ambos : (select customer-name from depositor) except (select customer-name from borrower) (select customer-name from depositor) intersect (select customer-name from borrower) Encuentre todos los clientes que tienen una cuenta pero no un préstamo. (select customer-name from depositor) union (select customer-name from borrower) Encuentre todos los clientes que tienen un préstamo y una cuenta.
  • 205. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 205 02/03/2022 UNION ▪ Cada SELECT debe tener el mismo número de columnas ▪ Las columnas correspondientes deben tener tipos de datos compatibles ▪ UNION elimina duplicados ▪ Si se indica, el ORDER BY debe ser la última cláusula de la sentencia
  • 206. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 206 02/03/2022 UNION Mgr.: Dept.: Mgr.: Dept.: Mgr.: Dept.: Mgr.: Dept.: HAAS SPIFFY COMPUTER SERVICE DIV. THOMPSON PLANNING KWAN INFORMATION CENTER GEYER SUPPORT SERVICES DEPTNAME MGRNO 000010 000010 000020 000020 000030 000030 000050 000050 Cada entrada debe tener 2 lineas: la primera debe incluir el número y nombre del director y la seguna el número y el nombre del departamento. SELECT MGRNO , 'Dept.:', DEPTNAME FROM DEPARTMENT UNION SELECT MGRNO, 'Mgr.:', LASTNAME FROM DEPARTMENT D, EMPLOYEE E WHERE D.MGRNO = E.EMPNO ORDER BY 1,2 DESC
  • 207. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 207 02/03/2022 Consultar más de una tabla EMPLOYEE DEPTNAME LASTNAME WORKDEPT . . . . . . DEPARTMENT EMPNO DEPTNO A00 C01 D01 D21 SPIFFY COMPUTER SERVICE DIV. INFORMATION CENTER DEVELOPMENT CENTER ADMINISTRATION SYSTEMS 000010 000020 000030 000040 A00 C01 C01 D21 HAAS THOMPSON KWAN PULASKI
  • 208. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 208 02/03/2022 Sintaxis del JOIN: formato 1 HAAS WORKDEPT DEPTNAME LASTNAME A00 SPIFFY COMPUTER SERVICE DIV. 000010 SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME FROM EMPLOYEE, DEPARTMENT WHERE WORKDEPT = DEPTNO AND LASTNAME = 'HAAS' EMPNO
  • 209. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 209 02/03/2022 JOIN de tres tablas FIRSTNME LASTNAME MIDINIT DEPTNAME MGRNO PROJNAME DEPTNO . . . DEPARTMENT EMPLOYEE EMPNO DEPTNO PROJNO AD3100 AD3110 AD3111 AD3112 AD3113 IF1000 ADMIN SERVICES GENERAL AD SYSTEMS PAYROLL PROGRAMMING PERSONELL PROGRAMMING ACCOUNT. PROGRAMMING QUERY SERVICES D01 D21 D21 D21 D21 C01 A00 B01 C01 D01 D11 D21 E01 000010 000020 000030 - - - - - - 000060 000070 000050 SPIFFY COMPUTER SERVICE DIV. PLANNING INFORMATION CENTER DEVELOPMENT CENTER MANUFACTURING SYSTEMS ADMINISTRATION SYSTEMS SUPPORT SERVICES HAAS THOMPSON KWAN GEYER STERN PULASKI HENDERSON SPENSER I L A B F D W Q CHRISTA MICHAEL SALLY JOHN IRVING EVA EILEEN THEODORE 000010 000020 000030 000050 000060 000070 000090 000100 PROJECT . . . . . .
  • 210. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 210 02/03/2022 JOIN de tres tablas DEPTNO DEPTNAME MGRNO LASTNAME PROJNO D21 D21 D21 D21 ADMINISTRATION SYSTEMS ADMINISTRATION SYSTEMS ADMINISTRATION SYSTEMS ADMINISTRATION SYSTEMS 000070 000070 000070 000070 PULASKI PULASKI PULASKI PULASKI AD3110 AD3111 AD3112 AD3113 SELECT PROJNO, PROJECT.DEPTNO, DEPTNAME, MGRNO, LASTNAME FROM PROJECT, DEPARTMENT, EMPLOYEE WHERE PROJECT.DEPTNO = DEPARTMENT.DEPTNO AND DEPARTMENT.MGRNO = EMPLOYEE.EMPNO AND DEPARTMENT.DEPTNO = 'D21' ORDER BY PROJNO
  • 211. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 211 02/03/2022 Nombre de correlación (P, D, E) DEPTNO DEPTNAME MGRNO LASTNAME PROJNO D21 D21 D21 D21 ADMINISTRATION SYSTEMS ADMINISTRATION SYSTEMS ADMINISTRATION SYSTEMS ADMINISTRATION SYSTEMS 000070 000070 000070 000070 PULASKI PULASKI PULASKI PULASKI AD3110 AD3111 AD3112 AD3113 SELECT PROJNO, P.DEPTNO, DEPTNAME, MGRNO, LASTNAME FROM PROJECT P, DEPARTMENT D, EMPLOYEE E WHERE P.DEPTNO = D.DEPTNO AND D.MGRNO = E.EMPNO AND D.DEPTNO = 'D21' ORDER BY PROJNO
  • 212. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 212 02/03/2022 JOIN de una tabla consigo misma DEPTNAME ADMRDEPT LASTNAME LASTNAME WORKDEPT WORKDEPT BIRTHDATE BIRTHDATE . . . . . 2. Recuperar el nº deparatamento de DEPARTMENT (D) 3. Recuperar el director en EMPLOYEE (M) DEPTNO EMPNO EMPNO 000100 000330 SPENSER LEE E21 E21 1956-12-18 1941-07-18 E21 E21 . . 000100 . . SOFTWARE SUPPORT . . 000100 000330 SPENSER LEE E21 E21 1956-12-18 1941-07-18 MGRNO . . . . . . . . . . . . . . . 1. Recuperar la fila de un empleado de la tabla EMPLOYEE (E)
  • 213. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 213 02/03/2022 JOIN de una tabla consigo misma EMPNO LASTNAME BIRTHDATE EMPNO LUCCHESI QUINTANA BROWN JEFFERSON SMITH JOHNSON SCHNEIDER SMITH SETRIGHT MEHTA LEE GOUNOT ¿Qué empleados son mayores que su director? SELECT E.EMPNO, E.LASTNAME, E.BIRTHDATE, M.BIRTHDATE, M.EMPNO FROM EMPLOYEE E, EMPLOYEE M, DEPARTMENT D WHERE E.WORKDEPT = D.DEPTNO AND D.MGRNO = M.EMPNO AND E.BIRTHDATE < M.BIRTHDATE 000110 000130 000200 000230 000250 000260 000280 000300 000310 000320 000330 000340 1929-11-05 1925-09-15 1941-05-29 1935-05-30 1939-11-12 1936-10-05 1936-03-28 1936-10-27 1931-04-21 1932-08-11 1941-07-18 1926-05-17 000010 000030 000060 000070 000070 000070 000090 000090 000090 000100 000100 000100 1933-08-14 1941-05-11 1945-07-07 1953-05-26 1953-05-26 1953-05-26 1941-05-15 1941-05-15 1941-05-15 1956-12-18 1956-12-18 1956-12-18 BIRTHDATE
  • 214. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 214 02/03/2022 Joined Relations** ▪ Join operations toma dos relaciones(tablas) y devuelve como resultado otra relación. ▪ Estas operaciones adicionales se utilizan normalmente como expresiones de subconsulta en la cláusula from ▪ Join condition – define qué tuplas en las dos relaciones coinciden y qué atributos están presentes en el resultado del join. ▪ Join type – define cómo se tratan las tuplas de cada relación que no coinciden con ninguna tupla de la otra relación (según la condición del join). Join Types inner join left outer join right outer join full outer join Join Conditions natural on <predicate> using (A1, A2, ..., An)
  • 215. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 215 02/03/2022
  • 216. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 216 02/03/2022 Joined Relations – Esquema de Ejemplos
  • 217. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 217 02/03/2022 Joined Relations – Tablas para ejemplos ▪ Nota: falta información del borrower para L-260 y falta información de loan para L-155 amount 3000 4000 1700 branch-name Downtown Redwood Perryridge loan-number L-170 L-230 L-260 loan (prestamos) customer-name loan-number Jones Smith Hayes L-170 L-230 L-155 borrower (prestatario)
  • 218. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 218 02/03/2022 Joined Relations – Ejemplos ▪ Select * from loan inner join borrower on loan.loan_number = borrower.loan_number ▪ Select * from loan left outer join borrower on loan.loan_number = borrower.loan_number branch-name amount Downtown Redwood 3000 4000 customer-name loan-number Jones Smith L-170 L-230 loan-number L-170 L-230 branch-name amount Downtown Redwood Perryridge 3000 4000 1700 customer-name loan-number Jones Smith null L-170 L-230 null loan-number L-170 L-230 L-260
  • 219. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 219 02/03/2022 Joined Relations – Natural join En MySQL, NATURAL JOIN es una unión que realiza la misma tarea que una INNER o LEFT JOIN, en la que la cláusula ON o USING se refiere a todas las columnas que tienen en común las tablas que se van a unir.
  • 220. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 220 02/03/2022 Joined Relations – Ejemplos ▪ Select * from loan natural join borrower ▪ Select * from loan natural right outer join borrower La combinación natural analiza todos los campos en común, no solo uno. En general, es mejor evitar las uniones naturales, porque "ocultan" información sobre lo que está haciendo la consulta y pueden conducir fácilmente a errores/resultados inesperados. branch-name amount Downtown Redwood 3000 4000 customer-name loan-number Jones Smith L-170 L-230 loan-number L-170 L-230 branch-name amount Downtown Redwood null 3000 4000 null customer-name Jones Smith Hayes loan-number L-170 L-230 L-155
  • 221. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 221 02/03/2022 Joined Relations – Ejemplos ▪ Select * from loan full outer join borrower using (loan_number) ▪ MySQL no ofrece sintaxis para una full outer join, pero se puede implementar una mediante la unión de left join y right join. ▪ Dado que es probable que no se utilicen índices, espere que estos resultados tomen mucho tiempo en tablas de cualquier tamaño significativo. Select * from loan left outer join borrower using (loan_number) union Select * from loan right outer join borrower using (loan_number) branch-name amount Downtown Redwood Perryridge null 3000 4000 1700 null customer-name Jones Smith null Hayes loan-number L-170 L-230 L-260 L-155
  • 222. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 222 02/03/2022 Joined Relations – Ejemplos ▪ Encuentre todos los clientes que tienen una cuenta o un préstamo (pero no ambos) en el banco. select customer_name from (select * from depositor natural left outer join borrower union select * from depositor natural right outer join borrower) as t where t.account_number is null or t.loan_number is null select customer_name from (depositor natural full outer join borrower ) where account_number is null or loan_number is null No soportado en MySql
  • 223. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 223 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Consultas multitablas ▪ Agrupación ▪ Filtros de grupo ▪ Subconsultas
  • 224. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 224 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 225. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 225 02/03/2022 Funciones de columna ▪ Las funciones de columna o funciones de agregación son funciones que toman una colección (conjunto o multiconjunto) de valores de entrada y devuelve un solo valor. ▪ Las funciones de columna disponibles son: AVG, MIN, MAX, SUM, COUNT. ▪ Los datos de entrada para SUM y AVG deben ser una colección de números, pero el resto de operadores pueden operar sobre colecciones de datos de tipo no numérico.
  • 226. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 226 02/03/2022 Funciones de columna ▪ Por defecto las funciones se aplican a todas las tuplas resultantes de la consulta. ▪ Podemos agrupar las tuplas resultantes para poder aplicar las funciones de columna a grupos específicos utilizando la cláusula GROUP BY. ▪ En la cláusula SELECT de consultas que utilizan funciones de columna solamente pueden aparecer funciones de columna. ▪ En caso de utilizar GROUP BY, también pueden aparecer columnas utilizadas en la agrupación. ▪ Adicionalmente se pueden aplicar condiciones sobre los grupos utilizando la cláusula HAVING.
  • 227. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 227 02/03/2022 Funciones de columna ▪ Cálculo del total → SUM (expresión) ▪ Cálculo de la media → AVG (expresión) ▪ Obtener el valor mínimo → MIN (expresión) ▪ Obtener el valor máximo → MAX (expresión) ▪ Contar el número de filas que satisfacen la condición de búsqueda → COUNT(*) ▪ Los valores NULL SI se cuentan. ▪ Contar el número de valores distintos en una columna → COUNT (DISTINCT nombre-columna) ▪ Los valores NULL NO se cuenta.
  • 228. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 228 02/03/2022 Funciones de columna AVG MIN MAX COUNT DEPT SUM 27303.59375000 15340.00 52750.00 32 8 873715.00 SELECT SUM(SALARY) AS SUM, AVG(SALARY) AS AVG, MIN(SALARY ) AS MIN, MAX(SALARY) AS MAX, COUNT(*) AS COUNT, COUNT(DISTINCT WORKDEPT) AS DEPT FROM EMPLOYEE
  • 229. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 229 02/03/2022 GROUP BY SUM WORKDEPT A00 B01 C01 Necesito conocer los salarios de todos los empleados de los departamentos A00, B01, y C01. Además, para estos departamentos quiero conocer su masa salarial. SELECT WORKDEPT, SALARY FROM EMPLOYEE WHERE WORKDEPT IN ('A00', 'B01', 'C01') ORDER BY WORKDEPT SELECT WORKDEPT, SUM(SALARY) AS SUM FROM EMPLOYEE WHERE WORKDEPT IN ('A00', 'B01', 'C01') GROUP BY WORKDEPT ORDER BY WORKDEPT 128500.00 41250.00 90470.00 WORKDEPT SALARY A00 A00 A00 B01 C01 C01 C01 52750.00 46500.00 29250.00 41250.00 38250.00 23800.00 28420.00
  • 230. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 230 02/03/2022 Función Descripción Ejemplo COUNT() Retorna el numero de registros del SELECT. Cuenta el numero de filas agrupadas. • SELECT COUNT(*) FROM clientes; • SELECT COUNT(sucursal) , sexo FROM clientes GROUP BY sexo; AVG() Retorna el promedio de los valores de un campo determinado. Calcula el valor medio de todos los valores de la columna indicada en (). • SELECT AVG(numventas) FROM clientes; • SELECT AVG(numventas) , sexo FROM clientes GROUP BY sexo; MAX() Retorna el valor maximo de un campo especificio. • SELECT MAX(precio) FROM articulos; • SELECT MAX(precio), codcat FROM articulos GROUP BY codcat; MIN() Retorna el valor minimo de un campo especificio. • SELECT MIN(precio) FROM articulos; • SELECT MIN(precio), codcat FROM articulos GROUP BY codcat; Funciones de Agrupación
  • 231. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 231 02/03/2022 Función Descripción Ejemplo SUM() Calcula la suma de los valores de una columna. • SELECT SUM(precio) FROM articulos; • SELECT SUM(precio), codcat FROM articulos GROUP BY codcat; STDDEV() Calcula la desviacion tipica de los valores de la columna sin tener en cuenta los valores nulos. • SELECT STDDEV(precio) FROM articulos; • SELECT codcat ,STDDEV(precio) FROM articulos GROUP BY codcat; VARIANCE() Calcula la varianza de los valores de la columna sin tener en cuenta los valores nulos. • SELECT VARIANCE(precio) FROM articulos; • SELECT VARIANCE(precio), codcat FROM articulos GROUP BY codcat; Funciones de Agrupación
  • 232. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 232 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Consultas multitablas ▪ Agrupación ▪ Filtros de grupo ▪ Subconsultas
  • 233. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 233 02/03/2022 Estructura de la sentencia SELECT - Nombres de las tablas / vistas - Condiciones (filtros) de selección de filas - Nombre de las columnas - Condiciones de selección de grupo - Nombres de columnas SELECT A1, …, An FROM T1, …, Tn WHERE P GROUP BY Ai1, …, Ain HAVING Q ORDER BY Aj1, …, Ajn -Describe la salida deseada con: •Nombres de columnas •Expresiones aritméticas •Literales •Funciones escalares •Funciones de columna
  • 234. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 234 02/03/2022 GROUP BY-HAVING SUM A00 C01 Ahora sólo quiero ver los departamentos cuya masa salarial sea superior a 50000 SELECT WORKDEPT, SUM(SALARY) AS SUM FROM EMPLOYEE WHERE WORKDEPT IN ('A00', 'B01', 'C01') GROUP BY WORKDEPT HAVING SUM(SALARY) > 50000 ORDER BY WORKDEPT 128500.00 90470.00 WORKDEPT SELECT WORKDEPT, SUM(SALARY) AS SUM FROM EMPLOYEE WHERE WORKDEPT IN ('A00', 'B01', 'C01') GROUP BY WORKDEPT ORDER BY WORKDEPT SUM A00 B01 C01 128500.00 41250.00 90470.00 WORKDEPT
  • 235. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 235 02/03/2022 GROUP BY-HAVING CLERK PRES SALESREP ANALYST 29250.00000000 52750.00000000 46500.00000000 26110.00000000 JOB AVG WORKDEPT A00 A00 A00 C01 Necesito, agrupado por departmento, los trabajadores que no sean managers, designer, y fieldrep, con una media de salario mayor que 25000€. SELECT WORKDEPT, JOB, AVG(SALARY) AS AVG FROM EMPLOYEE WHERE JOB NOT IN ('MANAGER', 'DESIGNER', 'FIELDREP') GROUP BY WORKDEPT, JOB HAVING AVG(SALARY) > 25000 ORDER BY WORKDEPT, JOB
  • 236. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 236 02/03/2022 GROUP BY-HAVING 1 1 3 3 4 5 6 9 3 3 4 5 6 9 NUMB NUMB WORKDEPT WORKDEPT SELECT 1 SELECT 2 B01 E01 A00 C01 E21 E11 D21 D11 A00 C01 E21 E11 D21 D11 SELECT WORKDEPT, COUNT(* ) AS NUMB FROM EMPLOYEE GROUP BY WORKDEPT ORDER BY NUMB, WORKDEPT SELECT WORKDEPT, COUNT(* ) AS NUMB FROM EMPLOYEE GROUP BY WORKDEPT HAVING COUNT(*) > 1 ORDER BY NUMB, WORKDEPT Mostrar los departamentos con más de un empleado
  • 237. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 237 02/03/2022 GROUP BY-HAVING 14 15 15 16 16 17 18 18 15 16 17 27 31 22 49 24 35 24 23 31 49 35 ED ED YEARS YEARS WORKDEPT WORKDEPT SELECT 1 SELECT 2 E11 E21 D21 E01 D11 A00 B01 C01 E21 E01 A00 SELECT WORKDEPT, AVG(EDLEVEL) AS ED, AVG(YEAR(CURRENT_DATE-HIREDATE)) AS YEARS FROM EMPLOYEE GROUP BY WORKDEPT HAVING AVG(YEAR(CURRENT_DATE-HIREDATE)) > = 30 ORDER BY 2 SELECT WORKDEPT, AVG(EDLEVEL) AS ED, AVG(YEAR(CURRENT_DATE-HIREDATE)) AS YEARS FROM EMPLOYEE GROUP BY WORKDEPT ORDER BY 2
  • 238. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 238 02/03/2022 GROUP BY-HAVING 17 18 18 16 15 16 14 14 15 600.00 800.00 500.00 400.00 300.00 800.00 300.00 300.00 300.00 ED ED MIN MIN WORKDEPT WORKDEPT SELECT 1 SELECT 2 A00 B01 C01 D11 D21 E01 E11 E11 D21 SELECT WORKDEPT, AVG(EDLEVEL) AS ED, MIN(BONUS) AS MIN FROM EMPLOYEE GROUP BY WORKDEPT HAVING MIN(BONUS) = 300 ORDER BY 2 SELECT WORKDEPT, AVG(EDLEVEL) AS ED, MIN(BONUS) AS MIN FROM EMPLOYEE GROUP BY WORKDEPT
  • 239. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 239 02/03/2022 Ejecución de consultas SELECT El orden de ejecución de una consulta es el siguiente: 1. Se aplica el predicado WHERE a las tuplas del producto cartesiano/join/vista que hay en el FROM. 2. Las tuplas que satisfacen el predicado de WHERE son colocadas en grupos siguiendo el patrón GROUP BY. 3. Se ejecutan la cláusula HAVING para cada grupo de tuplas anterior. 4. Los grupos obtenidos tras aplicar HAVING son los que serán procesados por SELECT, que calculará, en los casos que se incluyan, las funciones de agregación que le acompañan. 5. A las tuplas resultantes de los pasos anteriores se le aplica la ordenación descrita en la cláusula ORDER BY.
  • 240. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 240 02/03/2022 Contenido ▪ Lenguaje de Definición de Datos (DDL) ▪ Sentencia Create ▪ Sentencia Alter ▪ Sentencia Drop ▪ Sentencia Truncate. ▪ Sentencia Rename ▪ Lenguaje de Manipulación de Datos (DML) ▪ Sentencia Insert ▪ Sentencia Delete ▪ Sentencia Update ▪ Sentencia Select ▪ Sentencia Merge ▪ Lenguaje de Control de Datos (DCL) ▪ Sentencias Grant y Revoke ▪ Lenguaje de Control de Transacciones (TCL) ▪ Propiedades ACID (Atomicidad, Consistency, Isolation, Durability) ▪ Sentencias Commit, Rollback y Savepoint ▪ Consultas SQL básicas ▪ Ordenación ▪ Filtros ▪ Consultas multitablas ▪ Agrupación ▪ Filtros de grupo ▪ Subconsultas
  • 241. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 241 02/03/2022 Subconsultas anidadas (Nested Subqueries) ▪ SQL proporciona un mecanismo para el anidamiento de subconsultas. ▪ Un subquery es una expresión select-from-where que está anidada(nested) dentro de otra consulta. ▪ Un uso común de las subconsultas es realizar pruebas de pertenencia a conjuntos, comparaciones de conjuntos y cardinalidad de conjuntos.
  • 242. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 242 02/03/2022 Tipos de subconsultas 1. Subconsulta de una sola fila: subconsulta que devuelve resultados de una sola fila. Marcan el uso de operadores de comparación de una sola fila, cuando se usan en condiciones WHERE. 2. Subconsulta de varias filas: subconsulta que devuelve una salida de varias filas. Hacen uso de múltiples operadores de comparación de filas como IN, ANY, ALL. También puede haber subconsultas que devuelvan varias columnas. 3. Subconsulta correlacionada: las subconsultas correlacionadas dependen de los datos proporcionados por la consulta externa. Este tipo de subconsulta también incluye subconsultas que usan el operador EXISTS para probar la existencia de filas de datos que cumplen criterios específicos.
  • 243. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 243 02/03/2022 1) Subconsulta de una sola fila ▪ Se utiliza una subconsulta de una sola fila cuando los resultados de la consulta externa se basan en un único valor desconocido. ▪ Aunque este tipo de consulta se denomina formalmente "fila única", el nombre implica que la consulta devuelve varias columnas, pero solo una fila de resultados. Sin embargo, una subconsulta de una sola fila puede devolver solo una fila de resultados que consta de una sola columna para la consulta externa. ▪ En la siguiente consulta SELECT, el SQL interno devuelve solo una fila, es decir, el salario mínimo de la empresa. A su vez, utiliza este valor para comparar el salario de todos los empleados y muestra solo aquellos cuyo salario es igual al salario mínimo. SELECT FIRSTNAME, SALARY, WORKDEPT FROM EMPLOYEE WHERE SALARY = (SELECT MIN(SALARY) FROM EMPLOYEE);
  • 244. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 244 02/03/2022 1) Subconsulta de una sola fila ▪ Una cláusula HAVING se usa cuando los resultados del grupo de una consulta deben restringirse en función de alguna condición. ▪ Si el resultado de una subconsulta debe compararse con una función de grupo, debe anidar la consulta interna en la cláusula HAVING de la consulta externa. SELECT WORKDEPT, MIN(SALARY) FROM EMPLOYEE GROUP BY WORKDEPT HAVING MIN(SALARY) < (SELECT AVG(SALARY) FROM EMPLOYEE)
  • 245. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 245 02/03/2022 2) Subconsulta de varias filas ▪ Las subconsultas de varias filas son consultas anidadas que pueden devolver más de una fila de resultados a la consulta principal. Las subconsultas de varias filas se utilizan con mayor frecuencia en las cláusulas WHERE y HAVING. ▪ Dado que devuelve varias filas, debe ser manejado por operadores de comparación de conjuntos (IN, ALL, ANY). ▪ El operador IN tiene el mismo significado que se discutió anteriormente ▪ El operador ANY compara un valor específico con cada valor devuelto por la subconsulta ▪ El operador ALL compara un valor con cada valor devuelto por una subconsulta.
  • 246. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 246 02/03/2022 2) Subconsulta de varias filas SPIFFY COMPUTER SERVICE SPIFFY COMPUTER SERVICE PLANNING INFORMATION CENTER DEPTNAME DEPTNAME DEPTNO DEPTNO Tabla DEPARTMENT Resultado final A00 B01 C01 D01 D11 D21 E01 E11 E21 A00 B01 C01 SELECT DEPTNO, DEPTNAME FROM DEPARTMENT WHERE DEPTNO NOT IN (SELECT DEPTNO FROM PROJECT) . . . . . . Resultado subconsulta ¿Qué departamentos no tienen proyectos asignados?
  • 247. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 247 02/03/2022 2) Subconsulta de varias filas Clausula any/some F <comp> any r   t  r s.t. (F <comp> t) Donde <comp> puede ser:    =  0 5 6 (5< any ) = true 0 5 0 ) = false 5 0 5 (5  any ) = true (dado que 0  5) (se lee como: 5 < alguna tupla en la relación) (5< any ) = true (5 = any (= any)  in Sin embargo, ( any)  not in
  • 248. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 248 02/03/2022 2) Subconsulta de varias filas Clausula all F <comp> all r   t  r (F <comp> t) 0 5 6 (5< all ) = false 6 10 4 ) = true 5 4 6 (5  all ) = true (dado que 5  4 y 5  6) (5< all ) = false (5 = all ( all)  not in Sin embargo, (= all)  in
  • 249. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 249 02/03/2022 2) Subconsulta de varias filas Uso de operadores de varias filas ▪ [> ALL] Más que el valor más alto devuelto por la subconsulta ▪ [< ALL] Menos que el valor más bajo devuelto por la subconsulta ▪ [< ANY] Menos que el valor más alto devuelto por la subconsulta ▪ [> ANY] Más que el valor más bajo devuelto por la subconsulta ▪ [= ANY] Igual a cualquier valor devuelto por la subconsulta (igual que IN)
  • 250. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 250 02/03/2022 2) Subconsulta de varias filas ▪ La siguiente consulta muestra el error cuando la subconsulta de una sola fila devuelve varias filas. SELECT FIRSTNAME,WORKDEPT FROM EMPLOYEE WHERE WORKDEPT = (SELECT DEPTNO FROM DEPARTMENT WHERE MGRNO<>NULL) WORKDEPT = (select * ERROR at line 4: ORA-01427: single-row subquery returns more than one row
  • 251. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 251 02/03/2022 2) Subconsulta de varias filas ▪ El SQL anterior se puede reescribir usando el operador IN como se muestra a continuación. ▪ Tenga en cuenta que en la consulta anterior, IN coincide con los ID de departamento devueltos por la subconsulta, lo compara con el de la consulta principal y devuelve el nombre del empleado que cumple la condición. ▪ Una combinación join sería una mejor solución para la consulta anterior, pero con fines ilustrativos, se ha utilizado una subconsulta en ella. SELECT FIRSTNAME,WORKDEPT FROM EMPLOYEE WHERE WORKDEPT IN (SELECT DEPTNO FROM DEPARTMENT WHERE MGRNO<>NULL)
  • 252. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 252 02/03/2022 2) Subconsulta de varias filas ▪ Encuentre todos los clientes que tienen una cuenta y un préstamo en el banco. ▪ Encuentre todos los clientes que tienen un préstamo en el banco pero no tienen una cuenta en el banco select distinct customer_name from borrower where customer_name not in (select customer_name from depositor ) select distinct customer_name from borrower where customer_name in (select customer_name from depositor )
  • 253. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 253 02/03/2022 3) Subconsulta correlacionada ▪ A diferencia de una subconsulta normal, en la que la consulta externa depende de los valores proporcionados por la consulta interna, una subconsulta correlacionada es aquella en la que la consulta interna depende de los valores proporcionados por la consulta externa. ▪ Esto significa que en una subconsulta correlacionada, la consulta interna se ejecuta repetidamente, una vez por cada fila que podría seleccionar la consulta externa. ▪ Las subconsultas correlacionadas pueden producir tablas de resultados que respondan preguntas de gestión complejas.
  • 254. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 254 02/03/2022 3) Subconsulta correlacionada ▪ Considere la siguiente consulta SELECT. A diferencia de las subconsultas consideradas anteriormente, la subconsulta en esta declaración SELECT no se puede resolver independientemente de la consulta principal. ▪ Observe que la consulta externa especifica que las filas se seleccionan de la tabla de empleados con un nombre de alias E. ▪ La consulta interna compara la columna de Código de departamento de la tabla de empleados con alias T con la misma columna para el nombre de tabla de alias E. SELECT E.EMPNO ,E.SALARY,E.WORKDEPT FROM EMPLOYEE E WHERE E.SALARY> (SELECT AVG(T.SALARY) FROM EMPLOYEE T WHERE E.WORKDEPT=T.WORKDEPT)
  • 255. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 255 02/03/2022 3) Subconsulta correlacionada usando la cláusula With ▪ Encuentre todas las sucursales donde el depósito total de la cuenta es mayor que el promedio de los depósitos totales de la cuenta en todas las sucursales. with branch_total (branch_name, value) as select branch_name, sum (balance) from account group by branch_name with branch_total_avg (value) as select avg (value) from branch_total select branch_name from branch_total, branch_total_avg where branch_total.value >= branch_total_avg.value https://dev.mysql.com/doc/refman/8.0/en/with.html
  • 256. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 256 02/03/2022 4) Subconsulta de varias columnas ▪ Una subconsulta de varias columnas devuelve más de una columna a la consulta externa y se puede enumerar en la cláusula FROM, WHERE o HAVING de la consulta externa. ▪ Por ejemplo, la siguiente consulta muestra los detalles históricos del empleado cuyo salario actual está en el rango de 1000 y 2000 y que trabajan en el departamento 10 o 20. SELECT first_name, job_id, salary FROM emp_history WHERE (salary, department_id) in (SELECT salary, department_id FROM employees WHERE salary BETWEEN 1000 and 2000 AND department_id BETWEEN 10 and 20) ORDER BY first_name;
  • 257. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 257 02/03/2022 4) Subconsulta de varias columnas ▪ Encuentre todos los clientes que tienen tanto una cuenta como un préstamo en la sucursal de Perryridge Nota: La consulta anterior se puede escribir de una manera mucho más simple. La formulación anterior es simplemente para ilustrar las características de SQL. select distinct customer_name from borrower, loan where borrower.loan_number = loan.loan_number and branch_name = 'Perryridge' and (branch_name, customer_name ) in (select branch_name, customer_name from depositor, account where depositor.account_number = account.account_number )
  • 258. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 258 02/03/2022 4) Subconsulta de varias columnas ▪ Cuando se utiliza una subconsulta de varias columnas en la cláusula FROM de la consulta externa, se crea una tabla temporal a la que pueden hacer referencia otras cláusulas de la consulta externa. Esta tabla temporal se denomina más formalmente vista en línea (inline view). ▪ Los resultados de la subconsulta se tratan como cualquier otra tabla en la cláusula FROM. Si la tabla temporal contiene datos agrupados, los subconjuntos agrupados se tratan como filas de datos independientes en una tabla.
  • 259. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 259 02/03/2022 4) Subconsulta de varias columnas ▪ Considere la cláusula FROM en la siguiente consulta. La vista en línea formada por la subconsulta es la fuente de datos para la consulta principal. SELECT * FROM (SELECT `SALARY`, `WORKDEPT` FROM EMPLOYEE WHERE SALARY BETWEEN 20000 AND 30000)AS T;
  • 260. Bases de Datos Ph.D. Franklin Parrales Carrera de Software 260 02/03/2022 Lenguaje estructurado de consultas Unidad 4 Final de la unidad Y del curso…. !Muchas gracias a todos!