Está en la página 1de 50

Unidad 1 Escribir una instruccin SQL bsica Objetivo: El alumno ser capaz de manejar el estatuto SELECT y diferenciar estatutos

SQL y comandos SQLPLUS.

Sugerencias didcticas Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de dificultad y con base en cada una de las instrucciones que los componen, ensear la sintaxis del lenguaje y la finalidad de cada una de ellas. Solicitar que corrobore la validez del mismo, ejecutndolo en la computadora. Solicitarle la elaboracin de programas similares, agregndoles algunas variantes. Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para l. Sugerencias de evaluacin El docente deber considerar la evaluacin, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseanza-aprendizaje, adems de los exmenes tradicionales se recomienda se tome en cuenta la participacin en clases. Al extraer datos de la base de datos, se requiere usar un lenguaje de consultas estructurado (SQL) estatuto SELECT. Puedes restringir las columnas que son desplegadas. Capacidades de los Estatutos de SQL SELECT Un estatuto SELECT recibe informacin de la base de datos. Usando un estatuto SELECT puedes hacer lo siguiente: o Seleccin: Usa la capacidad de seleccin en SQL para escoger los renglones en una tabla que quieras obtener a travs de una consulta. Usa varios criterios para una restringir selectivamente los renglones que ves. o Proyeccin: Usa la capacidad de proyeccin en SQL para elegir las columnas en una tabla que quieras obtener a travs de una consulta. Escoge tan pocas o muchas columnas de la tabla tanto como lo requieras. o Join: Usa las capacidad del join en SQL para traer datos almacenados en diferentes tablas creando un enlace entre ellos. Instruccin Bsica SELECT

En su forma ms simple, una instruccin SELECT debe incluir lo siguiente: o Una clausula SELECT, la cul especifica las columnas a ser desplegadas. o Una clausula FROM, la cul especifica las tablas que contienen las columnas listadas en la clusula SELECT. En la sintaxis: SELECT DISTINCT * column Alias FROM table Es una lista de una o ms columnas. Suprime duplicados. Selecciona todas las columnas. Selecciona el nombre de la columna. da a las columnas seleccionadas un encabezado diferente. especfica la tabla que contiene las columnas. o Una palabra clave se refiere a un elemento individual SQL. Por ejemplo, SELECT y FROM son palabras clave. o Una clusula es una parte de una instruccin SELECT. Por ejemplo. SELECT empno,ename,es una clusula. o Una instruccin es una combinacin de dos o ms clusulas. Por ejemplo, SELECT * FROM emp es una instruccin SQL. Escribiendo instrucciones SQL Usando las siguientes reglas y sugerencias, puedes construir instrucciones vlidas que sean fciles de leer y fciles de editar. o Las instrucciones SQL no son sensibles las maysculas o minsculas a menos que se indique. o Las instrucciones SQL pueden ser capturados en una o ms lneas. o Las palabras clave no pueden ser cortadas entre lneas o abreviadas. o Las clusulas son usualmente colocadas en lneas separadas para su lectura y fcil edicin. o La tabulacin y las sangras pueden ser usadas para hacer un cdigo ms comprensible. o Las palabras clave son escritas en mayscula; todas las otras palabras, tales como nombre de tablas y columnas son escritas en minsculas. o Dentro de SQL*Plus, una instruccin SQL es escrita en el prompt de SQL y las siguientes lneas son numeradas. Esto es llamado el buffer SQL. Solamente una instruccin puede ser ejecutada en cualquier momento dentro del buffer.

Ejecucin de una instruccin SQL o Coloque un ; al final de cada clusula. o Coloque una / al final de la lnea en el buffer. o Coloque una / en el prompt de SQL. o En lo que se refiere a SQL*Plus use el comando RUN en el prompt de SQL. Seleccionando todas las columnas, todos los renglones Puedes desplegar todas las columnas de datos en una tabla colocando un (*) dentro de la palabra clave SELECT. En el ejemplo de la grfica, la tabla Departamento contiene tres columnas: DEPTNO,DNAME y LOC. La tabla contiene cuatro renglones, uno para cada Departamento. Tambin puedes desplegar todas las columnas en la tabla, listando los nombres de las columnas despus de la palabra clave SELECT. Por ejemplo, la siguiente instruccin SQL, como el ejemplo en la grfica, despliega todas las columnas y todos los renglones de la tabla Departamento.
SQL> SELECT * 2 FROM dept; DEPTNO --------10 20 30 40 DNAME --------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ---------------NEW YORK DALLAS CHICAGO BOSTON

Seleccionado Columnas especficas Usa la instruccin SELECT para consultar exclusivamente algunas columnas, especifique sus nombres separndolos por comas. El ejemplo en la grfica despliega todos los nmeros y lugares de la tabla Departamento. En la clusula SELECT, especfica las columnas que quieras ver, en el orden en el cul quieres que aparezcan en la salida. Por ejemplo para desplegar el lugar antes del nmero de departamento usa la siguiente instruccin:
SQL> SELECT loc, deptno 2 FROM dept; DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON

Encabezado de Columnas El encabezado y los datos de la columna carcter as como el encabezado y datos de la columna fecha estn justificados a la izquierda dentro de un ancho de columna, encabezados y datos numricos son justificados a la derecha.

SQL> SELECT ename, hiredate, sal 2 FROM emp; ENAME --------SMITH ALLEN WARD HIREDATE SAL -------- --------17/12/80 800 20/02/81 1600 22/02/81 1250

Expresiones Aritmticas Necesitamos modificar la manera en que los datos son desplegados o visualizar escenarios whatif. Esto es posible usando expresiones aritmticas. Una expresin aritmtica puede contener nombres, valores numricos constantes y operadores aritmticos. Operadores Aritmticos El recuadro lista las operaciones aritmticas disponibles en SQL. Puedes usar operadores aritmticos en cualquier clausula de una sentencia SQL excepto la clausula FROM.
Operador + * / Descripcin Suma Resta Multiplicacin Divisin

Usando Operadores Aritmticos El ejemplo en el recuadro usa el operador de adicin para calcular un incremento de salario de $300 para todos los empleados y despliega un nuevo SAL+300 en la columna de salida. Ntese que la columna resultante SAL+300 no es una nueva columna en la tabla EMP, es solamente de despliegue. Por default el nombre de una nueva columna viene del clculo que gener este, en este caso sal+300.
SQL> SELECT ename, sal, sal+300 2 FROM emp; ENAME SAL SAL+300 ---------- --------- --------SMITH 800 1100 ALLEN 1600 1900 WARD 1250 1550 JONES 2975 3275 MARTIN 1250 1550 BLAKE 2850 3150 CLARK 2450 2750

Operador de Precedencia Si una expresin aritmtica contiene ms de un operador, multiplicacin y divisin son evaluadas primero. Si los operadores dentro de una misma expresin son de la misma prioridad, entonces la evaluacin es hecha de izquierda a derecha. Puedes usar parntesis para remarcar las expresiones dentro de parntesis para ser evaluado primero. El ejemplo del recuadro despliega nombre, salario y compensacin anual de los empleados. Calcula la compensacin anual como 12 multiplicado por el salario mensual, ms un bono de $100. Note que la multiplicacin es realizada antes que la suma.
SQL> SELECT ename, sal, 12*sal+100 2 FROM emp; ENAME SAL 12*SAL+100 ---------- --------- ---------SMITH 800 9700 ALLEN 1600 19300 WARD 1250 15100 JONES 2975 35800

Uso de Parntesis. Puedes resaltar las reglas de procedencia usando parntesis para especificar el orden en que las operaciones son ejecutadas. El recuadro despliega el nombre, salario y la ocupacin anual de los empleados. Calcula la compensacin anual como salario mensual ms un bono mensual de $100 multiplicado por 12. Debido a los parntesis la suma toma prioridad sobre la multiplicacin.
SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp; ENAME SAL 12*(SAL+100) --------- ---------- -------------SMITH 800 10800 ALLEN 1600 20400 WARD 1250 16200 JONES 2975 36900 MARTIN 1250 16200 BLAKE 2850 35400

Definiendo un Valor Nulo Si a un registro le falta informacin en una columna en particular, se dice que tiene valor nulo. Un valor nulo es una valor que no est disponible, no ha sido asignado, es desconocido o no es aplicable. Un valor nulo es igual a cero ni tampoco es una espacio. Cero es un nmero, y un espacio es un carcter. Las columnas de cualquier tipo de informacin pueden contener valores nulos, a menos que las columnas hayan sido definidas explcitamente como no nulas (NOT NULL) o sean parte de la llave primaria (PRIMARY KEY) de la tabla a que pertenecen.

Valores nulos en expresiones aritmticas Si cualquier campo involucrado en una expresin tiene valor nulo, la expresin completa tendr valor nulo. Un valor nulo se propaga a toda la expresin. Si realiza una divisin entre cero se obtiene un error, no obstante si divide un nmero entre un valor nulo el resultado es un nulo o desconocido.
SQL> SELECT ename, 12*sal+comm 2 FROM emp 3 WHERE ename='KING'; ENAME 12*SAL+COMM ---------- ----------KING

