SQL plus Oracle.docx

download SQL plus Oracle.docx

of 95

Transcript of SQL plus Oracle.docx

Introduccin a Oracle SQL-Plus

INDICE DE CONTENIDO

ACCESO Y VISUALIZACIN DE DATOS EL MODELO RELACIONAL VISIN GENERAL DE SQL SQL CONTRA SQL*PLUS Comandos SQL Uso los comandos de SQL*Plus para VISIN GENERAL DEL INICIO DE UNA SESIN SQL ACCESO A LA AYUDA VISTAZO DE LA SENTENCIA SELECT SELECCIN DE COLUMNAS SELECCIN DE FILAS VER EL DICCIONARIO DE DATOS Nombre de tabla Descripcin EDICIN DEL BUFFER DE SQL-PLUS EJECUCIN DE OPERACIONES SOBRE TIPOS DE DATOS Y FUNCIONES VISTAZO A LOS VALORES Y FUNCIONES NUMRICOS REFERENCIA DE LOS VALORES Y FUNCIONES NUMRICOS VISTAZO A LOS VALORES Y FUNCIONES DE FECHA REFERENCIA DE LOS VALORES Y FUNCIONES DE FECHA REFERENCIA DE LOS VALORES Y FUNCIONES DE CARACTERES VISIN GENERAL DE ALGUNAS FUNCIONES ADICIONALES REFERENCIA DE ALGUNAS FUNCIONES ADICIONALES VISTAZO A LAS FUNCIONES DE GRUPO OBTENIENDO DATOS DE MULTIPLES TABLAS CARACTERSTICAS DEL JOIN TIPOS DE JOIN [EQUIJOIN, OUTER JOIN , SEF-JOINS ] NON-EQUIJOINS OPERADORES DE CONJUNTO EL OPERADOR UNION EL OPERADOR INTERSECCIN (INTERSECT) EL OPERADOR MENOS (MINUS VISIN GENERAL DE LA CREACIN DE TABLAS CREACIN DE TABLAS RESTRICCIONES MODIFICACIN DE TABLAS Borrar la tabla original CREACIN DE VISTAS VISTAZO AL ACCESO DE TABLAS Y VISTAS UN VISTAZO A LA CONCESIN DE ACCESO A TABLAS Y VISTAS VISIN GENERAL DE LOS SINNIMOS CREACIN DE SINNIMOS VISIN GENERAL SOBRE LOS NDICES CREACIN DE NDICES CREACIN DE GENERADORES DE SECUENCIA INSERCIN DE FILAS ACTUALIZACIN DE FILAS ELIMINACIN DE FILAS UN VISTAZO AL PROCESAMIENTO DE TRANSACCIONES PROCESAMIENTO DE TRANSACCIONESAcceso y visualizacin de los datos Modo relacional. La informacin se organiza en forma de tablas Tabla EMPEMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO

7369SMITHRECEPCIONISTA790217/12/199580020

7499ALLENVENDEDOR769820/02/1996160030030

7521WARDVENDEDOR769822/02/1996125050030

7566JONESGERENTE783902/04/1996297520

7654MARTINVENDEDOR769828/07/19961250140030

7698BLAKEGERENTE783931/05/1996285030

7782CLARKGERENTE783909/06/1996245010

7788SCOTTANALISTA756609/12/1997300020

7839KINGPRESIDENTE17/11/1996500010

7844TURNERVENDEDOR769808/11/19961500030

7876ADAMSRECEPCIONISTA778812/01/1998110020

7900JAMESRECEPCIONISTA769803/12/199695030

7902FORDANALISTA756603/12/1996300020

7934MILLERRECEPCIONISTA778223/01/1998130010

Cada columna tiene un tipo de informacin y cada fila est compuesta de columnas que contienen un nico valor. Ejemplo: La columna SAL en la fila del empleado SMITH tiene el valor de 800 Las categoras de informacin se listan en la parte de arriba de cada tabla.

LA INFORMACIN DE UNA TABLA PUEDE RELACIONARSE CON LA INFORMACIN QUE SE ENCUENTRA EN OTRA.

Tabla DEPTDEPTNODNAMELOC

10FINANZASNEW YORK

20INVESTIGACIONDALLAS

30VENTASCHICAGO

40OPERACIONESBOSTON

Visin General de SQLSQL plus es una herramienta diseada para usar con ORACLE, la cual extiende las capacidades del estndar ANSI-SQL

SQL contra SQL*PlusSQLEs un lenguaje que consiste en comandos para guardar, recuperar, mantener y regular el acceso a una base de datos.

SQL *Plus Es una aplicacin que reconoce y ejecuta comandos SQL y comandos especializados de SQL*Plus que pueden personalizar reportes, proveer facilidades de ayuda y edicin, as como mantener variables del sistema.

Con SQL se puede manipular y recuperar datos, asi como crear y modificar la estructura de los datos.Funciones de los comandos SQL: Consultas Manipulacin de datos Definicin de datos Control de datos Comandos SQLALTERDROPREVOKEAUDITGRANTROLLBACK

COMMENTINSERTSELECTCOMMITLOCKUPDATE

CREATENO AUDITVALIDATEDELETERENAME

Use los comandos SQL* plus para manipular comandos SQL Entrar, editar, recuperar y correr comandos SQL Formatear, guardar, imprimir y realizar clculos sobre los resultados de una consulta en forma de reportes. Listar la definicin de las columnas de cualquier tabla. Acceder y copiar datos entre las bases de datos SQL Enviar y aceptar mensajes de un usuario final

Comandos de SQL Plus.@ (ejecutar)COPYQUIT/ (ejecutar ultimo)DESCRIBEREMARK

ACCEPTDISCONNECTRUNAPPENDEDITSAVE

BREAKEXITSETBTITLEGETSHOW

CHANGEHELPSPOOLCLEARHOSTSQLPLUS

COLUMNINPUTSTARTCOMPUTELISTTIMING

CONNECTNEWPAGETITLEUNDEFINE

COMANDOSSQL> show user; --- ver con que usuario estoy trabajandoSQL> EXIT --- Cierra sesin.SQL> connect [username[/password[@database]]] --- inicio de session SQLSQL> HELP TOPICS --- Listado de todos los comandos de SQL Plus [Acceso a la Ayuda]SQL> SELECT USERNAME FROM ALL_USERS; --- Para ver los usuarios existentes----------------------------------------------------------------------------------------------------------------------------------

VISIN GENERAL DEL INICIO DE UNA SESIN SQLEl primer paso para abrir una sesin SQL es acceder a SQL-Plusa) Interfaz Grafica

b) Desde la lnea de ComandoSQL> connect [username[/password[@database]]]username = nombre_de_usuariopassword = clave_de_acceso@database = alias_de_la_base_de_datos

c) Cierre de sesin:SQL> exit Vistazo de la sentencia SELECTSeleccionar informacin de una base de datos, es decir, hacer consultas, es una de las operaciones ms comunes que se realizan sobre una base de datos.

tems de una RDBMS que pueden incluirse en una sentencia SELECT Columnas Expresiones Constantes

Requerimientos mnimos para ejecutar una sentencia SELECT El comando SELECT (indica que se va a consultar). La palabra FROM (indica donde se va a realizar la consulta).

Seleccin de Columnas Existen dos maneras distintas de visualizar todas las columnas de una tabla: Digitando todos los nombres de columna separados por comas y la tabla donde esas columnas estn definidas. Digitar un asterisco y el nombre de la taba donde estn definidas las columnas.

Sintaxis:SELECT nombre_columna [, nombre_columna ] FROM nombre_tabla

SELECT *FROM nombre_tabla

EJEMPLO: Visualizar todas las columnas de informacin acerca de cada departamento.

SQL> SELECT * FROM dept;

DEPTNODNAME LOC-----------------------------------------------10FINANZAS NEW YORK20INVESTIGACION DALLAS30VENTASCHICAGO40OPERACIONESBOSTON

4 rows selected.

Nota: se puede utilizar DESCRIBE para visualizar los nombres de columnas de una tabla.

EJEMPLO: Visualizar la estructura de la tabla DEPTSQL> DESCRIBE dept;

NameNULL?Type------------------------------------------DEPTNONOT NULLNUMBER (2)DNAMECHAR (14)LOCCHAR (13)

Ejemplo de columna nica: Para visualizar una columna especfica, entre el nombre de la columna en la clusula SELECT y la tabla en la que est definida en la clusula FROM. SQL> SELECT dname FROM dept;

DNAME-----------------FINANZAS INVESTIGACION VENTASOPERACIONES

4 rows selected.

---------------------------------------------------------------------------------------------------------------------------------------------Ejemplo de mltiples columnas: Visualizar el nombre y nmero de todos los departamentos

SQL> SELECT dname, deptno FROM dept;

DNAMEDEPTNO-----------------------------------FINANZAS 10INVESTIGACION 20VENTAS30OPERACIONES40

--------------------------------------------------------------------------------------------------------------------------------------------DISTINCT. Con SQL se pueden quitar las filas duplicadas antes que los datos sean devueltos por la sentencia SELECT con la clusula DISTINCT SELECT DISTINCT nombre_columna1 [, nombre_columna2]FROM nombre_tabla

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

EJEMPLO: Visualizar cada cargo de la tabla EMP de forma nica. SQL> SELECT DISTINCT job FROM emp;

JOB-----------------ANALISTARECEPCIONISTAGERENTEPRESIDENTEVENDEDOR

5 rows selected

-----------------------------------------------------------------------------------------------------------------------------------------------

ALIAS. Con SQL se pueden definir alias para los nombres de columnas en una sentencia SELECT

SQL> SELECT DISTINCT job JOB LIST FROM emp;

JOB LIST----------------ANALISTARECEPCIONISTAGERENTEPRESIDENTEVENDEDOR

5 rows selected

Nota: solo se puede hacer referencia a los alias de columna en la clusula SELECT de una consulta.

*****************************************************************************************

Seleccin de FilasPara seleccionar filas especficas de una tabla, use la clusula WHERE para especificar una condicin.Sintaxis de la sentencia selectSELECTFROMWHERE

Componentes de la condicin de bsqueda de la clausula WHERE Nombre de columna, expresin o constante. Operador de comparacin Expresin, nombre de columna o constante

Notas rpidas: Las constantes de cadena y de fecha deben encerrarse entre comillas simples. Las constantes de carcter son sensibles a maysculas y minsculas y las consatantes de fecha deben estar en el formato DD-MM-YY

Operadores de Comparacin

=Igual a

!= , Diferente que

>Mayor que

>=Mayor o igual que

SELECT ename, job, sal FROM emp where MANAGER;

EMPNOENAMESAL------------ ---------------------------SMITHCLERK800ALLENSALESMAN1600WARDSALESMAN1250MARTINSALESMAN1250SCOTTANALYST3000KINGPRESIDENT5000TURNERSALESMAN1500ADAMSCLERK1100JAMESCLERK950FORDANALYST3000MILLERCLERK1300

11 rows selected

EJEMPLO 3:Seleccin basada en un rango de valores usando el operador BETWEEN AND. Seleccionar el nmero, cargo y el nmero de departamento de todos los empleados contratados entre Enero 1 de 1982 y enero 1 de 1983.

SQL> SELECT ename, job, deptno, hiredate FROM emp WHERE hiredate BETWEEN 01/01/1982 AND 01/01/1983;

ENAMEJOBDEPTNOHIREDATE----------------------------------------------MILLERCLERK 1023/01/1982

1 row selected

Ejemplo 4: Seleccin de filas basndose en la coincidencia con valores dentro de una lista, usando el operador IN. Seleccionar el nombre, cargo y nmero de departamento de todos los empleados que son recepcionistas y analistas.SQL> SELECT ename, job, deptno FROM emp WHERE job IN (CLERK, ANALYST);

ENAMEJOB DEPTNO-------------------- ------------SMITHCLERK20SCOTTANALYST20ADAMSCLERK20JAMESCLERK30FORDANALYST20MILLERCLERK10

6 rows selected.

----------------------------------------------------------------------------------------------------------------------------------------------------Seleccin de Filas basndose en la coincidencia con un patrn de caracteres usando comodines con el operador LIKE:

Comodines: % coincidencias con cualquier cantidad de caracteres _coincidencia con un carcter

Ejemplo 1:Seleccionar el nombre, cargo, nmero de departamento y fecha de contratacin para los empleados cuyo apellido empiece con la letra mayscula M.SQL> SELECT ename, job, deptno, hiredate FROM emp where ename LIKE M%;

ENAMEJOB DEPTNOHIREDATE-------------------------- --------------------------MARTINSALESMAN3028/SEP/1981MILLERCLERK1023/JAN/1982

2 rows selected.

Ejemplo 2: Seleccionar el nombre, cargo, numero de departamento y fecha de contratacin para los empleados cuyo apellido empiece con la letra mayscula J seguido de dos caracteres y que termine con ES. SQL> SELECT ename, job, deptno, hiredate FROM emp where ename LIKE J__ES;

ENAMEJOB DEPTNOHIREDATE-------------------------- --------------------------JONESMANAGER2002/APR/1981JAMESCLERK3003/DEC/1981

2 rows selected.

Use el operador NOT para hacer una condicin negativa junto con los operadores: NOT BETWEEN AND NOT IN (lista) IS NOT NULL NOT LIKE

Conecte operadores lgicos con expresiones lgicas complejas.

Expresiones lgicas AND OR

Cuando una condicin contiene ms de una expresin, el RDBMS evala cada expresin. Luego los resultados de cada condicin se unen teniendo en cuenta la precedencia de los operadores de conexin.

Igual precedencia: =, , >=, , SELECT ename, job, sal FROM emp WHERE sal > 1500 AND job = MANAJER OR job = SALESMAN;

ENAME JOB SAL------------ ----------------- -------------ALLEN SALESMAN 1600WARD SALESMAN 1250JONES MANAGER 2975MARTIN SALESMAN 1250BLAKE MANAGER 2850CLARK MANAGER 2450TURNER SALESMAN 1500

7 rows selected.

Ejemplo 2: Seleccionar el nombre, cargo y salario de los gerentes y vendedores que ganen $1500 o ms.SQL> SELECT ename, job, sal FROM emp WHERE sal >= 1500 AND (job = MANAJER OR job = SALESMAN);

ENAMEJOB SAL-------------------- ------------ALLENSALESNAN 1600JONESMANAGER 2975BLAKEMANAGER 2850CLARKMANAGER 2450TURNERSALESMAN 1500

5 rows selected.

Salidas ordenadas de una consulta

Sintaxis de la sentencia SELECT SELECT FROM WHERE ORDER BY

ORDER BY puede ordenar: En orden ascendente En modo descendente Por multiples columnas Por la posicin de la columna

Ejemplo 1:Ordenamiento ascendente, mostrar el salario, cargo y nombre de los empleados del departamento 10 en orden ascendente, por salario.SQL> SELECT sal, job, ename FROM emp WHERE deptno =10 ORDER BY sal;

SALJOBENAME--------------------------------------1300CLERKMILLER2450MANAGERCLARK5000PRESIDENTKING

3 rows selected

Ejemplo 2:Ordenamiento descendente. Mostrar el salario, cargo y nombre de los empleados del departamento 10 en orden descendente, por salario.

SQL> SELECT sal, job, ename FROM emp WHERE deptno =10 ORDER BY sal DESC;

Ejemplo 3: Ordenamiento por mltiples columnas. Mostrar el nombre, cargo y salario de los empleados en el departamento 30. Ordene los resultados por cargo. Si hay ms de un empleado con el mismo cargo, ordnelos por salario en orden descendente y finalmente por apellido.SQL> SELECT ename, job, sal FROM emp WHERE deptno =30 ORDER BY job, sal DESC ename;

SALJOBENAME------------------------------JAMESCLERK950BLAKEMANAGER2850ALLENSALESMAN1600TURNERSALESMAN1500MARTINSALESMAN1250WARDSALESMAN1250

6 rows selected

Ejemplo 4:Ordenamiento por posicin de columna. Muestre el nombre, salario y cargo de los empleados del departamento 10 en orden ascendente por salario.SQL> SELECT ename, sal, job FROM emp WHERE deptno = 10 ORDER BY 2;

ENAMESAL JOB------------------------ -------------------MILLER1300 CLERKCLARK2450 MANAGERKING5000 PRESIDENT

3 rows selected.

-------------------------------------------------------------------------------------------------------------------------------------------------VER EL DICCIONARIO DE DATOSEl diccionario de datos es un conjunto de tablas y vistas que contiene informacin descriptiva acerca de las tablas, privilegios de acceso de los usuarios, y dems caractersticas de la base de datos.

Tablas de usuario que se consultan frecuentemente en el diccionario de datos

Nombre de tabla Descripcin

user_catalog Tablas, vistas, sinnimos, secuencias y otros objetos de propiedad del usuariouser_constraints Informacin acerca de las restricciones en las tablas del usuariouser_indexes Descripcin de los ndices del usuariouser_sequences Descripcin de las secuencias del usuariouser_synonyms Descripcin de los sinnimos del usuariouser_tables Descripcin de las tablas del usuariouser_users Informacin acerca del usuario actualuser_views Informacin acerca de las vistas del usuarioall_tables Descripcin de todas las tablas accesibles por el usuario

Ejemplo: USER_TABLES: Mostrar una columna del diccionario de datos user_tables:SQL> SELECT table_name FROM user_tables;

TABLE_NAME--------------------DEPTEMPSALGRADE

3 rows selected.

---------------------------------------------------------------------------------------------------------------------------------------------------EDICIN DEL BUFFER DE SQL-PLUSLa edicin del buffer de SQL-Plus se realiza con comandos de SQL-Plus:

Comando DescripcinA[PPEND]Adiciona texto especfico a la lnea actual en el buffer

C[HANGE]Cambia la primera ocurrencia de un texto especfico en la lnea actual del buffer por una cadena especificada. Ejemplo: C / ENP / EMP

CL[EAR] BUFFER CLE[AR] BUFFERBorra el contenido del buffer

DELBorra el contenido de la lnea actual del buffer

I[NPUT]Adiciona una o ms lneas de texto despus de la lnea actual del buffer.Presione en una lnea en blanco para salir del modo INPUT

L[IST]Lista todas las lneas del buffer

L[IST] nLista la lnea nmero n del buffer

R[UN]Muestra y ejecuta el contenido del buffer

/Ejecuta el contenido del buffer

nFija el puntero del buffer en la lnea n

n Cambia el contenido de la lnea n por la cadena de texto especificada

Nota rpida: Un asterisco (*) aparecer al lado del nmero de lnea actual del buffer

Ejemplos: Reescribir la lnea 2 cuando ocurre un error:SQL> SELECT ename, job, salFRO empWHERE deptno = 30;ERROR at line 2:

ORA-00923: FROM keyword not found where expected

SQL> 2 FROM empSQL> /

ENAME JOB SAL------------- ---------------- -------------ALLEN SALESMAN 1600WARD SALESMAN 1250MARTIN SALESMAN 1250BLAKE MANAGER 2850TURNER SALESMAN 1500JAMES CLERK 950

6 rows selected.

Fijar el puntero del buffer en la lnea 1. Cambiar SAL por DEPTNO:SQL> 11* SELECT ename, job, salSQL> C / sal / deptno1* SELECT ename, job, deptnoSQL> /

Visin general de la creacin de tablasENAME JOB DEPTNO------------- ---------------- -------------ALLEN SALESMAN 30WARD SALESMAN 30MARTIN SALESMAN 30BLAKE MANAGER30TURNER SALESMAN 30JAMES CLERK 30

6 rows selected.

Agregar la columna HIREDATE en la lnea actual usando el comando APPEND:SQL> 11* SELECT ename, job, deptnoSQL> A , hiredate1* SELECT ename, job, deptno, hiredateSQL> /

ENAME JOB DEPTNO HIREDATE------------- ---------------- ------------- ---------------ALLEN SALESMAN 30 20-FEB-81WARD SALESMAN 30 22-FEB-81MARTIN SALESMAN 30 28-SEP-81BLAKE MANAGER 30 31-MAY-81TURNER SALESMAN 30 08-SEP-81JAMES CLERK 30 03-DEC-81

6 rows selected.

Borrar la lnea 3:SQL> 33* WHERE deptno = 30SQL> delSQL> /

ENAME JOB DEPTNO HIREDATE------------- ---------------- ------------- ---------------SMITH CLERK 20 17-DEC-80ALLEN SALESMAN 30 20-FEB-81WARD SALESMAN 30 22-FEB-81JONES MANAGER 20 02-APR-81.

ADAMS CLERK 20 12-JAN-83JAMES CLERK 3003-DEC-81FORD ANALYST 20 03-DEC-81MILLER CLERK10 23-JAN-82

14 rows selected.

EJECUCIN DE OPERACIONES SOBRE TIPOS DE DATOS Y FUNCIONES

VISTAZO A LOS VALORES Y FUNCIONES NUMRICOSRealice clculos varios sobre nmeros usando los siguientes operadores aritmticos:+ Suma- Resta* Multiplicacin/ Divisin( ) Parntesis anular precedencia

Los operadores aritmticos pueden ser usados en la mayora de sentencias SQL.

REFERENCIA DE LOS VALORES Y FUNCIONES NUMRICOSMuestre el resultado de los clculos como si fueran columnas con expresiones aritmticas en sentenciasSELECT.

Ejemplo: expresiones en sentencias SELECT. Muestre el nombre, salario, comisin y la compensacin total para todos los vendedores cuya comisin es mayor que el 25% de su salario. SQL> SELECT ename, sal, comm, sal + comm2 FROM emp3 WHERE job = SALESMAN AND comm > 0.25 * sal4 ORDER BY 4;

ENAME SAL COMM SAL+COMM-------------- -------------- --------------- ---------------WARD 1250 500 1750MARTIN1250 1400 2650

2 rows selected.

Una fila sin valor en una columna, se dice que contiene un valor NULO.SQL> DESCRIBE emp;

Name Null? Type--------------------- ---------------- ----------------------EMPNO NOT NULL NUMBER (4)ENAME CHAR (10)JOB CHAR (9)MGR NUMBER (4)HIREDATE DATESAL NUMBER (7, 2)COMM NUMBER (7, 2)DEPTNO NOT NULL NUMBER (2)

Cuando una expresin o funcin individual hace referencia a una columna que contiene un valor nulo, el resultado es tambin nulo.

Ejemplo: Muestre el nombre, cargo, salario, comisin y compensacin total de los empleados del departamento 30.SQL> SELECT ename, job, sal, comm, sal + comm2 FROM emp3 WHERE deptno = 30;

ENAME JOB SAL COMM SAL+COMM-------------- -------------------- -------------- -------------- --------------------ALLEN SALESMAN 1600 300 1900WARD SALESMAN 1250 500 1750JONES SALESMAN 2975MARTIN SALESMAN 1250 1400 2650BLAKE MANAGER 2850SCOTT SALESMAN 3150TURNER SALESMAN 1500 0 1500JAMES CLERK 950

8 rows selected.

Convierta un valor nulo en uno no-nulo con el propsito de evaluar una expresin con la funcin NVLCuando NVL evala la primera expresin, si esta es no-nula, retorna dicha expresin; en caso contrario, retorna la segunda.

Sintaxis:NVL (expr1, expr2)

Ejemplo: Muestre el nombre de empleado, cargo, salario, comisin y compensacin total de los empleados del departamento 30.SQL> SELECT ename, job, sal, comm, NVL(sal, 0) + NVL(comm, 0)2 FROM emp3 WHERE deptno = 30;

ENAME JOB SAL COMM NVL(SAL, 0)+NVL(COMM, 0)-------------- -------------------- -------------- -------------- -------------------------------------------ALLEN SALESMAN 1600 300 1900WARD SALESMAN 1250 500 1750JONES SALESMAN 2975 2975MARTIN SALESMAN 1250 1400 2650BLAKE MANAGER 2850 2850SCOTT SALESMAN 3150 3150TURNER SALESMAN 1500 0 1500JAMES CLERK 950 9508 rows selected.

