Está en la página 1de 24

Manual del Curso Oracle

Tema 6. SQL: Lenguaje de Consulta Estructurado 1. SQL Plus Aunque ya se ha citado a SQL como lenguaje de interaccin con Oracle, as como algunos conceptos sobre lenguajes de definicin y de manipulacin de datos, es en esta seccin donde se va a estudiar con cierta profundidad los aspectos bsicos de SQL. Para ello, utilizaremos SQL*Plus, una herramienta de Oracle que acta como intrprete de SQL. As pues, ser en SQL*Plus donde se introducirn nuestras sentencias SQL y donde se vern los resultados de nuestras consultas. Concretamente en esta parte de SQL*Plus, describiremos la utilizacin de la herramienta y estudiaremos con detalle la sintaxis bsica de SQL. Todo ello, ilustrado con bastantes ejemplos, de forma que sea sencillo la asimilacin de este lenguaje. SQL*Plus proporciona una interfaz de lnea de rdenes en un entorno grfico (es una aplicacin Windows), permitiendo Abrir y guardar scripts SQL Realizar algunas operaciones de edicin como copiar y pegar texto, o buscar. Personalizar el entorno Conceptos bsicos A continuacin se comentan los trminos que se utilizan al hablar de SQL, PL/SQL y SQL*Plus: Orden o comando. Instruccin que se da a SQL*Plus o a la base de datos Oracle Bloque. Grupo de rdenes SQL y PL/SQL Tabla. Unidad bsica de almacenamiento de Oracle Consulta. Orden SQL de recuperacin de informacin de una o ms tablas (SELECT)

Cristbal Nez Snchez

29

Manual del Curso Oracle

Resultado de una consulta. Datos recuperados por una consulta Informe. Resultados de una consulta formateados con rdenes de SQL*Plus Utilizacin de SQL*Plus En primer lugar, si nuestra base de datos no es local y est en un servidor remoto, tendremos que cargar los controladores apropiados para poder acceder de forma remota. A continuacin bastar con ejecutar SQL*Plus e identificarse como usuario. Para comenzar a utilizar SQL*Plus, seleccionaremos InicioProgramas-Oracle Application Development-SQL Plus. (El archivo que se ejecuta es sqlplusw.exe que se encuentra en el directorio bin dnde se haya instalado oracle)Una vez realizado esto, aparecer un cuadro de dilogo como el de la figura siguiente para conectarnos a la base de datos. En l introduciremos nuestro nombre de usuario en el cuadro User name, la contrasea en el cuadro Password, y el nombre de la base de datos definido en SQL Net Easy Configuration en el cuadro Host String. A continuacin pulsaremos OK.

Figura 4. Cuadro de dilogo para la conexin a la base de datos.

Cristbal Nez Snchez

30

Manual del Curso Oracle

Figura 5. Interprte de comandos de sql plus.

En esta ventana introduciremos nuestras sentencias SQL, que se irn guardando en un buffer, que posteriormente podremos guardar para luego poder abrirlo. A continuacin, describimos las rdenes disponibles en los mens del intrprete SQL*Plus. Men Archivo Abrir Guardar Abre un archivo de rdenes guardado. Por omisin, tendrn extensin SQL Crear guarda el contenido del buffer en un archivo de rdenes Sustituir sustituye el contenido de un existente con el contenido actual del buffer archivo

Agregar aade el contenido del buffer al final del archivo que se especifique Guardar Como Spool Guarda el contenido del buffer en un archivo de rdenes Spool File guarda los resultados de las consultas en un archivo. Por omisin, estos archivos tienen extensin LST. Spool Off desactiva el envo de resultados a un archivo. Ejecutar Cancelar Salir Lista y ejecuta la sentencia SQL o el bloque PL/SQL guardado actualmente en el buffer Cancela el progreso de una operacin Acepta los cambios pendientes y cierra la aplicacin SQL*Plus

Cristbal Nez Snchez

31

Manual del Curso Oracle