Alias de las Columnas Cuando se despliega el resultado de una consulta, la herramienta SQL*Plus normalmente usa los nombres de las columnas seleccionadas como encabezado. En muchos casos, dicho encabezado puede ser difcil de entender o incluso no tener ningn significado. Se puede cambiar el encabezado de una columna utilizando un alias. Se especifica el alias despus de la columna en la lista SELECT usando un espacio como separador. Como default, los encabezados de los alias sern desplegados en maysculas y no podrn contener espacios en blanco, a menos que el alias est encerrado entre comillas ( ). Ejemplo: Desplegar el apellido, salario y la compensacin anual de los empleados. Calcular la compensacin anual como salario mensual ms un bono mensual de $100, multiplicado por 12. Se nombrar a la columna SALARIO_ANUAL.
SQL> SELECT last_name. Salary,12*Salary + 100 AS SALARIO _ANUAL 2 FROM s_emp;

Nota: Se puede incluir la palabra AS antes del nombre del alias para cumplir con los estndares de ANSI SQL 92. Operador de Concatenacin Se pueden hacer combinaciones de unas columnas con otras, de expresiones aritmticas o de valores constantes para crear una sola columna de caracteres utilizando el operador de concatenacin ( | | ). Ejemplo:
SQL> SELECT first_name | | last_name AS Empleados 2 FROM s_emp; Empleado ------------------SMITHCLERK ALLENSALESMAN WARDSALESMAN JONESMANAGER

MARTINSALESMAN BLAKEMANAGER

Duplicando Filas A menos que se le indique, SQL *Plus despliega los resultados de una consulta sin eliminar los registro duplicados. El ejemplo en la grfica despliega todos los nmeros de de departamento de la tabla EMP. Nota que los nmeros de departamento son duplicados.
SQL> SELECT deptno 2 FROM emp; DEPTNO --------20 30 30 20 30 30 10

Iniciando SQLPLUS Una vez que usted ha encendido su mquina, en el prompt del sistema operativo capture el comando SQL *Plus.
Sqlplus [usuario [ / contrasea [ @base_de_datos ] ] ]

Donde:Usuario Contrasea

Es su nombre de usuario en la base de datos. Es su clave de acceso a la base de datos. CUIDADO: Si usted captura su clave de acceso como parte del comando para invocar el ambiente de sqlplus, la clave podra ser vista por terceros. Para evitar este problema no capture su contrasea como parte del comando y espere a que el propio sqlplus se lo pida.

@base_de_datos

Cadena de conexin a la base de datos.

Una vez que se ha entrado exitosamente a SQL *Plus, ver el siguiente mensaje:
SQL * Plus: version 3.1.2 Production on Fri May 12 th Copyright SQL> @ 15:31:32 1995

Oracle Corporation 1979, 1992, All rights reserved.

Eliminando filas duplicadas Para eliminar registros duplicados en el resultado se incluye la funcin DISTINCT en la clusula del SELECT inmediatamente despus del comando SELECT. Ejemplo:
SQL> SELECT DISTINCT name 2 FROM s_dept;

NAME -------------Finance Sales Operations Administration

Desplegado de la estructura de la Tabla En SQL *Plus se puede desplegar la estructura de una tabla utilizando la orden DESCRIBE. El resultado de la orden es los nombres de las columnas, sus tipos de dato, y si la columna debe forzosamente o no contener datos. DESC [ RIBE ] Tabla Al que tenga acceso el usuario. Comandos de edicin de SQL *PLUS Cuando se introduce un comando de SQL este es almacenado en una parte de la memoria llamada buffer SQL y se queda ah hasta que se introduce un nuevo comando. Los comandos propios de la herramienta SQL *Plus no se almacenan en el buffer SQL. Notas: o Si se presiona [ RETURN ] antes de completar un comando, SQL *Plus iniciar otra lnea numerada. o Para marcar el final de una instruccin SQL capture uno de los caracteres de terminacin (punto y coma o diagonal invertida), o presione [ RETURN ] dos veces. Al hacerlo volver a aparecer el prompt de SQL. Comandos de edicin de SQL *Plus
Comando A[PPEND] C[HANGE]/old/new/ C[HANGE]/text/ CL[EAR] BUFF[ER] DEL DEL n DEL m n I[NPUT] I[NPUT] text L[IST] L[IST] n L[IST] m, n Descripcin Agrega texto al final de la lnea actual Cambia el texto viejo a nuevo en la lnea actual Borra el texto de la lnea actual Borra todas las lneas del buffer de SQL Borra la lnea actual Borra la lnea n Borra un rango de lneas (de la m a la n) Inserta un nmero indefinido de lneas Inserta una lnea de texto Lista todas las lneas del buffer de SQL Despliega la lnea n Despliega de la lnea m a la lnea n

Donde:Tabla Es el nombre de cualquier tabla existente, vista o sinnimo

R[UN], / N n texto O texto

Despliega y ejecuta el comando actual de SQL en el buffer Especfica la lnea que ser la lnea actual Remplaza la lnea n con el texto especificado Inserta el texto antes de lnea nmero 1

Comandos de administracin de archivos y ayuda en la lnea de SQL *PLUS Los comandos de SQL actan como el medio de comunicacin con el servidor de Oracle. Los comandos de SQL *Plus sirven para controlar el ambiente de la herramienta de consulta, el formato de los resultados de las consultas y la administracin de archivos. Usted puede usar los comandos identificados en la siguiente tabla. Comandos de Archivos
SA[VE] archivo[.ext] [REP[lace] | APPE[END]] GET archivo[.ext] STA[RT] archivo[.ext] SPO[OL] OUT] EXIT [archivo.ext]|OFF| Guarda el contenido actual del buffer de SQL a un archivo. Utilice APPEND para agregarlo a un archivo existente. La extensin de default del archivo es .sql. Escribe el contenido de un archivo previamente guardado en el buffer de SQL. La extensin de default del archivo es .sql Llama al editor para editar el contenido de un archivo guardado. Almacena los resultados de la consulta en un archive. OFF cierra el archivo. OUT cierra el archivo y lo enva al sistema de impresin. Cierra SQL *Plus

Bibliografa Manual de introduccin a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Prctica 1: Escribir una instruccin SQL bsica

1. Initiate a SQL * PLUS session using the user ID and contrasea provided by the instructor. 2. SQL * PLUS commands access the database. True/False 3. Will the SELECT statement execute successfully? True/False
SQL> SELECT ename, job, sal Salary 2 FROM emp;

4. Will the SELECT statement execute successfully?


SQL> SELECT * 2 FROM salgrade;

5. There are four coding errors in this statement. Can you identify them?
SQL> SELECT empno, ename 2 salary * 12 ANNUAL SALARY 3 FROM emp;

6. Show the structure of the DEPT table. Select all data from the DEPT table.
NAME NULL? ------------------------------- -------DEPTNO NOT NULL DNAME LOC DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON TYPE ---NUMBER(2) VARCHAR2(14) VARCHAR2(13)

7. Show the structure of the EMP table. Create a query to display the name, job, hire date, and employee number for each employee, with employee number appearing first. Save your SQL statement a file named p1q7.sql.
NAME NULL? ------------------------------- -------EMPNO NOT NULL ENAME TYPE ---NUMBER(4) VARCHAR2(10)

JOB MGR HIREDATE SAL COMM DEPTNO

VARCHAR2(9) NUMBER(4) DATE NUMBER(7,2) NUMBER(7,2) NUMBER(2)

Run your query in the file p1q7.sql.


EMPNO --------7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER JOB --------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT SALESMAN CLERK CLERK ANALYST CLERK HIREDATE --------17-DIC-80 20-FEB-81 22-FEB-81 02-ABR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-ABR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DIC-81 03-DIC-81 23-ENE-82

14 rows selected.

8. Create a query to display unique jobs from the EMP table.


JOB --------ANALYST CLERK MANAGER PRESIDENT SALESMAN

If you have time, complete the following exercises: 9. Load p1q7.sql into the SQL buffer. Name the column headings Emp #, Employee, Job, and Hire date, respectively. Run your query.
Emp # --------7369 7499 7521 7566 7654 7698 7782 7788 7839 Employee ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING Job --------CLERK SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER ANALYST PRESIDENT Hire date --------17-DIC-80 20-FEB-81 22-FEB-81 02-ABR-81 28-SEP-81 01-MAY-81 09-JUN-81 19-ABR-87 17-NOV-81

7844 7876 7900 7902 7934

TURNER ADAMS JAMES FORD MILLER

SALESMAN CLERK CLERK ANALYST CLERK

08-SEP-81 23-MAY-87 03-DIC-81 03-DIC-81 23-ENE-82

14 rows selected.