El RDMBS evala cada expresin aritmtica. Los resultados de las expresiones se combinan luego en el orden determinado por la precedencia de los operadores.

Orden de evaluacin* Multiplicacin/ Divisin+ Suma- Resta

Para anular la precedencia de los operadores, coloque parte de la expresin entre parntesis. ORACLE evala estas expresiones primero.

Ejemplo: Muestre el nombre de empleado, salario, comisin y compensacin total para todos los vendedores ordenado por compensacin total.SQL> SELECT ename, sal, comm, 12 * (sal + comm) total2 FROM emp3 WHERE job = SALESMAN4 ORDER BY 12 * (sal + comm);

ENAME SAL COMM TOTAL-------------- -------------- -------------- ------------TURNER 1500 0 18000WARD 1250 500 21000ALLEN 1600 300 22800MARTIN 1250 1400 31800JONES 2975SCOTT 3150

6 rows selected.

Las funciones numricas aceptan una entrada numrica y retornan valores numricos

Ejemplo: funcin ROUNDListe el nombre, salario mensual, salario diario (basado en un mes laboral de 22 das) y el salario diario redondeado al prximo entero para los empleados ALLEN y JONES.SQL> SELECT ename, sal, sal / 22, ROUND (sal / 22, 0)2 FROM emp3 WHERE ename IN (ALLEN, JONES);

ENAME SAL SAL / 22 ROUND(SAL / 22, 0)-------------- -------------- --------------- ----------------------------ALLEN 1600 72.7272727 73JONES 2975 135.227273 135

2 rows selected.

FUNCINEJEMPLORESULTADO

MODMOD (7, 5)El residuo de dividir 7 entre 5

SQRTSQRT (25)La raz cuadrada de 25

ROUNDROUND (SAL, 2)El salario, redondeado a dos dgitos despus del punto decimal.

TRUNCTRUNC (SAL, 2)El salario, truncado a dos dgitos despus del punto decimal.

POWERPOWER (SAL, 3)El salario, elevado a la tercera potencia.

VISTAZO A LOS VALORES Y FUNCIONES DE FECHAREFERENCIA DE LOS VALORES Y FUNCIONES DE FECHA

Use operaciones aritmticas simples en sentencias SQL para efectuar clculos sobre fechas en las bases de datos.

Fecha + nmero Suma un nmero de das a una fecha, produciendo otra fecha.Fecha nmero Resta un nmero de das a una fecha, produciendo otra fecha.Fecha Fecha Resta una fecha de otra, produciendo el nmero de das entre las dos.

Ejemplo: Mostrar el nombre, fecha de contratacin y fecha de vencimiento del perodo de prueba (90 das) de los empleados en el departamento 10SQL> SELECT ename, hiredate, hiredate + 90 $REVIEW$2 FROM emp3 WHERE deptno = 10;

ENAME HIREDATE $REVIEW$-------------- --------------- ---------------CLARK 09/06/1981 07/09/1981KING 17/11/1981 15/02/1982MILLER 23/01/1982 23/04/1982

3 rows selected.

FUNCINRESULTADO

ADD_MONTHS (HIREDATE, 6)Devuelve la fecha 6 meses despus de HIREDATE

ADD_MONTHS (HIREDATE, -6)

LAST_DAY (HIREDATE)Devuelve el ltimo da del mes que contiene HIREDATE

NEXT_DAY (HIREDATE, FRIDAY)Devuelve la fecha del siguiente viernes despus de HIREDATE

SYSDATEDevuelve la fecha y hora actual

MONTHS_BETWEEN(SYSDATE, HIREDATE)Devuelve la cantidad de meses transcurridos entre HIREDATE y la fecha actual.

GREATEST(HIREDATE,SYSDATE)Devuelve la fecha ms tarda de una lista de fechas

LEAST(FECHA1, FECHA2...)Devuelve la fecha ms temprana de una lista de fechas

Ejemplo: ADD_MONTHSMostrar el nombre, fecha de contratacin y 6 meses despus de la fecha de contratacin de los empleados del departamento 10.SQL> SELECT ename, hiredate, ADD_MONTHS (hiredate, 6) $REVIEW$2 FROM emp3 WHERE deptno = 10;

ENAME HIREDATE $REVIEW$-------------- --------------- ---------------CLARK 09/06/1981 09/12/1981KING 17/11/1981 17/05/1982MILLER 23/01/1982 23/07/1982

3 rows selected.

Ejemplo: SYSDATE Mostrar el nombre y las semanas de trabajo de los empleados del departamento 20. SQL> SELECT ename, ROUND((SYSDATE - hiredate) / 7,0) WEEKS2 FROM emp3 WHERE deptno = 10;

ENAME WEEKS-------------- ---------------CLARK 1098KING 1075MILLER 1066

3 rows selected.

FORMATEO DE FECHASELEMENTODESCRIPCIN

DDDa del mes (Ej. 1-31)

DYDa de la semana (Ej. FRI)

DAYEl da, en mayscula, con blancos adicionales hasta completar 9 caracteres (Ej. MONDAY)

DDSPTHNombre del da, en mayscula, deletreado (Ej. TWELFTH)

MMMes (Ej. 01 12)

MONNombre del mes, en maysculas, abreviado a 3 letras (Ej. JAN)

MONYHEl mes, en maysculas, con blancos adicionales hasta completar 9 caracteres (Ej. JANUARY)

YYAo con dos dgitos (Ej. 91)

YYYYAo con cuatro dgitos (Ej. 1991)

HH:MI:SSHoras : Minutos : Segundos (Ej. 09:00:00)

fmModo de relleno: lo que siga a este prefijo reemplaza los blancos adicionales

Formatee la visualizacin de valores de fecha con la funcin de conversin TO_CHAR

Ejemplo: Muestre las fechas de contratacin de todos los empleados del departamento 20 con el formato DD of Month YYYY

SQL> SELECT TO_CHAR (hiredate, fmDD of MONTH YYYY) Date of Hire2 FROM emp3 WHERE deptno = 20;

Date of Hire------------------------------17 of DECEMBER 198012 of JANUARY 19833 of DECEMBER 1981

3 rows selected.

REFERENCIA DE LOS VALORES Y FUNCIONES DE CARACTERESCombine columnas con caracteres y constantes de carcter para producir una salida ms significativa que una simple columna estndar devuelta por SQL-Plus.

Ejemplo: concatenacinMuestre la combinacin de departamento ms su localizacin bajo un solo ttulo DEPARTAMENTOS

SQL> SELECT dname || || loc DEPARTAMENTOS2 FROM dept;

DEPARTAMENTOS----------------------------------------ACCOUNTING NEW YORKRESEARCH DALLASSALES CHICAGOOPERATIONS BOSTONFINANCE LOS ANGELESRESEARCH BOSTONPERSONNEL TAHITIEDUCATION MAUI

8 rows selected.

FUNCINRESULTADO

INITCAP (ENAME)Muestra el nombre con su primera letra en mayscula, y las dems en minscula (Ej. Smith)

UPPER (ENAME)Devuelve todos los caracteres de la cadena en mayscula. (Ej. SMITH)

LOWER (ENAME)Devuelve todos los caracteres de la cadena en minscula (Ej. smith)

SUBSTR (JOB, 1, 5)Empezando en la posicin 1, devuelve 5 caracteres (Ej. MANAG)

LENGTH (ENAME)Devuelve el nmero de caracteres de una cadena (Ej. 5)

CONCAT(ENAME,JOB)Concatena dos cadenas

LPAD(sal,5,'*')muestra un nmero de caracteres a la izquierda del valor de la columna *****5000

TRIM('S' FROM 'SMITH')Borra un carcter de una cadena Ej. MITH

INSTR('String', 'r')Devuelve la posicin de un carcter dentro de una cadena Ej: 3

Muestre el nombre y el cargo de todos los empleados llamados Ward en mayscula inicial bajo el ttuloNAME:

SQL> SELECT INITCAP (ename) NAME, job3 FROM emp4 WHERE UPPER (ename) = WARD;

NAME JOB---------- ----------------Ward SALESMAN

1 row selected.

Ejemplo: SUBSTRMostrar las primeras 5 letras del nombre de departamento y su localizacin completa.

SQL> SELECT SUBSTR (dname, 1, 5) dept, loc2 FROM dept;

DEPT LOC------------ ---------------------ACCOU NEW YORKRESEA DALLASSALES CHICAGOOPERA BOSTONFINAN LOS ANGELESRESEA BOSTONPERSO TAHITIEDUCA MAUI

8 rows selected.

Formatee la visualizacin de valores numricos con la funcin de conversin TO_CHAR

Ejemplo: Muestre la comisin de cada empleado del departamento 30 usando signos de peso, comas en las posiciones adecuadas y dos dgitos decimales.SQL> SELECT ename EMPLOYEE, TO_CHAR (comm, $9,990.99) COMMISION2 FROM EMP;

EMPLOYEE COMMISION----------------- ---------------------ALLEN $300.00WARD $500.00JONESMARTIN $1,400.00BLAKESCOTTTURNER $0.00JAMES

8 rows selected.

VISIN GENERAL DE ALGUNAS FUNCIONES ADICIONALES

FUNCINEJEMPLORESULTADO

GREATESTGREATEST (SAL, COMM)Devuelve el mayor valor entre SAL y COMM

LEASTLEAST (SAL, COMM)Devuelve el menor valor entre SAL y COMM

REFERENCIA DE ALGUNAS FUNCIONES ADICIONALES

Ejemplo: GREATESTMuestre el nombre, el salario mensual y la comisin de todos los vendedores, incluyendo una columna que muestre el mayor valor ya sea de salario o comisin.SQL> SELECT ename, sal, NVL (comm, 0), GREATEST (sal, comm)2 FROM emp3 WHERE job = SALESMAN;

ENAME SAL NVL (comm, 0) GREATEST (sal, comm)----------------- ----------------- -------------------- -------------------------------ALLEN 1600 300 1600WARD 1250 500 1250JONES 2975 0 2975MARTIN 1250 1400 1400SCOTT 3150 0 3150TURNER 1500 0 1500

6 rows selected.

VISTAZO A LAS FUNCIONES DE GRUPOPara devolver resultados basados en grupos de filas en lugar de un resultado por fila, utilice las funciones de grupo.

FUNCIONESEJEMPLORESULTADO

AVGAVG (sal)Devuelve el promedio aritmtico de SAL.

COUNTCOUNT (comm)Devuelve el nmero de valores no nulos de la columna COMM.

COUNT (*)Devuelve el nmero de filas no nulas en un grupo.

MAXMAX (sal)Devuelve el valor mximo de SAL

MINMIN (sal)Devuelve el valor mnimo de SAL

SUMSUM (comm)Devuelve la suma de los valores de COMM

Ejemplo: AVG, MAX, SUMMuestre el promedio, el valor mximo y la suma de los salarios anuales de todos los vendedores.SQL> SELECT AVG (sal), MAX (sal), SUM (sal)2 FROM emp3 WHERE job = SALESMAN;

AVG (SAL) MAX (SAL) SUM (SAL)----------------- ----------------- --------------------1954.16667 3150 11725

1 row selected.

Ejemplo: COUNT Muestre el nmero de filas en la tabla EMP, y el nmero de empleados con comisin no nula.SQL> SELECT COUNT (*) EMPLOYEES, COUNT (comm) COMMISIONABLE2 FROM emp;

EMPLOYEES COMMISIONABLE------------------- --------------------------14 4

1 row selected.

REVISANDO SALIDAS DE GRUPO

SINTAXIS DE LA SENTENCIA SELECTSELECT ...FROM ...WHERE ...GROUP BY HAVING ORDER BY

Muestre una tabla en subgrupos de filas con la clusula GROUP BY.

Ejemplo: GROUP BY una columnaMuestre cada departamento y su nmero de empleados, agrupados por departamento.SQL> SELECT deptno, COUNT (*)3 FROM emp4 GROUP BY deptno;

DEPTNO COUNT (*)------------------- --------------------------10320 330 8

3 rows selected.

