Está en la página 1de 60

Introduccin a ORACLE SQL

Marzo 2004

Definicin de Instancia
Cuando una BD de Oracle se arranca en un servidor (Unix,
Windows), Oracle crear un rea de memoria llamada System Global Area (SGA), y arranca varios procesos Oracle. La combinacin entre la SGA y los procesos, forman una Instancia de Oracle.
System Global Area (SGA)
Context Areas

Database Buffer Cache

Redo Log Buffer

Oracle Processes 2
DMR Consulting

Definicin de un Esquema
Un esquema es una coleccin de objetos de BD, que son accesibles por un usuario. Los objetos de un esquema, son estructuras lgicas que hacen referencia a datos de la BD. Los objetos de un esquema, pueden ser: tablas, vistas, secuencias, PLs No hay una relacin directa entre un tablespace y un esquema. Son entidades lgicas que no tienen nada que ver. Los objetos de un esquema, pueden pertenecer a diferentes tablespaces, y un tablespace puede almacenar objetos de diferentes esquemas. Normalmente los nombres de los esquemas, se llaman igual que el nombre de los usuario.
3
DMR Consulting

Uso de Grants en Oracle


Un grant en Oracle, es un privilegio/permiso sobre objetos de Base de Datos, que se pueden asignar a usuarios o roles. Un rol, es un conjunto de privilegios o permisos, para asignarlos a usuarios que tienen caractersticas comunes. Las acciones sobre una BD que pueden realizar los usuarios, se determinan por los grants. A la vez que se pueden otorgar grants, tambin se pueden quitar grants a usuarios o roles. Los tipos de grants que se pueden otorgar, estn determinados por Oracle.

Los ms comunes son: select, insert, update, delete sobre tablas, alter session, para que un usuario se puede conectar a Oracle, y create o modify.
4
DMR Consulting

Uso de Grants en Oracle


En una BD Oracle los grants se asignan a roles, y los roles a su vez se asignan a usuarios. Tambin se pueden otorgar grants a usuarios directamente. En una BD Oracle, los grants sobre objetos se pueden dividir en cuatro usuarios:

Owner (Usuario propietario de todos los objetos)

User (El usuario de trabajo, ejecucin, inserccin, borrado, consulta..)


Gestin de Datos (Se utiliza para modificar datos de las tablas) Consulta (Usuario para realizar slo consultas sobre las tablas, vistas)
USUARIO SPAOWN01 SPAUSR01 SPAGD01 SPACON01 PROPIETARIO X SELECT X X X X X X INSERT X X X DELETE X X X UPDATE X X X EXECUTE X X

5
DMR Consulting

SPALINK01

Sinnimos pblicos y privados


Un sinnimo, es una alias que apunta a un objeto de la BD. Normalmente los sinnimos, se utilizan para eliminar el propietario de un objeto, y hacer referencia al nombre del objeto. SPAOWN01.SPA_TB_SERVICIOS_ADSL Un sinnimo pblico pertenece al grupo especial PUBLIC, y cuando se crea, el sinnimo es accesible por cualquier usuario de la BD. Un sinnimo privado se almacena en un esquema determinado de un usuario, y es accesible por ese usuario.
CREATE PUBLIC SYNONYM empleado FOR usuario1.empleado
DROP PUBLIC SYNONYM empleado

6
DMR Consulting

Sentencias SQL
SELECT INSERT UPDATE DELETE MERGE

Recuperacin de datos Lenguaje de manipulacin de datos (DML)

CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT


GRANT REVOKE
7
DMR Consulting

Lenguaje de definicin de datos (DDL)

Control de transacciones Lenguaje de control de datos (DCL)

Escritura de Sentencias SQL SELECT Bsicas

8
DMR Consulting

Sentencias SELECT bsicas

SELECT FROM

*|{[DISTINCT] column|expression [alias],...} table;

SELECT identifica las columnas what

FROM identifica la tabla which

9
DMR Consulting

Uso de Operadores Aritmticos

SELECT last_name, salary, salary + 300 FROM employees;

10
DMR Consulting

Uso de Alias de Columna


