Subido por Alan Castellanos

Unidad VI - SQL - DML

Anuncio
1
Fundamentos de
Bases de Datos
Unidad VI
Introducción al Lenguaje SQL
6.3 Lenguaje de
Manipulación de Datos (LMD o DML)
Data Manipulation Language
Lenguaje de Manipulación de Datos
Proporcionado por los SGBD que permite a los
usuarios de la BD llevar a cabo las tareas de
consulta o modificación de los datos contenidos en
las Bases de Datos del Sistema Gestor de Bases de
Datos.
Es el lenguaje de manipulación de datos más
popular hoy en día, usado para recuperar y
manipular datos en una base de datos relacional.
Temas
1.
Escritura de Comandos Simples en SQL
2.
Limitación y ordenamiento de la selección de filas
3.
Funciones de una Fila
4.
Consulta de Datos de Varias Tablas
5.
Funciones de Grupo
6.
SubConsultas
7.
SQL *Plus
8.
Manipulación de Datos
9.
Generación de Vistas
10. Otros Objetos de un Banco de Datos
11. Manejo del Acceso de los usuarios
1
Escritura de Comandos
Simples en SQL
ESTRUCTURA DE LA TABLA EMPLEADOS
SQL> desc emp;
Name
Null?
Type
----------------------------------------- -------- ---------------------------EMPNO
NOT NULL NUMBER(4)
ENAME
VARCHAR2(10)
JOB
VARCHAR2(9)
MGR
NUMBER(4)
HIREDATE
DATE
SAL
NUMBER(7,2)
COMM
NUMBER(7,2)
DEPTNO
NUMBER(2)
DATOS EN LA TABLA EMPLEADOS
SQL> select * from emp;
EMPNO ENAME
JOB
MGR HIREDATE
SAL
---------- ---------- --------- ---------- -------- ---------- ---------- ---------7369 SMITH CLERK
7902 17/12/80
800
7499 ALLEN SALESMAN
7698 20/02/81
1600
7521 WARD
SALESMAN
7698 22/02/81
1250
7566 JONES MANAGER
7839 02/04/81
2975
7654 MARTIN SALESMAN
7698 28/09/81
1250
7698 BLAKE MANAGER
7839 01/05/81
2850
7782 CLARK MANAGER
7839 09/06/81
2450
7788 SCOTT
ANALYST
7566 19/04/87
3000
7839 KING
PRESIDENT
17/11/81
5000
7844 TURNER SALESMAN
7698 08/09/81
1500
7876 ADAMS CLERK
7788 23/05/87
1100
7900 JAMES CLERK
7698 03/12/81
950
7902 FORD
ANALYST
7566 03/12/81
3000
7934 MILLER CLERK
7782 23/01/82
1300
14 rows selected.
COMM
300
500
1400
0
DEPTNO
20
30
30
20
30
30
10
20
10
30
20
30
20
10
ESTRUCTURA DE LA TABLA
DEPARTAMENTO
SQL> desc dept;
Name
Null?
Type
----------------------- -------- ---------------DEPTNO
NOT NULL NUMBER(2)
DNAME
VARCHAR2(14)
LOC
VARCHAR2(13)
DATOS EN LA TABLA DEPARTAMENTO
SQL> select * from dept;
DEPTNO DNAME
LOC
---------- -------------- ------------10 ACCOUNTING
NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
ESTRUCTURA DE LA TABLA
GRADOS DE SALARIO
SQL> desc salgrade;
Name
Null?
Type
----------------------- -------- --------------GRADE
NUMBER
LOSAL
NUMBER
HISAL
NUMBER
DATOS EN LA TABLA SALGRADE
SQL> select * from salgrade;
GRADE
LOSAL
HISAL
---------- ---------- ---------1
700
1200
2
1201
1400
3
1401
2000
4
2001
3000
5
3001
9999
El comando básico SELECT
SELECT
FROM
[DISTINCT] {*, columna [alias],...}
tabla;
• SELECT muestra las columnas
• FROM muestra la tabla
Muestra de la estructura tabular
SQL> DESCRIBE dept
Name
Null?
----------------- -------DEPTNO
NOT NULL
DNAME
LOC
Type
-----------NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
2
Limitación y ordenamiento
de la selección de filas
Limitación de la filas de datos
seleccionados
• Las filas de datos seleccionados se
limitan a través de la cláusula WHERE.
SELECT
FROM
[WHERE
[DISTINCT] {*, columna [alias], ...}
tabla
condicion(es)];
• La cláusula WHERE le sigue a la
cláusula FROM.
Uso de la cláusula WHERE
SQL> SELECT ename, job, deptno
2 FROM
emp
3 WHERE job = 'CLERK';
ENAME
---------JAMES
SMITH
ADAMS
MILLER
JOB
DEPTNO
--------- --------CLERK
30
CLERK
20
CLERK
20
CLERK
10
Uso de los operadores de
comparación
SQL> SELECT ename, sal, comm
2 FROM
emp
3 WHERE sal <= comm;
ENAME
SAL
COMM
---------- --------- --------MARTIN
1250
1400
Uso del operador AND
AND presupone que ambas condiciones
son verdaderas (TRUE).
SQL>
2
3
4
SELECT
FROM
WHERE
AND
EMPNO
--------7876
7934
empno, ename, job, sal
emp
sal >= 1100
job = 'CLERK';
ENAME
---------ADAMS
MILLER
JOB
SAL
--------- --------CLERK
1100
CLERK
1300
Uso del operador OR
OR presupone que una condición es
verdadera (TRUE).
SQL>
2
3
4
SELECT
FROM
WHERE
OR
empno, ename, job, sal
emp
sal >= 1100
job = 'CLERK';
EMPNO ENAME
--------- ----------
7839
7698
7782
7566
7654
KING
BLAKE
CLARK
JONES
MARTIN
...
14 rows selected.
JOB
SAL
--------- ---------
PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
5000
2850
2450
2975
1250
Uso del operador NOT
SQL> SELECT ename, job
2 FROM
emp
3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');
ENAME
---------KING
MARTIN
ALLEN
TURNER
WARD
JOB
--------PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN
Ordenamiento en secuencia
descendiente
SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate DESC;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------ADAMS
CLERK
20 12-JAN-83
SCOTT
ANALYST
20 09-DEC-82
MILLER
CLERK
10 23-JAN-82
JAMES
CLERK
30 03-DEC-81
FORD
ANALYST
20 03-DEC-81
KING
PRESIDENT
10 17-NOV-81
MARTIN
SALESMAN
30 28-SEP-81
...
14 rows selected.
3
Funciones de una Fila
Trabajo con Funciones de Palabras
Muestra del Número de Empleado, Nombre
y Departamento del empleado Blake
SQL> SELECT empno, ename, deptno
2 FROM
emp
3 WHERE
ename = 'blake';
no rows selected
SQL> SELECT
2 FROM
3 WHERE
empno, ename, deptno
emp
LOWER(ename) = 'blake';
EMPNO ENAME
DEPTNO
--------- ---------- --------7698 BLAKE
30
Uso de la Función ROUND
SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),
2
ROUND(45.923,-1)
3 FROM
DUAL;
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.923,-1)
--------------- -------------- ----------------45.92
46
50
Uso de la Función TRUNC
SQL> SELECT TRUNC(45.923,2), TRUNC(45.923),
2
TRUNC(45.923,-1)
3 FROM
DUAL;
TRUNC(45.923,2) TRUNC(45.923) TRUNC(45.923,-1)
--------------- ------------- --------------45.92
45
40
Uso de Funciones de Fecha
• MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
19.6774194
• ADD_MONTHS ('11-JAN-94',6)
'11-JUL-94'
• NEXT_DAY ('01-SEP-95','FRIDAY')
'08-SEP-95'
• LAST_DAY('01-SEP-95')
'30-SEP-95'
Conversión explícita del Tipo de
Datos
TO_NUMBER
NUMERO
TO_CHAR
TO_DATE
PALABRA
TO_CHAR
FECHA
Uso de la Función TO_CHAR
con formato numérico
SQL> SELECT
2 FROM
3 WHERE
SALARY
-------$3,000
TO_CHAR(sal,'$99,999') SALARY
emp
ename = 'SCOTT';
Uso de la Función NVL
SQL> SELECT ename, sal, comm, (sal*12)+NVL(comm,0)
2 FROM
emp;
ENAME
SAL
COMM (SAL*12)+NVL(COMM,0)
---------- --------- --------- -------------------KING
5000
60000
BLAKE
2850
34200
CLARK
2450
29400
JONES
2975
35700
MARTIN
1250
1400
16400
ALLEN
1600
300
19500
...
14 rows selected.
Uso de la Función DECODE
SQL> SELECT job, sal,
2
DECODE(job, 'ANALYST', SAL*1.1,
3
'CLERK',
SAL*1.15,
4
'MANAGER', SAL*1.20,
5
SAL)
6
REVISED_SALARY
7 FROM
emp;
JOB
SAL REVISED_SALARY
--------- --------- -------------PRESIDENT
5000
5000
MANAGER
2850
3420
MANAGER
2450
2940
...
14 rows selected.
Anidamiento de funciones
SQL> SELECT
2
3 FROM
4 WHERE
ename,
NVL(TO_CHAR(mgr),'No Manager')
emp
mgr IS NULL;
ENAME
NVL(TO_CHAR(MGR),'NOMANAGER')
---------- ----------------------------KING
No Manager
4
Consulta de Datos de
Varias Tablas
Consulta de datos de varias tablas
EMP
EMPNO
-----7839
7698
...
7934
DEPT
ENAME
----KING
BLAKE
... DEPTNO
... -----...
10
...
30
MILLER ...
10
DEPTNO
-----10
20
30
40
EMPNO DEPTNO LOC
----- ------- -------7839
10 NEW YORK
7698
30 CHICAGO
7782
10 NEW YORK
7566
20 DALLAS
7654
30 CHICAGO
7499
30 CHICAGO
...
14 rows selected.
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
Consultas con Equijoins
SQL> SELECT
2
3 FROM
4 WHERE
emp.empno, emp.ename, emp.deptno,
dept.deptno, dept.loc
emp, dept
emp.deptno = dept.deptno;
EMPNO ENAME
DEPTNO DEPTNO LOC
----- ------ ------ ------ --------7839 KING
10
10 NEW YORK
7698 BLAKE
30
30 CHICAGO
7782 CLARK
10
10 NEW YORK
7566 JONES
20
20 DALLAS
...
14 rows selected.
Uso de alias para tablas
Simplificación de consultas a través del
uso de mombres Alias.
SQL> SELECT emp.empno, emp.ename, emp.deptno,
2
dept.deptno, dept.loc
3 FROM
emp, dept
4 WHERE emp.deptno = dept.deptno;
SQL> SELECT e.empno, e.ename, e.deptno,
2
d.deptno, d.loc
3 FROM
emp e, dept d
4 WHERE e.deptno = d.deptno;
Enlace de más de dos tablas
CUSTOMER
NAME
CUSTID
----------- -----JOCKSPORTS
100
TKB SPORT SHOP 101
VOLLYRITE
102
JUST TENNIS
103
K+T SPORTS
105
SHAPE UP
106
WOMENS SPORTS
107
...
...
9 rows selected.
ORD
CUSTID
ORDID
------- ------101
610
102
611
104
612
106
601
102
602
ITEM
106
ORDID ITEMID
106
------ ------...
610
3
21 rows
611
1
612
1
601
1
602
1
...
64 rows selected.
Consultas con Non-Equijoins
SQL>
2
3
4
SELECT
FROMemp
WHERE
BETWEEN
e.ename, e.sal, s.grade
e, salgrade s
e.sal
s.losal AND s.hisal;
ENAME
SAL
GRADE
---------- --------- --------JAMES
950
1
SMITH
800
1
ADAMS
1100
1
...
14 rows selected.
Consultas con Outer Joins
EMP
ENAME
----KING
BLAKE
CLARK
JONES
...
DEPT
DEPTNO
-----10
30
10
20
DEPTNO
-----10
30
10
20
...
40
DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
OPERATIONS
Ningún trabajador en el
departamento OPERATIONS
Uso de Outer Joins
SQL>
2
3
4
SELECT
e.ename, d.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno(+) = d.deptno
ORDER BY e.deptno;
ENAME
DEPTNO DNAME
---------- --------- ------------KING
10 ACCOUNTING
CLARK
10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.
Self Joins
EMP (WORKER)
EMPNO
----7839
7698
7782
7566
7654
7499
ENAME
-----KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
EMP (MANAGER)
MGR
----
EMPNO
-----
7839
7839
7839
7698
7698
7839
7839
7839
7698
7698
ENAME
-------KING
KING
KING
BLAKE
BLAKE
"MGR en la tabla WORKER corresponde a EMPNO en
la Tabla MANAGER"
Enlace de una tabla consigo misma
SQL> SELECT worker.ename||' works for '||manager.ename
2 FROM emp worker, emp manager
3 WHERE
worker.mgr = manager.empno;
WORKER.ENAME||'WORKSFOR'||MANAG
------------------------------BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
5
Funciones de Grupo
Tipos de Funciones de Grupo
• AVG
• COUNT
• MAX
• MIN
• STDDEV
• SUM
• VARIANCE
Uso de las Funciones AVG y SUM
Las funciones AVG y SUM pueden
aplicarse a datos numéricos.
SQL> SELECT
2
3 FROM
4 WHERE
AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
emp
job LIKE 'SALES%';
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)
-------- --------- --------- --------1400
1600
1250
5600
Uso de las Funciones MIN y MAX
Las funciones MIN y MAX pueden aplicarse
a cualquier tipo de datos.
SQL> SELECT
2 FROM
MIN(hiredate), MAX(hiredate)
emp;
MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83
Uso de la Función COUNT
COUNT(expr) regresa el número de filas
con valores No Nulos.
SQL> SELECT
2 FROM
3 WHERE
COUNT(COMM)
----------4
COUNT(comm)
emp
deptno = 30;
Funciones de Grupo y valores NULOS
Las Funciones de Grupo ignoran los
valores NULOS en la columna.
SQL> SELECT AVG(comm)
2 FROM
emp;
AVG(COMM)
--------550
Uso de la Función NVL con
Funciones de Grupo
La Función NVL forza a las Funciones de
Grupo a sustituir al valor NULO por otro
NO NULO.
SQL> SELECT AVG(NVL(comm,0))
2 FROM
emp;
AVG(NVL(COMM,0))
---------------157.14286
Uso de la cláusula GROUP BY
Todas la columnas de la lista del SELECT
que no están contenidas en las Funciones de
Grupo, deben estar contenidas en la cláusula
GROUP BY.
SQL> SELECT
deptno, AVG(sal)
2 FROM
emp
3 GROUP BY deptno;
DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667
Uso de la cláusula GROUP BY
para varias columnas.
SQL> SELECT
deptno, job, sum(sal)
2 FROM
emp
3 GROUP BY deptno, job;
DEPTNO JOB
SUM(SAL)
--------- --------- --------10 CLERK
1300
10 MANAGER
2450
10 PRESIDENT
5000
20 ANALYST
6000
20 CLERK
1900
...
9 rows selected.
Uso de la cláusula HAVING
SQL>
2
3
4
SELECT
FROM
GROUP BY
HAVING
deptno, max(sal)
emp
deptno
max(sal)>2900;
 filtro...
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
6
SubConsultas
Uso de las subconsultas
SQL> SELECT ename
2 FROM
emp
2975
3 WHERE sal >
4
(SELECT sal
5
FROM
emp
6
WHERE empno = 7566);
ENAME
---------KING
FORD
SCOTT
Ejecución de subconsultas de una fila
SQL>
2
3
4
5
6
7
8
9
10
SELECT
FROM
WHERE
AND
ename, job
emp
job =
(SELECT
FROM
WHERE
sal >
(SELECT
FROM
WHERE
ENAME
JOB
---------- --------MILLER
CLERK
CLERK
job
emp
empno = 7369)
1100
sal
emp
empno = 7876);
Uso de Funciones de Grupo en
una subconsulta
SQL> SELECT
2 FROM
3 WHERE
4
5
ename, job, sal
emp
sal =
(SELECT
FROM
ENAME
JOB
SAL
---------- --------- --------SMITH
CLERK
800
800
MIN(sal)
emp);
Uso del operator ANY en
subconsultas de filas múltiples
SQL>
2
3
4
5
6
7
SELECT
FROM
WHERE
AND
EMPNO
--------7654
7521
empno, ename, job,1300 sal
1100
emp
800
sal < ANY
950
(SELECT
sal
FROM
emp
WHERE job = 'CLERK')
job <> 'CLERK';
ENAME
---------MARTIN
WARD
JOB
--------SALESMAN
SALESMAN
SAL
--------1250
1250
Uso del operador ALL en
subconsultas de filas múltiples
SQL> SELECT
2 FROM
3 WHERE
4
5
6
EMPNO
--------7839
7566
7902
7788
empno, ename, job,1566.6667sal
2175
emp
2916.6667
sal > ALL
(SELECT
avg(sal)
FROM
emp
GROUP BY
deptno);
ENAME
---------KING
JONES
FORD
SCOTT
JOB
--------PRESIDENT
MANAGER
ANALYST
ANALYST
SAL
---------5000
2975
3000
3000
7
SQL *Plus
Uso de la variable de intercambio &
La variable con el prefijo & se usa para
solicitar el suministro de un valor por el
usuario.
SQL> SELECT
2 FROM
3 WHERE
empno, ename, sal, deptno
emp
empno = &employee_num;
Enter value for employee_num: 7369
EMPNO ENAME
SAL
DEPTNO
--------- ---------- --------- --------7369 SMITH
800
20
Suministro de nombres de
columnas, expresiones y texto al
momento de ejecución
SQL>
2
3
4
SELECT
FROM
WHERE
ORDER BY
empno, ename, job, &column_name
emp
&condition
&order_column;
Enter value for column_name: sal
Enter value for condition: sal >= 3000
Enter value for order_column: ename
EMPNO
--------7902
7839
7788
ENAME
---------FORD
KING
SCOTT
JOB
SAL
--------- --------ANALYST
3000
PRESIDENT
5000
ANALYST
3000
Uso de la variable de intercambio &&
El doble signo (&&) se utiliza para repetir el uso
del valor de una variable y evitar que el usuario
deba dar su valor cada vez que se requiere.
SQL> SELECT
2 FROM
3 ORDER BY
empno, ename, job, &&column_name
emp
&column_name;
Enter value for column_name: deptno
EMPNO ENAME
JOB
DEPTNO
--------- ---------- --------- --------7839 KING
PRESIDENT
10
7782 CLARK
MANAGER
10
7934 MILLER
CLERK
10
...
14 rows selected.
Uso del comando ACCEPT
ACCEPT
SELECT
FROM
WHERE
/
dept PROMPT 'Provide the department name: '
*
dept
dname = UPPER('&dept')