Si se selecciona una columna normal y una funcin de grupo al mismo tiempo, se recibir un mensaje de error.

Ejemplo:Mostrar el empleado que se contrat de primeroSQL> SELECT ename, MIN (hiredate)2 FROM emp;

ORA-00937: Not a single-group group function.

Ejemplo: GROUP BY ms de una columnaMuestre la cantidad de empleados para cada categora de cargos en cada departamento. SQL> SELECTdeptno, job, COUNT (*)2 FROM emp3 GROUP BY deptno, job;

DEPTNO JOB COUNT (*)------------- ------------------- ---------------10 CLERK 110 MANAGER 110 PRESIDENT 120 ANALYST 120 CLERK 230 CLERK 130 MANAGER 130 SALESMAN 6

8 rows selected.

Coloque una condicin a la funcin de grupo mediante la clusula HAVING.

Ejemplo:Muestre el salario anual promedio para todos los tipos de cargo con ms de dos empleados.SQL> SELECT job, 12 * AVG (sal)2 FROM emp3 GROUP BY job4 HAVING COUNT (*) > 2;

JOB 12 * AVG (SAL)------------------- ----------------------CLERK 12450SALESMAN 23450

2 rows selected.

La clusula HAVING puede ser usada en la misma consulta con una clusula WHERE.

Ejemplo: Muestre los departamentos y la nmina de aquellos departamentos cuya nmina exceda de $8.000, excluyendo todo el personal Aseador. Ordene la lista por el monto de la nmina.SQL> SELECT deptno, SUM (sal)2 FROM emp3 WHERE job != CLERK4 GROUP BY deptno5 HAVING SUM (sal) > 80006 ORDER BY SUM (sal);

DEPTNO SUM (SAL)------------------- ----------------------30 14575

1 row selected.

OBTENIENDO DATOS DE MULTIPLES TABLAS.Es la unin de dos tablas a travs de los campos que la relacionan, llave primaria llave fornea respectivamente

JOIN: use un JOIN en una consulta de datos de ms de una tabla

SELECT table1.column, table2.columnFROMtable1, table2WHERE table1.column1 = table2.column2;

CARACTERSTICAS DEL JOIN Las tablas a ser unidad (JOINED) se especifican en la clusula FROM En la clusula WHERE se especifica como unir las tablas. Las columnas que tienen nombres iguales en las tablas especificadas en la clusula FROM deben ser identificadas utilizando NOMBRE_TABLA.NOMBRE_COLUMNA Si las columnas no tienen homnimos en las tablas, no es necesario especificar el nombre de la tabla en las clusulas WHERE y SELECT. Se pueden unir JOIN cuantas tablas se requieran El criterio de coincidencia entre las tablas es denominado el predicado del JOIN o criterio del JOIN Las columnas especificadas en la condicin JOIN deben estar anexadas. Cuando n tablas son unidas, es necesario tener al menos n-1 condiciones de JOIN entre parejas de tablas para evitar el producto cartesiano (una unin de cuatro tablas requiere especificar criterio de JOIN para tres parejas de tablas)

TIPOS DE JOIN

Ejemplo: Seleccionar nmero del empleado, nombre del departamento y localizacin. SQL> select ename, emp.deptno, loc2 From emp, dept3 Where emp.deptno = dept.deptno;

OUTER JOINOperador OUTERJOIN es el signo ms entre parntesis (+), este obliga a que un registro que contenga valores nulos en uno de los criterios del JOIN coincida con cada valor de la segunda tabla sobre la cual ordinariamente no estara esa coincidencia. El nombre de una tabla debe de seguir las reglas estndar para los nombres de cualquier objeto de una base de datos ORACLE.

SintaxisSELECT table1.column, table2.columnFROMtable1, table2WHERE table1.column1(+) = table2.column2;

Ejemplo: Lista la localizacin de todos los departamentos as como los empleados que trabajan en estos departamentos, incluya los departamentos en los cuales no trabaja empleado alguno.SQL> SELECT loc, ename2 FROM emp, dept3 WHERE emp.deptno(+) = dept.deptno;

OUTER JOINS Y LA CLAUSULA WHEREEjemplo: Liste los departamentos que actualmente no tienen empleados asignadosSQL> SELECT empno, dept.deptno, loc2 FROM emp, dept3 WHERE dept.deptno= emp.deptno(+) and empno is null;

Ejemplo: Liste el nombre y la localizacin del departamento de todos los CLERK, incluya una lista de todos los departamentos que actualmente no tengan ningn CLERK asignado.SQL> SELECT ename, dept.deptno, loc2 FROM emp, dept3 WHERE dept.deptno= emp.deptno(+) and (job='CLERK' OR empno is null);

Caractersticas del OUTER JOIN Si un registro de una de las tablas de un JOIN no satisface la condicin del JOIN, normalmente ese registro no aparece en el resultado. El OUTER JOIN, permite que un registro con estas caractersticas aparezcan en el resultado. El OUTER JOIN a travs SQL proporciona registros temporales para seleccionar los datos, los datos de la tablas. Se coloca un (+) despus de la combinacin de tabla/columna (en la clusula WHERE) sobre la que se necesita los registros falsos para realizar el OUTER JOIN (WHERE EMP.DEPTNO(+)=DEPT.DEPTNO). Si se requiere mltiples columnas para dar la condicin JOIN, todas o ninguna de ellas puede llevar el (+). Solo una de las tablas en un JOIN, pueden escogerse para realizar el OUTER JOIN, es decir no se puede colocar (+) en ambas tablas. Una tabla puede realizar un OUTER JOIN con tan solo otra tabla. Los registros extras seleccionados en un OUTER JOIN pueden realizarse buscando aquellos que tengan valores nulos (NULL) en las columnas del JOIN.

SEF-JOINSUn SEF-JOINS es utilizado para buscar coincidencia entre registros sobre columnas diferentes de la misma tabla.SELECT alias1.column, alias2.columnFROMtable1 alias1, table2 alias 2WHERE alias1.column1 = alias2.column2;

Ejemplo: Liste el nmero, nombre y cargo de cada empleado, as como el numero nombre y cargo del jefe correspondiente.SELECT w.empno, w.ename, w.job,w.mgr,m.empno,m.ename,m.jobFROMemp w, emp m WHERE w.mgr = m.empno;

Caractersticas del SELF Una palabra puede ser unida JOINED a si mismo como si fueran dos tablas separadas. El self-join es til para unir un registro de una tala a otra de la misma tabla. Como cualquier otro tipo de JOIN, este se realiza con columnas que contenga el mismo tipo de informacin. A la tabla se le deben dar alias para indicar que columnas son de la tabla. En el ejemplo previo, la tabla EMP fue unida a si misma utilizando las columnas EMPNO y MGR cumpliendo todas las reglas anteriores.

NON-EQUIJOINSLa mayora de los JOINS se basan en la igualdad de valores en las tablas referenciadas. Por esto se determinan los EQUIJOINS. Los NON-EQUIJOINS por consiguiente se basan en los siguientes operadores.

!= < >= between

Ejemplo: Ordene el grado del salario (salgrade), el nombre, salario y cargo de cada empleado. Ordene el resultado por grado de salario y trabajo.SQL> SELECT GRADE, ENAME, SAL, JOB2 FROM EMP, SALGRADE3 WHERE SAL BETWEEN LOSAL AND HISAL4 ORDER BY GRADE, SAL;

OPERADORES DE CONJUNTOLos operadores de conjunto combinan dos o ms tablas para obtener resultado.

UNIONLos registros del primer query mas registros del segundo query se eliminan duplicados

INTERSECCINLos registros que las dos tablas tienen en comn

MENOSRegistros nicos de la primera tabla

EL OPERADOR UNIONEl operador UNION retorna todos los registros distintos seleccionados travs de mltiples queries.

SintaxisSELECT columnaFROMtablaWHERE condiciones ciertasUNIONSELECT columnaFROMtablaWHERE condiciones ciertas

Ejemplo: Quien gana ms de $2000 en todos los departamentos.SQL> SELECT ENAME,SAL2 FROM ACCOUNTING3 WHERE SAL >20004 UNION5 SELECT ENAME,SAL6 FROM RESEARCH7 WHERE SAL >20008 UNION9 SELECT ENAME,SAL10 FROM SALES11 WHERE SAL >2000;

EL OPERADOR INTERSECCIN (INTERSECT)El operador INTERSECT retorna valores comunes de mltiples tablasSELECT columnaFROMtablaWHERE condiciones ciertasINTERSECTSELECT columnaFROMtablaWHERE condiciones ciertas

EjemploSQL> SELECT JOB2 FROM ACCOUNTING3 UNION4 SELECT JOB5 FROM RESEARCH6 UNION7 SELECT JOB8 FROM SALES;

EL OPERADOR MENOS (MINUS)El operador MINUS. Retorna todos los registros seleccionados por el primer query que no fueron tambin seleccionados por el segundo querySELECT columnaFROM tablaWHERE condiciones ciertasMINUSSELECT columnaFROMtablaWHERE condiciones ciertas

Ejemplo: Liste la informacin de los empleados que tienen cargos que estn en el departamento deACCOUNTING pero que no estn en el departamento de ventas (SALES).SQL> SELECT * FROM ACCOUNTING2 WHERE JOB (SELECT JOB FROM ACCOUNTING3 MINUS SELECT JOB FROM SALES)

Nota: Los operadores de conjunto son tiles para conformar subqueries que referencia a mltiples tablas.

VISIN GENERAL DE LA CREACIN DE TABLAS

Requerimientos de la sentencia CREATE TABLE El nombre de la tabla El nombre de la columna El tipo de datos de la columna

Reglas para los nombres Debe tener entre 1 y 30 caracteres y el primero debe de ser alfabtico. Debe contener solo los caracteres: A-Z, a-z, 0-9, _ (guion bajo) $ y # son legales pero su uso se esta descontinuando No debe de ser ninguna palabra reservada de ORACLE No debe tener el mismo nombre que otro objeto dentro del mismo nombre de usuario de ORACLE

Nota Rpida: Los nombres de tablas son los mismos si se escriben en maysculas o minsculas; ejemplo: EMP = Emp. Los nombres de columnas deben adherirse a las tres primeras reglas antes descritas.

Tipo de datos

CHAR (tamao)Almacena datos de tipo carcter de longitud fija. Con un tamao mximo De 2000 bytes

VARCHAR2(tamao)Almacena datos de tipo carcter de longitud fija. Con un tamao mximo De 2000bytes

VARCHAR(tamao)Actualmente es igual al Char

LONGAlmacena datos de tipo carcter de longitud variable hasta 2 gigabytes

NUMBER (L,D)Almacena datos numricos siendo L la longitud y D el numero de dgitos Decimales

INTEGERNumrico sin decimal. Por defecto 38.

DATEAlmacena informacin relacionada con el tiempo incluyendo fechas, horas, minutos y segundos. (Fechas hasta el 31 de diciembre de 4712).

RAWDatos en binario puro (imgenes y sonido) con un ancho mximo de 2000 bytes.

LONG RAWDatos en binario puro (imgenes y sonido) mas grande que RAW

CLOBAlmacena objetos de caracteres grandes de un nico byte

BLOBAlmacena objetos binarios de gran tamao, siendo el tamao mximo 4GB (gigabytes).

BFILEAlmacena punteros de archivos a LOB administrados por sistemas de archivos externos a la base de datos.

RestriccionesRestriccionesUso

PRIMARY KEYIdentifica de manera nica una fila de la tabla.

CHECKEspecifica una condicin que debe de ser verdadera.

FOREIGN KEY (nombre_columna)Establece e impone una relacin entre esta columna y una

REFERENCES (nombre_columna)PRIMARY KEY en la tabla referenciada.

[NOT] NULLEspecifica que dicha columna no puede contener valores nulos

UNIQUEEspecifica una columna o columnas que deben tener valores nicos a lo largo de todas las filas.

Las restricciones de integridad permiten al diseador de la aplicacin restringir el rango de valores aceptables que se pueden almacenar en una tabla.

SintaxisCREATE TABLE [user.] nombre_tabla({nombre_columna tipo | restriccin}[,{nombre_columna tipo | restriccin} ] )