Men Editar Copiar Pegar Copia el texto seleccionado al portapapeles. El mtodo abreviado es CONTROL+C Pega el contenido del portapapeles. El mtodo abreviado es CONTROL+V

Limpiar Borra el buffer y la pantalla de SQL*Plus. La orden SQL equivalente es CLEAR SCREEN, y el mtodo abreviado es MAYUS+DEL Editor Llamar Editor carga el contenido del buffer en una ventana del bloc de notas. Por omisin, la orden se guarda en un archivo AFIEDT.BUF que por supuesto se puede cambiar. Si desea que el editor por omisin sea otro distinto tendr que utilizar la orden Define Editor. Definir Editor define el editor que se utilizar por omisin para ver el contenido del buffer

Men Buscar Buscar Busca un carcter, palabra o grupo de palabras en ventana de SQL*Plus. La bsqueda se realiza desde principio de la pantalla mostrada, y cuando llega final, no se contina buscando desde el principio. mtodo abreviado es MAYUS+F3 Busca la ocurrencia siguiente del elemento buscado la el al El

Buscar Siguiente

Men Opciones Este men slo tiene la orden Entorno, que sirve para configurar una serie de propiedades de SQL*Plus. El cuadro de dilogo contiene dos reas: Opciones y Buffer de pantalla. El rea Opciones proporciona una lista de parmetros que puede configurar para establecer ciertos aspectos, como el ancho predefinido para los nmeros, la activacin o desactivacin de los encabezados, la definicin del nmero de lneas por pgina, ...

Cristbal Nez Snchez

32

Manual del Curso Oracle

El rea Buffer de pantalla permite configurar el nmero de caracteres que se pueden mostrar en una lnea (Buffer Width) y el nmero de lneas por pantalla (Buffer Length). Debido a que SQL es el lenguaje que utilizaremos para interactuar con el SGBD, es importante unificar los conocimientos de SQL. Para ello los prximos temas sern dedicados a la sintaxis SQL tanto como DDL como DML. 2. Fundamentos SQL Lenguaje de Definicin de Datos (DDL): proporciona rdenes para definir, modificar o eliminar los distintos objetos de la base de datos (tablas, vistas, ndices...). Lenguaje de Manipulacin de Datos (DML): proporciona rdenes para insertar, suprimir y modificar datos de las tablas de la base de datos. 3. Lenguaje de Definicin de Datos Se utilizan las sentencias CREATE, ALTER, DROP, crear, modificar y borrar cualquier objeto de la base de datos. A continuacin se muestran una serie de ejemplos de uso de estas sentencias. Nota: Para poder facilitar el uso de estas sentencias, en el anexo 1 figura el manual de sql reference de oracle.

Cristbal Nez Snchez

33

Manual del Curso Oracle

Ejemplo 1 (Creacin de un TABLESPACE) CREATE TABLESPACE user_1 DATAFILE D:/oracle/product/oradata/user_1.dbf SIZE 30M DEFAULT STORAGE (INITIAL 10K NEXT 50 MINEXTENTS 1 MAXEXTENTS 999) OFFLINE;

Ejemplo 2 (Modificar un TABLESPACE) ALTER TABLESPACE user_1 ONLINE; Ejemplo 3 (Creacin de un USUARIO) CREATE USER usuario1 IDENTIFIED BY usuario1 DEFAULT TABLESPACE user_1 QUOTA 10M ON user_1 TEMPORARY TABLESPACE TEMP;

CREATE USER usuario2 IDENTIFIED BY usuario2;

Cristbal Nez Snchez

34

Manual del Curso Oracle