10. Display the name concatenated with the job, separated by a comma and space, and name the column Employee and Title.
Employee and Title -----------------SMITH,CLERK ALLEN,SALESMAN WARD,SALESMAN JONES,MANAGER MARTIN,SALESMAN BLAKE,MANAGER CLARK,MANAGER SCOTT,ANALYST KING,PRESIDENT TURNER,SALESMAN ADAMS,CLERK JAMES,CLERK FORD,ANALYST MILLER,CLERK 14 rows selected.

If you want extra challenge, complete the following exercise: 11. Create a query to display all the data from the EMP table. Separate each column by a comma. Name the column THE_OUTPUT.
THE_OUTPUT ---------------------------------------7369,SMITH,CLERK,17-DIC-80,800,20 7499,ALLEN,SALESMAN,20-FEB-81,1600,30 7521,WARD,SALESMAN,22-FEB-81,1250,30 7566,JONES,MANAGER,02-ABR-81,2975,20 7654,MARTIN,SALESMAN,28-SEP-81,1250,30 7698,BLAKE,MANAGER,01-MAY-81,2850,30 7782,CLARK,MANAGER,09-JUN-81,2450,10 7788,SCOTT,ANALYST,19-ABR-87,3000,20 7839,KING,PRESIDENT,17-NOV-81,5000,10 7844,TURNER,SALESMAN,08-SEP-81,1500,30 7876,ADAMS,CLERK,23-MAY-87,1100,20 7900,JAMES,CLERK,03-DIC-81,950,30 7902,FORD,ANALYST,03-DIC-81,3000,20 7934,MILLER,CLERK,23-ENE-82,1300,10 14 rows selected.

Unidad 2 Limitar y ordenar datos Objetivo: El alumno ser capaz de limitar la recuperacin de registros y sortear la recuperacin de registros.

Sugerencias didcticas Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de dificultad y con base en cada una de las instrucciones que los componen, ensear la sintaxis del lenguaje y la finalidad de cada una de ellas. Solicitar que corrobore la validez del mismo, ejecutndolo en la computadora. Solicitarle la elaboracin de programas similares, agregndoles algunas variantes. Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para l. Sugerencias de evaluacin El docente deber considerar la evaluacin, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseanza-aprendizaje, adems de los exmenes tradicionales se recomienda se tome en cuenta: participacin en clases, elaboracin de prcticas en el laboratorio y proyectos. Cuando se recuperan datos de la base de datos podra necesitar restringir las lneas que estn desplegadas o especificar el orden en el cul las lneas son desplegadas. Limitar filas seleccionadas con la clusula WHERE Usted puede restringir las filas obtenidas por la consulta usando la clusula WHERE. Una clusula de WHERE contiene una condicin que debe cumplirse, y que se especfica inmediatamente despus de la clusula FROM. Sintaxis SELECT FROM [WHERE Donde: exp tabla condicion(es)]

[ORDER BY expr];

WHERE Condicin

hace que la consulta solo devuelva aquellos registros que cumplan la condicin. expresin lgica basada en los nombres de las columnas, expresiones, constantes y operadores de comparacin.

Cadenas de caracteres y datos Las cadenas de caracteres y datos en la clusula WHERE deben ser encerrados con apostrofes sencillos ( ), nmeros constantes, no deben ser marcados as. Todas las bsquedas con casos sensitivos. En el siguiente ejemplo las lneas no son regresadas ya que la tabla EMP (Empleados) guarda los datos en maysculas.
SQL> SELECT ename, empno, job, deptno 2 FROM emp 3 WHERE job=clark;

Oracle almacena datos en un formato numerico interno, representando as siglos, aos, meses, das, horas, minutos y segundos. Por default los datos son desplegados en formato DD-MON-YY. Operadores de Comparacin Son utilizados en condiciones en las que se comparara una expresin con otra. Se usan en la clusula WHERE. Sintaxis: WHERE exp operador value Ejemplos:
WHERE hiredate=01-JAN-95 WHERE sal>=1500 WHERE ename=SMITH

Los operadores lgicos expresan las siguientes condiciones:


Operador = > >= < <= Significado Igual que Mayor que Mayor o igual que Menor que Menor o igual que

Operadores SQL Existen cuatro operadores de SQL que operan con cualquier tipo de datos:
Operador BETWEENAND IN (lista) LIKE IS NULL Significado Entre dos valores (inclusive) Que el valor se encuentre dentro de la lista Comparar una cadena contra una cadena modelo Es un valor nulo

Operador BETWEEN Usted puede desplegar filas basndose en un rango de valores usando el operador BETWEEN. El rango que usted especfica contiene un rango bajo u uno alto. Ejemplo: Desplegar el nombre, apellido y la fecha de inicio de los empleados cuya fecha de inicio est entre mayo 9 de 1991 y junio 17 de 1991 adems.
SQL> 2 3 4 SELECT first_name, last_name, Stara_date FROM s_emp WHERE start_date BETWEEN 09-may-91 and 17-jun-91;

Operador IN Para verificar que el valor se encuentre dentro de una lista use el operador IN. Ejemplo: Desplegar el nmero de departamento, nombre y nmero de regin de los departamentos en las regiones 1 3.
SQL> 2 3 SELECT id, first_name, region_id FROM s_dept WHERE region_id IN (1,3);

Operador LIKE Probablemente usted no sepa el valor exacto a buscar. Usted puede seleccionar filas que chequen contra una cadena modelo usando el operador LKE. Dos smbolos que sirven como comodines pueden ser usados para construir la cadena de bsqueda.
Smbolo % Descripcin Representa cualquier secuencia de cero o ms caracteres Representa cualquier carcter

Ejemplo: Desplegar aquellos empleados cuyos apellidos empiecen con M:


SQL> 2 3 SELECT last_name FROM s_emp WHERE last_name like M%;

Operador NULL El operador IS NULL examina los valores que son nulos. Un valor nulo significa que el valor es invlido, no ha sido asignado, desconocido o inaplicable. Por lo tanto, no se puede examinar con = , ya que un valor nulo no puede ser igual o desigual a cualquier valor. El ejemplo del recuadro recupera el nombre y jefe de todos los empleados que no tienen un jefe.
SQL> 2 3 SELECT ename, mgr FROM emp WHERE mgr IS NULL; MGR -------

ENAME ---------KING

Operadores lgicos Un operador lgico combina el resultado de dos condiciones componentes para producir un nico resultado basado en ellos o de invertir el resultado de una condicin nica. Tres operadores lgicos estn disponibles en SQL.
Operador AND OR NOT Descripcin Si el resultado de ambas condiciones es VERDADERO, entonces el resultado es VERDADERO Si el resultado de cualquier de las condiciones es VERDADERO, entonces el resultado es VERDADERO. Regresa un valor verdadero si la siguiente condicin es FALSA

Todos los ejemplos hasta ahora han especificado solo una condicin en la clusula WHERE. Puedes utilizar diversas condiciones en una clusula WHERE utilizando los operadores AND y OR. Operador AND En el ejemplo, ambas condiciones deben ser verdaderas para cualquier registro a ser seleccionado. De aqu, un empleado que tiene el puesto de analista y gane ms de $1 $1110 ser seleccionado. Ninguna lnea ser recuperada si CLERK no est en maysculas. Cadenas de caracteres deben ser encerradas entre apostrofes.
SQL> 2 3 4 SELECT empno, ename, job, sal FROM emp WHERE sal>=1100 AND job='CLERK'; ENAME ---------ADAMS MILLER JOB SAL --------- --------CLERK 1100 CLERK 1300

EMPNO --------7876 7934

Operador OR En el ejemplo, cualquier condicin puede ser verdadera para cualquier registro a ser seleccionado. De aqu, un empleado que tenga un puesto como oficinista o que gane ms de $1100 ser seleccionado.
SQL> 2 3 4 SELECT empno, ename, job, sal FROM emp WHERE sal>=1100 OR job='CLERK' ENAME ---------SMITH ALLEN WARD JONES JOB SAL --------- --------CLERK 800 SALESMAN 1600 SALESMAN 1250 MANAGER 2975

EMPNO --------7369 7499 7521 7566

Operador NOT El ejemplo del recuadro despliega nombre y puesto de todos los empleados cuyo empleo no sea oficinista, jefe o analista.
SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','ANALYST'); ENAME ---------ALLEN WARD JONES MARTIN BLAKE CLARK KING TURNER JOB --------SALESMAN SALESMAN MANAGER SALESMAN MANAGER MANAGER PRESIDENT SALESMAN

Reglas de precedencia Ejemplo de precedencia y el operador Y En el recuadro, hay dos condiciones: o La primera condicin es que sea presidente y cuyo salario sea ms de $1500. o La segunda condicin es que se a vendedor. De aqu que la sentencia SELECT se lea como sigue: Selecciona la lnea si un empleado es presidente y gane ms de $1500 o si el empleado es un vendedor.
SQL> 2 3 4 5 SELECT ename, job, sal FROM emp WHERE job='SALESMAN' OR job='PRESIDENT' AND sal>1500;

ENAME ---------ALLEN WARD MARTIN KING TURNER

JOB SAL --------- --------SALESMAN 1600 SALESMAN 1250 SALESMAN 1250 PRESIDENT 5000 SALESMAN 1500