SELECT last_name AS name, commission_pct comm FROM employees;

SELECT last_name "Name", salary*12 "Annual Salary" FROM employees;

11
DMR Consulting

Uso del operador de concatenacin

SELECT FROM

last_name||job_id AS "Employees" employees;

12
DMR Consulting

Uso de cadenas de caracteres literales

SELECT last_name ||' is a '||job_id AS "Employee Details" FROM employees;

13
DMR Consulting

Eliminacin de filas duplicadas

Elimine filas duplicadas mediante la palabra clave DISTINCT de la clusula SELECT.


SELECT DISTINCT department_id FROM employees;

14
DMR Consulting

Restriccin y Ordenacin de Datos

15
DMR Consulting

Uso de la clusula Where


SELECT employee_id, last_name, job_id, department_id FROM employees WHERE department_id = 90 ;

Las cadenas de caracteres y los valores de fechas se escriben entre comillas simples. Los valores de caracteres son sensibles a maysculas/minsculas y los de fecha, al formato.

16
DMR Consulting

Condiciones de comparacin

Operador = > >= < <= <>

Significado Igual que Mayor que Mayor o igual que Menor que Menor o igual que No igual a

17
DMR Consulting

Condiciones de comparacin

Operador

Significado

BETWEEN ...AND...
IN(set) LIKE IS NULL

Entre dos valores (ambos inclusive),

Coincide con cualquiera de una lista de valores Coincide con un patrn de caracteres Es un valor nulo

18
DMR Consulting

Condiciones lgicas

Operador

Significado

AND
OR

Devuelve TRUE si las dos condiciones componentes son verdaderas


Devuelve TRUE si alguna de las condiciones componentes es verdadera Devuelve TRUE si la siguiente condicin es falsa

NOT

19
DMR Consulting

Clusula de ordenacin
Ordene filas con la clusula ORDER BY

ASC: orden ascendente, por defecto DESC: orden descendente

La clusula ORDER BY aparece en ltimo lugar en la sentencia SELECT.

SELECT last_name, job_id, department_id, hire_date FROM employees ORDER BY hire_date ;

20
DMR Consulting

Funciones de una Sola Fila

21
DMR Consulting

Funciones de manipulacin de Maysculas/Minsculas

Estas funciones convierten las maysculas/minsculas para cadenas de caracteres.

Function LOWER('SQL Course') UPPER('SQL Course')

Result sql course SQL COURSE

INITCAP('SQL Course') Sql Course

22
DMR Consulting

Funciones de Manipulacin de Caracteres

Estas funciones manipulan cadenas de caracteres:

Funcin CONCAT('Hello', 'World') SUBSTR('HelloWorld',1,5)

Resultado HelloWorld Hello

LENGTH('HelloWorld')
INSTR('HelloWorld', 'W') LPAD(salary,10,'*') RPAD(salary, 10, '*') TRIM('H' FROM 'HelloWorld')
23
DMR Consulting

10
6 *****24000 24000***** elloWorld

Funciones de Fecha

Funcin MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY ROUND TRUNC


24
DMR Consulting

Descripcin Nmero de meses entre dos fechas Suma meses de calendario a una fecha Siguiente da de la fecha especificada ltimo da del mes Redondea la fecha Trunca la fecha

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-FEB-95')


25
DMR Consulting

'28-FEB-95'

Uso de la funcin TO_CHAR con fechas

SELECT last_name, TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE FROM employees;

26
DMR Consulting

Uso de la funcin NVL

1 SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL FROM employees;

1
27
DMR Consulting

Uso de la funcin DECODE

SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARY FROM employees;

28
DMR Consulting

Visualizacin de Datos de Varias Tablas

29
DMR Consulting

Obtencin de Datos de Varias Tablas (JOIN)


EMPLOYEES DEPARTMENTS

30
DMR Consulting

Sintaxis JOIN

Utilice una unin para consultar datos de ms de una tabla. SELECT FROM WHERE table1.column, table2.column table1, table2 table1.column1 = table2.column2;

Escriba la condicin de unin en la clusula WHERE. Escriba en el nombre de columna el nombre de tabla como prefijo si aparece el mismo nombre de columna en ms de una tabla.