Ejemplo 4 (Modificando un USUARIO) ALTER USER usuario1 ACCOUNT LOCK; Intentar conectar al sqlplus con el usuario1, y ver que ocurre. (Cuenta bloqueada y sin permisos de conexin) Ejemplo 5 (Dando permisos al USUARIO) GRANT CONNECT, RESOURCE, DBA TO usuario1; GRANT CONNECT TO usuario2; Intentar conectar al sqlplus con el usuario1, y ver que ocurre. (Se tiene permiso de conexin pero cuenta bloqueada) Ejemplo 6 (Modificando un USUARIO) ALTER USER usuario1 ACCOUNT UNLOCK; ALTER USER usuario1 PASSWORD EXPIRE; Intentar conectar al sqlplus con el usuario1. Se conecta pero solicita introducir nueva password.
Cristbal Nez Snchez 35

Manual del Curso Oracle

Ejemplo 7 (Crear una TABLA) CREATE TABLE ORACLE_PRUEBA ( NOMBRE VARCHAR2(8) NOT NULL, TELEFONO NUMBER(12) ); Ejemplo 8 (Modificar una TABLA) ALTER TABLE ORACLE_PRUEBA ADD DIRECCION VARCHAR2(20); ALTER TABLE ORACLE_PRUEBA MODIFY DIRECCION VARCHAR2(50) NOT NULL; Ejemplo 9 (Consultando una tabla) Nos conectamos con el usuario2 SELECT * FROM ORACLE_PRUEBA; Ejemplo 10 (Creamos un sinnimo) Con USUARIO SYSTEM CREATE PUBLIC SYNONYM ORACLE FOR USUARIO1.ORACLE_PRUEBA; Ejemplo 11 (Consultando una tabla) Nos conectamos con el usuario2 SELECT * FROM ORACLE; Ejemplo 12 (Dando permisos al USUARIO) REVOKE CONNECT FROM usuario2; Intentamos hacer connect usuario2/usuario2 Ejemplo 13 (Borrando un USUARIO) DROP USER USUARIO2 CASCADE;

Cristbal Nez Snchez

36

Manual del Curso Oracle

Ejemplo 14 (Creando una SECUENCIA) Una secuencia sirve para generar automticamente nmeros distintos. Se utilizan para generar valores para campos que se utilizan como clave forzada (claves cuyo valor no interesa, slo sirven para identificar los registros de una tabla). Es una rutina interna de Oracle la que realiza la funcin degenerar un nmero distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas. Creacin de secuencias, Sintaxis: CREATE SEQUENCE secuencia [INCREMENT BY n] [START WITH n] [{MAXVALUE n|NOMAXVALUE}] [{MINVALUE n|NOMINVALUE}] [{CYCLE|NOCYCLE}] secuencia. Es el nombre que se le da al objeto de secuencia INCREMENT BY. Indica cunto se incrementa la secuencia cada vez que se usa. Por defecto se incrementa de uno en uno START WITH. Indica el valor inicial de la secuencia (por defecto 1) MAXVALUE. Mximo valor que puede tomar la secuencia. MINVALUE. Mnimo valor que puede tomar la secuencia. CYCLE. Hace que la secuencia vuelva a empezar si se ha llegado al mximo valor.

Cristbal Nez Snchez

37

Manual del Curso Oracle

CREATE SEQUENCE incremento_id INCREMENT BY 1 START WITH 100; Ejemplo 15 (Utilizar una SECUENCIA) INSERT INTO PROVEEDORES VALUES ( CAMPO1 INCREMENTO_ID.NEXTVAL, CAMPOS); Ejemplo 16 (SECUENCIA CICLICA) CREATE SEQUENCE incremento_ciclico INCREMENT BY 1 START WITH 10 MAXVALUE 30 CYCLE; Cuando llegue al valor mximo empezar por el valor inicial. Ejemplo 17 (SECUENCIA DECRECIENTE) CREATE SEQUENCE secuencia_decremental INCREMENT BY -1 START WITH 100 MAXVALUE 100 Para crear una secuencia decremental el parmetro INCREMENT BY tendr valor -1 y el parmetro START WITH coincidir con el parmetro MAXVALUE. La vista del diccionario de datos USER_SEQUENCES muestra la lista de secuencias actuales. La columna LAST_NUMBER muestra cual ser el siguiente nmero de secuencia disponible uso de la secuencia. Los mtodos NEXTVAL y CURRVAL se utilizan para obtener el siguiente nmero y el valor actual de la secuencia respectivamente.