Ejemplo:SQL> CREATE TABLE emp22 (empnoNUMBER(4),3 CONSTRAINT empno_constr PRIMARY KEY (empno),4 enamechar(10)CHECK (ename = upper (ename)),5 jobCHAR(9),6 mgrNUMBER(4)REFERENCES emp(empno),7 hiredateDATE,8 salNUMBER(7,2),9 commNUMBER(7,2),10 deptnoNUMBER(2)NOT NULL REFERENCES dept(deptno));

Table created

----------------------------------------------------------------------------------------------------------------------------------------------------Podemos crear tablas usando la clausula AS en la sentencia CREATE TABLE para usar los atributos de columnas y los datos de una tabla ya existente.

CREATE TABLE [user.] nombre_tabla [(nombre_columna1, nombre columna2,)]AS consulta

Ejemplo1:

SQL> CREATE TABLE hdates2 AS SELECT empno, ename, hiredate3 FROM emp4 WHERE empno = 10;

Table created.

Ejemplo2:SQL> CREATE TABLE empty_like_emp2 AS SELECT *3 FROM emp4 WHERE 1=2;

Table created.

--------------------------------------------------------------------------------------------------------------------------------------------------

Modificacin de TablasUse la sentencia ALTER TABLE para modificar la estructura de una tabla. Se pueden hacer dos operaciones: Adicionar columnas o restricciones Modificar la definicin de las columnas (restricciones, NOT NULL y dems)

Sintaxis AdicionarALTER TABLE nombre_tablaADD ( { nombre_columna tipo | restriccin }[,{ nombre_columna2 tipo | restriccin }] )

Ejemplo 1: SQL> ALTER TABLE hdates 2 ADD (managerNUMBER(4));

Table altered.

Sintaxis ModificarSQL> ALTER TABLE nombre_tablaMODIFY ( { nombre_columna tipo | restriccin }[, {nombre_columna2 tipo | restriccin } ] ..)

Ejemplo1: incrementar el tamao de la columna ename de 10 a 18.SQL> ALTER TABLE hdates 2 MODIFY (ename CHAR(18));

Table altered.

--------------------------------------------------------------------------------------------------------------------------------------------------Eliminacin de Tablas y Columnas

Use la clausula Drop Column cuando desea borrar una columna de una tabla.

SQL> ALTER TABLE nombre_tablaDROP COLUMN (nombre_columna1, nombre_columna2, )

Ejemplo: Borrar la columna ename de la tabla hdatesSQL> ALTER TABLE hdates 2 DROP COLUMN ename;Table altered.

---------------------------------------------------------------------------------Eliminacin de una tabla: DROP TABLEDROP TABLE nombre_tabla;

Ejemplo: Eliminar la tabla EMPTY_LIKE_EMPSQL> DROP TABLE empty_like_emp;Table dropped.

Crear Tablas Duplicadas o solo ciertas columnas de una tabla

Crear un duplicado de la tabla original, sin la columna o columnas que queremos eliminar:SQL> CREATE TABLE table_temp2 AS SELECT columna1, columna2, columna4, 3 FROM table_original;Table created.

Borrar la tabla originalSQL> DROP TABLE tabla_original;Table dropped.

Renombrar la nueva tabla con el nombre de la tabla original (este paso es opcional)

SQL> RENAME tabla_temp TO tabla_original; Table renamed

---------------------------------------------------------------------------------------------------------------------------------------------------

Visin General de las Vistas

Se puede representar lgicamente una o ms tablas como una vista. Una vista no contiene datos. Todos los datos se derivan de las tablas subyacentes.

Ventajas de las vistas Seguridad Conveniencia Perspectiva

Creacin de vistasLa creacin de vistas es similar a la creacin de tablas usando la clausula AS.

SintaxisSQL> CREATE [OR REPLACE] VIEW nombre_vista [(alias1, alias2, )]AS consulta[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY];

La consulta contiene un sentencia SELECT sin la clausula order by

La clausula WHIT CHECK OPTION se utiliza para al ingresar registros en una tabla se valide la clausula where.

La Clausula WITH READ ONLY se utiliza cuando se requiere crear una vista de solo lectura, es decir no es permitido insertar, borrar o actualizar datos sobre ella.

Ejemplo1:Crear una vista que contenga el numero, el nombre y el cargo de todos los empleados del departamento 10.SQL> CREATE VIEW empvu102AS SELECT empno, ename, job3FROM emp4WHERE deptno =10;

View created.

2da parteSQL> SELECT *FROM empvu10;

EMPNOENAMEJOB------------------------------------------------7782CLARKMANAGER7839KINGPRESIDENT7934MILLERCLERK

3 rows selected.

Ejemplo2: Alias de columnas en las vistasSQL> CREATE VIEW empvu11(id_number, employee, title)2AS SELECT empno, ename, job3WHERE deptno =10;

View created.

SQL> SELECT * FROM empvu11;

ID_NUMBEREMPLOYEETITLE------------------------------------------------7782CLARKMANAGER7839KINGPRESIDENT7934MILLERCLERK

3 rows selected.

Ejemplo 3: alias alternativos en las vistas. SQL> CREATE VIEW salvu102AS SELECT empno, ename, sal*12 annual_salary3FROM emp4 WHERE deptno =10;

View created.

SQL> SELECT *FROM empvu11;

EMPNOENAMEANNUAL_SALARY------------------------------------------------7782CLARK294007839KING600007934MILLER15600

Ejemplo 4: Cree una vista solo con los datos de los empleados del departamento No. 20.Asegure que las inserciones y actualizaciones realizadas sobre una vista, no afectaran los datos que la vista no sea capaz de acceder, mediante la utilizacin de la clausula WITH CHECK OPTION

SQL> CREATE VIEW empvu202AS SELECT * FROM depto = 203 WHERE deptno =204WITH CHECK OPTION;

View created

Parte2. Actualizando el departamento a 30 para el cdigo 7369SQL> UPDATE empvu202SET deptno = 303 WHERE empno =7369;

UPDATE empvu20

ERROR at line 1:ORA-01402: view WITH CHECK OPTION where-clausule violation.

---------------------------------------------------------------------------------------------------------------------------------------------------Vistazo al acceso de Tablas y vistasEl privilegio de DBA (DataBase Administrator Administrador de la base de datos) permite al desarrollador saltarse muchos privilegios estndar que normalmente se requieren para usar objetos de la base de datos.

Privilegios del sistema DBA todos los privilegios SELECT CREATE DROP GRANT / REVOKE Ejecutar imports y exports sobre la base de datos completa Modificar la estructura de la base de datos RESOURCE CONNECT

Un vistazo a la concesin de acceso a tablas y vistasLos propietarios de las tablas controlan el acceso a los objetos de su propiedad.

Privilegios de acceso a tablas Crear la tabla por si mismo Obtener los privilegios del propietario

Como DBA o propietario de tablas, use el comando GRANT y sus opciones para otorgar distintos niveles de acceso a los objetos de la base de datos.

SintaxisGRANT privilegio1, privilegio2, .. [o ALL]ON nombre_tabla/ nombre_vistaTO usuario1, usuario2, [O PUBLIC][WITH GRANT OPTION]

Ejemplo1: Otorgar todos los privilegios sobre la tabla EMP a todos los usuarios:SQL> GRANT ALL2ON emp3 TO PUBLIC;

Grant succeeded.

Ejemplo2: Otorgar privilegios de consulta (SELECT) al usuario Jones sobre la tabla DEPT:SQL> GRANT SELECT2ON dept3 TO jones;

Grant succeeded.

Ejemplo3: Otorgar privilegios de consulta (SELECT) al usuario Jones sobre la tabla DEPT, con la habilidad de otorgar los mismos privilegios a otros.SQL> GRANT SELECT2ON dept3TO jones4WITH GRANT OPTION;

Grant succeeded.

Ejemplo4: Cambiar el password de acceso del usuario Scott a leopardSQL> GRANT CONNECT2TO scott3IDENTIFIED BY leopard;

Grant succeeded.

---------------------------------------------------------------------------------------------------------------------------------------------------

Visin General de los Sinnimos Los sinnimos se pueden crear por razones de seguridad y conveniencia.

Niveles de los sinnimos Publico Privado

Ventajas de los sinnimos Referencia a tablas y vistas sin especificar el propietario o la base de datos. Flexibilidad al personal una convencin de nombres mas significativa.

Creacin de SinnimosCREATE SYNONYM nombre_sinonimoFOR nombre_tabla/nombre_vista

Ejemplo1: Crear el sinnimo dates para la tabla HDATES del usuario Scott.SQL> CREATE SYNONYM dates2FOR scoot.hadates;Synonym created.

SQL> SELECT * FROM dates;

EMPNOENAMEHIREDATE------------------------------------------------7369SMITH17-DEC-807499ALLEN20-FEB-817521WARD22-FEB-817566JONES02-APR-817654MARTIN28-SEP-817698BLAKE31-MAY-817782CLARK09-JUN-817788SCOTT09-DEC-827839KING17-NOV-817844TURNER08-SEP-817876ADAMS12-JAN-837900JAMES03-DEC-817902FORD03-DEC-817934MILLER23-JAN-82

14 rows selected

----------------------------------------------------------------------------------------------------------------------------------------------------

Visin General sobre los ndices Los ndices son estructuras opcionales, asociadas con tablas, que se usan para agilizar la ejecucin de consultas y/o garantizar unicidad.

El RDBMS de ORACLE accede a los datos en las tablas de dos maneras: TABLE SCAN completo (acceso secuencial) Por INDICES (acceso indexado o selectivo)

Hay una regla general para los ndices: cree un ndice cuando se prevea la extraccin frecuente de menos del 10 15% de las filas en una tabla grande y se hace referencia frecuente a las columnas en la clausula WHERE.

Caractersticas de las columnas para indexado Las columnas se usan frecuentemente en clausulas WHERE Cada valor es nico (el mejor caso) Amplio rango de valores Muchos valores nulos, o relativamente pocos valores

Una tabla puede tener cualquier cantidad de ndices. Los ndices aceleran la ejecucin de consultas, pero disminuyen las presentaciones en cuanto a la velocidad de mantenimiento de las tablas.

Nota: ORACLE actualiza los ndices automticamente. No tienen impacto en la sintaxis de SQL.

Creacin de ndices

Sintaxis ndice simple CREATE INDEX nombre_indiceON TABLE nombre_tabla (nombre_columna1 [, nombre_columna2])

Ejemplo1: Crear un ndice simple sobre la columna ENAME en la tabla EMP.SQL> CREATE INDEX i_emp_ename2ON emp (ename);

Index created.

En esta consulta se usa el ndice:SQL> SELECT *2FROM emp 3 WHERE ename = SMITH;

En esta consulta NO se usa el ndice: SQL> SELECT * FROM emp;

En la tabla USER_INDEXES del diccionario de datos se encuentran todos los ndices pertenecientes al usuario actual. SQL> SELECT index_name2FROM user_indexes3 WHERE table_name = EMP;

INDEX_NAME------------------------I_EMP_ENAME

1 rows selected.

Sintaxis Eliminacin de ndices

DROP INDEX nombre_indice

Ejemplo1: SQL> DROP INDEX i_emp_ename;

Index dropped

Crear ndices nicos sobre una tabla para asegurar que nunca dos filas tendrn valores iguales en la columna o columnas indexadas.

SintaxisCREATE UNIQUE INDEX nombre_indiceON nombre_tabla (nombre_columna1 [, nombre_columna2] )

Ejemplo:Crear un ndice en la columna EMPNO de la tabla EMP para incrementar el desempeo, en consultas, asi como garantizar valores nicos para los nmeros de empleados. SQL> CREATE UNIQUE INDEX i_emp_empno2ON emp (empno)

Index created.

Los ndices concatenados crean una entrada en el ndice con datos provenientes de cada una de las columnas indicadas en la sentencia de creacin del ndice. Se pueden incluir hasta un mximo de 16 columnas por ndice.