31
DMR Consulting

Uso de JOIN

SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id;

32
DMR Consulting

Uso de Alias de Tabla

Simplifique las consultas utilizando alias de tabla.


Mejore el rendimiento utilizando prefijos de tabla.

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e , departments d WHERE e.department_id = d.department_id;

33
DMR Consulting

Uniones Externas (Outter Join)

DEPARTMENTS

EMPLOYEES

No hay empleados en el departamento 190.


34
DMR Consulting

Sintaxis Outter Join

Tambin puede utilizar una unin externa para ver filas que no cumplen la condicin de unin.
El operador de unin externa es el signo ms (+).

SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column(+) = table2.column; SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column(+);

35
DMR Consulting

Uso de Outter Join

SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d

WHERE

e.department_id(+) = d.department_id ;

36
DMR Consulting

Agregado de Datos Utilizando Funciones de Grupo

37
DMR Consulting

Qu Son Funciones de Grupo?


Las funciones de grupo operan sobre juegos de filas para proporcionar un resultado por grupo.

EMPLOYEES

El salario mximo en la tabla EMPLOYEES.

38
DMR Consulting

Tipos de funciones de Grupo

AVG
COUNT MAX MIN STDDEV SUM VARIANCE

39
DMR Consulting

Sintaxis de las funciones de Grupo

SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY

[column,] group_function(column), ... table condition] column] group_condition] column];

40
DMR Consulting

Uso de la clusula Group By

Todas las columnas de la lista SELECT que no estn en las


funciones de grupo deben estar en la clusula GROUP BY. SELECT department_id, AVG(salary) FROM employees GROUP BY department_id ;

41
DMR Consulting

Subconsultas

42
DMR Consulting

Sintaxis de Subconsulta

SELECT FROM WHERE

select_list table expr operator (SELECT FROM

select_list table);

La subconsulta (consulta interna) se ejecuta una vez antes de la consulta principal. El resultado de la subconsulta lo utiliza la consulta principal (consulta externa).

43
DMR Consulting

Uso de Subconsulta

SELECT last_name FROM employees 11000 WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

44
DMR Consulting

Subconsulta de Comparacin entre Pares

Visualice los detalles de los empleados dirigidos por el mismo director y que trabajen en el mismo departamento que los empleados cuyo EMPLOYEE_ID sea 178 o 174.

SELECT employee_id, manager_id, department_id FROM employees WHERE (manager_id, department_id) IN (SELECT manager_id, department_id FROM employees WHERE employee_id IN (178,174)) AND employee_id NOT IN (178,174);

45
DMR Consulting

Uso de una Subconsulta en la Clusula FROM

SELECT
FROM

WHERE AND

a.last_name, a.salary, a.department_id, b.salavg employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) b a.department_id = b.department_id a.salary > b.salavg;

46
DMR Consulting

Subconsultas Correlacionadas

SELECT column1, column2, ... outer FROM table1 WHERE column1 operator (SELECT FROM WHERE

colum1, column2 table2 expr1 = outer .expr2);

La subconsulta hace referencia a una columna de una tabla en la consulta principal.

47
DMR Consulting

Uso de subconsulta Correlacionada


Busque todos los empleados que ganan ms del salario medio en su departamento.
SELECT last_name, salary, department_id FROM employees outer WHERE salary > (SELECT AVG(salary) FROM employees WHERE department_id = outer.department_id) ;
Cada vez que se procesa una fila de la consulta externa, se evala la consulta interna.

48
DMR Consulting

Manipulacin de Datos

49
DMR Consulting

Sintaxis de la Sentencia INSERT

Agregue nuevas filas a una tabla mediante la sentencia INSERT.


INSERT INTO VALUES table [(column [, column...])] (value [, value...]);

Con esta sintaxis slo se inserta una fila cada vez.

50
DMR Consulting

Insercin de filas nuevas

Inserte una fila nueva que contenga valores para cada columna.

Enumere los valores en el orden por defecto de las columnas de la tabla.


Opcionalmente, liste las columnas en la clusula INSERT.

INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700); 1 row created.

Escriba los valores de caracteres y de fecha entre comillas simples.


51
DMR Consulting

Copia de filas desde otra tabla

Escriba la sentencia INSERT con una subconsulta.


INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%'; 4 rows created.

No utilice la clusula VALUES. Haga coincidir el nmero de columnas de la clusula INSERT con el de la subconsulta.

52
DMR Consulting

Sintaxis de la Sentencia UPDATE

Modifique las filas existentes con la sentencia UPDATE.


UPDATE SET [WHERE table column = value [, column = value, ...] condition];

Actualice ms de una fila cada vez si es necesario.

53
DMR Consulting

Actualizacin de las Filas de una Tabla

Si incluye la clusula WHERE, las filas especficas se modifican.


UPDATE employees SET department_id = 70 WHERE employee_id = 113; 1 row updated.

Se modifican todas las filas de la tabla si omite la clusula WHERE.


UPDATE copy_emp SET department_id = 110; 22 rows updated.
54
DMR Consulting

Sintaxis de la Sentencia DELETE

Puede eliminar las filas existentes de una tabla


utilizando la sentencia DELETE.
table condition];

DELETE [FROM] [WHERE

55
DMR Consulting

Supresin de Filas de una Tabla

Se suprimen filas especficas si incluye la clusula WHERE.


DELETE FROM departments WHERE department_name = 'Finance'; 1 row deleted.

Se suprimen todas las filas de la tabla si omite la clusula WHERE.


DELETE FROM copy_emp; 22 rows deleted.

56
DMR Consulting

Anexo

57
DMR Consulting

Best Practices
En consultas de tipo UNION utilizar UNION ALL si no es necesario eliminar duplicados o si las consultas que participan de la UNION no devolvern duplicados (UNION elimina filas duplicadas y UNION ALL no). Evitar el uso de criterios de filtro NOT IN en subconsultas. Ej. WHERE A.CAMPO1 NOT IN (SELECT CAMPO1 FROM B)
ALTERNATIVAS SELECT A.CAMPO1 FROM A,B WHERE A.CAMPO1=B.CAMPO1(+) AND B.CAMPO1 IS NULL SELECT A.CAMPO1 FROM A WHERE 0<(SELECT COUNT(*) FROM B) WHERE A.CAMPO1=B.CAMPO1)

SELECT A.CAMPO1 FROM A WHERE NOT EXISTS (SELECT X FROM B) WHERE A.CAMPO1=B.CAMPO1)

En las sentencias de insercin especificar todos los campos que van a ser informados:
CORRECTO INSERT INTO A (C1,C2,C3) VALUES(A,B,SYSDATE); INCORRECTO INSERT INTO A VALUES(A,B,SYSDATE);
(si se aade una columna a la tabla esta sentencia deja de ser vlida. Lo que significa que si aadimos una columna a la tabla se tienen que revisar todos los programas para modificar las SQL que insertan en la tabla)

58
DMR Consulting

Best Practices
Evitar la conversin implcita. La comparacin de campos en la clusula WHERE ha de ser entre mismo tipo de datos. Ejemplo: (suponiendo que el campo C1 es VARCHAR2) SELECT *
FROM A WHERE C1=500;

Evitar el uso de funciones en la clusula WHERE sobre campos indexados (ya que impiden que se pueda usar el ndice) Ejemplo (supongamos que el campo FECHA_NACIMIENTO est indexado)
(INCORRECTO) SELECT * FROM EMPLEADOS WHERE TO_CHAR(FECHA_NACIMIENTO,dd/mm/yyyy)=01/01/2005; (CORRECTO) SELECT * FROM EMPLEADOS WHERE FECHA_NACIMIENTO=TO_DATE(01/01/2005,dd/mm/yyyy);

59
DMR Consulting

Best Practices
Utilizacin de Alias para denominar las tablas. As evitaremos problemas de ambigedad y facilitaremos el trabajo a Oracle. Uso de EXIST en vez de IN. Comprobar que tenemos (N de tablas -1) condiciones en el where antes de lanzar una consulta.

60
DMR Consulting

También podría gustarte