Está en la página 1de 78

BASE DE DATOS

II

DML
HR Schema

BASE DE DATOS II
Tabla EMPLOYEES

BASE DE DATOS II
Tabla EMPLOYEES

EMPLOYEES(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,…)

BASE DE DATOS II
Tabla EMPLOYEES
RESTRICCIONES
DE DOMINIO

EMPLOYEES(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,…)

BASE DE DATOS II
Tabla EMPLOYEES

DESCRIBE EMPLOYEES;

BASE DE DATOS II
SQL
Structured Query Language
(Lenguaje estructurado de consultas)

DDL (Data Definition Language)


Lenguaje de definición de datos

DML (Data Manipulation Language)


Lenguaje de manipulación de datos

DCL (Data Control Language)


Lenguaje de control de datos

BASE DE DATOS II
SQL
Structured Query Language
(Lenguaje estructurado de consultas)

DDL (Data Definition Language)


Lenguaje de definición de datos

DML (Data Manipulation Language)


Lenguaje de manipulación de datos

DCL (Data Control Language)


Lenguaje de control de datos

BASE DE DATOS II
COMENTARIOS

-- ESTO ES UN COMENTARIO

/* ESTO TAMBIEN ES UN COMENTARIO */

/* ESTO ES
UN COMENTARIO
MULTILINEA */

BASE DE DATOS II
DML – SELECT

--TODOS LOS CAMPOS


--TODOS LOS REGISTROS
SELECT *
FROM EMPLOYEES;

BASE DE DATOS II
DML – SELECT

--SOLO 2 CAMPOS
--TODOS LOS REGISTROS
SELECT FIRST_NAME, EMAIL
FROM EMPLOYEES;

BASE DE DATOS II
DML – SELECT

--TODOS LOS CAMPOS


--FILTRANDO REGISTROS
SELECT *
FROM EMPLOYEES
WHERE EMPLOYEE_ID = 100;

BASE DE DATOS II
DML – SELECT

/*
* SOLO 2 CAMPOS
* FILTRANDO REGISTROS (SIN MANAGER ASIGNADO)
* ORDENADO
*/
SELECT FIRST_NAME, EMAIL
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL
ORDER BY EMPLOYEE_ID;

BASE DE DATOS II
DML – SELECT

/*
* SOLO 2 CAMPOS
* FILTRANDO REGISTROS (SIN MANAGER ASIGNADO)
* ORDENADO
*/
SELECT FIRST_NAME, EMAIL
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL
ORDER BY EMPLOYEE_ID;

BASE DE DATOS II
Tabla DUAL

▪ Es una tabla “comodín” en Oracle


▪ El propietario es SYS
▪ Puede ser accedida por cualquier usuario
▪ Posee una sola columna llamada DUMMY
▪ Contiene un único registro cuyo valor es 'X'

SELECT *
FROM DUAL;

BASE DE DATOS II
FECHAS

--FECHA ACTUAL
SELECT SYSDATE
FROM DUAL;

--CONCATENACION
SELECT 'Hoy es ' || SYSDATE AS FECHA
FROM DUAL;

--FECHA ACTUAL (ANSI)


SELECT CURRENT_DATE
FROM DUAL;

BASE DE DATOS II
FECHAS

--FECHA ACTUAL --MySQL


SELECT SYSDATE SELECT SYSDATE()
FROM DUAL; --SQL Server
SELECT GETDATE()
--CONCATENACION
SELECT 'Hoy es ' || SYSDATE AS FECHA
FROM DUAL;

--FECHA ACTUAL (ANSI)


SELECT CURRENT_DATE
FROM DUAL;

BASE DE DATOS II
FECHAS

--FECHA ACTUAL
SELECT SYSDATE
FROM DUAL; FUNCIONES BUILT-IN

--CONCATENACION
SELECT 'Hoy es ' || SYSDATE AS FECHA
FROM DUAL;

--FECHA ACTUAL (ANSI)


SELECT CURRENT_DATE
FROM DUAL;

BASE DE DATOS II
Funciones BUILT-IN