Ejemplo2: Crear un ndice en la tabla EMP para las columnas EMPNO y ENAMESQL> CREATE UNIQUE INDEX i_empno_ename2ON emp (empno, ename);

Index created.----------------------------------------------------------------------------------------------------------------------------------------------------Creacin de Generadores de secuencia Cree secuenciadores con el fin de generar enteros unicos y consecutivos para multiples usos. Los secuenciadores se pueden utilizar para generar llaves primarias de forma automtica.Sintaxis abreviadaCREATE SEQUENCE nombre_secuencia[INCREMENT BY {1|n} ][START WITH n][{MAXVALUE n | NOMAXVALUE} ][{MINVALUE n | NOMINVALUE } ] Ejemplo1:Cree un secuenciador simple para la columna EMPNO empezando desde el valor 8000

SQL> CREATE SEQUENCE s_emp_empno START WITH 8000;Sequence created.

Ejemplo2: Cree un secuenciador simple para la columna DEPTNO empezando desde el valor 100

SQL> CREATE SEQUENCE s_dept_deptno START WITH 100;Sequence created.

Ejemplo 3: Mostrar el siguiente valor disponible de la secuencia S_EMP_EMPNO

SQL> SELECT s_emp_empno.nextval2FROM dual;

NEXTVAL---------------- 800

1 rows selected.

Eliminar un secuenciador de la base de datos con DROP SEQUENCE

Sintaxis DROP SEQUENCE nombre_secuencia;

Ejemplo:SQL> DROP SEQUENCE s_emp_empno;Sequence dropped.Actualizacin de Datos En Tablas

Insercin de FilasInserte filas en una tabla con la instruccin INSERT.

Sintaxis INSERT INTO nombre_tabla [ (columna1, columna2, ) ]VALUES (value1, value2,)

Ejemplo1:Mostrar la estructura de la Tabla DEPTSQL> DESCRIBE dept;

NameNULL?Type--------------------------------------------DEPTNONOT NULLNUMBER(2)DNAMECHAR(14)LOCCHAR(13)

Inserte el departamento de Finanzas con cdigo 50 con sede en Los Angeles en la tabla DEPTSQL> INSERT INTO dept2VALUES (50, FINANCE, LOS ANGELES);1 row created.

Inserte los valores en todas las columnas de una tabla:

SQL> INSERT INTO emp2VALUES (1234, EMMETT, SALESMAN, 7698, SYSDATE, 2000, NULL, 30);1 row created.

Inserte valores en solo algunas columnas de una tabla

SQL> INSERT INTO emp (empno, ename, hiredate, sal, deptno)2VALUES (S_EMP_EMPNO.NEXTTVAL, LERNER, 01/01/1992, 2000, 30);1 row created.

Inserte valores en las columnas utilizando parmetros

SQL> INSERT INTO dept2VALUES(&DEPTNO, &DNAME, &LOC);

Enter value for DEPTNO: 60Enter value for DNAME: RESEARCHEnter value for LOC: BOSTON

1 row created.

----------------------------------------------------------------------------------------------------------------------------------------------------Actualizacin de Filas

Cambie los datos en una tabla especfica con la sentencia UPDATE.

SintaxisUPDATE nombre_tablaSET columna1 = valor, columna2 = valor2[WHERE condicin]

Ejemplo:Mostrar la estructura de la tabla EMPSQL> DESCRIBE emp;

NameNULL?Type----------------------------------------------EMPNONOT NULLNUMBER(4)ENAMECHAR(10)JOBCHAR(9)MGRNUMBER(4)HIREDATEDATESALNUMBER(7,2)COMMNUMBER(7,2)DEPTNONOT NULLNUMBER(2)

Cambiar al empleado 7566 al cargo de vendedor en el departamento 30.

SQL> UPDATE emp2SET job = SALESMAN, deptno = 303WHERE empno = 7566;1 row updated

Actualizar varias columnas en una sola fila

SQL> UPDATE emp2SET job = SALESMAN, sal = sal*1.05, deptno =303WHERE empno = 7788;1 row updated

Actualizacin de mltiples filas: Cambiar el cargo SALESMAN por SALES

SQL> UPDATE emp2 SET job = SALES3 WHERE job = SALESMAN;

7 rows updated.

SQL> SELECT ename, job, deptno2 FROM emp3 WHERE job = SALES;

ENAMEJOBDEPTNO-----------------------------------------------ALLENSALES30WARDSALES30JONESSALES30MARTINSALES30SCOTTSALES30TURNERSALES30EMMETTSALES30

7 rows selected.

Devolver el cargo a su valor original SALESMANSQL> UPDATE emp2 SET job = SALESMAN3 WHERE job = SALES;7 rows update

----------------------------------------------------------------------------------------------------------------------------------------------------

Eliminacin de FilasElimine filas de una tabla especifica usando la sentencia DELETESintaxis DELETE FROM nombre_tabla[WHERE condicin]

EjemploBorrar el empleado numero 1234 (EMMETT) de la tabla EMP para reflejar su retiro. SQL> DELETE FROM emp 2 WHERE empno = 1234;1 row deleted----------------------------------------------------------------------------------------------------------------------------------------------------Un vistazo general al procesamiento de Transacciones Una transaccin se define como todos los cambios realizados a una base de datos entre COMMIT sucesivos

Procesamiento de TransaccionesLa sentencia COMMIT hace permanentes todos los cambios realizados en la transaccin actual

Tipos de COMMIT Explicito Implcito

Ejemplo:Hacer COMMIT en una sentencia SQLSQL> DELETE FROM emp2 WHERE ename = LERNER1 row deleted.

SQL> COMMIT;Commit complete.

Logre que las modificaciones realizadas sean deshechas utilizando la sentencia ROLLBACK

Ejemplo:Transfiere a JONES al grupo de vendedores:SQL> UPDATE emp2SET job = SALESMAN, deptno = 303 WHERE ename = JONES;1 row updated.

Todos los empleados de la compaa que se llaman JONES fueron transferidos al grupo de vendedores. Revierta la operacin y vuelva a realizar el traslado, utilizando el nmero de empleado.

SQL> ROLLBACK;Rollback complete.

SQL> UPDATE emp2SET job = SALESMAN, deptno = 303WHERE empno = 7566;1 row updated.

Marque un punto en una transaccin hasta el cual podra hacer un ROLLBACK sin necesidad de cancelar toda la transaccin, utilizando la sentencia SAVEPOINT.

Ejemplo:

----------------------------------------------------------------------------------------------------------------------------------------------------

Para mostrar las tablas de la base de datos hay varias formas.SQL>select * from tab; SQL>select * from tabs; SQL>select * from user_objects where object_type = 'TABLE';

Para describir el contenido (columnas) de una tabla:sql>desc NOMBRE_DE_TABLA;Para ver todo el contenido de la base de datos (TABLAS de mi usuario):sql>select * from user_catalog; sql>select * from cat;

Para mostrar todos los datos (columnas)de una tablaSQL>select * from nombre_tabla;

Para mostrar algunos los datos (columnas)de una tablaSQL>select columna1, columna2, from nombre_tabla;

Despliegue el nombre del empleado separando el apellido y nombre por ** asegurndose que este en maysculas, la fecha de ingreso con formato (26 Nov 2012 10:20), la fecha de cumpleaos del empleado (MMDD) de todos los empleados de los deptos. Co, Si, RH, HK que cumplan aos el mes en curso.

Select upper (nom_e || - - || ape_e )To _char (fecha_in, DD MON YYYY HH:MM);Substr (RFC, 7,4)From EmpWherecve_d in (Co, Si, RH,MK)Andsubstr (RFC, 7, 4) = to_ char(sysdate, MM);

Muestre el nombre y el cargo de todos los empleados llamados Martinez primero la primera con mayscula y las dems en minscula luego todas en minsculas. (INITCAP. Muestra el nombre con su primera letra en mayscula, y las dems en minscula)(LOWER. Devuelve todos los caracteres de la cadena en minscula)

SQL> SELECT INITCAP (ename) , LOWER(ename), job3 FROM emp4 WHERE UPPER (ename) = MARTINEZ;

NVL. Convierta un valor nulo en uno no-nulo con el propsito de evaluar una expresin con la funcin NVLCuando NVL evala la primera expresin, si esta es no-nula, retorna dicha expresin; en caso contrario, retorna la segunda.

Muestre el nombre de empleado, cargo, salario, comisin y compensacin total de los empleados del departamento 30.SQL> SELECT ename, job, sal, comm, NVL(sal, 0) + NVL(comm, 0)2 FROM emp3 WHERE deptno = 30;

ENAME JOB SAL COMM NVL(SAL, 0)+NVL(COMM, 0)-------------- -------------------- -------------- -------------- -------------------------------------------ALLEN SALESMAN 1600 300 1900WARD SALESMAN 1250 500 1750JONES SALESMAN 2975 2975MARTIN SALESMAN 1250 1400 2650BLAKE MANAGER 2850 2850SCOTT SALESMAN 3150 3150TURNER SALESMAN 1500 0 1500JAMES CLERK 950 950

8 rows selected.

Ejemplo: funcin ROUNDListe el nombre, salario mensual, salario diario (basado en un mes laboral de 22 das) y el salario diario redondeado al prximo entero, y otra truncada a dos decimales para los empleados ALLEN y JONES.SQL> SELECT ename, sal, sal / 22, ROUND (sal / 22, 0)TRUNC (sal/ 22,2)2 FROM emp3 WHERE ename IN (ALLEN, JONES);

Ejemplo: ADD_MONTHSMostrar el nombre, fecha de contratacin y 6 meses despus de la fecha de contratacin de los empleados del departamento 10.SQL> SELECT ename, hiredate, ADD_MONTHS (hiredate, 6) 6 MESES DESPUES2 FROM emp3 WHERE deptno = 10;

10g

InsertLa sentencia Insert permite de insertar datos en una tabla.

INSERT INTO (,,) VALUES(,,);

Tambin existe:INSERT INTO (,,) ;

UpdateLa sentencia Update permite de modificar el valor de uno o varios datos en una tabla.

UPDATE SET =,=,;

De costumbre se limita el cambio a ciertos registros, mencionados utilizando una clausula WHERE.UPDATE SET =,=,WHERE ;

DeleteLa sentencia Delete permite de borrar un uno o varios registros en una tabla.DELETE FROM ;De costumbre se limita el borrado a ciertos registros, mencionados utilizando una clausula WHERE.DELETE FROM WHERE ;