Usando parntesis. En el ejemplo hay dos condiciones: o Que el puesto sea presidente o vendedor. o Que el salario sea mayor que $1500. De aqu que, la sentencia SELECT se lea como sigue: Seleccionar la lnea si un empleado es presidente o un vendedor y si el empleado gana ms de $1500.
SQL> 2 3 4 5* SQL> SELECT ename, job, sal FROM emp WHERE (job='SALESMAN' OR job='PRESIDENT') AND sal>1500 / JOB SAL --------- --------SALESMAN 1600 PRESIDENT 5000

ENAME ---------ALLEN KING

Ordenando los registros con la clusula ORDER BY. El orden de los registros obtenidos como resultado de una consulta es indefinido. La clusula ORDER by, puede ser usada para dar un ordenamiento a los registros. La clusula ORDER BY debe ser especificada al final del comando SELECT. Para ordenar puedes especificar: o Una expresin o Una posicin o El alias de una columna o Usar muchas columnas o Usar columnas que no estn en la lista del SELECT Sintaxis SELECT FROM [ORDER BY exp. tabla {columna, exp.} [ASC | DESC]];

Donde:

ORDER BY ASC DESC

especifica el orden en le que las lneas son desplegadas. ordena las filas en una forma ascendente. Este es el orden por omisin. ordena las filas en forma descendente.

Si no se utiliza este comando, el orden ser indefinido y el servidor ORACLE podra no buscar la informacin en el mismo orden para la misma interrogante dos veces. Utilice este comando para desplegar las lneas en un orden especfico. Orden por omisin de la informacin El ordenamiento por omisin es ascendente: o Los valores numricos son desplegados con el valor ms bajo, por ejemplo 1-999. o Las fechas se despliegan con la fecha ms temprana al principio, 01-enero-1992 antes de 01-enero-1998 o Los valores en caracteres en orden alfabtico, por ejemplo A primero y la Z al final. o En oracle, los valores nulos se despliegan al final en una secuencia ascendente y al principio en una secuencia descendente. Invertir el orden por omisin Para invertir el orden en cada fila que se despliega, la palabra de comando DESC se especfica despus del nombre de la columna en la clusula ORDER BY. Ejemplo: Consultar la tabla de empleados y obtener el apellido, nmero de departamento y la fecha de contrato de todos los empleados. Ordenar los resultados en la base a la fecha en que el empleado haya sido contratado.
SQL> 2 3 SELECT FROM ORDER BY last_name, dept_id, start_date s_emp start_date DESC;

Bibliografa Manual de introduccin a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Prctica 2: Limitar y ordenar datos

1. Create a query to display the name and salary of employees earning more than $2850. Save your SQL statement to a file named p2ql.sql.Run your query.
ENAME SAL ---------- --------JONES 2975 BLAKE 2850 SCOTT 3000 KING 5000 FORD 3000

2. Create a query to display the employee name and department number for employee number 7566.
ENAME DEPTNO ---------- --------JONES 20

3. Modify p2ql.sql to display the name and salary for all employees whose salary is not in the range of $1500 and $2850. Resave your SQL statement to a file named p2q3.sql.Rerun your query.
ENAME SAL ---------- --------SMITH 800 WARD 1250 JONES 2975 MARTIN 1250 SCOTT 3000 KING 5000 ADAMS 1100 JAMES 950 FORD 3000 MILLER 1300 10 rows selected.

4. Display the employee name, job and date of employees hired between February 2O, 1981,and May 1, 1981. Order the query in ascending order by start date.
ENAME ---------ALLEN WARD JOB --------SALESMAN SALESMAN HIREDATE --------20-FEB-81 22-FEB-81

JONES BLAKE

MANAGER MANAGER

02-ABR-81 01-MAY-81

5. Display the employee name and department number of all employees in departments 10 and 30 in alphabetical order by name.
ENAME DEPTNO ---------- --------ALLEN 30 WARD 30 MARTIN 30 BLAKE 30 JAMES 30 TURNER 30 CLARK 10 MILLER 10 KING 10 9 rows selected.

6. Modify p2q3.sql to list the name and salary of employees who earn more than $1500 and are in department 10 or 30. Label the columns Employee and Monthly Salary respectively. Resave your SQL statement to a file named p2q6.sql Rerun your query.
Employee Monthly Salary ---------- -------------KING 5000 BLAKE 2850 CLARK 2450 ALLEN 1600

7. Display the name and hire date of every employee who was hired in 1982.
ENAME HIREDATE ---------- --------MILLER 23-ENE-82

8. Display the name and job title of all employees who do not have a manager.
ENAME JOB ---------- --------KING PRESIDENT

9. Display the name, salary, and commission for all employees who earn commissions. Sort data in descending order of salary and commissions.
ENAME SAL COMM ---------- --------- --------ALLEN 1600 300 TURNER 1500 0 MARTIN 1250 1400

WARD

1250

500

lf you have time, complete the following exercises: (optional) 10. Display the names of all employees where the third letter of their name is an A.
ENAME ---------BLAKE CLARK ADAMS

11. Display the name of all employees who have two Ls in their name and are in department 30 or their manager is 7782.
ENAME --------ALLEN MILLER

lf you want extra challenge, complete the following exercises: 12. Display the name, job and salary for all employees whose job is Clerk or Annalist and their salary is not equal to $1000, $3000. or $5000.
ENAME ---------SMITH ADAMS JAMES MILLER JOB SAL --------- --------CLERK 800 CLERK 1100 CLERK 950 CLERK 1300

13. Modify p2q6.sql to display the name, salary, and commission for all employees whose commission amount is greater than their increased by 10%. Rerun your query. Resave your query as p2ql3.sql.
Employee Monthly Salary COMM ---------- -------------- --------MARTIN 1250 1400

Unidad 3 Funciones de una sola fila Objetivo: El alumno ser capaz de describir los diferentes tipos de funciones definidas en Oracle, usar funciones de carcter, numero y fecha en el estatuto SELECT y describir el uso de funciones de conversin.

Sugerencias didcticas Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de dificultad y con base en cada una de las instrucciones que los componen, ensear la sintaxis del lenguaje y la finalidad de cada una de ellas. Solicitar que corrobore la validez del mismo, ejecutndolo en la computadora. Solicitarle la elaboracin de programas similares, agregndoles algunas variantes. Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para l. Sugerencias de evaluacin El docente deber considerar la evaluacin, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseanza-aprendizaje, adems de los exmenes tradicionales se recomienda se tome en cuenta: participacin en clases, elaboracin de prcticas en el laboratorio y proyectos. Existen en SQL muchas funciones que pueden complementar el manejo de los datos en las consultas. Se utilizan dentro de las expresiones y actan con los valores de las columnas, variables o constantes. Se pueden incluir en las clusulas SELECT, WHERE y ORDER BY. Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones para cada tipo de datos:

Funciones Aritmticas
Funcin ABS(n) CEIL(n) FLOOR(n) MOD(m,n) POWER(m,n) ROUND(m,n) SQRT(n) TRUNC(m,n) SIGN(n) Cometido Calcula el valor absoluto de n. Ejemplo select abs(-15) from dual; Resultado 15 16 15 3 9

Calcula el valor entero inmediatamente select ceil(15.7) from dual; superior o igual a n. Calcula el valor entero inmediatamente select floor(15.7) from dual; inferior o igual a n. Calcula el resto resultante de dividir m select mod(11,4) from dual; entre n. Calcula la potencia n-esima de m. select power(3,2) from dual;

Calcula el redondeo de m a n decimales. select round(123.456,1) from Si n<0 el redondeo se efecta a por la 123.5 dual; izquierda del punto decimal. Calcula la raz cuadrada de n. select sqrt(4) from dual; 2

Calcula m truncado a n decimales (n select trunc(123.456,1) from 123.4 puede ser negativo). dual; Calcula el signo de n, devolviendo -1 si select sign(-12) from dual; n<0, 0 si n=0 y 1 si n>0. -1

Funciones de Cadenas de Caracteres


Funcin CHR(n) ASCII(cad) Cometido Devuelve el carcter cuyo valor codificado es n. Devuelve el valor ascii de cad. Ejemplo select dual; chr(65) from Resultado A

select ascii('A') from 65 dual;

Devuelve cad1 concatenada con cad2. select Cano es CONCAT(cad1, cad2) Esta funcin es equivalente al operador concat(concat(nombre,' Presidente, etc. ||. es '),oficio) from emp; LOWER(cad) Devuelve la cadena cad con todas sus letras convertidas a minsculas. Devuelve la cadena cad con todas sus letras convertidas a maysculas. select lower('MinUsCulAs') from dual; select upper('maYuSCulAs') from dual; minusculas

UPPER(cad)

MAYUSCULAS

INITCAP(cad)

Devuelve cad con el primer caracter en select initcap('isabel') Isabel maysculas. from dual; Devuelve cad1 con longitud n, y select lpad('P',5,'*') ajustada a la derecha, rellenando por la ****P from dual; izquierda con cad2. Devuelve cad1 con longitud n, y select rpad('P',5,'*') ajustada a la izquierda, rellenando por P**** from dual; la derecha con cad2. diego

