Igbd - 05 SQL DML Parte 3

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 22

Implementacin y gestin

de base de datos
Prof. Carlos Takano
Semana 4

Subconsultas (subqueries)

Subconsultas o subqueries

Son sentencias SELECT que se utilizan


como parte de otra sentencia SQL

Subquery Ejemplo 1
/*
Subquery en clusula WHERE
Este subquery debe devolver slo un valor
*/
SELECT employee_id, first_name, last_name,
department_id, salary
FROM employees
WHERE salary >= (SELECT salary FROM employees
WHERE first_name = 'Alexander'
AND last_name = 'Hunold')

Subquery Ejemplo 2
/*
Subquery en clusula WHERE
Este subquery debe devolver slo un valor
Condiciones en subqueries se pueden combinar
con otras
*/
SELECT employee_id, first_name, last_name,
department_id, salary
FROM employees
WHERE salary = (SELECT max(salary) FROM employees
WHERE department_id = 30)
AND department_id = 80

Subquery Ejemplo 3
/*
Subquery en clusula WHERE
Este subquery puede devolver ms de un valor
*/
SELECT d.department_id, d.department_name
FROM departments d
WHERE d.department_id IN (SELECT e.department_id
FROM employees e)
ORDER BY d. department_id

Subquery Ejemplo 4
/*
Subquery en clusula WHERE
Este subquery puede devolver ms de un valor
ALL significa TODOS
ANY significa POR LO MENOS UNO
*/
SELECT employee_id, first_name, last_name,
department_id, salary
FROM employees
WHERE salary > ALL (SELECT salary FROM employees
WHERE first_name='David')

Subquery Ejemplo 5
/*
Subquery en clusula FROM
Este subquery se utiliza como si fuera una tabla
o vista
*/
SELECT e.last_name, e.salary, e.department_id,
m.max_salary
FROM employees e JOIN
(SELECT department_id, max(salary) max_salary
FROM employees
GROUP BY department_id) m
ON e.department_id = m.department_id
WHERE e.salary < m.max_salary

Subquery Ejemplo 6
/*
Subquery en clusula SELECT
Este subquery est correlacionado, utiliza columnas
que pertenecen a la sentencia externa
*/
SELECT employee_id, first_name, last_name,
department_id, salary,
(SELECT max(salary)
FROM employees
WHERE department_id=e.department_id) dept_max
FROM employees e

Subquery Ejemplo 7
/*
Semijoin
Subquery correlacionado
*/
SELECT d.department_id, d.department_name
FROM departments d
WHERE EXISTS
(SELECT 1
FROM employees e
WHERE e.department_id = d.department_id)
ORDER BY d. department_id

Subquery Ejemplo 8
/*
Antijoin
Subquery correlacionado
*/
SELECT d.department_id, d.department_name
FROM departments d
WHERE NOT EXISTS
(SELECT 1
FROM employees e
WHERE e.department_id = d.department_id)
ORDER BY d. department_id

CREATE TABLE AS Ejemplo 1


/*
Crea una nueva tabla e inserta filas
en la misma operacin
*/
CREATE TABLE departments_1700 AS
SELECT * FROM departments
WHERE location_id = 1700

CREATE TABLE AS Ejemplo 2


/*
Crea slo la estructura, sin datos
*/
CREATE TABLE departments_1700 AS
SELECT * FROM departments
WHERE 1 = 2

Sentencias para modificar


datos

Sentencias para modificar datos

Para modificar datos en SQL, se utilizan las siguientes


sentencias:
INSERT
UPDATE
DELETE

Tener en cuenta que la base de datos trabaja con


transacciones
Una

transaccin es una unidad lgica, conformada por una o ms


operaciones de modificacin de los datos
COMMIT confirma la transaccin en curso
ROLLBACK deshace la transaccin en curso

INSERT Ejemplo 1
/*
Inserta una fila
*/
INSERT INTO departments
(department_id, department_name,
manager_id, location_id)
VALUES
(280, 'Corporate Management',
NULL, 1700)

INSERT Ejemplo 2
/*
INSERT con subquery
*/
INSERT INTO departments_1700
SELECT * FROM departments
WHERE location_id = 1700

UPDATE Ejemplo 1
/*
UPDATE simple
*/
UPDATE departments
SET department_name='Treasury',
manager_id=205
WHERE department_id=100

UPDATE Ejemplo 2
/*
UPDATE con subquery
*/
UPDATE
SET
(
SELECT
WHERE
AND
)
WHERE

departments
manager_id =
employee_id FROM employees
first_name = 'Alexander'
last_name='Hunold'
department_id=100

UPDATE Ejemplo 3
/*
UPDATE con subquery correlacionado
*/
UPDATE
SET
(
SELECT
WHERE
)

employees e
manager_id =
manager_id FROM departments d
d.department_id = e.department_id

DELETE Ejemplo 1
/*
DELETE simple
Las filas a eliminar no deben tener
filas dependientes
*/
DELETE FROM departments
WHERE department_id=100

DELETE Ejemplo 2
/*
DELETE con subquery en la clusula WHERE
Las filas a eliminar no deben tener
filas dependientes
*/
DELETE FROM departments
WHERE department_id NOT IN
(SELECT department_id FROM employees)

You might also like