You are on page 1of 44

Prof.

Robert Espinoza

DML - Select
Agenda

 Modificación de datos.
 Inserción de datos.
 Actualización de datos.
 Eliminación de registros.
 Operaciones combinadas
 Resumen.
Inserción de datos

Sentencia INSERT
 Permite insertar un nuevo registro o conjunto de

registros en una Tabla.

INSERT INTO tabla (campo1, campo2,…)


VALUES (valor1, valor2, ...);

 Si omitimos la indicación de los nombres de las


columnas, el formato es el siguiente:

INSERT INTO tabla


VALUES (valor1, valor2, ...);
Inserción de una fila

INSERT INTO capacitacion (id_capacitacion,nombre,


descripcion)
VALUES (1,'trámites','tramite documentario');
Inserción de una fila

INSERT INTO libros


VALUES (12, 'G SHA inc', 'La incógnita Newton',
'Shaw, Catherine', 'S');
Inserción usando secuencias

Secuencias
 Una secuencia (sequence) se emplea para generar
valores enteros secuenciales únicos y asignárselos a
campos numéricos;
 Se utilizan generalmente para las claves primarias de las
tablas garantizando que sus valores no se repitan.
 Una secuencia es una tabla con un campo numérico
en el cual se almacena un valor y cada vez que se
consulta, se incrementa tal valor para la próxima
consulta.
Inserción usando secuencias

Creación de una secuencia


CREATE SEQUENCE nombre_secuencia
{START WITH entero}
{INCREMENT BY entero}
{MAXVALUE entero }
{MINVALUE entero }
{CYCLE | NOCYCLE}
Inserción usando secuencias

Creación de una secuencia


 START WITH, indica el valor desde el cual comenzará la
generación de números secuenciales. Si no se especifica, se
inicia con el valor que indique MINVALUE.
 INCREMENT BY, especifica el incremento. Debe ser un valor
numérico entero positivo o negativo diferente de 0. Si no se
indica, por defecto es 1.
 MAXVALUE, define el valor máximo para la secuencia. Si se
omite, por defecto es 9999999999999999999999999.
 MINVALUE, establece el valor mínimo de la secuencia. Si se
omite será 1.
 CYCLE indica que, cuando la secuencia llegue a máximo valor
se reinicie, comenzando con el mínimo valor nuevamente. Si
se omite, por defecto la secuencia se crea NOCYCLE.
Inserción usando secuencias

Creación de una secuencia

CREATE SEQUENCE cod_cliente INCREMENT BY 10;

CREATE SEQUENCE cod_cliente


INCREMENT BY 10 MAXVALUE 5000 CYCLE;
Inserción usando secuencias

CREATE TABLE Departamento


( codigo NUMERIC(6) NOT NULL,
nombre VARCHAR2(30) NOT NULL);

CREATE SEQUENCE secuencia_departamento


START WITH 1
INCREMENT BY 1
MAXVALUE 999999
MINVALUE 1;
Inserción usando secuencias

INSERT INTO Departamento


VALUES(secuencia_departamento.NEXTVAL,
'Sistemas');

INSERT INTO Departamento


VALUES(secuencia_departamento.NEXTVAL,
'Contabilidad');
Inserción usando secuencias

Modificación de una secuencia


ALTER SEQUENCE [schema.]nombre_vista opciones;

Ejemplo:

ALTER SEQUENCE secuencia_departamento CYCLE;


Inserción usando secuencias

Eliminación de una secuencia

DROP SEQUENCE [schema.]nombre_vista;

Ejemplo:

DROP SEQUENCE secuencia_departamento;


Inserción de varias filas

INSERT INTO bonos(empleado_id)


( SELECT employee_id
FROM employees
WHERE job_id = 'SA_REP' );
INSERT ALL sobre una tabla

CREATE TABLE ventas_entrada


(
producto_id NUMBER,
cliente_id NUMBER,
semana_st DATE,
ventas_dom NUMBER,
ventas_lun NUMBER,
ventas_mar NUMBER,
ventas_mie NUMBER,
ventas_jue NUMBER,
ventas_vie NUMBER,
ventas_sab NUMBER
);
INSERT ALL sobre una tabla

INSERT INTO ventas_entrada VALUES


(111, 222, '01-10-12', 100, 200, 300, 400, 500, 600, 700);

INSERT INTO ventas_entrada VALUES


(222, 333, '08-10-12', 200, 300, 400, 500, 600, 700, 800);

INSERT INTO ventas_entrada VALUES


(333, 444, '15-10-12', 300, 400, 500, 600, 700, 800, 900);

SELECT * FROM sales_input;


INSERT ALL sobre una tabla
INSERT ALL
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st, ventas_dom)
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st+1, ventas_lun)
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st+2, ventas_mar)
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st+3, ventas_mie)
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st+4, ventas_jue)
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st+5, ventas_vie)
INTO ventas (producto_id, cliente_id, semana_id, monto)
VALUES (producto_id, cliente_id, semana_st+6, ventas_sab)
SELECT producto_id, cliente_id, semana_st, ventas_dom, ventas_lun,
ventas_mar, ventas_mie, ventas_jue, ventas_vie, ventas_sab
FROM ventas_entrada;
INSERT ALL sobre una tabla
INSERT ALL sobre varias tablas
CREATE TABLE ordenes_pequeñas
(
orden_id NUMBER(12) NOT NULL,
cliente_id NUMBER(6) NOT NULL,
total_orden NUMBER(8,2),
rep_ventas_id NUMBER(6)
);
CREATE TABLE ordenes_medianas
AS SELECT * FROM ordenes_pequeñas;
CREATE TABLE ordenes_grandes
AS SELECT * FROM ordenes_pequeñas;
INSERT ALL sobre varias tablas
Tabla orders
INSERT ALL sobre varias tablas