Cristbal Nez Snchez

38

Manual del Curso Oracle

Ejemplo 18 (Valores SECUENCIA CURRVAL) SELECT incremento_id.NEXTVAL FROM DUAL; SELECT incremento_id.CURRVAL FROM DUAL; Eso muestra en pantalla el siguiente valor de la secuencia. Realmente NEXTVAL incrementa la secuencia y devuelve el valor actual. CURRVAL devuelve el valor de la secuencia, pero sin incrementar la misma. Ambas funciones pueden ser utilizadas en: Una consulta SELECT que no lleve DISTINCT, ni grupos, ni sea parte de una vista, ni sea subconsulta de otro SELECT, UPDATE o DELETE. Una subconsulta SELECT en una instruccin INSERT La clusula VALUES de la instruccin INSERT La clusula SET de la instruccin UPDATE

No se puede utilizar (y siempre hay tentaciones para ello) como valor para la clusula DEFAULT de un campo de tabla. Su uso ms habitual es como apoyo al comando INSERT: INSERT INTO tabla(num, piso) VALUES(secuencia_id.NEXTVAL, 3); Ejemplo 19 (Modificar SECUENCIA) ALTER SEQUENCE secuencia [INCREMENT BY n] [START WITH n] [{MAXVALUE n|NOMAXVALUE}]

Cristbal Nez Snchez

39

Manual del Curso Oracle

[{MINVALUE n|NOMINVALUE}] [{CYCLE|NOCYCLE}] Se pueden modificar las secuencias, pero la modificacin slo puede afectar a los futuros valores de la secuencia, no a los ya utilizados. Ejemplo 20 (Borrar SECUENCIA) DROP SEQUENCE incremento_id; 4. Tipos de datos Los tipos de datos principales de ORACLE son los siguientes: VARCHAR2(n): dato de tipo carcter, de n caracteres de longitud. NUMBER: dato de tipo numrico de un mximo de 40 dgitos, adems del signo y el punto decimal. Se puede utilizar notacin cientfica (1.273E2 es igual a 127.3). NUMBER(n,d): dato de tipo numrico con n dgitos en total como mximo y d dgitos decimales como mucho. NUMBER(4,2) tiene como mximo valor 99.99. DATE: datos de tipo fecha. Ejemplo 21 (Creacin de Tabla con restricciones) CREATE TABLE PROVEEDORES ( EMPRESA VARCHAR2(8), CODIGO NUMBER(6), CIF VARCHAR2(8) UNIQUE, DIRECCION VARCHAR2(50), TELEFONO NUMBER(12) NOT NULL CHECK (LENGTH(TO_CHAR(TELEFONO))>=9),
Cristbal Nez Snchez 40

Manual del Curso Oracle

FECHA_ALTA DATE DEFAULT SYSDATE ); ALTER TABLE PROVEEDORES ADD (CONSTRAINT PK_PROV PRIMARY KEY (EMPRESA, CODIGO) USING INDEX); Ejemplo 22 (Aadir Comentarios a Columnas) COMMENT ON COLUMN PROVEEDORES.EMPRESA IS 'Cdigo de la Empresa' 5. Funciones de Tipos de datos Cadenas de caracteres (VARCHAR(n)): Se delimitan utilizando comillas simples: Hola, Una cadena. Adems de los operadores de comparacin e igualdad (<, >, =, !=, ...) otras funciones tiles para trabajar con cadenas son: cad || cad : concatena dos cadenas. LENGTH(cad): devuelve la longitud de la cadena. LOWER(cad): convierte todas las letras de la cadena a minsculas. UPPER(cad): dem a maysculas. SUBSTR(cad, comienzo [, cuenta]): extrae la subcadena de cad empezando en la posicin comienzo y con longitud (la subcadena) cuenta. El primer caracter de la cadena tiene como ndice el nmero 1. Nmeros (NUMBER): Adems de las operaciones tpicas con valores numricos (+, -, *, /), otras funciones tiles son:

Cristbal Nez Snchez

41

Manual del Curso Oracle

ABS(num): devuelve el valor absoluto. SQRT(num): devuelve la raz cuadrada. POWER(b,e): devuelve la potencia be . GREATEST(num1, num2, ...): devuelve el mayor valor de la lista de valores. LEAST(num1, num2, ...): devuelve el menor valor de la lista. Existen otras funciones para grupos de valores (suma, media, mximo, ...) que se vern en apartados posteriores. Fechas (DATE): El formato de un valor de tipo DATE es: dia-mes-ao, donde tanto el da como el ao tiene formato numrico y el mes se indica con las tres primeras letras del nombre del mes en el idioma soportado por el servidor ORACLE. Ejemplos: 1-JAN-96, 28-jul-74. Adems de esta informacin, un valor de tipo fecha almacena tambin la hora en formato hh:mm:ss. Las fechas se pueden comparar con los operadores tpicos de comparacin (<, >, !=, =, ...). La funcin SYSDATE devuelve la fecha actual (fecha y hora). Con las fechas es posible realizar operaciones aritmticas como sumas y restas de fechas, teniendo en cuenta que a una fecha se le suman das y que la diferencia entre dos fechas se devuelve tambin en das. Por ejemplo SYSDATE + 1 devuelve la fecha de maana. Oracle permite tanto la conversin de tipos implcita como la explcita. La conversin de tipos implcita significa que cuando Oracle encuentra en un lugar determinado (por ejemplo en una expresin) un dato de un tipo diferente al esperado, entonces aplica una serie de reglas para intentar convertir ese dato al tipo esperado. Por ejemplo, si un atributo de una tabla determinada es de tipo NUMBER y se intenta introducir el valor de tipo caracter '1221', entonces automticamente se convierte en su valor numrico equivalente sin
Cristbal Nez Snchez 42

Manual del Curso Oracle

producirse ningn error. La conversin de tipos explcita se realiza bsicamente con las siguientes funciones: Conversin nmero-cadena: TO_CHAR(nmero [, formato]). Conversin cadena-nmero: TO_NUMBER(cadena [,formato]). Conversin fecha-cadena: TO_CHAR(fecha [, formato]). Conversin cadena-fecha: TO_DATE(cadena [, formato]). La opcin formato permite especificar un modelo de formato o mscara consistente en una cadena de caracteres que describe el formato en el que se quiere obtener el resultado o en el que se da el parmetro. Algunos ejemplos de la utilizacin de estas funciones son: TO_CHAR('25-dec-98', 'YY') devuelve '98'. TO_CHAR(SYSDATE, 'dd-mon-yyyy') devuelve '25-dec-1998'. TO_CHAR(123.34,'09999.999') devuelve '00123.340' 6. Lenguaje de Manipulacin de Datos Se utilizan las sentencias SELECT, INSERT, UPDATE, DELETE, consulta, insercin, actualizacin y borrado de los datos de la tabla dnde se aplique. Insercin, modificacin y eliminacin de DATOS Una vez que se ha creado de forma conveniente las tablas, el siguiente paso consiste en insertar datos en ellas, es decir, aadir registros. Durante la vida de la base de datos ser necesario, adems, borrar determinados registros o modificar los valores que contienen. Los comandos de SQL que se van a estudiar en este apartado son INSERT, UPDATE y DELETE.

Cristbal Nez Snchez

43

Manual del Curso Oracle