LPAD(cad1,n,cad2)

RPAD(cad1,n,cad2)

Devuelve cad en la que cada ocurrencia select REPLACE(cad,ant,nue) de la cadena ant ha sido sustituida por replace('digo','i','ie') la cadena nue. from dual; SUBSTR(cad,m,n)

Devuelve la subcadena de cad select compuesta por n caracteres a partir de substr('ABCDEFG',3,2) CD la posicin m. from dual; Devuelve la longitud de cad. select length('cadena') 6 from dual;

LENGTH(cad)

Funciones de Manejo de Fechas


Funcin SYSDATE ADD_MONTHS(d,n) LAST_DAY(d) Cometido Ejemplo Resultado 14-MAR-97

Devuelve la fecha y hora select sysdate from dual; actuales.

Devuelve la fecha d select add_months(sysdate,4) 14-JUL-97 incrementada en n meses. from dual; Devuelve la fecha del ltimo select last_day(sysdate) from 31-MAR-97 da del mes de d. dual; Devuelve la diferencia en select meses entre las fechas d1 y months_between(sysdate,'01- 2.43409424 d2. JAN-97') from dual; Devuelve la fecha del select next_day(sysdate, primer da de la semana cad 16-MAR-97 'sunday') from dual; despus de la fecha d.

MONTHS_BETWEEN(d1, d2)

NEXT_DAY(d,cad)

Funciones de Conversin de Tipos


Funcin TO_NUMBER(cad,fmto) Cometido Ejemplo Resultado

Convierte la cadena cad a un select to_number('12345') nmero, opcionalmente de 124345 from dual; acuerdo con el formato fmto. Convierte la fecha d a una cadena de caracteres, select to_char(sysdate) from '14-MAR-97' opcionalmente de acuerdo dual; con el formato fmto. Convierte la cadena cad de tipo varchar2 a fecha, select to_date('1-JAN-97') 01-JAN-97 opcionalmente de acuerdo from dual; con el formato fmto.

TO_CHAR(d, fmto)

TO_DATE(cad,fmto)

Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la presentacin de una fecha. En la siguiente tabla se presentan algunos formatos de fecha y el resultado que generan. Mscaras de Formato Numricas
Formato cc scc Cometido Valor del siglo. Ejemplo Resultado

select to_char(sysdate,'cc') 20 from dual; select to_char(sysdate,'y,yyy') from dual;

y,yyy sy,yyy

Ao con coma, con o sin signo.

1,997

yyyy yyy yy y q ww w mm ddd dd d hh hh12 hh24 mi ss sssss

Ao sin signo con cuatro, tres, dos o un select to_char(sysdate,'yyyy') 1997 dgitos. from dual; Trimestre. Nmero de la semana del ao o del mes. Nmero del mes. select to_char(sysdate,'q') 1 from dual; select to_char(sysdate,'ww') 11 from dual; select to_char(sysdate,'mm') 03 from dual;

Nmero del da del ao, del mes o de la select to_char(sysdate,'ddd') 073 semana. from dual; La hora en formato 12h. o 24h. Los minutos de la hora. select to_char(sysdate,'hh') 12 from dual; select to_char(sysdate,'mi') 15 from dual;

Los segundos dentro del minuto, o desde select to_char(sysdate,'sssss') 44159 las 0 horas. from dual;

Mscaras de Formato de Caracteres


Formato syear year month o mon day dy a.m. p.m. b.c. a.d. Cometido Ao en Ingls Ejemplo Resultado