INSERT ALL
WHEN order_total < 10000 THEN
INTO ordenes_pequeñas
WHEN order_total > 10000 AND order_total < 20000 THEN
INTO ordenes_medianas
WHEN order_total > 20000 THEN
INTO ordenes_grandes
SELECT order_id, customer_id, order_total, sales_rep_id
FROM orders;
INSERT ALL sobre varias tablas

Otra forma
INSERT ALL
WHEN order_total < 10000 THEN
INTO ordenes_pequeñas
WHEN order_total > 10000 AND order_total < 20000 THEN
INTO ordenes_medianas
ELSE
INTO ordenes_grandes
SELECT order_id, customer_id, order_total, sales_rep_id
FROM orders;
INSERT ALL sobre varias tablas

Ordenes_pequeñas Ordenes_medianas

Ordenes_grandes
Actualización de datos

Sentencia UPDATE
 Permite modificar un registro o conjunto de registros
existentes en una Tabla.

UPDATE nombre-tabla
SET campo1 = valor1 [, campo2 = valor2 ...]
[WHERE condición]
Actualización de una fila

UPDATE employees
SET salary = salary * 1.2
WHERE job_id = 'AD_PRES' ;
Actualización de varias filas

UPDATE ventas
SET monto = monto + 100
WHERE producto_id = 111 ;
Actualización basado en SELECT

SELECT min_salary
FROM jobs
WHERE job_id = 'AD_PRES';
Actualización basado en SELECT

UPDATE employees
SET salary = ( SELECT min_salary
FROM jobs
WHERE job_id = 'AD_PRES' )
WHERE job_id = 'AD_VP' ;
Actualización con dos tablas

EMPLOYEES

JOBS
Actualización con dos tablas

SELECT e.salary as old_salary,


j.min_salary * 1.2 as new_salary
FROM employees e INNER JOIN jobs j
ON e.job_id = j.job_id;
Actualización con dos tablas

UPDATE
(
SELECT e.salary as old_salary,
j.min_salary * 1.2 as new_salary
FROM employees e INNER JOIN jobs j
ON e.job_id = j.job_id
)
SET old_salary = new_salary ;
Actualización con dos tablas
EMPLOYEES
Eliminación de registros

Sentencia DELETE
 Permite eliminar de una tabla un registro o conjunto de
registros existentes.
 Si no se pone condición de selección, borra todas las
filas de la tabla.

DELETE FROM nombre-tabla


[WHERE condición];
Eliminación de una fila

CREATE TABLE employee_temp


AS SELECT * FROM employees;

DELETE
FROM employee_temp
WHERE job_id = 'AD_PRES';
Eliminación de varias filas

DELETE
FROM employee_temp
WHERE job_id = 'HR_REP';
Eliminación con dos tablas

DELETE
FROM employee_temp
WHERE salary <
( SELECT min_salary
FROM Jobs
WHERE job_title = 'Programmer' ) ;
Truncado de una tabla

Sentencia TRUNCATE
 Borrar todas las filas de una tabla o cluster.

TRUNCATE TABLE employee_temp ;


Operaciones combinadas

Sentencia MERGE
 Permite la selección de filas de una o más fuentes

para actualización o inserción en una tabla o vista.


Operaciones combinadas

Sentencia MERGE
CREATE TABLE bonuses
( employee_id NUMBER,
bonus NUMBER DEFAULT 100);

GRANT SELECT ON ORDERS TO HR;

INSERT INTO bonuses(employee_id)


(
SELECT e.employee_id
FROM employees e, oe.orders o
WHERE e.employee_id = o.sales_rep_id
GROUP BY e.employee_id
);
Operaciones combinadas

SELECT *
FROM bonuses
ORDER BY employee_id;
Operaciones combinadas

 Reglas aplicadas en el ejemplo: Bonos y empleados


 Si Salario > US$ 8000: sin bono
 Sin ventas: bono de 1% del salario
 Con ventas: Incremento sobre bono de 1% de su salario
Operaciones combinadas

Aplicando MERGE
MERGE INTO bonuses b
USING (SELECT employee_id, salary, department_id
FROM employees
WHERE department_id = 80) s
ON (b.employee_id = s.employee_id)
WHEN MATCHED THEN
UPDATE SET b.bonus = b.bonus + s.salary*.01
DELETE WHERE (s.salary > 8000)
WHEN NOT MATCHED THEN
INSERT (b.employee_id, b.bonus)
VALUES (s.employee_id, s.salary*.01)
WHERE (s.salary <= 8000);
Operaciones combinadas

SELECT * FROM bonuses;


Resumen

 En esta sesión hemos revisado los fundamentos de las


sentencias de manipulación de datos:
 INSERT
 UPDATE
 DELETE
 MERGE

You might also like