Provide the department name: Sales
DEPTNO DNAME
LOC
--------- -------------- ------------30 SALES
CHICAGO
Editor SQL
Cuando se desea un reporte impreso en hoja,
se escribe lo siguiente para enviar el reporte a
impresora
SET PAGESIZE 37
SET LINESIZE 60
SET FEEDBACK OFF
TTITLE 'Employee|Report'
BTITLE 'Confidential'
COLUMN job HEADING 'Job|Category' FORMAT A15
COLUMN ename HEADING 'Employee' FORMAT A15
COLUMN sal HEADING 'Salary' FORMAT $99,999.99
REM ** Insert SELECT statement
SELECT job, ename, sal
FROM
emp
WHERE
sal < 3000
ORDER BY job, ename
/
Ejemplo de un Reporte
Fri Oct 24
page
1
Employee
Report
Job
Category
Employee
Salary
----------------------- ----------------------- ----------------CLERK
ADAMS
$1,100.00
CLERK
JAMES
$950.00
CLERK
MILLER
$1,300.00
CLERK
SMITH
$800.00
MANAGER
BLAKE
$2,850.00
MANAGER
CLARK
$2,450.00
MANAGER
JONES
$2,975.00
SALESMAN
ALLEN
$1,600.00
SALESMAN
MARTIN
$1,250.00
SALESMAN
TURNER
$1,500.00
SALESMAN
WARD
$1,250.00
Confidential
8
Manipulación de Datos
El comando INSERT
• Introducción de nuevas filas de datos
en una tabla con el comando INSERT.
INSERT INTO
VALUES
tabla [(columna [, columna...])]
(valor [, valor...]);
• Con esta sintaxis se introduce siempre
una sola fila.
Introducción de valores especiales
La Función SYSDATE proporciona la
fecha y hora actuales.
SQL> INSERT INTO
2
3
4 VALUES
5
6
1 row created.
emp (empno, ename, job,
mgr, hiredate, sal, comm,
deptno)
(7196, 'GREEN', 'SALESMAN',
7782, SYSDATE, 2000, NULL,
10);
Introducción de datos de fechas
especiales
• Adición de un nuevo empleado.
SQL> INSERT INTO
2 VALUES
3
4
1 row created.
emp
(2296,'AROMANO','SALESMAN',7782,
TO_DATE('FEB 3,97', 'MON DD, YY'),
1300, NULL, 10);
• Confirmación de la adición.
EMPNO ENAME
JOB
MGR
HIREDATE SAL COMM DEPTNO
----- ------- -------- ---- --------- ---- ----- ----2296 AROMANO SALESMAN 7782 03-FEB-97 1300
10
Introducción de valores con la ayuda
de variables de intercambio
Genere un escrito interactivo con
parámetros de intercambio SQL*Plus.
SQL> INSERT INTO
2 VALUES
3
dept (deptno, dname, loc)
(&department_id,
'&department_name', '&location');
Enter value for department_id: 80
Enter value for department_name: EDUCATION
Enter value for location: ATLANTA
1 row created.
Generación de escritos propios
con solicitud de información
• ACCEPT guarda el valor de una variable.
• PROMPT muestra el texto deseado.
ACCEPT
ACCEPT
ACCEPT
INSERT INTO
VALUES
department_id PROMPT 'Por favor, dé el
número del departamento: '
department_name PROMPT 'Por favor, dé el
nombre del departamento: '
location PROMPT 'Por favor, dé la
localización del departamento: '
dept (deptno, dname, loc)
(&department_id, '&department_name',
'&location');
Copiado de filas de otra tabla
• Escriba el comando INSERT con una
subconsulta.
SQL> INSERT INTO managers(id, name, salary, hiredate)
2
SELECT empno, ename, sal, hiredate
3
FROM
emp
4
WHERE job = 'MANAGER';
3 rows created.
• No use la cláusula VALUES.
• Número de columnas y tipo de datos en el
INSERT deben coincidir con aquellos en la
subconsulta.
El comando UPDATE
• Con el comando UPDATE se actualizan
los datos de una fila.
UPDATE
SET
[WHERE
tabla
columna = valor [, columna = valor]
condicion(es)];
• En caso necesario, puede también
actualizar más de una fila.
Actualización de las filas de una tabla
• La cláusula WHERE determina cuales
filas serán cambiadas.
SQL> UPDATE emp
2 SET
deptno = 20
3 WHERE
empno = 7782;
1 row updated.
• Si la cláusula WHERE no se usa, todas
las filas de la tabla serán cambiadas.
SQL> UPDATE employee
2 SET
deptno = 20;
14 rows updated.
Actualización de varias
columnas con una subconsulta
Actualización del puesto y departamento del
empleado 7698 de tal manera que coincidan
con los del empleado 7499.
SQL> UPDATE emp
2 SET
(job, deptno) =
3
(SELECT job, deptno
4
FROM
emp
5
WHERE
empno = 7499)
6 WHERE
empno = 7698;
1 row updated.
Actualización de filas Zeilen con
valores de otra tabla
Uso de la subconsulta en el comando UPDATE
para actualizar filas en una tabla con valores
basados en los de otra tabla.
SQL> UPDATE employee
2 SET
deptno =
3
4
5 WHERE
job
=
6
7
3 rows updated.
(SELECT
FROM
WHERE
(SELECT
FROM
WHERE
deptno
emp
empno = 7782)
job
emp
empno = 7782);
El comando DELETE
Eliminación de filas de una tabla se
realizan con el comando DELETE.
DELETE [FROM]
[WHERE
tabla
condicion(es)];
Borrado de filas de una tabla
• Use la cláusula WHERE para determinar
cuales filas serán borradas o eliminadas.
SQL> DELETE FROM
2 WHERE
1 row deleted.
department
dname = 'DEVELOPMENT';
• Si la cláusula WHERE no es empleada,
todas las filas de la tabla serán eliminadas.
SQL> DELETE FROM
4 rows deleted.
department;
Eliminación de filas de una tabla
basándose en valores de otra tabla
Use la subconsulta en el comando DELETE
para borrar filas de una tabla basándose
en valores de otra tabla.
SQL> DELETE FROM
2 WHERE
3
4
5
6 rows deleted.
employee
deptno =
(SELECT
FROM
WHERE
deptno
dept
dname ='SALES');
Guardado de datos (Commit)
• Cambie los siguientes datos.
SQL> UPDATE
emp
2 SET
deptno = 10
3 WHERE
empno = 7782;
1 row updated.
• Guarde (COMMIT) los cambios.
SQL> COMMIT;
Commit complete.
Estatus de los datos después del
ROLLBACK
Todos los cambios realizados son cancelados
con el comando ROLLBACK.
• Toda modificación es eliminada.
• Se recupera el estatus anterior.
• Se cierra el bloqueo de filas.
SQL> DELETE FROM employee;
14 rows deleted.
SQL> ROLLBACK;
Rollback complete.
Regresar cambios hasta un Savepoint
• Generación de marcas en una transacción
con el comando SAVEPOINT.
• Regresar hasta esa marca con el
commando ROLLBACK TO SAVEPOINT.
SQL> UPDATE...
SQL> SAVEPOINT update_done;
Savepoint created.
SQL> INSERT...
SQL> ROLLBACK TO update_done;
Rollback complete.
9
Generación de Vistas
¿Qué es una Vista?
Tabla EMP
EMPNO ENAME
JOB
JOB
MGR HIREDATE
SAL
SAL COMM
COMM DEPTNO
----- ------- --------- ----- --------- ----- ----- ------DEPTNO
----7839 KING
--------PRESIDENT
--------- ---- 17-NOV-81
--------- -----5000 ----- -----10
-7698 BLAKE
MANAGER
7839
7782 KING
CLARK
7839 01-MAY-81
2850
30
MANAGER
PRESIDENT 7839 17-NOV-81
09-JUN-81
2450
5000
10
10
7566 JONES
MANAGER
7839 02-APR-81
2975
20
7782
7654 CLARK
MARTIN
SALESMAN
MANAGER
7839
7698 09-JUN-81
28-SEP-81
1250
1500 1400
300
30
10
7499 ALLEN
SALESMAN
7698 20-FEB-81
1600
300
30
0
30
EMPNO 7844
ENAME
JOB 7782
TURNER SALESMAN
MILLER
CLERK
7698 23-JAN-82
08-SEP-81
------ 7934
-----------------10
7900 JAMES
CLERK
7698 03-DEC-81
7839 7566
KING
PRESIDENT
7521 JONES
WARD
SALESMAN
MANAGER
7698 02-APR-81
7839
22-FEB-81
FORD
ANALYST
7566 03-DEC-81
7782 207902
CLARK
MANAGER
7369 SCOTT
SMITH
CLERK
ANALYST
7902 09-DEC-82
7566
17-DEC-80
7934 7788
MILLER
CLERK
20
7788 SCOTT
Vista EMPVU10
7876 ADAMS
1500
1300
950
1250
2975
3000
800
3000
30
500
30
20
20
ANALYST
7566 09-DEC-82
3000
20
CLERK
7788 12-JAN-83
1100
20
Generación de una Vista
• Genere una Vista con la ayuda de
nombres alias para columnas en una
subconsulta.
SQL> CREATE VIEW
salvu30
2 AS SELECT
empno EMPLOYEE_NUMBER, ename NAME,
sal SALARY
4 FROM
emp
5 WHERE
deptno = 30;
View created.
• Seleccione las columas de esta Vista
usando los nombres alias.
Construcción de Vistas complejas
Construya una Vista compleja que contenga
Funciones de Grupo y que muestre valores
de dos tablas.
SQL>
2
3
4
5
6
7
View
CREATE VIEW
AS SELECT
FROM
WHERE
GROUP BY
created.
dept_sum_vu
(name, minsal, maxsal, avgsal)
d.dname, MIN(e.sal), MAX(e.sal),
AVG(e.sal)
emp e, dept d
e.deptno = d.deptno
d.dname;
Reglas para la ejecución de
operaciones DML sobre una Vista
• Puede Ud. ejecutar operaciones DML en
Vistas simples.
• Ud. no puede retirar una fila en caso
que la Vista contenga lo siguiente:
– Funciones de Grupo
– La cláusula GROUP BY
– La palabra clave DISTINCT
– ...
Bloqueo de operaciones DML
• Ud. puede asegurarse de que ninguna
operación DML tenga lugar, para ésto solo
debe adicionarle la opción WITH READ ONLY
a la Vista.
SQL>
2
3
4
5
6
View
CREATE OR REPLACE VIEW empvu10
(employee_number, employee_name, job_title)
AS SELECT
empno, ename, job
FROM
emp
WHERE
deptno = 10
WITH READ ONLY;
created.
• Cada intento de ejecución de una operación
DML en la Vista conducirá al error del
Servidor ORA-01752.
10
Otros Objetos de un
Banco de Datos
Generación de una Secuencia
• Genere una Secuencia con el nombre
DEPT_DEPTNO para la Clave Primaria de la tabla
DEPT.
• No utilice la opción CYCLE.
SQL> CREATE SEQUENCE dept_deptno
2
INCREMENT BY 1
3
START WITH 91
4
MAXVALUE 100
5
NOCACHE
6
NOCYCLE;
Sequence created.
Uso de Secuencias
• Adicione el nuevo departamento de
“MARKETING” en San Diego.
SQL> INSERT INTO
2 VALUES
3
1 row created.
dept(deptno, dname, loc)
(dept_deptno.NEXTVAL,
'MARKETING', 'SAN DIEGO');
• Muestre el valor actual de la Secuencia
DEPT_DEPTNO.
SQL> SELECT
2 FROM
dept_deptno.CURRVAL
dual;
Modificación de una Secuencia
Modifique el Incremento, el valor Máximo
y Mínimo, y la opción Cycle ó Cache.
SQL> ALTER SEQUENCE dept_deptno
2
INCREMENT BY 1
3
MAXVALUE 999999
4
NOCACHE
5
NOCYCLE;
Sequence altered.
Generación de un Índice
• Genere un Índice en una o varias
columnas.
CREATE INDEX índice
ON tabla (columna[, columna]...);
• Eleve la repidez de una consulta de la
columna ENAME de la tabla EMP.
SQL> CREATE INDEX
2 ON
Index created.
emp_ename_idx
emp(ename);
Generación de índices - Lineamientos
• La columna se emplea frecuentemente en una
cláusula WHERE ó en una condición JOIN.
• La columna contiene un rango de valores alto.
• La columna contiene muchos valores NULOS.
• Dos ó más columnas se emplean seguido juntas
en una cláusula WHERE ó en una condición tipo
JOIN.
• Se trata de una tabla grande y la mayoría de las
consultas reportan menos del 2 - 4% de las filas.
Generación de Índices - Lineamientos
En los siguientes casos no debe generar
índices:
• No se trata de una tabla.
• Las columnas no se emplean seguido
en la consulta.
• La mayoría de las consultas reportan
más del 2 – 4% de las filas.
• La tabla se actualiza con frecuencia.
Generación y eliminación de
Sinónimos
• Genere una abreviación para el nombre
de la Vista DEPT_SUM_VU.
SQL> CREATE SYNONYM d_sum
2 FOR
dept_sum_vu;
Synonym Created.
• Elimine un Sinónimo.
SQL> DROP SYNONYM d_sum;
Synonym dropped.
11
Manejo del Acceso
de los usuarios
Creación de un usuario
El DBA crea usuarios con la ayuda del
comando CREATE USER.
CREATE USER
IDENTIFIED BY
usuario
contraseña;
SQL> CREATE USER scott
2 IDENTIFIED BY tiger;
User created.
Otorgamiento de privilegios del
sistema
El DBA puede repartir privilegios del sistema
específicos al usuario.
SQL> GRANT create table, create sequence, create view
2 TO
scott;
Grant succeeded.
Creación de Roles
SQL> CREATE ROLE manager;
Role created.
SQL> GRANT create table, create view
2
to manager;
Grant succeeded.
SQL> GRANT manager to BLAKE, CLARK;
Grant succeeded.
Cambio de contraseña
• Con la creación de un usuario se
inicializa una contraseña.
• Los usuarios pueden cambiar su
contraseña con el comando ALTER
USER.
SQL> ALTER USER scott
2
IDENTIFIED BY lion;
User altered.
Otorgamiento de privilegios de objetos
• Otorgue el privilegio SELECT para la tabla EMP.
SQL> GRANT
select
2 ON
emp
3 TO
sue, rich;
Grant succeeded.
• Otorgue el privilegio UPDATE para
columnas específicas a usuarios y a roles.
SQL> GRANT
update (dname, loc)
2 ON
dept
3 TO
scott, manager;
Grant succeeded.
Uso de la palabras claves WITH
GRANT OPTION y PUBLIC
• Déle a un usuario el derecho de otorgar
privilegios a terceros.
SQL> GRANT
select, insert
2 ON
dept
3 TO
scott
4 WITH GRANT OPTION;
Grant succeeded.
• Permita a todos los usuarios consultar
la tabla alice.dept.
SQL> GRANT
select
2 ON
alice.dept
3 TO
PUBLIC;
Grant succeeded.
Retracción de privilegios sobre Objetos
Quítele al usuario los privilegios SELECT
e INSERT que el usuario Scott otorgó para
la tabla DEPT.
SQL> REVOKE select, insert
2 ON
dept
3 FROM
scott;
Revoke succeeded.
Descargar