ENTRADA
[ PARAMETROS ]

FUNCION
[ COMPORTAMIENTO ]

SALIDA
[ RESULTADO ]

BASE DE DATOS II
Funciones BUILT-IN

ENTRADA

FUNCION

SALIDA

BASE DE DATOS II
Funciones BUILT-IN

▪ NVL
▪ TO_CHAR
▪ TO_DATE
▪ TO_NUMBER
▪ SUBSTR
▪ TRIM
▪ UPPER / LOWER / INITCAP

http://www.techonthenet.com/oracle/functions/

BASE DE DATOS II
NVL Function

NVL( string1, replace_with )

string1
The string to test for a null value.
replace_with
The value returned if string1 is null.

--EJEMPLO
SELECT NVL(STATE_PROVINCE,'DESCONOCIDA')
FROM LOCATIONS;

BASE DE DATOS II
TO_CHAR Function

TO_CHAR( value [, format_mask] [, nls_language] )

value
A number or date that will be converted to a string.
format_mask
Optional. This is the format that will be used to convert value to a string.
nls_language
Optional. This is the nls language used to convert value to a string.

--EJEMPLO
SELECT TO_CHAR(HIRE_DATE,'MONTH') AS MES,
TO_CHAR(SALARY) AS SALARIO
FROM EMPLOYEES;

BASE DE DATOS II
TO_CHAR Function

TO_CHAR( value [, format_mask] [, nls_language] )

value
A number or date that will be converted to a string.
format_mask
Optional. This is the format that will be used to convert value to a string.
nls_language
Optional. This is the nls language used to convert value to a string.

--EJEMPLO
SELECT TO_CHAR(HIRE_DATE,'MONTH') AS MES,
TO_CHAR(SALARY) AS SALARIO
FROM EMPLOYEES;

BASE DE DATOS II
TO_CHAR Function
--EJEMPLOS TO_CHAR FROM NUMBER
SELECT SALARY AS SALARIO1,
TO_CHAR(SALARY) AS SALARIO2,
TO_CHAR(SALARY,'$99,999.00') AS SALARIO3,
TO_CHAR(SALARY,’$9,999.00’) AS SALARIO4
FROM EMPLOYEES;

https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34510

BASE DE DATOS II
TO_CHAR Function
--EJEMPLOS TO_CHAR FROM DATE
SELECT HIRE_DATE AS FECHA_INGRESO,
TO_CHAR(HIRE_DATE,'MONTH') AS MES_INGRESO,
TO_CHAR(HIRE_DATE,
'MONTH’,
'nls_date_language=Spanish') MES_INGRESO_ESP
FROM EMPLOYEES;

https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34510

BASE DE DATOS II
TO_CHAR Function

format_mask - DATE

BASE DE DATOS II
TO_DATE Function

TO_DATE( string1 [, format_mask] [, nls_language] )

string1
The string that will be converted to a date.
format_mask
Optional. This is the format that will be used to convert string1 to a date.
nls_language
Optional. This is the format that will be used to convert string1 to a date.

--EJEMPLO
SELECT TO_DATE('20190101','YYYYMMDD')
FROM DUAL;

BASE DE DATOS II
TO_NUMBER Function

TO_NUMBER( string1 [, format_mask] [, nls_language] )

string1
The string that will be converted to a number.
format_mask
Optional. This is the format that will be used to convert string1 to a number.
nls_language
Optional. This is the nls language used to convert string1 to a number.

--EJEMPLO
SELECT POSTAL_CODE,TO_NUMBER(POSTAL_CODE)
FROM LOCATIONS
WHERE CITY = 'Roma';

BASE DE DATOS II
SUBSTR Function

SUBSTR( string, start_position [, length ] )

string
The source string.
start_position
The starting position for extraction. The first position in the string is always 1.
length
Optional. It is the number of characters to extract. If this parameter is omitted, the
SUBSTR function will return the entire string.

--EJEMPLO
SELECT STREET_ADDRESS,
SUBSTR(STREET_ADDRESS,5),
SUBSTR(STREET_ADDRESS,5,3)
FROM LOCATIONS;