Insercin de Datos El comando INSERT de SQL permite introducir registros en una tabla de la base de datos. La sintaxis del comando es la siguiente: INSERT INTO {nombre_tabla} [(nombre_columna [, nombre_columna] ...)] {VALUES (valor [, valor] ...) }; Con el comando INSERT se aade un registro a la tabla. Si se da una lista de columnas, los valores deben emparejar uno a uno con cada una de estas columnas. Cualquier columna que no est en la lista recibir el valor NULL. Si no se da esta lista de columnas, se debern dar valores para todos los atributos de la tabla y en el orden en que se definieron con el comando CREATE TABLE. Si se elige la opcin de subconsulta, se introducirn en la tabla los registros resultantes de la subconsulta expresada como un comando SELECT que ser estudiado posteriormente. Ejemplo 23 (Insercin de datos) INSERT INTO ORACLE_PRUEBA (NOMBRE, DIRECCION) VALUES (JUAN,CALLE CASTILLA); INSERT INTO PROVEEDORES VALUES (E1,12,354567,AVDA. PIO X,965456345,SYSDATE);

Modificacin de Datos Para la modificacin de registros dentro de una tabla se utiliza el comando UPDATE. La sintaxis del comando es la siguiente:

Cristbal Nez Snchez

44

Manual del Curso Oracle

UPDATE {nombre_tabla} SET {nombre_col = expresin [, nombre_col = expresin, ...] }| nombre_col [, nombre_col, ...] = (sub_consulta) [WHERE condicin]; Este comando modifica los valores de los atributos especificados en SET para aquellos registros que verifican condicin (si existe). La subconsulta puede seleccionar de la tabla que se est modificando (o de otras tablas o vistas), aunque debe devolver un nico regsitro. Si no se utiliza la clusula WHERE, se modificarn todos los registros de la tabla. Si se utiliza la clusula WHERE slo se modificarn aquellos registros que verifiquen la condicin. Hay que tener en cuenta que las expresiones se van evaluando segn se va ejecutando el comando UPDATE. Ejemplo 24 (Modificando datos) UPDATE ORACLE_PRUEBA SET DIRECCION = CALLE MADRID 12 WHERE NOMBRE=JUAN; UPDATE PROVEEDORES SET FECHA_ALTA= SYSDATE;

Eliminacin de Datos Por ltimo, se va a estudiar el comando que permite eliminar registros concretos de una tabla, el comando DELETE. Su sintaxis es la siguiente: DELETE FROM {nombre_tabla} [WHERE condicin]; Si se omite la clusula WHERE, este comando borrar todos los registros de la tabla, aunque sta seguir existiendo, pero sin ningn registro. Si se introduce la clusula WHERE, slo se borrarn aquellos

Cristbal Nez Snchez

45

Manual del Curso Oracle

registros que verifiquen la condicin. Ejemplo 25 (Borrando datos) DELETE FROM ORACLE_PRUEBA WHERE NOMBRE=JUAN; DELETE FROM PROVEEDORES;

Consulta de datos La sintaxis fundamental del comando SELECT es la siguiente: SELECT [ALL, DISTINCT]{[*|tabla.*],expresin[,expresin,...]} FROM tabla [, tabla, ...] [WHERE condicin] [ORDER BY {expresin | posicin} [ASC | DESC] [expresin | posicin} [ASC | DESC] , ...]] [GROUP BY expresin [, expresin, ...]] [HAVING condicin]; Las distintas opciones tienen el siguiente significado: ALL: significa que se devolvern todos los registros que satisfagan las distintas condiciones, esta opcin es la que se toma por defecto. DISTINCT: significa que se devolvern valores o conjuntos de valores nicos, es decir, no repetidos. *: indica que se realizar la proyeccin por todos los atributos de la/s tabla/s o vista/s indicadas en la clusula FROM. Si se quiere que slo se proyecte por los atributos de una tabla se utiliza tabla.*. expresin: se puede sustituir por:
Cristbal Nez Snchez 46

Manual del Curso Oracle