select to_char(sysdate,'syear) nineteen from dual; ninety-seven

Nombre del mes o su abreviatura de select to_char(sysdate,'month') march tres letras. from dual; Nombre del da de la semana o su select to_char(sysdate,'day') friday abreviatura de tres letras. from dual; El espacio del da. select to_char(sysdate,'a.m.') p.m. from dual;

Indicador del ao respecto al del select to_char(sysdate,'b.c.') a.d. nacimiento de Cristo. from dual;

Otras Funciones
Funcin Cometido Ejemplo Resultado

Convierte el valor de DECODE(var, val1, cod1, val2, select decode(oficio, 'Presidente', var, de acuerdo con la P, D, X, ... cod2, ..., defecto) 'P', 'Director', 'D', 'X') from emp; codificacin. GREATEST(exp1, exp2, ...) LEAST(cad,fmto) Devuelve el mayor valor sin ejemplo. de una lista. Devuelve el menor valor sin ejemplo. de una lista. sin ejemplo. sin ejemplo.

NVL(val, exp)

Devuelve la expresin select salario+nvl(comision,0) 450000, exp si val es NULL, y from emp; 350000, ... val si en otro caso.

Funciones de Agrupamiento
Funcin COUNT(col) AVG(col) MAX(col) MIN(col) SUM(col) STDDEV(col) VARIANCE(col) Cometido Cuenta el nmero de filas agrupadas. Ejemplo select count(nombre),oficio emp group by oficio; from

Calcula el valor medio de todos los valores de la select avg(salario),oficio from emp columna col. group by oficio; Calcula el valor mximo de todos los valores de la select max(salario),oficio from emp columna col. group by oficio; Calcula el valor mnimo de todos los valores de la select min(salario),oficio from emp columna col. group by oficio; Calcula la suma de los valores de la columna col. select sum(salario), oficio from emp group by oficio;

Calcula la desviacin tpica de los valores de la select stddev(salario), oficio from columna col sin tener en cuenta los valores nulos. emp group by oficio; Calcula la varianza de los valores de la columna col select variance(salario), oficio from sin tener en cuenta los valores nulos. emp group by oficio;

Hay que tener en cuenta que los valores nulos no participan en el clculo de las funciones de conjuntos. Bibliografa Manual de introduccin a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Prctica 3: Funciones de una sola fila

1. Write a query to display the current date. Label the column Date.
DATE --------11-DIC-02

2. Display the employee number, name, salary, and salary increase by 15% expressed as a whole number. Label the column New Salary. Save your SQL statement to a file named p3q2.sql. 3. Run your query in the file p2q2.sql.
EMPNO --------7839 7788 7902 7566 7698 7782 7499 7844 7934 7521 7654 7876 7900 7369 ENAME SAL New Salary ---------- --------- ---------KING 5000 5750 SCOTT 3000 3450 FORD 3000 3450 JONES 2975 3421.25 BLAKE 2850 3277.5 CLARK 2450 2817.5 ALLEN 1600 1840 TURNER 1500 1725 MILLER 1300 1495 WARD 1250 1437.5 MARTIN 1250 1437.5 ADAMS 1100 1265 JAMES 950 1092.5 SMITH 800 920

14 rows selected.

4. Modify your query p3q2.sql to add a column that will subtract the old salary from the new salary. Label the column Increase. Rerun your query.
EMPNO --------7839 7788 7902 7566 7698 7782 7499 7844 7934 ENAME SAL New Salary Increase ---------- --------- ---------- --------KING 5000 5750 750 SCOTT 3000 3450 450 FORD 3000 3450 450 JONES 2975 3421.25 446.25 BLAKE 2850 3277.5 427.5 CLARK 2450 2817.5 367.5 ALLEN 1600 1840 240 TURNER 1500 1725 225 MILLER 1300 1495 195

7521 7654 7876 7900 7369

WARD MARTIN ADAMS JAMES SMITH

1250 1250 1100 950 800

1437.5 1437.5 1265 1092.5 920

187.5 187.5 165 142.5 120

14 rows selected.

5. Display the employees name, hire date, and salary review date, which is the first Monday after six months of service. Label the column REVIEW. Format the dates to appear in the format similar to Sunday, the Seventh of September, 1981.
ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH SCOTT ADAMS MILLER HIREDATE --------17-NOV-81 01-MAY-81 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82 REVIEW -----------------------------------------Monday, the Twenty-Fourth of May, 1982 Monday, the Second of November, 1981 Monday, the Fourteenth of December, 1981 Monday, the Fifth of October, 1981 Monday, the Twenty-Ninth of March, 1982 Monday, the Twenty-Fourth of August, 1981 Monday, the Fifteenth of March, 1982 Monday, the Seventh of June, 1982 Monday, the Twenty-Fourth of August, 1981 Monday, the Seventh of June, 1982 Monday, the Twenty-Second of June, 1981 Monday, the Thirteenth of June, 1983 Monday, the Eighteenth of July, 1983 Monday, the Twenty-Sixth of July, 1982

14 rows selected.

6. For each employee display the employee name and calculate the number of months between today and the date the employee war hired. Label the column MONTHS_WORKED. Order your results by the number of months employed. Round the number of months up to the closest whole number.
ENAME MONTHS_WORKED ---------- ------------ADAMS 187 SCOTT 188 MILLER 251 JAMES 252 FORD 252 KING 253 MARTIN 254 TURNER 255 CLARK 258 BLAKE 259 JONES 260 ALLEN 262 WARD 262 SMITH 264

Write a query that produces the following for each employee:

<employee name> earns <salary> monthly but wants <3 times salary>. Label the column Dream Salaries.
Dream Salaries --------------------------------------------------SMITH earns $800 monthly but wants $2,400 ALLEN earns $1,600 monthly but wants $4,800 WARD earns $1,250 monthly but wants $3,750 JONES earns $2,975 monthly but wants $8,925 MARTIN earns $1,250 monthly but wants $3,750 BLAKE earns $2,850 monthly but wants $8,550 CLARK earns $2,450 monthly but wants $7,350 SCOTT earns $3,000 monthly but wants $9,000 KING earns $5,000 monthly but wants $15,000 TURNER earns $1,500 monthly but wants $4,500 ADAMS earns $1,100 monthly but wants $3,300 JAMES earns $950 monthly but wants $2,850 FORD earns $3,000 monthly but wants $9,000 MILLER earns $1,300 monthly but wants $3,900 14 rows selected.

If you have time, complete the following exercises: 7. Create a query to display name and salary for all employees. Format the salary to be 15 characters long, left padded with $. Label the column SALARY.
ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER SALARY --------------$$$$$$$$$$$$800 $$$$$$$$$$$1600 $$$$$$$$$$$1250 $$$$$$$$$$$2975 $$$$$$$$$$$1250 $$$$$$$$$$$2850 $$$$$$$$$$$2450 $$$$$$$$$$$3000 $$$$$$$$$$$5000 $$$$$$$$$$$1500 $$$$$$$$$$$1100 $$$$$$$$$$$$950 $$$$$$$$$$$3000 $$$$$$$$$$$1300

14 rows selected.

9. Write a query that will display the employees name with the first letter capitalized and all other letters lowercase and the length of their name, for all employees whose name starts with J, A, or M. Give each column an appropriate label.
Name Length ---------- --------Allen 5 Jones 5

Martin Adams James Miller 6 rows selected.

6 5 5 6

10. Display the name, hire date, and day of the week on which the employee started. Label the column DAY. Order the results by the day of the week starting with Monday.
ENAME --------MARTIN CLARK KING TURNER SMITH ADAMS JONES FORD SCOTT JAMES ALLEN BLAKE MILLER WARD HIREDATE --------28-SEP-81 09-JUN-81 17-NOV-81 08-SEP-81 17-DEC-80 12-JAN-83 02-APR-81 03-DEC-81 09-DEC-82 03-DEC-81 20-FEB-81 01-MAY-81 23-JAN-82 22-FEB-81 DAY ---------MONDAY TUESDAY TUESDAY TUESDAY WEDNESDAY WEDNESDAY THURSDAY THURSDAY THURSDAY THURSDAY FRIDAY FRIDAY SATURDAY SUNDAY

14 rows selected.

If you want extra challenge, complete the following exercise: 11. Create a query that will display the employee name and commission amount. If the employee does not earn commission, put No commission. Label of column COMM.
ENAME ----------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER COMM --------------No Commission 300 500 No Commission 1400 No Commission No Commission No Commission No Commission 0 No Commission No Commission No Commission No Commission

14 rows selected.

12. Create a query that displays the employees names and indicates the amounts of their salaries through asterisks. Each asterisk signifies a hundred dollars. Sort the data in descending order of salary. Label the column EMPLOYEE_AND_THEIR_SALARIES.
EMPLOYEE_AND_THEIR_SALARIES --------------------------------------------------------------KING ************************************************** FORD ****************************** SCOTT ****************************** JONES ***************************** BLAKE **************************** CLARK *********************** ALLEN **************** TURNER *************** MILLER ************* MARTIN ************ WARD ************ ADAMS *********** JAMES ********* SMITH ******** 14 rows selected.

If you want an extra challenge, complete the following exercise: 13. Write a query that displays the grade of all employees based on the value of the column JOB, as per the table shown below:
JOB -----------------PRESIDENT MANAGER ANALYST SALESMAN CLERK None of the above GRADE --------------A B C D E O

Unidad 4 Mostrar datos desde mltiples tablas Objetivo: El alumno ser capaz de utilizar el estatuto SELECT para mas de una tabla, utilizando los diferentes tipos de JOINS.

Sugerencias didcticas Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de dificultad y con base en cada una de las instrucciones que los componen, ensear la sintaxis del lenguaje y la finalidad de cada una de ellas. Solicitar que corrobore la validez del mismo, ejecutndolo en la computadora. Solicitarle la elaboracin de programas similares, agregndoles algunas variantes. Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para l. Sugerencias de evaluacin El docente deber considerar la evaluacin, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseanza-aprendizaje, adems de los exmenes tradicionales se recomienda se tome en cuenta: participacin en clases, elaboracin de prcticas en el laboratorio y proyectos. Bibliografa Manual de introduccin a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Prctica 4: Mostrar datos desde mltiples tablas

1. Write a query to display the name, department number and department name for all employees.
ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER DNAME DEPTNO -------------- --------RESEARCH 20 SALES 30 SALES 30 RESEARCH 20 SALES 30 SALES 30 ACCOUNTING 10 RESEARCH 20 ACCOUNTING 10 SALES 30 RESEARCH 20 SALES 30 RESEARCH 20 ACCOUNTING 10

14 rows selected.

2. Create a unique listing of all jobs that are in department 30 . Include the location of department 30 in the output.
JOB --------CLERK MANAGER SALESMAN LOC ------------CHICAGO CHICAGO CHICAGO

3. Write a query to display the employee name, department name and location of all employees who earn a commission.
ENAME ---------ALLEN WARD MARTIN TURNER DNAME -------------SALES SALES SALES SALES LOC ------------CHICAGO CHICAGO CHICAGO CHICAGO

4. Display the employee name and department name for all employees who have an A in their name. Save your SQL statement in a file called p4q4.sql.

ENAME ---------ALLEN WARD MARTIN BLAKE CLARK ADAMS JAMES

DNAME -------------SALES SALES SALES SALES ACCOUNTING RESEARCH SALES

7 rows selected.

5. Write a query to display the name, job, department number and department name for all employees who work in DALLAS
ENAME ---------SMITH JONES SCOTT ADAMS FORD JOB DEPTNO DNAME --------- --------- -------------CLERK 20 RESEARCH MANAGER 20 RESEARCH ANALYST 20 RESEARCH CLERK 20 RESEARCH ANALYST 20 RESEARCH

6. Display the employee name and employee number along with their managers name and manager number. Label the column Employee, Emp #, Manger and Mgr#, respectively. Save your SQL statement in a file called p4q6.sql
Employee Emp# Manager Mgr# ---------- --------- ---------- --------SMITH 7369 FORD 7902 ALLEN 7499 BLAKE 7698 WARD 7521 BLAKE 7698 JONES 7566 KING 7839 MARTIN 7654 BLAKE 7698 BLAKE 7698 KING 7839 CLARK 7782 KING 7839 SCOTT 7788 JONES 7566 TURNER 7844 BLAKE 7698 ADAMS 7876 SCOTT 7788 JAMES 7900 BLAKE 7698 FORD 7902 JONES 7566 MILLER 7934 CLARK 7782 13 rows selected.

7. Modify p4q6.sql to display all employees including King , who has no manager .Resave as p4q7.sql. Run p4q7.sql
Employee Emp# Manager Mgr# ---------- --------- ---------- --------SMITH 7369 FORD 7902 ALLEN 7499 BLAKE 7698 WARD 7521 BLAKE 7698 JONES 7566 KING 7839

MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER

7654 7698 7782 7788 7839 7844 7876 7900 7902 7934

BLAKE KING KING JONES BLAKE SCOTT BLAKE JONES CLARK

7698 7839 7839 7566 7698 7788 7698 7566 7782

14 rows selected.

If you have time, complete the following exercises : 8. Create a query that will display the employee name, department number and all the employees that work in the same department as a given employee. Give each column an appropriate label.
Department ---------30 30 30 30 30 30 30 30 30 30 30 30 30 30 Employee ---------JAMES JAMES JAMES JAMES TURNER TURNER TURNER TURNER TURNER WARD WARD WARD WARD WARD Colleague ---------BLAKE MARTIN TURNER WARD ALLEN BLAKE MARTIN JAMES WARD ALLEN BLAKE MARTIN JAMES TURNER

56 rows selected.

9. Show the structure of the SALGRADE table. Create a query that will display the name, job, department name, salary and grade for all employees
NAME NULL? ------------------------------- -------GRADE LOSAL HISAL ENAME ---------SMITH ADAMS JAMES WARD MARTIN JOB --------CLERK CLERK CLERK SALESMAN SALESMAN TYPE -----NUMBER NUMBER NUMBER

DNAME SAL GRADE -------------- --------- --------RESEARCH 800 1 RESEARCH 1100 1 SALES 950 1 SALES 1250 2 SALES 1250 2

MILLER ALLEN TURNER JONES BLAKE CLARK SCOTT FORD KING

CLERK SALESMAN SALESMAN MANAGER MANAGER MANAGER ANALYST ANALYST PRESIDENT

ACCOUNTING SALES SALES RESEARCH SALES ACCOUNTING RESEARCH RESEARCH ACCOUNTING

1300 1600 1500 2975 2850 2450 3000 3000 5000

2 3 3 4 4 4 4 4 5

14 rows selected.

If you have time, complete the following exercises: 10. Create a query to display the name and hire date off any employee hired after employee Blake.
ENAME ---------MARTIN CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER HIREDATE --------28-SEP-81 09-JUN-81 19-ABR-87 17-NOV-81 08-SEP-81 23-MAY-87 03-DIC-81 03-DIC-81 23-ENE-82

9 rows selected.

11. Display all employees names and hire dates along with their managers name and hire date for all employees who were hired before their managers. Label the columns Employee, Emp, Hire date, Manager y Mgr Hire date, respectively.
Employee ---------MARTIN SCOTT TURNER ADAMS JAMES FORD MILLER Emp Hired --------28-SEP-81 19-ABR-87 08-SEP-81 23-MAY-87 03-DIC-81 03-DIC-81 23-ENE-82 Manager ---------BLAKE JONES BLAKE SCOTT BLAKE JONES CLARK Mgr Hired --------01-MAY-81 02-ABR-81 01-MAY-81 19-ABR-87 01-MAY-81 02-ABR-81 09-JUN-81

7 rows selected.

Unidad 5 Agregar datos mediante funciones de grupo Objetivo: El alumno ser capaz de identificar las diferentes funciones de grupo, describir el uso de funciones de grupo, agrupar datos usando la clusula GROUP BY, excluir registros con la clusula HAVING.

Sugerencias didcticas Mostrar al alumno programas completos desarrollados en SQL de menor a mayor grado de dificultad y con base en cada una de las instrucciones que los componen, ensear la sintaxis del lenguaje y la finalidad de cada una de ellas. Solicitar que corrobore la validez del mismo, ejecutndolo en la computadora. Solicitarle la elaboracin de programas similares, agregndoles algunas variantes. Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para l. Sugerencias de evaluacin El docente deber considerar la evaluacin, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseanza-aprendizaje, adems de los exmenes tradicionales se recomienda se tome en cuenta: participacin en clases, elaboracin de prcticas en el laboratorio y proyectos. Qu son funciones de grupo? Las funciones de grupo de valores son aquellas funciones estadsticas, que dicen algo de un grupo de valores tomado como un todo, por ejemplo la edad media de las personas de una tabla, la persona ms vieja o ms joven, etc. Las funciones de grupo operan sobre conjuntos de registros para dar un resultado por grupo. Estos conjuntos pueden ser la tabla entera o la tabla dividida en grupos.

Tipos de funciones de grupo


AVG ([DISTINTINC | ALL]n) COUNT ({ * | [DISTINTINC | ALL]expr}) MAX ([DISTINTINC | ALL]expr) MIN ([DISTINTINC | ALL]expr) STDDEV ([DISTINTINC | ALL]x) SUM ([DISTINTINC | ALL]n) VARIANCE ([DISTINTINC | ALL]x) Porcentaje de n valores, ignorando valores nulos Nmero de registros, donde expr evala todo lo distinto de valores nulos Mximo valor de expr, ignorando valores nulos Valor mnimo de expr, ignorando valores nulos Desviacin estndar de n Suma de los valores de n Variante de n

Usando funciones de grupo


SELECT FROM| table [WHERE [GROUP BY [ORDER BY [COLUMN,] group_function (column) CONDITION] column] column];

o DISTINCT hace que la funcin considere slo a los valores no duplicados o El tipo de datos para los argumentos puede ser CHAR, VARCHAR2, NUMBER, o DATE donde expr es listado. o Todas las funciones excepto COUNT (*) ignoran los valores nulos Usando las funciones AVG y SUM para datos numricos. Estas funciones miden los extremos de los datos.
SELECT AVG (sal), SUM (sal) FROM emp WHERE job LIKE SALES&; AVG (SAL) SUM (SAL) --------- ------------1400 5600

AVG, SUM, VARIANCE, STDDEV pueden ser solamente usados para datos numricos. Utilizando las funciones MIN y MAX para cualquier tipo de datos
SELECT MAX (sal), FROM emp WHERE job LIKE MIN (sal) SALES&;

MAX (SAL) MIN (SAL) --------- ------------5000 1250

Por ejemplo, podemos mostrar al empleado con el ingreso ms antiguo (senior) y al empleado de nuevo ingreso (junior)

SELECT MIN (hiredate), MAX (hiredata) FROM emp; MIN (HIRED ---------17-DEC-80 MAX (HIRED ---------12-JAN-83

Aqu se muestra el nombre del empleado en orden alfabtico, el primero y el ltimo en ese orden.
SELECT MAX (ename), MIN (ename) FROM emp; MAX(ENAME) MIN (ENAME) --------------- -------------WARDS ADAMS

o La desviacin estndar STDDEV y la varianza VARIANCE tienen su significado estadstico normal y usan el mismo formato de todas las funciones de grupo.
SELECT MAX(sal), SAL(sal), AVG(sal), MIN(sal), STEDDEV(sal), VARIANCE (sal) FROM salgrade;

o La funcin COUNT tiene dos formatos; a) COUNT (*) : Regresa el nmero de registros en una tabla, incluyendo registros duplicados y registros con valores nulos en cualquiera de las comunas.
SELECT COUNT (*) FROM emp WHERE deptno = 30; COUNT (*) -----------6

b) COUNT (expr): Regresa el nmero de registros no nulos en la columna identificados por una expresin.
SELECT COUNT (*) FROM emp WHERE deptno = 30; COUNT (*) -----------4

Por ejemplo, podemos desplegar el nmero de departamentos en la tabla empleado.


SELECT COUNT (deptno) FROM emp; COUNT(DEPTNO) ------------4

DISTINCT en funciones de grupos Todas las funciones de grupos de valores tienen una opcin DISTINCT frente a la opcin ALL. Por ejemplo: COUNT ([ DISTINCT | ALL ] value)
SELECT COUNT (DISTINCT (deptno)) FROM emp;

Nmero distinto de departamentos


COUNT (DISTINCT (DEPTNO)) ------------------------3

DISTINCT fuerza a COUNT a contar solamente el nmero de departamentos nicos, cuando COUNT se usa sobre deptno sin forzarlo a que busque nombres diferentes se encuentran 14. Esto tambin muestra una propiedad nica entre funciones de grupos para COUNT: puede trabajar sobre columnas de caracteres. No hace clculos sobre los valores de las columnas, como SUM o AVG; simplemente cuneta las filas que tienen un valor en la columna deptno COUNT tiene otras propiedades nicas: value puede ser un asterisco, queriendo significar que COUNT indica cuntas filas hay en la tabla, independientemente de si una columna tiene NULL o no. Contar una columna incluso si todos sus campos son NULL Funciones de grupo y valores nulos Las funciones de grupo de valores tratan los valores NULL de manera diferente a las funciones de valores simples. Las funciones de grupo ignoran los valores NULL y calculan los resultados a pesar de ellos. Todas las funciones de grupo excepto COUNT (*) ignoran los valores nulos de la columna, es decir, para realizar un clculo las funciones se basan slo en los registros de la tabla donde hay un valor vlido almacenado en determinada columna. COUNT es un caso especial, cuenta las filas de una columna, pero no contabiliza los NULL.
SELECT FROM AVG (comm) emp;

AVG (COMM) ---------550

La funcin NVL obliga a las funciones de grupo a incluir valores nulos.


SELECT FROM AVG (NVL (comm,0) ) emp;

AVG (NVL (comm,0)) ------------------157.1428

En el ejemplo, el porcentaje recalcula tomando en cuenta todos los registros de la tabla sin importar si hay valores nulos dentro de la columna.

Creando grupos de datos. Hasta ahora todas las funciones de grupo han tratado a la tabla como un grupo grande de informacin. En ocasiones necesitaremos dividir la tabla en pequeos grupos de informacin figura (3.1). Esto lo podemos realizar con la clusula GROUP BY.
DEPNTO SAL ------- ---------2450 5000 300 20 800 1100 3000 3000 2975 1600 2850 1250 950 1500 30 1250

Porcentaje de salario en la tabla EMP para cada departamento

DEPTNO AVG (SAL) --------------2916.6667 2175 30 1566.6667

SELECT FROM [WHERE [GROUP BY [ORDER BY

column, group_function (column) table condition] group_by_expression] column];

Group_by_expression especifica las columnas de las cuales se determinarn los valores para la agrupacin de registros Podemos usar la clusula GROUP BY para dividir los registros de una tabla en grupos. Entonces podemos utilizar las funciones de grupo para regresar informacin resumida para cada grupo. o Si incluimos en una funcin de grupo en una clusula SELECT no podemos seleccionar resultados individuales, a menos que la columna individual aparezca en la clusula GROUP BY. o Usando la clusula WHERE, podemos excluir registros antes de dividirlos en grupos. o Debemos incluir las columnas en la clusula GROUP BY, no podemos usar el alias de las columnas en esta clusula. o Los registros de las columnas son seleccionados de manera ascendente por default, incluso en la lista GROUP BY.

Todas las columnas en la lista SELECT que no estn en las funciones de grupo deben estar en la clusula GROUP BY
SELECT deptno, AVG (sal) FROM emp GROUP BY deptno; DEPTNO AVG (SAL) ------- ---------10 2916.6667 20 2175 30 1566.6667

Cuando usamos la clusula GROUP BY nos aseguramos que todas las columnas en la lista SELECT que no estn incluidas en las funciones de grupo estn incluidas en la clusula GROUP BY. En el ejemplo anterior se despliega el nmero de departamento y el porcentaje de salario para cada departamento. Analicemos como es que el estatuto SELECT conteniendo la clusula GROUP BY, es evaluado: o La clusula SELECT especifica las columnas a ser recuperadas La columna del nmero de departamento de la tabla EMP. El porcentaje de todos los salarios en el grupo especificado en la clusula GROUP BY

o La clusula FROM especifica las tablas que la base de datos debe accesar: la tabla EMP. o La clusula GROUP BY especifica como deben ser agrupados los registros. Los registros son agrupados por nmero de departamento, as que la funcin AVG es aplicada a la columna salario calcular Sin embargo, la columna que utiliza la clusula GROUP BY no tiene que estar en la sentencia SELECT. No obstante, sin el nmero de departamento el resultado no significa mucho.
SELECT AVG (sal) FROM emp GROUP BY deptno; AVG (SAL) --------2916.6667 2175 1566.6667

Agrupando mediante ms de una columna En algunas ocasiones existe la necesidad de ver los resultados de los grupos dentro de otros grupos. En la siguiente figura se muestra un reporte que despliega el salario total que es pagado a cada puesto dentro de cada departamento.
SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, job;

DEPTNO -------10 10 10 20 20 .....

JOB SUM (SAL) --------- ---------CLERK 1300 MANAGER 2450 PRESIDENT 5000 ANALYST 6000 CLERK 1900

9 filas seleccionadas

Podemos regresar resultados para grupos y subgrupos listado ms de una columna con la clusula GROUP BY. Tambin podemos determinar el orden de nuestra seleccin, por el orden de las columnas en la clusula GROUP BY, analicemos como es que el estatuto SELECT del ejemplo anterior, y que contiene la clusula GROUP BY, es evaluado: o SELECT especifica las columnas recuperadas. Nmero de departamento en la tabla EMP (empleado). Puesto desempeado contenido dentro de la tabla EMP. La suma de todos los salarios en el grupo que se especifico en la clusula GROUP BY

o La clusula FROM especifica las tablas que la base de datos debe accesar. o La clusula GROUP BY especifica como se deben agrupar los registros Primero, los registros son agrupados por el nmero de departamento. Segundo, dentro del grupo de nmero de departamento, los registros son agrupados, por el nombre del puesto.

As que la funcin SUM es aplicada a la columna salario para todos los puesto (job) dentro de cada grupo de nmero de departamento. Consultas ilegales usando funciones de grupo Cualquier columna o expresin en la lista SELECT que no est agregada a una funcin debe estar en la clusula GROUP BY. Cada vez que usemos una mezcla de objetos individuales y funciones de grupo, en el mismo estatuto SELECT, debemos incluir la clusula GROUP BY que especifica el punto individual. Si la clusula GROUP BY est omitida, ocurrir un mensaje de error indicando not a single function y un asterisco (*) sealando a la columna olvidada en la clusula.
SELECT deptno, COUNT (ENAME) FROM emp; SELECT deptno, COUNT (ENAME) * ERROR at line 1: ORA-00937: not a singlegroup

function

La solucin a este problema es aadiendo la clusula GROUP BY. Cualquier columna o expresin el la lista SELECT que no sea una funcin agregada debe estar en la clusula SELECT;

SELECT deptno, COUNT (ENAME) FROM emp GROUP BY deptno; DEPTNO COUNT (ENAME) ------ ------------10 3 20 5 30 6

Otra forma de consulta ilegal, es usar la clusula WHERE para restringir grupos, esta clusula no puede ser usada para restringir grupos.
deptno, AVG(sal) emp AVG (sal) > 2000 deptno; AVG (sal) > 2000 * ERROR at line 3: ORA-00937: group function is not allowed here SELECT FROM WHERE GROUP BY WHERE

Podemos corregir este problema mediante el uso de la clusula HAVING para restringir grupos
SELECT deptno, AVG(sal) FROM emp GROUP BY deptno HAVING AVG (sal) > 2000; DEPTNO -----10 20 AVG (SAL) -----------2916.6667 2175

En la misma manera que usamos la clusula WHERE para restringir los registros que queremos seleccionar, podemos utilizar la clusula HAVING para restringir grupos. De esta manera los registros son agrupados, y por lo tanto las funciones de grupo pueden ser aplicadas
SELECT FROM [WHERE [GRUOP BY [HAVING [ORDER BY column, group_function table condition] group_by_expression] group_condition] column];

group_condition

restringe les grupos de registros regresando a aquellos grupos para los cuales la condicin especificada es verdadera.

Utilizamos la clusula HAVING para especificar cuales grupos sern despegados. El servidor Oracle desarrolla los siguientes pasos cuando utilizamos la clusula HAVING: o Los registros son agrupados o Las funciones de grupo son aplicadas al grupo. o Los grupos que igualan el criterio de la clusula HAVING son desplegados
SELECT deptno, max (sal) FROM emp GROUP BY deptno HAVING max (sal) > 2900; DEPTNO -----10 20 MAX (SAL) ------------5000 3000

Podemos usar la clusula GROUP BY sin usar funciones de grupo en la sentencia SELECT. Si se restringen los registros basados en los resultados de las funciones de grupo, se debe tener una clusula GROUP BY as como la clusula HAVING. Funciones de grupo anidadas.
SELECT max(avg (sal) ) FROM emp GROUP BY deptno; MAX (AVG (SAL) ) ---------------2916.6667

Bibliografa Manual de introduccin a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Prctica 5: Agregar datos mediante funciones de grupo

Determine the validity of the following statements. Circle either True or False. 1. Group functions work acros many rows to produce result per group. True/False 2. Group functions include nulls in calculations. True/False 3. The WHERE clause restricts rows prior to inclusion in a group calculation. True/False
4.

Display the highest, lowest, sum, and average salary of all employees. Label the columns Maximum, Minimum, Sum, and Average respectively. Round your results to the nearest whole number. Save your SQL statement in a file called p5q4.sql.
Maximum Minimum Sum Average --------- --------- --------- --------5000 800 29025 2073

5.

Modify p5q4.sql to display minimum, maximum, sum and average salary for each job type. Resave to a file called p5q5.sql. Return your query
JOB Maximum Minimum Sum Average --------- --------- --------- --------- --------ANALYST 3000 3000 6000 3000 CLERK 1300 800 4150 1038 MANAGER 2975 2450 8275 2758 PRESIDENT 5000 5000 5000 5000 SALESMAN 1600 1250 5600 1400

6. Write a query to display the number of people whit the same job.
JOB People --------- ---------ANALYST 2 CLERK 4 MANAGER 3 PRESIDENT 1 SALESMAN 4

7. Determine the number of managers without listing them. Label the column Number of managers.
Number of Managers

-----------------6

8. Write a query that will display the difference between the highest and lowest salaries. Label the column DIFFERENCE.
Difference ---------4200

If you have time, complete the following exercises. 9. Display the manager number and the salary of the lowest paid employee for that manager. Exclude anyone whose manager is not known. Exclude any groups where the minimum salary is less than $1000. Sort the output in descending order of salary.
MGR Min-Sal --------- --------7566 3000 7698 950 7782 1300 7788 1100 7839 2450 7902 800 6 rows selected.

10. Write a query to display the department name, location name, number of employees, and the average salary for all employees in that department. Label the columns DNAME, loc, Number of people, and salary, respectively. Round the average salary to two decimal places.
DNAME -------------ACCOUNTING RESEARCH SALES LOC Employees Salary ------------- ------------------- --------NEW YORK 3 2916.67 DALLAS 5 2175 CHICAGO 6 1566.67

If you want extra challenge, complete the following exercises: 11. Create a query that will display the total number of employees and of that total the number who were hired in 1980,1981,1982 and 1983.Give appropriate column headings.
Total 1980 1981 1982 1983 --------- --------- --------- --------- --------14 1 10 1

12. Create a matrix query to display the job ,the salary for that job based on department, number, and the total salary that job for all departments, giving each column an appropriate heading.
Job Dept 10 Dept 20 Dept 30 Total --------- --------- --------- --------- --------ANALYST 6000 6000 CLERK 1300 1900 950 4150 MANAGER 2450 2975 2850 8275 PRESIDENT 5000 5000 SALESMAN 5600 5600

También podría gustarte