BASE DE DATOS II
DML – Operadores

--OPERADORES DE COMPARACION
= igual
<> distinto –-otra opción !=
> mayor
< menor
>= mayor o igual
<= menor o igual
LIKE '%STRING%'
NOT LIKE '%STRING%'

BASE DE DATOS II
DML – Operadores

--EJEMPLO 1
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'Da%';

--EJEMPLO 2
SELECT *
FROM EMPLOYEES
WHERE SALARY >= 7000;
BASE DE DATOS II
DML – Operadores

--EJEMPLO 3
SELECT *
FROM EMPLOYEES
WHERE FIRST_NAME NOT LIKE 'Da%';

--EJEMPLO 4
SELECT *
FROM EMPLOYEES
WHERE SALARY <> 7000;
BASE DE DATOS II
DML – Condiciones

WHERE condition1
AND condition2
...
OR condition_n;

▪ Las sentencias AND / OR permiten probar múltiples condiciones


simultáneamente
▪ Es muy importante el orden de los paréntesis para agrupar

BASE DE DATOS II
DML – Condiciones

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR ( FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 );

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR ( FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 );

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%'
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE ( JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%' )
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE ( JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%' )
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – Condiciones
SELECT JOB_ID, FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE ( JOB_ID = 'FI_ACCOUNT'
OR FIRST_NAME LIKE 'Da%' )
AND SALARY >= 7000 ;

BASE DE DATOS II
DML – ORDER BY
SELECT expressions
FROM tables
[ WHERE conditions ]
ORDER BY expression [ ASC | DESC ];

expressions
The columns or calculations that you wish to retrieve.
tables
The tables that you wish to retrieve records from. There must be at least one table listed in the
FROM clause.
WHERE conditions
Optional. The conditions that must be met for the records to be selected.
ASC (DEFAULT)
Optional. It sorts the result set in ascending order by expression (default, if no modifier is
provider).
DESC
Optional. It sorts the result set in descending order by expression.

BASE DE DATOS II
DML – ORDER BY
SELECT expressions
FROM tables
[ WHERE conditions ]
ORDER BY expression [ ASC | DESC ];

expressions
The columns or calculations that you wish to retrieve.
tables
The tables that you wish to retrieve records from. There must be at least one table listed in the
FROM clause.
WHERE conditions
Optional. The conditions that must be met for the records to be selected.
ASC (DEFAULT)
Optional. It sorts the result set in ascending order by expression (default, if no modifier is
provider).
DESC
Optional. It sorts the result set in descending order by expression.

BASE DE DATOS II
DML – ORDER BY

--EJEMPLO 1
SELECT *
FROM EMPLOYEES
ORDER BY 2,6 DESC;

--EJEMPLO 2
SELECT *
FROM EMPLOYEES
ORDER BY FIRST_NAME,HIRE_DATE DESC;

BASE DE DATOS II
DML – ORDER BY

--EJEMPLO 1 A partir de la versión


SELECT * 12c incorpora esta
sintaxis ANSI
FROM EMPLOYEES
ORDER BY 2,6 DESC
FETCH FIRST 3 ROWS ONLY;

--EJEMPLO 2
SELECT *
FROM EMPLOYEES
ORDER BY FIRST_NAME,HIRE_DATE DESC
FETCH FIRST 3 ROWS ONLY;

BASE DE DATOS II
DML – SELECT (Ejercicios)

BASE DE DATOS II
DML – SELECT (Ejercicio 1)

1. Elaborar una consulta SQL que muestre todos los empleados que perciban un
salario menor a 5000.
2. Ordenar el resultado alfabéticamente por Apellido del empleado (campo
LAST_NAME) en forma descendente.

BASE DE DATOS II
DML – SELECT (Ejercicio 2)

1. Elaborar una consulta SQL que muestre todos los empleados que perciban un
salario mayor a 5000 y pertenezcan al departamento 50 (Shipping).
2. Ordenar el resultado alfabéticamente por Nombre del empleado (campo
FIRST_NAME) en forma ascendente.

BASE DE DATOS II
DML – SELECT (Ejercicio 3)

1. Elaborar una consulta SQL que muestre todos los empleados que ingresaron
en el año 2002.

BASE DE DATOS II
WARNING

SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE >= '01-JAN-02’
AND HIRE_DATE <= '31-DEC-02';

BASE DE DATOS II
WARNING

SELECT *
FROM EMPLOYEES
WHERE HIRE_DATE >= '01-JAN-07’
AND HIRE_DATE <= '31-DEC-07';
FECHA TEXTO

BASE DE DATOS II
DML – INSERT

BASE DE DATOS II
DML – INSERT

BASE DE DATOS II
DML – INSERT
SELECT *
FROM COUNTRIES;

BASE DE DATOS II
DML – INSERT
SELECT *
FROM COUNTRIES;

BASE DE DATOS II
DML – INSERT

INSERT INTO COUNTRIES


VALUES ('AR','Argentina', 2);

BASE DE DATOS II
DML – INSERT
--OPCION 1: DETALLO SOLO VALORES
INSERT INTO NOMBRE_TABLA
VALUES (VALOR1,VALOR2,VALOR3);

--OPCION 2: DETALLO CAMPOS Y VALORES DE CADA CAMPO


INSERT INTO NOMBRE_TABLA(CAMPO1,CAMPO2,CAMPO3)
VALUES (VALOR1,VALOR2,VALOR3);

--OPCION 3: DETALLO ALGUNOS CAMPOS Y SUS VALORES


INSERT INTO NOMBRE_TABLA (CAMPO1,CAMPO2)
VALUES (VALOR1,VALOR2);

BASE DE DATOS II
DML – INSERT (Ejemplos)
--INSERT ERRONEO 1
INSERT INTO NOMBRE_TABLA
VALUES ('ABC',123);
Error SQL: ORA-00947: not enough values
--INSERT ERRONEO 2
INSERT INTO NOMBRE_TABLA(CAMPO1_NUM,CAMPO2_TXT)
VALUES ('DEF',456);
Error SQL: ORA-01722: invalid number

BASE DE DATOS II
DML – INSERT (Ejemplos)
--INSERT ERRONEO 1
INSERT INTO NOMBRE_TABLA
VALUES ('ABC',123);
Error SQL: ORA-00947: not enough values
--INSERT ERRONEO 2
INSERT INTO NOMBRE_TABLA(CAMPO1_NUM,CAMPO2_TXT)
VALUES ('DEF',456);
Error SQL: ORA-01722: invalid number

--AUTOCONVERSION
INSERT INTO NOMBRE_TABLA(CAMPO1_NUM,CAMPO2_TXT)
VALUES ('111',999);

BASE DE DATOS II
DML – INSERT (Ejercicio)

BASE DE DATOS II
DML – INSERT (Ejercicio)
1. Insertar la región Oceania en la tabla REGIONS
2. Insertar países New Zeland y Samoa pertenecientes a Oceania en la tabla
COUNTRIES
3. Insertar las oficinas de Melbourne y Kelston – Tabla LOCATIONS

REGIONS COUNTRIES LOCATIONS


ID: 5 ID: NZ ID: 2201
NOMBRE: Oceania NOMBRE: New Zealand DIRECCION: 367 Collins Street
ID REGION: 5 CP: 3000
CIUDAD: Melbourne
ID: SA PROVINCIA: Victoria
NOMBRE: Samoa ID PAIS: AU
ID REGION: 5
ID: 2250
DIRECCION: 65 Archibald Road
CP: 0602
CIUDAD: Kelston
PROVINCIA: Auckland
ID PAIS: NZ

BASE DE DATOS II
DML – Sentencia UPDATE

UPDATE EMPLOYEES
SET SALARY = SALARY * 1.1
WHERE EMPLOYEE_ID = 100 ;

BASE DE DATOS II
DML – Sentencia UPDATE

EXPRESION
UPDATE EMPLOYEES
SET SALARY = SALARY * 1.1
WHERE EMPLOYEE_ID = 100 ;
EXPRESION

PREDICADO

BASE DE DATOS II
DML – UPDATE
--UPDATE MASIVO (TODOS LOS REGISTROS)
UPDATE NOMBRE_TABLA
1
SET CAMPO_X = 'ABC';

BASE DE DATOS II
DML – UPDATE
--UPDATE MASIVO (TODOS LOS REGISTROS)
UPDATE NOMBRE_TABLA
1
SET CAMPO_X = 'ABC';

--UPDATE MULTIPLES CAMPOS


--FILTRANDO REGISTROS
UPDATE NOMBRE_TABLA
SET CAMPO_X = 'ABC',
2
CAMPO_Y = 'ZXC'
WHERE CAMPO = 123;

BASE DE DATOS II
DML – UPDATE
--UPDATE MASIVO (TODOS LOS REGISTROS)
UPDATE NOMBRE_TABLA
1
SET CAMPO_X = 'ABC';

--UPDATE MULTIPLES CAMPOS


--FILTRANDO REGISTROS
UPDATE NOMBRE_TABLA
SET CAMPO_X = 'ABC',
--UPDATE UNICO CAMPO 2
CAMPO_Y = 'ZXC'
--FILTRO MULTIPLE WHERE CAMPO = 123;
UPDATE NOMBRE_TABLA
SET CAMPO_X = 'ABC'
WHERE CAMPO1 = 123 3
OR CAMPO2 = 'ZXC';

BASE DE DATOS II
DML – UPDATE (Ejemplos)

--INCLUYE FUNCION EN CAMPO A ACTUALIZAR


UPDATE NOMBRE_TABLA
SET CAMPO3_DAT = SYSDATE + 1 4

WHERE CAMPO1_TXT = 'ABC’;

BASE DE DATOS II
DML – UPDATE (Ejemplos)

--INCLUYE FUNCION EN CAMPO A ACTUALIZAR


UPDATE NOMBRE_TABLA
SET CAMPO3_DAT = SYSDATE + 1 4

WHERE CAMPO1_TXT = 'ABC’;

--UPDATE CON MULTIPLES FUNCIONES


UPDATE NOMBRE_TABLA 5
SET CAMPO2_NUM = TO_NUMBER(TO_CHAR(CAMPO3_DAT,'YYYY'))
WHERE CAMPO1_TXT = 'ABC';

BASE DE DATOS II
DML – UPDATE (Ejercicio)

BASE DE DATOS II
DML – UPDATE (Ejercicio)
1. Actualizar la región de Australia para que pertenezca a Oceania
→ Tabla COUNTRIES

2. Actualizar el código postal de la oficina de Londres (EC4R 9AB)


→ Tabla LOCATIONS

COUNTRIES LOCATIONS

NOMBRE: Australia ID: 2400


ID REGION: 5 CP: 'EC4R 9AB'
CIUDAD: London
ID PAIS: UK

BASE DE DATOS II
DML – DELETE

DELETE
FROM NOMBRE_TABLA;

DELETE
FROM NOMBRE_TABLA
WHERE CAMPO = VALOR;

BASE DE DATOS II
DML – DELETE vs TRUNCATE

DELETE FROM NOMBRE_TABLA;

TRUNCATE TABLE NOMBRE_TABLA;

BASE DE DATOS II
COMMIT / ROLLBACK

COMMIT
Graba en forma permanente los datos en las tablas.

ROLLBACK
Deshace los cambios realizados recientemente (desde el
último commit).

BASE DE DATOS II
Resumen DML

INSERT INSERT INTO CLIENTE


VALUES ('Ray','Charles','9',1);
UPDATE UPDATE CLIENTE
SET telefono = '4555-1234'
WHERE cod_cliente = 1;

DELETE DELETE
FROM CLIENTE
WHERE cod_cliente = 1;

SELECT SELECT *
FROM CLIENTE
WHERE cod_cliente = 1;

BASE DE DATOS II

También podría gustarte