nombre de un atributo expresin conteniendo atributos y/o funciones. Si en el listado de la consulta debe aparecer un nombre distinto al del atributo o al de la expresin se puede utilizar un ALIAS, que consiste en una cadena de caracteres encerrada entre comillas dobles y situada junto a la expresin que sustituir en el listado de la consulta. Otro tipo de alias es el que se utiliza para las tablas en la clusula FROM. Estos alias se ponen junto al nombre de la tabla y se pueden utilizar en cualquier punto del comando SELECT sustituyendo as al nombre de la tabla. En la clusula ORDER BY, posicin sirve para referenciar un atributo que ocupa esa posicin dentro de la clusula SELECT. Desde el punto de vista de las operaciones abstractas de consulta del modelo relacional, la clusula SELECT corresponde a la operacin de proyeccin; la clusula FROM corresponde a la operacin de producto cartesiano (nos permitir hacer el JOIN); y la clusula WHERE corresponde a la condicin de la operacin de seleccin. Una tpica consulta: SELECT a1, a2, ..., an FROM r1, r2 WHERE p; El resultado de un comando SELECT es siempre una tabla, lo que permite construir consultas complejas anidando varios SELECT. A continuacin se explica el significado del resto de clusulas del comando SELECT viendo sus tpicos usos. Obtener toda la informacin contenida en una tabla:

Cristbal Nez Snchez

47

Manual del Curso Oracle

SELECT * FROM nombre_tabla ; El asterisco indica que se quieren seleccionar todas la columnas de la tabla, y al no especificarse ninguna condicin, todos los registros son seleccionados.
Realizar la prctica 1, descrita en el libro Ejercicios_curso_oracle_I

Otros usos del comando SELECT En este apartado se estudiarn algunos aspectos algo ms avanzados del comando SELECT, pudiendo de esta forma generar consultas algo ms complejas. Existen una serie de funciones especiales, que no fueron tratadas en el apartado anterior, y que van a permitir trabajar con informacin relativa a no slo una nica fila, sino a varias. Estas funciones se conocen con el nombre de funciones agregadas o funciones de grupos de valores. Un dato a tener en cuenta es que estas funciones agregadas ignoran el valor NULL y calculan resultados a pesar de su existencia. A continuacin se exponen algunas de las principales funciones de grupo: COUNT: devuelve el nmero de filas. Su formato es el siguiente: COUNT ({* | [DISTINCT | ALL] columna}) COUNT (*): cuenta todas las filas de la tabla, aunque tengan valores NULL (incluso en todos los atributos). COUNT (DISTINCT columna): devuelve el nmero de valores distintos para la columna, no incluyendo los nulos. COUNT (ALL columna): devuelve el nmero de valores de la columna, no incluyendo los NULL.

Cristbal Nez Snchez

48

Manual del Curso Oracle

SUM: devuelve la suma de un conjunto de valores. El formato es: SUM ([DISTINCT] columna | expresin) Devuelve la suma de los valores de la columna o de los devueltos por expresin. La columna o expresin, evidentemente, debe ser numrica. AVG: calcula la media aritmtica de un conjunto de valores. Su formato es: AVG ([DISTINCT] columna | expresin) Devuelve la media aritmtica de los valores de la columna o de los devueltos por la expresin. La columna o expresin debe ser numrica. MAX: calcula el mximo de un conjunto de valores. Su formato es: MAX ([DISTINCT] columna | expresin) Devuelve el valor mximo de la columna o la expresin. MIN: calcula el mnimo de un conjunto de valores. Su formato es: MIN ([DISTINCT] columna | expresin) Devuelve el valor mnimo de la columna o la expresin. Consulta de informacin agrupada SQL permite obtener una tabla agrupada que contenga una fila con informacin resumen para cada grupo. Para obtener esta informacin agrupada se hace uso de la clusula GROUP BY del comando SELECT. La clusula GROUP BY tiene la siguiente sintaxis: GROUP BY expresin [, expresin, ...] dnde expresin puede ser un atributo o una expresin

Cristbal Nez Snchez

49

Manual del Curso Oracle

