Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de Computación e Informática, que por algún motivo no hayan asistido a clases.
Caja de herramientas de inteligencia artificial para la academia y la investi...
Sesion05 - Manipulacion de datos (Oracle)
1. /*
Sesión05 – Manipulación de Datos
Estudiante: José Luis Toro Alcarraz
Curso: Base de Datos Avanzado II
Correo:i201010865@cibertec.edu.pe
*/
1) Introducción a SQL
2) Instrucciones DML y operadores
3) Funciones pre-definidas
4) Sub-consultas
5) Consultas multi-tabla
6) Practicando lo aprendido
1) Introducción a SQL
Oracle 11G SQL utiliza el SQL (Structured Query Language). Basado en estándares ANSI
(American National Standards Institute) e ISO (International Standards Organization).
Categorías:
DCL - Data Control Language
Utilizadas en el control de acceso a datos en la base de datos. Ejemplo: GRANT, REVOKE.
TCL - Transaction Control Language
Utilizadas para confirmar o restaurar transacciones que son un conjunto de sentencias SQL que se
completan o fallan como unidad. Ejemplo: COMMIT (Confirma las transacciones), ROLLBACK
(Desase las transacciones).
DDL - Data Definition Language
Utilizadas para crear, alterar o borrar objetos de la base de datos. Ejemplo: CREATE, ALTER,
DROP, RENAME.
DML - Data Manipulation Language
Utilizadas para consultar o actualizar los datos contenidos en tablas de una base de datos.
2) Instrucciones DML y operadores
Bueno en esta sesión nos basaremos en revisar las particularidades de las sentencias DML en
Oracle. Explotando al máximo las funciones predefinidas de Oracle.
Sentencias:
SELECT
Obtiene filas de tablas de base de datos.
SELECT [DISTINCT|ALL] lista_selección
FROM tabla [,tabla ...]
[WHERE condición(es)]
[GROUP BY expresión [,expresión]...]
INSERT
Agrega filas a una tabla de la base de datos.
INSERT [INTO] tabla
[lista de campos de tabla]
VALUES (lista de valores de datos)
ó
2. [HAVING condición]
[ORDER BY {columna, expresión}
{ASC|DESC}]
INSERT INTO tabla
Sentencia SELECT
UPDATE
Modifica filas de una tabla que cumplan
cláusula WHERE.
UPDATE tabla
SET columna = expresión
[, columna = expresión...]
[WHERE condición(es)]
DELETE
Borra filas identificadas por la cláusula
WHERE
DELETE FROM tabla
[WHERE condición(es)]
3) Funciones pre-definidas
Funciones de carácter
LOWER, UPPER
INITCAP
CONCAT, SUBSTR
LENGTH, INSTR
LPAD, RPAD, TRIM
CHR
ASCII
REPLACE
Funciones numérica
ROUND, TRUNC
CEIL, FLOOR
MOD
POWER
SQRT
ABS
SIGN
Funciones de grupo : AVG, COUNT,
SUM, MAX, MIN
Funciones de fecha
SYSDATE
ADD_MONTHS, MONTHS_BETWEEN
NEXT_DAY, LAST_DAY
ROUND, TRUNC
Funciones de conversión
TO_DATE
TO_CHAR
TO_NUMBER
NVL
DECODE
4) Sub-consultas
Es una sentencia SELECT que se encuentra dentro de una cláusula de otra sentencia SELECT.
Tipos:
Sub-consultas de una fila
Sub-consultas de múltiples filas
Sub-consultas de múltiples columna
5) Consultas multi-tablas
JOIN: Utilizada para consultar datos de más de una tabla.
Tipos de Join:
Equijoin
Non-equijoin
Outer-join
Selfjoin
3. 6) Ejemplos
a) Demostración de las sentencias
Primero conectemos como el usuario scott/tiger. Connect Scott/tiger.
SQL> connect scott/tiger
Conectado.
La sentencia SELECT permite obtener filas de las tablas de base de datos.
Ejemplo1: Muestra todas las tablas que pertenecen al usuario SCOTT.
SQL> SELECT TABLE_NAME FROM USER_TABLES;
TABLE_NAME
-----------------------------DEPT
BONUS
SALGRADE
EMP
CLIENTE
VENDEDOR
COMIDAS
FACTURA
DETALLE_FACTURA
CINE
SALA
11 filas seleccionadas.
Ejemplo2: Muestre todos los CONSTRAINTS a lo que puede acceder el usuario SCOTT.
SQL> SELECT CONSTRAINT_NAME, TABLE_NAME, SUBSTR(COLUMN_NAME,1,255)
FROM ALL_CONS_COLUMNS
WHERE TABLE_NAME='EMP';
CONSTRAINT_NAME
TABLE_NAME
SUBSTR(COLUMN_NAME,1,255)
------------------------------ ------------------------------ -------------------------------------------------------SYS_C0011162
EMP
EMPNO
Ejemplo3: Muestre todos los campos de la tabla empleado con la condición de que el cargo sea
manager y ordénelo por el nombre del empleado.
SQL> SELECT * FROM EMP WHERE JOB = 'MANAGER' ORDER BY ENAME;
EMPNO ENAME
JOB
MGR HIREDATE
SAL
COMM
---------- ---------- --------- ---------- -------- ---------- ---------- ---------7698 BLAKE
MANAGER
7839 01/05/81
2850 30
7698 BLAKE
MANAGER
7839 01/05/81
2850 30
DEPTNO
4. 7782 CLARK
7782 CLARK
MANAGER
MANAGER
7839 09/06/81
7839 09/06/81
2450
2450
10
10
4 filas seleccionadas.
Ejemplo4: Muestre todos los campos de la tabla empleado con la condición de que el código del
departamento sea 30 y ordénelo de forma descendiente por el nombre del empleado.
SQL> SELECT * FROM EMP WHERE DEPTNO = 30 ORDER BY ENAME DESC;
EMPNO ENAME
JOB
MGR HIREDATE
---------- ---------- --------- ---------- -------- ---------- ---------7521 WARD
SALESMAN
7698 22/02/81
7521 WARD
SALESMAN
7698 22/02/81
7844 TURNER SALESMAN
7698 08/09/81
7844 TURNER SALESMAN
7698 08/09/81
7654 MARTIN SALESMAN
7698 28/09/81
7654 MARTIN SALESMAN
7698 28/09/81
7698 BLAKE
MANAGER
7839 01/05/81
7698 BLAKE
MANAGER
7839 01/05/81
7499 ALLEN
SALESMAN
7698 20/02/81
7499 ALLEN
SALESMAN
7698 20/02/81
SAL
---------1250
1250
1500
1500
1250
1250
2850
2850
1600
1600
COMM
DEPTNO
500
500
0
0
1400
1400
30
30
30
30
30
30
30
30
300 30
300 30
10 filas seleccionadas.
Ejemplo5: Muestre el código del departamento y la cantidad de empleados por departamento.
SQL> SELECT DEPTNO, COUNT (EMPNO) AS CANTIDAD FROM EMP
GROUP BY DEPTNO;
DEPTNO CANTIDAD
---------- ---------30
10
10
4
Ejemplo6: Muestre el código y el nombre del departamento, y además la cantidad de empleados
por departamento.
SQL> SELECT E.DEPTNO,DNAME,COUNT(E.EMPNO) EMPLEADOS
FROM EMP E JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
GROUP BY E.DEPTNO,DNAME;
DEPTNO DNAME
EMPLEADOS
---------- -------------- ---------10 ACCOUNTING
4
30 SALES
10
5. Ejemplo7: Muestre el código y el nombre del departamento, y además la cantidad de empleados
por departamento mayores o iguales a 4.
SQL> SELECT E.DEPTNO,DNAME,COUNT(E.EMPNO) EMPLEADOS
FROM EMP E JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
GROUP BY E.DEPTNO,DNAME
HAVING COUNT (E.EMPNO)>=4;
DEPTNO DNAME
EMPLEADOS
---------- -------------- ---------30 SALES
10
La sentencia INSERT permite insertar varios registros en una tabla.
Ejemplo1: Insertar datos especificando únicamente los valores de los campo.
SQL> INSERT INTO DEPT
VALUES (50, 'MI AREA 1', 'LIMA' );
1 fila creada.
Ejemplo2: Insertar datos especificando todos los valores a ingresar.
SQL> INSERT INTO DEPT(DEPTNO, DNAME, LOC)
VALUES (60, 'MI AREA 2', 'LIMA' );
1 fila creada.
Ejemplo3: Insertar registros con una consulta select.
SQL> CREATE TABLE EJEMPLO
(
EMPNO NUMBER(4),
ENAME VARCHAR2(10)
);
Tabla creada.
SQL> INSERT INTO EJEMPLO(EMPNO,ENAME)
SELECT EMPNO,ENAME FROM EMP
WHERE COMM != 0;
6 filas creadas.
La sentencia UPDATE permite la actualización de uno o varios registros de una única tabla. Es
decir actualiza un campo de todos los registros como también actualiza varios campos de todos los
registros
6. Ejemplo1: Actualiza el saldo de los empleado en un 12% cuyo cargo sea manager.
SQL> UPDATE EMP
SET SAL= SAL * 1.2
WHERE JOB='MANAGER';
COMMIT;
Tabla modificada.
Ejemplo2: Actualiza el saldo de los empleado en 5000 y la comisión en 2000
SQL> UPDATE EMP
SET SAL= 5000,
COMM=1000;
COMMIT;
Tabla modificada.
La sentencia DELETE permite eliminar uno o más registros de una tabla, como también permite
eliminar un registro especifico.
Ejemplo1: Eliminar todos los registro de la tabla ejemplo.
SQL> DELETE FROM EJEMPLO;
6 filas suprimidas.
Ejemplo2: Eliminar los departamentos cuyo código sean 50 y 60.
SQL> DELETE FROM DEPT
WHERE DEPTNO >= 50 AND DEPTNO<=60;
2 filas suprimidas.
b) Demostración de las funciones de carácter.
Las funciones UPPER, LOWER, INITCAP reciben como parámetro una cadena cad.
UPPER(cad).LOWER(cad).INITCAP(cad).
Ejemplo: Muestre el nombre del empleado en Mayúscula, Minúscula y Letra capital.
SQL> SELECT UPPER(ENAME) MAYUSCULA, LOWER(ENAME) MINUSCULA,
INITCAP(ENAME) LETRACAPITAL FROM EMP;
MAYUSCULA MINUSCULA LETRACAPIT
---------------- -------------- ---------------ALLEN
allen
Allen
WARD
ward
Ward
MARTIN
martin Martin
BLAKE
blake
Blake
…
7. 14 filas seleccionadas.
La función CONCAT recibe 2 parámetros. Devuelve cad1 concatenada con cad2. Esta función es
equivalente al operador ||. CONCAT(cad1,cad2).
Ejemplo: Concatena el nombre y el grado de los empleados.
SQL> SELECT CONCAT(ENAME,JOB), ENAME || '-' || JOB FROM EMP;
CONCAT(ENAME,JOB) ENAME||'-'||JOB
------------------- -------------------ALLENSALESMAN
ALLEN-SALESMAN
WARDSALESMAN
WARD-SALESMAN
MARTINSALESMAN
MARTIN-SALESMAN
BLAKEMANAGER
BLAKE-MANAGER
…
14 filas seleccionadas.
SQL> SELECT (CONCAT (CONCAT (ENAME,'-'), JOB)), ENAME || '-' || JOB FROM EMP;
Devuelve lo mismo.
La función SUBSTR permite extraer una porción de una cadena, para los cuáles recibe 3
parámetros. SUBSTR (cad, posicionInicial, nroCaracteres).
Nota: la primera posición de una cadena en Oracle es 1.
Ejemplo: Muestra los 3 primero caracteres de la columna nombre de la tabla empleados
SQL> SELECT SUBSTR(ENAME,1,3) FROM EMP;
SUB
--ALL
WAR
MAR
BLA
…
14 filas seleccionadas.
La función LENGTH recibe como parámetro una cadena cad devolviendo la longitud de dicha
cadena. LENGTH(cad)
Ejemplo: Devolver la longitud del campo nombre de la tabla empleados.
SQL> SELECT ENAME,LENGTH(ENAME) FROM EMP;
ENAME
---------ALLEN
WARD
MARTIN
BLAKE
…
LENGTH(ENAME)
------------5
4
6
5
8. 14 filas seleccionadas.
La función INSTR recibe 2 parámetros y devuelve la posición de la segunda cadena dentro de la
primera. INSTR(cad1,cad2).
Ejemplo: Muestre la posición de ‘A’ dentro del nombre de los empleados.
SQL> SELECT ENAME, INSTR(ENAME,'A') FROM EMP;
ENAME
INSTR(ENAME,'A')
------------------------ALLEN
1
WARD
2
MARTIN
2
BLAKE
3
…
14 filas seleccionadas.
La función LPAD y RPAD reciben 3 parámetros.
Concatena por la izquierda LPAD devuelve cad1 con longitud n, y ajustada a la derecha,
rellenando por la izquierda con cad2. (cad1,n,cad2’).
Concatena por la derecha RPAD Devuelve cad1 con longitud n, y ajustada a la izquierda,
rellenando por la derecha con cad2. (cad1,n,cad2’).
SQL> SELECT LPAD(ENAME,20,'*'), RPAD(ENAME,20,'*') FROM EMP;
LPAD(ENAME,20,'*')
-------------------***************ALLEN
****************WARD
**************MARTIN
***************BLAKE
…
14 filas seleccionadas.
RPAD(ENAME,20,'*')
------------------ALLEN***************
WARD****************
MARTIN**************
BLAKE***************
La función CHR devuelve el carácter cuyo valor codificado es n. CHR(N).
SQL> SELECT CHR(65) FROM DUAL;
C
A
La función ASCII devuelve el valor ascii de cad.
SQL> SELECT ASCII('A') FROM DUAL;
ASCII('A')
---------65
9. La función REPLACE devuelve la cadena en la que cada ocurrencia de la cadena antigua ha sido
sustituida por la cadena nueva.
SQL> SELECT REPLACE('DIGO','I','IE') FROM DUAL;
REPLA
----DIEGO
c) Demostración de las funciones numéricas.
La función ROUND calcula el redondeo de m a n decimales. Si n<0 el redondeo se efectúa a por
la izquierda del punto decimal. ROUND(m,n).
SQL> SELECT ROUND(234.345,1) FROM DUAL;
ROUND(234.345,1)
---------------234,3
SQL> SELECT ROUND(234.345,0) FROM DUAL;
ROUND(234.345,0)
---------------234
La función TRUNC calcula m truncado a n decimales (n puede ser negativo). TRUNC(m.n).
SQL> SELECT TRUNC(123.456,1) FROM DUAL;
TRUNC(123.456,1)
---------------123,4
La función CEIL calcula el valor entero inmediatamente superior o igual a n (devuelve el entero
mayor mas próximo). CEIL(n).
SQL> SELECT CEIL(13.7) FROM DUAL;
CEIL(13.7)
---------14
La función FLOOR calcula el valor entero inmediatamente inferior o igual a n (el entero menor más
próximo). FLOOR(n).
SQL> SELECT FLOOR(13.7) FROM DUAL;
10. FLOOR(13.7)
----------13
La función MOD calcula el resto resultante de dividir m entre n. MOD(m,n).
SQL> SELECT MOD(15,2) FROM DUAL;
MOD(15,2)
---------1
La función ABS calcula el valor absoluto de n. ABS(n).
SQL> SELECT ABS(-15) FROM DUAL;
ABS(-15)
---------15
La función POWER Calcula la potencia n-esima de m. POWER(m,n).
SQL> SELECT POWER(3,2) FROM DUAL;
POWER(3,2)
---------9
La función SQRT calcula la raíz cuadrada de n. SQRT(n).
SQL> SELECT SQRT(4) FROM DUAL;
SQRT(4)
---------2
La función SIGN calcula el signo de n, devolviendo -1 si n<0, 0 si n=0 y 1 si n>0.
SQL> SELECT SIGN(-12) FROM DUAL;
SIGN(-12)
----------1