2.5 Commit y rollbackSi la base de datos permite la gestion de transacciones, se puede utilizar Commit para confirmar unaInsert, Update, o Delete, o `Rollback` para cancelarlos. Ciertas base de datos pueden ser configuradaspara autocommit, que hace un commit automaticamente despues de cada instruccion, a menos que se hainiciado una transaccion de manera explicita (con 'begin transaction xxx;).Hasta que el Commit esta ejecutado, las modificaciones no estan inscritas de manera permanente en labase de datos, y solo son visible para la sesion en curso del usuario autor de las acciones. Despues delCommit, los cambios son definitivos y visible para todos.Cuidado que ciertos objetos pueden quedar bloqueados (bloqueando otros usuarios) hasta que el commitsea hecho.El commit/rollback permite confirmar o de hacer un lote de transaccion, para que si una falle, todas lasanteriores se anulan tambien. Cuando se necesita una integridad de transaccion, se utiliza encommit/rollback.Ejemplo:SELECT emp_no,job_grade FROM employee where emp_no=4;update employee set job_grade=6 where emp_no=4;SELECT emp_no,job_grade FROM employee where emp_no=4;rollback;SELECT emp_no,job_grade FROM employee where emp_no=4;update employee set job_grade=6 where emp_no=4;SELECT emp_no,job_grade FROM employee where emp_no=4;commit;SELECT emp_no,job_grade FROM employee where emp_no=4;

2.6 SavepointUn savepoint permite identificar un punto en una transaccion al cual se podra eventualmente regresar(rollback).SELECT emp_no,job_grade FROM employee where emp_no=4;START TRANSACTION;update employee set job_grade=5 where emp_no=45;SELECT emp_no,job_grade FROM employee where emp_no=4;savepoint vale_cinco;SELECT emp_no,job_grade FROM employee where emp_no=4;update employee set job_grade=4 where emp_no=45;SELECT emp_no,job_grade FROM employee where emp_no=4;rollback to savepoint vale_cinco;SELECT emp_no,job_grade FROM employee where emp_no=4;rollback;

2.9 CountPara contar un numero de registros, se utiliza la palabra Count.SELECT COUNT() FROM ;Ejemplo:SELECT count(*) FROM employee where job_grade=4;

2.13 UnionesUniones permiten de unir los resultados de dos consultas. Para poder unirlas, tienen que tener losmismos campos.SELECT ,, FROM UNIONSELECT ,, FROM ;Ejemplo:select t.first_name,t.last_name from employee t where job_grade=5unionselect t2.fname,t2.lname from patient t2;

2.14 SubconsultasSubconsultas son consultas sobre otras consultas. La subconsulta se puede utilizar el la causula From, oel la condicion de la clasula Where. La subconsulta se pone entre parentesis. En MySQL, lassubconsultas deben tener sus propios alias.SELECT t3., t3. FROM (SELECT t., t. FROM t) t3WHERE t3. IN (SELECT t2. FROM t2);Ejemplo: SELECT t3.first_name,t3.last_name FROM(select t.first_name,t.last_name from employee t where job_grade=5unionselect t2.fname,t2.lname from patient t2) t3 where t3.last_name like 'RAMIREZ%';SELECT t3.first_name,t3.last_name, t3.job_country FROM employee t3where t3.job_country IN(select t.country from country t where t.currency='Euro');

Varios

Ver todas tablas de mi usuario

SELECT TABLE_NAMEFROM USER_TABLES;

Usuario Nuevo

SQL> create user monster23 identified by arizona23 default tablespace users temporary tablespace temp;sQL> grant connect , resource to monster23;

-----------------------------------------------------------------------------------------------------

Ver, Crear o borrar un usuario en Oracle con SQLplus

Para crear un usuario desde SQLplus se realzia lo siguiente:

1. Iniciar sqlplus en linea de comandos: (Windos: ejecutar cmd- sqlplus system/pass@nombre_baseDatos)

2. sql> create user nombre identified by contrasea default tablespace users temporary tablespace temp;

Al ejecutar la instruccin nos habr creado el usuario. Ahora habr que otorgarle ciertos permisos.

3. grant connect , resource to nombre

Y con eso tenemos creado nuestor usuario (esquema de base de datos).

Nombre = Nombre de usuario o esquema que queremos crear

Users= Tabla users, puede ser system, users, etc

Para borrar un usuario realizamos la siguiente instruccin:

Drop user usuario;

En caso de que tenga tablas y estn relacionadas colocamos:

Drop user usuario cascade;

Si queremos ver los usuarios de nuestra Db realizamos la siguiente instruccin:

Select * from all_users;

Triggers (Disparador)Un trigger es un bloque PL/SQL asociado a una tabla, que se ejecuta como consecuencia de una determinada instruccin SQL (una operacin DML: INSERT, UPDATE o DELETE) sobre dicha tabla.

CREATE [OR REPLACE] TRIGGER {BEFORE|AFTER} {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN] [OR {DELETE|INSERT|UPDATE [OF col1, col2, ..., colN]...]}ON [FOR EACH ROW [WHEN ()]]DECLARE -- variables localesBEGIN -- Sentencias[EXCEPTION] -- Sentencias control de excepcion END ;

Los triggers pueden definirse para las operaciones INSERT, UPDATE o DELETE, y puedenejecutarse antes o despus de la operacin. El modificador BEFORE AFTER indica que el trigger se ejecutar antes o despues de ejecutarse la sentencia SQL definida por DELETE INSERT UPDATE. Si incluimos el modificador OF el trigger solo se ejecutar cuando la sentencia SQL afecte a los campos incluidos en la lista.

El alcance de los disparadores puede ser la fila o deorden. El modificador FOR EACH ROW indica que el trigger se disparar cada vez que serealizan operaciones sobre una fila de la tabla. Si se acompaa del modificador WHEN, se establece una restriccin; el trigger solo actuar, sobre las filas que satisfagan la restriccin.

El siguiente ejemplo muestra un trigger que inserta un registro en la tabla PRECIOS_PRODUCTOS cada vez que insertamos un nuevo registro en la tabla PRODUTOS:

CREATE OR REPLACE TRIGGER TR_PRODUCTOS_01 AFTER INSERT ON PRODUCTOS FOR EACH ROWDECLARE -- local variables BEGIN INSERT INTO PRECIOS_PRODUCTOS (CO_PRODUCTO,PRECIO,FX_ACTUALIZACION) VALUES (:NEW.CO_PRODUCTO,100,SYSDATE);END ;

El trigger seejecutarcuandosobre la tabla PRODUCTOS se ejecute unasentencia INSERT.

INSERT INTO PRODUCTOS(CO_PRODUCTO, DESCRIPCION)VALUES('000100','PRODUCTO 000100');

Ejemplo 2: Vamos a a crear un trigger que se dispar automticamente despus de la modificacin del salario de la tabla empleado y pase un comentario a la tabla auditar.

Create or replace trigger auditar_salarioafter update of salarioon empleadofor each rowbegininsert into auditar values ('se ha modificado el salario' || :old.num_empleado);end; --------------------------------------------------------------------------------------------------------------Ejemplo: En este ejemplo, si insertamos o actualizamos el registro de un empleado de manera que su salario sea superior a 5000 pesos, el trigger PL/SQL actualizar dicho salario al valor de 5000 pesos independientemente del salario que nosotros hayamos insertado o introducido al modificar el registro.

CREATE TRIGGER tr1_empleados BEFORE INSERT OR UPDATE OF salario ON empleados FOR EACH ROW WHEN (:new.salario > 5000); BEGIN UPDATE empleados SET salario = 5000 WHERE empleado_id = :new.empleado_id; END;

Modificar ancho de la pantalla de SQL Plus

set linesize 200

Comandos

Existen dos tipos de comandos SQL:los DLL que permiten crear y definir nuevas bases de datos, campos endices.los DML que permiten generar consultas para ordenar, filtrar y extraer datosde la base de datos.

2.3 Consultas con PredicadoEl predicado se incluye entre la clasula y el primer nombre del campo a recuperar,los posibles predicados son:

ALLSi no se incluye ninguno de los predicados se asume ALL. El Motor de base dedatos selecciona todos los registros que cumplen las condiciones de la instruccinSQL. No se conveniente abusar de este predicado ya que obligamos al motor de labase de datos a analizar la estructura de la tabla para averiguar los campos quecontiene, es mucho ms rpido indicar el listado de campos deseados.SELECT ALL FROM Empleados;SELECT * FROM Empleados;TOPDevuelve un cierto nmero de registros que entran entre al principio o al final de unrango especificado por una clusula ORDER BY. Supongamos que queremosrecuperar los nombres de los 25 primeros estudiantes del curso 1994:SELECT TOP 25 Nombre, Apellido FROM EstudiantesORDER BY Nota DESC;Si no se incluye la clusula ORDER BY, la consulta devolver un conjunto arbitrariode 25 registros de la tabla Estudiantes .El predicado TOP no elige entre valoresiguales. En el ejemplo anterior, si la nota media nmero 25 y la 26 son iguales, laconsulta devolver 26 registros. Se puede utilizar la palabra reservada PERCENTpara devolver un cierto porcentaje de registros que caen al principio o al final de unrango especificado por la clusula ORDER BY. Supongamos que en lugar de los 25primeros estudiantes deseamos el 10 por ciento del curso:SELECT TOP 10 PERCENT Nombre, Apellido FROM EstudiantesORDER BY Nota DESC;El valor que va a continuacin de TOP debe ser un Integer sin signo.TOP no afectaa la posible actualizacin de la consulta.DISTINCTOmite los registros que contienen datos duplicados en los campos seleccionados.Para que los valores de cada campo listado en la instruccin SELECT se incluyan enla consulta deben ser nicos.Por ejemplo, varios empleados listados en la tabla Empleados pueden tener elmismo apellido. Si dos registros contienen Lpez en el campo Apellido, la siguienteinstruccin SQL devuelve un nico registro:SELECT DISTINCT Apellido FROM Empleados;Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyoscampos indicados en la clusula SELECT posean un contenido diferente. Elresultado de una consulta que utiliza DISTINCT no es actualizable y no refleja loscambios subsiguientes realizados por otros usuarios.DISTINCTROWDevuelve los registros diferentes de una tabla; a diferencia del predicado anteriorque slo se fijaba en el contenido de los campos seleccionados, ste lo hace en elcontenido del registro completo independientemente de los campo indicados en laclusula SELECT.SELECT DISTINCTROW Apellido FROM Empleados;

Si la tabla empleados contiene dos registros: Antonio Lpez y Marta Lpez elejemplo del predicado DISTINCT devuleve un nico registro con el valor Lpez en elcampo Apellido ya que busca no duplicados en dicho campo. Este ltimo ejemplodevuelve dos registros con el valor Lpez en el apellido ya que se buscan noduplicados en el registro completo.2.4 AliasEn determinadas circunstancias es necesario asignar un nombre a alguna columnadeterminada de un conjunto devuelto, otras veces por simple capricho o por otrascircunstancias. Para resolver todas ellas tenemos la palabra reservada AS que seencarga de asignar el nombre que deseamos a la columna deseada. Tomado comoreferencia el ejemplo anterior podemos hacer que la columna devuelta por laconsulta, en lugar de llamarse apellido (igual que el campo devuelto) se llameEmpleado. En este caso procederamos de la siguiente forma:SELECT DISTINCTROW Apellido AS Empleado FROM Empleados;2.5 Recuperar Informacin de una base de Datos ExternaPara concluir este captulo se debe hacer referencia a la recuperacin de registrosde bases de datos externa. Es ocasiones es necesario la recuperacin deinformacin que se encuentra contenida en una tabla que no se encuentra en labase de datos que ejecutar la consulta o que en ese momento no se encuentraabierta, esta situacin la podemos salvar con la palabra reservada IN de lasiguiente forma:SELECT DISTINCTROW Apellido AS Empleado FROM EmpleadosIN 'c:\databases\gestion.mdb';En donde c:\databases\gestion.mdb es la base de datos que contiene la tablaEmpleados.

Las fechas se deben escribir siempre en formato mm-dd-aa en donde mmrepresenta el mes, dd el da y aa el ao, hay que prestar atencin a los separadores-no sirve la separacin habitual de la barra (/), hay que utilizar el guin (-) yadems la fecha debe ir encerrada entre almohadillas (#). Por ejemplo si deseamosreferirnos al da 3 de Septiembre de 1995 deberemos hacerlo de la siguente forma;#09-03-95# #9-3-95#.

3.3 El Operador LikeSe utiliza para comparar una expresin de cadena con un modelo en una expresinSQL. Su sintaxis es:expresin Like modeloEn donde expresin es una cadena modelo o campo contra el que se comparaexpresin. Se puede utilizar el operador Like para encontrar valores en los camposque coincidan con el modelo especificado. Por modelo puede especificar un valorcompleto (Ana Mara), o se pueden utilizar caracteres comodn como losreconocidos por el sistema operativo para encontrar un rango de valores (LikeAn*).El operador Like se puede utilizar en una expresin para comparar un valor de uncampo con una expresin de cadena. Por ejemplo, si introduce Like C* en unaconsulta SQL, la consulta devuelve todos los valores de campo que comiencen porla letra C. En una consulta con parmetros, puede hacer que el usuario escriba elmodelo que se va a utilizar.

El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido decualquier letra entre A y F y de tres dgitos:Like 'P[A-F]###'Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A ala D seguidas de cualquier cadena.Like '[A-D]*'En la tabla siguiente se muestra cmo utilizar el operador Like para comprobarexpresiones con diferentes modelos.

4.5 StDev, StDevPDevuelve estimaciones de la desviacin estndar para la poblacin (el total de los registros de la tabla) o unamuestra de la poblacin representada (muestra aleatoria) . Su sintaxis es:StDev(expr)StDevP(expr)En donde expr representa el nombre del campo que contiene los datos que desean evaluarse o una expresinque realiza un clculo utilizando los datos de dichos campos. Los operandos de expr pueden incluir el nombrede un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o definida por el usuariopero no otras de las funciones agregadas de SQL)StDevP evala una poblacin, y StDev evala una muestra de la poblacin. Si la consulta contiene menos dedos registros (o ningn registro para StDevP), estas funciones devuelven un valor Null (el cual indica que ladesviacin estndar no puede calcularse).SELECT StDev(Gastos) AS Desviacion FROM Pedidos WHERE Pais = 'Espaa';SELECT StDevP(Gastos) AS Desviacion FROM Pedidos WHERE Pais= 'Espaa';

5. Consultas de AccinLas consultas de accin son aquellas que no devuelven ningn registro, son las encargadas de acciones comoaadir y borrar y modificar registros.

5.1 DELETECrea una consulta de eliminacin que elimina los registros de una o ms de las tablas listadas en la clusulaFROM que satisfagan la clusula WHERE. Esta consulta elimina los registros completos, no es posible eliminar elcontenido de algn campo en concreto. Su sintaxis es:DELETE Tabla.* FROM Tabla WHERE criterioDELETE es especialmente til cuando se desea eliminar varios registros. En una instruccin DELETE conmltiples tablas, debe incluir el nombre de tabla (Tabla.*). Si especifica ms de una tabla desde la que eliminarregistros, todas deben ser tablas de muchos a uno. Si desea eliminar todos los registros de una tabla, eliminarla propia tabla es ms eficiente que ejecutar una consulta de borrado.Se puede utilizar DELETE para eliminar registros de una nica tabla o desde varios lados de una relacin uno amuchos. Las operaciones de eliminacin en cascada en una consulta nicamente eliminan desde varios lados deuna relacin. Por ejemplo, en la relacin entre las tablas Clientes y Pedidos, la tabla Pedidos es la parte demuchos por lo que las operaciones en cascada solo afectaran a la tabla Pedidos. Una consulta de borradoelimina los registros completos, no nicamente los datos en campos especficos. Si desea eliminar valores en uncampo especificado, crear una consulta de actualizacin que cambie los valores a Null.Una vez que se han eliminado los registros utilizando una consulta de borrado, no puede deshacer la operacin.Si desea saber qu registros se eliminarn, primero examine los resultados de una consulta de seleccin queutilice el mismo criterio y despus ejecute la consulta de borrado. Mantenga copias de seguridad de sus datosen todo momento. Si elimina los registros equivocados podr recuperarlos desde las copias de seguridad.DELETE * FROM Empleados WHERE Cargo = 'Vendedor';5.2 INSERT INTOAgrega un registro en una tabla. Se la conoce como una consulta de datos aadidos. Esta consulta puede ser dedos tipo: Insertar un nico registro Insertar en una tabla los registros contenidos en otra tabla.5.2.1 Para insertar un nico Registro:En este caso la sintaxis es la siguiente:INSERT INTO Tabla (campo1, campo2, .., campoN)VALUES (valor1, valor2, ..., valorN)Esta consulta graba en el campo1 el valor1, en el campo2 y valor2 y as sucesivamente. Hay que prestarespecial atencin a acotar entre comillas simples (') los valores literales (cadenas de caracteres) y las fechasindicarlas en formato mm-dd-aa y entre caracteres de almohadillas (#).5.2.2 Para insertar Registros de otra Tabla:En este caso la sintaxis es:INSERT INTO Tabla [IN base_externa] (campo1, campo2, ..., campoN)SELECT TablaOrigen.campo1, TablaOrigen.campo2, ..., TablaOrigen.campoNFROM TablaOrigenEn este caso se seleccionarn los campos 1,2, ..., n dela tabla origen y se grabarn en los campos 1,2,.., n dela Tabla. La condicin SELECT puede incluir la clusula WHERE para filtrar los registros a copiar. Si Tabla yTablaOrigen poseen la misma estrucutra podemos simplificar la sintaxis a:INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigenDe esta forma los campos de TablaOrigen se grabarn en Tabla, para realizar esta operacin es necesario quetodos los campos de TablaOrigen estn contenidos con igual nombre en Tabla. Con otras palabras que Tablaposea todos los campos de TablaOrigen (igual nombre e igual tipo).

En este tipo de consulta hay que tener especial atencin con los campos contadores o autonumricos puestoque al insertar un valor en un campo de este tipo se escribe el valor que contenga su campo homlogo en latabla origen, no incrementandose como le corresponde.Se puede utilizar la instruccin INSERT INTO para agregar un registro nico a una tabla, utilizando la sintaxisde la consulta de adicin de registro nico tal y como se mostr anteriormente. En este caso, su cdigoespecfica el nombre y el valor de cada campo del registro. Debe especificar cada uno de los campos delregistro al que se le va a asignar un valor as como el valor para dicho campo. Cuando no se especifica dichocampo, se inserta el valor predeterminado o Null. Los registros se agregan al final de la tabla.Tambin se puede utilizar INSERT INTO para agregar un conjunto de registros pertenecientes a otra tabla oconsulta utilizando la clusula SELECT ... FROM como se mostr anteriormente en la sintaxis de la consulta deadicin de mltiples registros. En este caso la clusula SELECT especifica los campos que se van a agregar en latabla destino especificada.La tabla destino u origen puede especificar una tabla o una consulta.Si la tabla destino contiene una clave principal, hay que segurarse que es nica, y con valores no-Null ; si no esas, no se agregarn los registros. Si se agregan registros a una tabla con un campo Contador , no se debeincluir el campo Contador en la consulta. Se puede emplear la clusula IN para agregar registros a una tabla enotra base de datos.Se pueden averiguar los registros que se agregarn en la consulta ejecutando primero una consulta deseleccin que utilice el mismo criterio de seleccin y ver el resultado. Una consulta de adicin copia los registrosde una o ms tablas en otra. Las tablas que contienen los registros que se van a agregar no se vern afectadaspor la consulta de adicin. En lugar de agregar registros existentes en otra tabla, se puede especificar losvalores de cada campo en un nuevo registro utilizando la clusula VALUES. Si se omite la lista de campos, laclusula VALUES debe incluir un valor para cada campo de la tabla, de otra forma fallar INSERT.

INSERT INTO Clientes SELECT Clientes_Viejos.* FROM Clientes_Nuevos;INSERT INTO Empleados (Nombre, Apellido, Cargo)VALUES ('Luis', 'Snchez', 'Becario');INSERT INTO Empleados SELECT Vendedores.* FROM VendedoresWHERE Fecha_Contratacion < Now() - 30;5.3 UPDATECrea una consulta de actualizacin que cambia los valores de los campos de una tabla especificada basndoseen un criterio especfico. Su sintaxis es:UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ... CampoN=ValorNWHERE Criterio;UPDATE es especialmente til cuando se desea cambiar un gran nmero de registros o cuando stos seencuentran en mltiples tablas. Puede cambiar varios campos a la vez. El ejemplo siguiente incrementa losvalores Cantidad pedidos en un 10 por ciento y los valores Transporte en un 3 por ciento para aquellos que sehayan enviado al Reino Unido.:UPDATE Pedidos SET Pedido = Pedidos * 1.1, Transporte = Transporte * 1.03WHERE PaisEnvo = 'ES';UPDATE no genera ningn resultado. Para saber qu registros se van a cambiar, hay que examinar primero elresultado de una consulta de seleccin que utilice el mismo criterio y despus ejecutar la consulta deactualizacin.UPDATE Empleados SET Grado = 5 WHERE Grado = 2;UPDATE Productos SET Precio = Precio * 1.1 WHERE Proveedor = 8 AND Familia = 3;Si en una consulta de actualizacin suprimimos la clusula WHERE todos los registros de la tabla sealadasern actualizados.UPDATE Empleados SET Salario = Salario * 1.1

6. Tipos de DatosLos tipos de datos SQL se clasifican en 13 tipos de datos primarios y de varios sinnimos vlidos reconocidospor dichos tipos de datos.Tipos de datos primarios:

La siguiente tabla recoge los sinonimos de los tipos de datos definidos:

7. SubConsultasUna subconsulta es una instruccin SELECT anidada dentro de una instruccin SELECT, SELECT...INTO,INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.Puede utilizar tres formas de sintaxis para crear una subconsulta:comparacin [ANY | ALL | SOME] (instruccin sql)expresin [NOT] IN (instruccin sql)[NOT] EXISTS (instruccin sql)En donde:comparacinEs una expresin y un operador de comparacin que compara la expresin con el resultado de la subconsulta.expresinEs una expresin por la que se busca el conjunto resultante de la subconsulta.instruccin sqlEs una instruccin SELECT, que sigue el mismo formato y reglas que cualquier otra instruccin SELECT. Debe irentre parntesis.Se puede utilizar una subconsulta en lugar de una expresin en la lista de campos de una instruccin SELECT oen una clusula WHERE o HAVING. En una subconsulta, se utiliza una instruccin SELECT para proporcionar unconjunto de uno o ms valores especificados para evaluar en la expresin de la clusula WHERE o HAVING.Se puede utilizar el predicado ANY o SOME, los cuales son sinnimos, para recuperar registros de la consultaprincipal, que satisfagan la comparacin con cualquier otro registro recuperado en la subconsulta. El ejemplosiguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido conun descuento igual o mayor al 25 por ciento.:SELECT * FROM Productos WHERE PrecioUnidad > ANY(SELECT PrecioUnidad FROM DetallePedido WHERE Descuento >= 0 .25);

El predicado ALL se utiliza para recuperar nicamente aquellos registros de la consulta principal que satisfacenla comparacin con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemploanterior, la consulta devolver nicamente aquellos productos cuyo precio unitario sea mayor que el de todoslos productos vendidos con un descuento igual o mayor al 25 por ciento. Esto es mucho ms restrictivo.El predicado IN se emplea para recuperar nicamente aquellos registros de la consulta principal para los quealgunos registros de la subconsulta contienen un valor igual. El ejemplo siguiente devuelve todos los productosvendidos con un descuento igual o mayor al 25 por ciento.:SELECT * FROM Productos WHERE IDProducto IN(SELECT IDProducto FROM DetallePedido WHERE Descuento >= 0.25);Inversamente se puede utilizar NOT IN para recuperar nicamente aquellos registros de la consulta principalpara los que no hay ningn registro de la subconsulta que contenga un valor igual.El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso paradeterminar si la subconsulta devuelve algn registro.Se puede utilizar tambin alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en laclusula FROM fuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyosalario es igual o mayor que el salario medio de todos los empleados con el mismo ttulo. A la tabla Empleadosse le ha dado el alias T1::SELECT Apellido, Nombre, Titulo, Salario FROM Empleados AS T1WHERE Salario >= (SELECT Avg(Salario) FROM EmpleadosWHERE T1.Titulo = Empleados.Titulo) ORDER BY Titulo;En el ejemplo anterior , la palabra reservada AS es opcional.SELECT Apellidos, Nombre, Cargo, Salario FROM EmpleadosWHERE Cargo LIKE "Agente Ven*" AND Salario > ALL (SELECT Salario FROMEmpleados WHERE (Cargo LIKE "*Jefe*") OR (Cargo LIKE "*Director*"));Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo salario es mayorque el de todos los jefes y directores.SELECT DISTINCTROW NombreProducto, Precio_Unidad FROM ProductosWHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERENombre_Producto = "Almbar anisado");Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo precio que elalmbar anisado.SELECT DISTINCTROW Nombre_Contacto, Nombre_Compaia, Cargo_Contacto,Telefono FROM Clientes WHERE (ID_Cliente IN (SELECT DISTINCTROWID_Cliente FROM Pedidos WHERE Fecha_Pedido >= #04/1/93# 150 ORDER BY Pedidos.Id_Producto;Recupera el Cdigo del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nombre delproducto de la tabla de productos.

8. Consultas de Referencias CruzadasUna consulta de referencias cruzadas es aquella que nos permite visualizar los datos en filas y en columnas,estilo tabla, por ejemplo:

Si tenemos un