conteniendo atributos. De forma anloga a la clusula WHERE, se pueden establecer restricciones sobre qu grupos aparecern en el resultado de la consulta. Esto se realiza mediante la clusula HAVING del comando SELECT. Si en una misma consulta aparecen las clusulas WHERE y HAVING, primero se aplica la condicin de la clusula WHERE. Las filas que la satisfacen son colocadas en grupos por la clusula GROUP BY, despus se aplica la clusula HAVING a cada grupo, y los grupos que satisfacen la condicin de la clusula HAVING son utilizados por la clusula SELECT para generar filas del resultado de la consulta. Un detalle importante a tener en cuenta es que las expresiones que se pongan en la clusula SELECT sern, o valores constantes, o funciones agregadas, o bien alguna expresin incluida en la clusula GROUP BY. Esto es debido a que las funciones como COUNT, SUM, AVG, etc., devuelven valores sobre grupos de filas, no sobre filas individuales. En la clusula HAVING slo se podrn utilizar funciones agregadas. Subconsultas Una subconsulta es una consulta dentro de otra, es decir, un SELECT anidado en la clusula WHERE o HAVING de otro SELECT. Esta anidacin permite realizar consultas complejas, que no sera posible, o poco eficiente realizar haciendo consultas simples a base de JOINS. El formato de la subconsulta es el siguiente: SELECT columnas FROM tabla WHERE {columna | expresin} operador ( SELECT columna | expresin

Cristbal Nez Snchez

50

Manual del Curso Oracle

FROM ...) ; El operador a utilizar depender del nmero de valores que se van a obtener en la subconsulta. Las subconsultas pueden aparecer en cualquier lugar en el que se pueda colocar la clusula WHERE, es decir en los comandos SELECT, INSERT y UPDATE. Cuando el resultado de la subconsulta es un conjunto de valores NO se puede utilizar el operador de igualdad, sino el de inclusin. Operaciones entre conjuntos A los resultados de las consultas (que se implementan como tablas temporales) tradicionales UNION: Realiza la operacin de unin eliminando las filas duplicadas. Las dos tablas que se unen deben tener el mismo nmero de atributos (aunque no es necesario que tengan los mismos nombres) y stos deben tener el mismo tipo de datos. Ejemplo: SQL>(SELECT * FROM mecanicos WHERE nombre = 'PEPE') UNION (SELECT * FROM mecanicos WHERE puesto = 'AMORTIGUACION'); INTERSECT: Realiza la operacin de interseccin de conjuntos. Las condiciones son las descritas anteriormente. se de les pueden aplicar tambin interseccin los y operadores diferencia), conjuntos (unin,

obteniendo nuevas tablas. Los operadores de conjuntos son:

Cristbal Nez Snchez

51

Manual del Curso Oracle

MINUS: Realiza la operacin resta de conjuntos. Es decir, A -B son las filas que estn en A y no estn en B. La operacin de resta no es conmutativa, como muestra el siguiente ejemplo.

Realizar la prctica 2, descrita en el libro Ejercicios_curso_oracle_I

Tema 7. El Diccionario de Datos de ORACLE El diccionario de datos (DD) de ORACLE es uno de los

componentes ms importantes del RDBMS ORACLE. Contiene toda la informacin sobre las estructuras y objetos de la base de datos as como de las tablas, columnas, usuarios, ficheros de datos, etc. Los datos guardados en el diccionario de datos son tambin llamados metadatos. Aunque el DD es usualmente del dominio del administrador de base de datos (DBA), es una valiosa fuente de informacin para los usuarios y desarrolladores. El DD consta dos niveles: Nivel interno: contiene todas las tablas base que son utilizadas por el SGBD y que no son normalmente accesibles para el usuario, Nivel externo: proporciona numerosas vistas de estas tablas base para acceder a la informacin sobre objetos y estructuras a diferentes niveles con detalle. 1. Tablas del Diccionario de Datos La instalacin de una base de datos ORACLE siempre incluye la creacin de usuarios estndar ORACLE: SYS: este es el propietario de todas las tablas del DD y de las vistas. Esta utilidad tiene el enorme privilegio de manejar objetos y estructuras de una base de datos ORACLE as como crear nuevos usuarios.
Cristbal Nez Snchez 52

También podría gustarte