3. sql-a

74
Unidad 1 Escribir una instrucción SQL básica Objetivo: El alumno será capaz de manejar el estatuto SELECT y diferenciar estatutos SQL y comandos SQL-PLUS. Sugerencias didácticas 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, enseñar la sintaxis del lenguaje y la finalidad de cada una de ellas. Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora. Solicitarle la elaboración de programas similares, agregándoles algunas variantes. Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él. Sugerencias de evaluación El docente deberá considerar la evaluación, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje, además de los exámenes tradicionales se recomienda se tome en cuenta la participación 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.

Upload: pablo-hernandez

Post on 13-Aug-2015

145 views

Category:

Documents


4 download

TRANSCRIPT

Unidad 1 Escribir una instrucción SQL básica

Objetivo: El alumno será capaz de manejar el estatuto SELECT y diferenciar estatutos SQL y comandos SQL-PLUS.

Sugerencias didácticas

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, enseñar la sintaxis del lenguaje y la finalidad de cada una de ellas.

Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.

Solicitarle la elaboración de programas similares, agregándoles algunas variantes.

Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.

Sugerencias de evaluación

El docente deberá considerar la evaluación, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje, además de los exámenes tradicionales se recomienda se tome en cuenta la participación 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 información de la base de datos. Usando un estatuto SELECT puedes hacer lo siguiente:

o Selección: Usa la capacidad de selección en SQL para escoger los renglones en una tabla que quieras obtener a través de una consulta. Usa varios criterios para una restringir selectivamente los renglones que ves.

o Proyección: Usa la capacidad de proyección en SQL para elegir las columnas en una tabla que quieras obtener a través 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.

Instrucción Básica SELECT

En su forma más simple, una instrucción SELECT debe incluir lo siguiente:

o Una clausula SELECT, la cuál especifica las columnas a ser desplegadas.

o Una clausula FROM, la cuál especifica las tablas que contienen las columnas listadas en la cláusula SELECT.

En la sintaxis:

SELECT Es una lista de una o más columnas.

DISTINCT Suprime duplicados.

* Selecciona todas las columnas.

column Selecciona el nombre de la columna.

Alias da a las columnas seleccionadas un encabezado

diferente.

FROM table específica 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 cláusula es una parte de una instrucción SELECT.

Por ejemplo. SELECT empno,ename,…es una cláusula.

o Una instrucción es una combinación de dos o más cláusulas.

Por ejemplo, SELECT * FROM emp es una instrucción SQL.

Escribiendo instrucciones SQL

Usando las siguientes reglas y sugerencias, puedes construir instrucciones válidas que sean fáciles de leer y fáciles de editar.

o Las instrucciones SQL no son sensibles las mayúsculas o minúsculas a menos que se indique.

o Las instrucciones SQL pueden ser capturados en una o más líneas.

o Las palabras clave no pueden ser cortadas entre líneas o abreviadas.

o Las cláusulas son usualmente colocadas en líneas separadas para su lectura y fácil edición.

o La tabulación y las sangrías pueden ser usadas para hacer un código más comprensible.

o Las palabras clave son escritas en mayúscula; todas las otras palabras, tales como nombre de tablas y columnas son escritas en minúsculas.

o Dentro de SQL*Plus, una instrucción SQL es escrita en el prompt de SQL y las siguientes líneas son numeradas. Esto es llamado el buffer SQL. Solamente una instrucción puede ser ejecutada en cualquier momento dentro del buffer.

Ejecución de una instrucción SQL

o Coloque un ; al final de cada cláusula.

o Coloque una / al final de la línea 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 gráfica, la tabla Departamento contiene tres columnas: DEPTNO,DNAME y LOC. La tabla contiene cuatro renglones, uno para cada Departamento.

También puedes desplegar todas las columnas en la tabla, listando los nombres de las columnas después de la palabra clave SELECT.

Por ejemplo, la siguiente instrucción SQL, como el ejemplo en la gráfica, despliega todas las columnas y todos los renglones de la tabla Departamento.

SQL> SELECT * 2 FROM dept;

DEPTNO DNAME LOC--------- --------------- ---------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Seleccionado Columnas específicas

Usa la instrucción SELECT para consultar exclusivamente algunas columnas, especifique sus nombres separándolos por comas.

El ejemplo en la gráfica despliega todos los números y lugares de la tabla Departamento.

En la cláusula SELECT, específica las columnas que quieras ver, en el orden en el cuál quieres que aparezcan en la salida. Por ejemplo para desplegar el lugar antes del número de departamento usa la siguiente instrucción:

SQL> SELECT loc, deptno 2 FROM dept;

DEPTNO LOC--------- ------------- 10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON

Encabezado de Columnas

El encabezado y los datos de la columna carácter así como el encabezado y datos de la columna fecha están justificados a la izquierda dentro de un ancho de columna, encabezados y datos numéricos son justificados a la derecha.

SQL> SELECT ename, hiredate, sal2 FROM emp;

ENAME HIREDATE SAL--------- -------- ---------SMITH 17/12/80 800ALLEN 20/02/81 1600WARD 22/02/81 1250

Expresiones Aritméticas

Necesitamos modificar la manera en que los datos son desplegados o visualizar escenarios what–if. Esto es posible usando expresiones aritméticas. Una expresión aritmética puede contener nombres, valores numéricos constantes y operadores aritméticos.

Operadores Aritméticos

El recuadro lista las operaciones aritméticas disponibles en SQL. Puedes usar operadores aritméticos en cualquier clausula de una sentencia SQL excepto la clausula FROM.

Operador Descripción

+ Suma

- Resta

* Multiplicación

/ División

Usando Operadores Aritméticos

El ejemplo en el recuadro usa el operador de adición para calcular un incremento de salario de $300 para todos los empleados y despliega un nuevo SAL+300 en la columna de salida.

Nótese 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 cálculo que generó este, en este caso sal+300.

SQL> SELECT ename, sal, sal+300 2 FROM emp;

ENAME SAL SAL+300---------- --------- ---------SMITH 800 1100ALLEN 1600 1900WARD 1250 1550JONES 2975 3275MARTIN 1250 1550

BLAKE 2850 3150CLARK 2450 2750

Operador de Precedencia

Si una expresión aritmética contiene más de un operador, multiplicación y división son evaluadas primero. Si los operadores dentro de una misma expresión son de la misma prioridad, entonces la evaluación es hecha de izquierda a derecha.

Puedes usar paréntesis para remarcar las expresiones dentro de paréntesis para ser evaluado primero.

El ejemplo del recuadro despliega nombre, salario y compensación anual de los empleados. Calcula la compensación anual como 12 multiplicado por el salario mensual, más un bono de $100. Note que la multiplicación es realizada antes que la suma.

SQL> SELECT ename, sal, 12*sal+100 2 FROM emp;

ENAME SAL 12*SAL+100---------- --------- ----------SMITH 800 9700ALLEN 1600 19300WARD 1250 15100JONES 2975 35800

Uso de Paréntesis.

Puedes resaltar las reglas de procedencia usando paréntesis para especificar el orden en que las operaciones son ejecutadas.

El recuadro despliega el nombre, salario y la ocupación anual de los empleados. Calcula la compensación anual como salario mensual más un bono mensual de $100 multiplicado por 12. Debido a los paréntesis la suma toma prioridad sobre la multiplicación.

SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp;

ENAME SAL 12*(SAL+100)--------- ---------- --------------SMITH 800 10800ALLEN 1600 20400WARD 1250 16200JONES 2975 36900MARTIN 1250 16200BLAKE 2850 35400

Definiendo un Valor Nulo

Si a un registro le falta información 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 número, y un espacio es un carácter.

Las columnas de cualquier tipo de información pueden contener valores nulos, a menos que las columnas hayan sido definidas explícitamente como no nulas (NOT NULL) o sean parte de la llave primaria (PRIMARY KEY) de la tabla a que pertenecen.

Valores nulos en expresiones aritméticas

Si cualquier campo involucrado en una expresión tiene valor nulo, la expresión completa tendrá valor nulo. Un valor nulo se propaga a toda la expresión. Si realiza una división entre cero se obtiene un error, no obstante si divide un número 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 difícil de entender o incluso no tener ningún significado. Se puede cambiar el encabezado de una columna utilizando un alias.

Se especifica el alias después de la columna en la lista SELECT usando un espacio como separador. Como default, los encabezados de los alias serán desplegados en mayúsculas y no podrán contener espacios en blanco, a menos que el alias esté encerrado entre comillas (“ ”).

Ejemplo:

Desplegar el apellido, salario y la compensación anual de los empleados. Calcular la compensación anual como salario mensual más 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 _ANUAL2 FROM s_emp;

Nota: Se puede incluir la palabra AS antes del nombre del alias para cumplir con los estándares de ANSI SQL 92.

Operador de Concatenación

Se pueden hacer combinaciones de unas columnas con otras, de expresiones aritméticas o de valores constantes para crear una sola columna de caracteres utilizando el operador de concatenación ( | | ).

Ejemplo:

SQL> SELECT first_name | | last_name AS “Empleados”2 FROM s_emp;

Empleado-------------------SMITHCLERKALLENSALESMANWARDSALESMANJONESMANAGER

MARTINSALESMANBLAKEMANAGER

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 gráfica despliega todos los números de de departamento de la tabla EMP. Nota que los números de departamento son duplicados.

SQL> SELECT deptno2 FROM emp;

DEPTNO--------- 20 30 30 20 30 30 10

Iniciando SQLPLUS

Una vez que usted ha encendido su máquina, en el prompt del sistema operativo capture el comando SQL *Plus.

Sqlplus [usuario [ / contraseña [ @base_de_datos ] ] ]

Donde:Usuario Es su nombre de usuario en la base de datos.

Contraseña 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 podría ser vista por terceros. Para evitar este problema no capture su contraseña como parte del comando y espere a que el propio sqlplus se lo pida.

@base_de_datos Cadena de conexión 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 15:31:32 1995

Copyright @ Oracle Corporation 1979, 1992, All rights reserved.

SQL>

Eliminando filas duplicadas

Para eliminar registros duplicados en el resultado se incluye la función DISTINCT en la cláusula del SELECT inmediatamente después del comando SELECT.

Ejemplo:

SQL> SELECT DISTINCT name2 FROM s_dept;

NAME--------------FinanceSalesOperationsAdministration

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

Donde: Tabla Es el nombre de cualquier tabla existente, vista o sinónimo

Al que tenga acceso el usuario.

Comandos de edición 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 línea numerada.

o Para marcar el final de una instrucción SQL capture uno de los caracteres de terminación (punto y coma o diagonal invertida), o presione [ RETURN ] dos veces. Al hacerlo volverá a aparecer el prompt de SQL.

Comandos de edición de SQL *Plus

Comando Descripción

A[PPEND] Agrega texto al final de la línea actual

C[HANGE]/old/new/ Cambia el texto viejo a nuevo en la línea actual

C[HANGE]/text/ Borra el texto de la línea actual

CL[EAR] BUFF[ER] Borra todas las líneas del buffer de SQL

DEL Borra la línea actual

DEL n Borra la línea n

DEL m n Borra un rango de líneas (de la m a la n)

I[NPUT] Inserta un número indefinido de líneas

I[NPUT] text Inserta una línea de texto

L[IST] Lista todas las líneas del buffer de SQL

L[IST] n Despliega la línea n

L[IST] m, n Despliega de la línea m a la línea n

R[UN], / Despliega y ejecuta el comando actual de SQL

en el buffer

N Específica la línea que será la línea actual

n texto Remplaza la línea n con el texto especificado

O texto Inserta el texto antes de línea número 1

Comandos de administración de archivos y ayuda en la línea de SQL *PLUS

Los comandos de SQL actúan como el medio de comunicación 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 administración de archivos. Usted puede usar los comandos identificados en la siguiente tabla.

Comandos de Archivos

SA[VE] archivo[.ext]

[REP[lace] | APPE[END]]

Guarda el contenido actual del buffer de SQL a un archivo. Utilice APPEND para agregarlo a un archivo existente. La extensión de default del archivo es .sql.

GET archivo[.ext] Escribe el contenido de un archivo previamente guardado en el buffer de SQL. La extensión de default del archivo es .sql

STA[RT] archivo[.ext] Llama al editor para editar el contenido de un archivo guardado.

SPO[OL] [archivo.ext]|OFF|OUT]

Almacena los resultados de la consulta en un archive. OFF cierra el archivo. OUT cierra el archivo y lo envía al sistema de impresión.

EXIT Cierra SQL *Plus

Bibliografía

Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Práctica 1: Escribir una instrucción SQL básica

1. Initiate a SQL * PLUS session using the user ID and contraseña 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? TYPE------------------------------- -------- ----DEPTNO NOT NULL NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13)

DEPTNO DNAME LOC--------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

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? TYPE------------------------------- -------- ----

EMPNO NOT NULL NUMBER(4)ENAME VARCHAR2(10)JOB VARCHAR2(9)MGR NUMBER(4)HIREDATE DATESAL NUMBER(7,2)COMM NUMBER(7,2)DEPTNO NUMBER(2)

Run your query in the file p1q7.sql.

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

14 rows selected.

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

JOB---------ANALYSTCLERKMANAGERPRESIDENTSALESMAN

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 # Employee Job Hire date--------- ---------- --------- --------- 7369 SMITH CLERK 17-DIC-80 7499 ALLEN SALESMAN 20-FEB-81 7521 WARD SALESMAN 22-FEB-81 7566 JONES MANAGER 02-ABR-81 7654 MARTIN SALESMAN 28-SEP-81 7698 BLAKE MANAGER 01-MAY-81 7782 CLARK MANAGER 09-JUN-81 7788 SCOTT ANALYST 19-ABR-87

7839 KING PRESIDENT 17-NOV-81 7844 TURNER SALESMAN 08-SEP-81 7876 ADAMS CLERK 23-MAY-87 7900 JAMES CLERK 03-DIC-81 7902 FORD ANALYST 03-DIC-81 7934 MILLER CLERK 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,CLERKALLEN,SALESMANWARD,SALESMANJONES,MANAGERMARTIN,SALESMANBLAKE,MANAGERCLARK,MANAGERSCOTT,ANALYSTKING,PRESIDENTTURNER,SALESMANADAMS,CLERKJAMES,CLERKFORD,ANALYSTMILLER,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,207499,ALLEN,SALESMAN,20-FEB-81,1600,307521,WARD,SALESMAN,22-FEB-81,1250,307566,JONES,MANAGER,02-ABR-81,2975,207654,MARTIN,SALESMAN,28-SEP-81,1250,307698,BLAKE,MANAGER,01-MAY-81,2850,307782,CLARK,MANAGER,09-JUN-81,2450,107788,SCOTT,ANALYST,19-ABR-87,3000,207839,KING,PRESIDENT,17-NOV-81,5000,107844,TURNER,SALESMAN,08-SEP-81,1500,307876,ADAMS,CLERK,23-MAY-87,1100,207900,JAMES,CLERK,03-DIC-81,950,307902,FORD,ANALYST,03-DIC-81,3000,207934,MILLER,CLERK,23-ENE-82,1300,10

14 rows selected.

Unidad 2 Limitar y ordenar datos

Objetivo: El alumno será capaz de limitar la recuperación de registros y sortear la recuperación de registros.

Sugerencias didácticas

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, enseñar la sintaxis del lenguaje y la finalidad de cada una de ellas.

Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.

Solicitarle la elaboración de programas similares, agregándoles algunas variantes.

Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.

Sugerencias de evaluación

El docente deberá considerar la evaluación, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje, además de los exámenes tradicionales se recomienda se tome en cuenta: participación en clases, elaboración de prácticas en el laboratorio y proyectos.

Cuando se recuperan datos de la base de datos podría necesitar restringir las líneas que están desplegadas o especificar el orden en el cuál las líneas son desplegadas.

Limitar filas seleccionadas con la cláusula WHERE

Usted puede restringir las filas obtenidas por la consulta usando la cláusula WHERE. Una cláusula de WHERE contiene una condición que debe cumplirse, y que se específica inmediatamente después de la cláusula FROM.

Sintaxis

SELECT exp

FROM tabla

[WHERE condicion(es)]

[ORDER BY expr];

Donde:

WHERE hace que la consulta solo devuelva aquellos registros que cumplan la condición.

Condición expresión lógica basada en los nombres de las columnas, expresiones, constantes y operadores de comparación.

Cadenas de caracteres y datos

Las cadenas de caracteres y datos en la cláusula WHERE deben ser encerrados con apostrofes sencillos (‘ ‘), números constantes, no deben ser marcados así.

Todas las búsquedas con casos sensitivos. En el siguiente ejemplo las líneas no son regresadas ya que la tabla EMP (Empleados) guarda los datos en mayúsculas.

SQL> SELECT ename, empno, job, deptno2 FROM emp3 WHERE job=’clark’;

Oracle almacena datos en un formato numerico interno, representando así siglos, años, meses, días, horas, minutos y segundos. Por default los datos son desplegados en formato DD-MON-YY.

Operadores de Comparación

Son utilizados en condiciones en las que se comparara una expresión con otra. Se usan en la cláusula WHERE.

Sintaxis:

WHERE exp operador value

Ejemplos:

WHERE hiredate=’01-JAN-95’WHERE sal>=1500WHERE ename=’SMITH’

Los operadores lógicos 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 Significado

BETWEEN…AND… Entre dos valores (inclusive)

IN (lista) Que el valor se encuentre dentro de la lista

LIKE Comparar una cadena contra una cadena modelo

IS NULL Es un valor nulo

Operador BETWEEN

Usted puede desplegar filas basándose en un rango de valores usando el operador BETWEEN. El rango que usted específica 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 además.

SQL> SELECT first_name, last_name, Stara_date2 FROM s_emp3 WHERE start_date BETWEEN ’09-may-91’4 and ’17-jun-91’;

Operador IN

Para verificar que el valor se encuentre dentro de una lista use el operador IN.

Ejemplo:

Desplegar el número de departamento, nombre y número de región de los departamentos en las regiones 1 ó 3.

SQL> SELECT id, first_name, region_id2 FROM s_dept3 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 símbolos que sirven como comodines pueden ser usados para construir la cadena de búsqueda.

Símbolo Descripción

% Representa cualquier secuencia de cero o más caracteres

- Representa cualquier carácter

Ejemplo:

Desplegar aquellos empleados cuyos apellidos empiecen con “M”:

SQL> SELECT last_name2 FROM s_emp3 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 inválido, 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> SELECT ename, mgr2 FROM emp3 WHERE mgr IS NULL;

ENAME MGR---------- -------KING

Operadores lógicos

Un operador lógico combina el resultado de dos condiciones componentes para producir un único resultado basado en ellos o de invertir el resultado de una condición única. Tres operadores lógicos están disponibles en SQL.

Operador Descripción

AND Si el resultado de ambas condiciones es VERDADERO, entonces el resultado es VERDADERO

OR Si el resultado de cualquier de las condiciones es VERDADERO, entonces el resultado es VERDADERO.

NOT Regresa un valor verdadero si la siguiente condición es FALSA

Todos los ejemplos hasta ahora han especificado solo una condición en la cláusula WHERE. Puedes utilizar diversas condiciones en una cláusula 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 más de $1 $1110 será seleccionado. Ninguna línea será recuperada si CLERK no está en mayúsculas. Cadenas de caracteres deben ser encerradas entre apostrofes.

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 AND job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7876 ADAMS CLERK 1100 7934 MILLER CLERK 1300

Operador OR

En el ejemplo, cualquier condición puede ser verdadera para cualquier registro a ser seleccionado. De aquí, un empleado que tenga un puesto como oficinista o que gane más de $1100 será seleccionado.

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 OR job='CLERK'

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7369 SMITH CLERK 800 7499 ALLEN SALESMAN 1600 7521 WARD SALESMAN 1250 7566 JONES MANAGER 2975

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 emp3 WHERE job NOT IN ('CLERK','ANALYST');

ENAME JOB---------- ---------ALLEN SALESMANWARD SALESMANJONES MANAGERMARTIN SALESMANBLAKE MANAGERCLARK MANAGERKING PRESIDENTTURNER SALESMAN

Reglas de precedencia

Ejemplo de precedencia y el operador Y

En el recuadro, hay dos condiciones:

o La primera condición es que sea presidente y cuyo salario sea más de $1500.

o La segunda condición es que se a vendedor.

De aquí que la sentencia SELECT se lea como sigue:

Selecciona la línea si un empleado es presidente y gane más de $1500 o si el empleado es un vendedor.

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job='SALESMAN' 4 OR job='PRESIDENT' 5 AND sal>1500;

ENAME JOB SAL---------- --------- ---------ALLEN SALESMAN 1600WARD SALESMAN 1250MARTIN SALESMAN 1250KING PRESIDENT 5000TURNER SALESMAN 1500

Usando paréntesis.

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 línea si un empleado es presidente o un vendedor y si el empleado gana más de $1500.

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE (job='SALESMAN' 4 OR job='PRESIDENT') 5* AND sal>1500SQL> /

ENAME JOB SAL---------- --------- ---------ALLEN SALESMAN 1600KING PRESIDENT 5000

Ordenando los registros con la cláusula ORDER BY.

El orden de los registros obtenidos como resultado de una consulta es indefinido.

La cláusula ORDER by, puede ser usada para dar un ordenamiento a los registros. La cláusula ORDER BY debe ser especificada al final del comando SELECT.

Para ordenar puedes especificar:

o Una expresión

o Una posición

o El alias de una columna

o Usar muchas columnas

o Usar columnas que no están en la lista del SELECT

Sintaxis

SELECT exp.

FROM tabla

[ORDER BY {columna, exp.} [ASC | DESC]];

Donde: ORDER BY especifica el orden en le que las líneas son

desplegadas.

ASC ordena las filas en una forma ascendente. Este es el

orden por omisión.

DESC ordena las filas en forma descendente.

Si no se utiliza este comando, el orden será indefinido y el servidor ORACLE podría no buscar la información en el mismo orden para la misma interrogante dos veces. Utilice este comando para desplegar las líneas en un orden específico.

Orden por omisión de la información

El ordenamiento por omisión es ascendente:

o Los valores numéricos son desplegados con el valor más bajo, por ejemplo 1-999.

o Las fechas se despliegan con la fecha más temprana al principio, 01-enero-1992 antes de 01-enero-1998

o Los valores en caracteres en orden alfabético, 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 omisión

Para invertir el orden en cada fila que se despliega, la palabra de comando DESC se específica después del nombre de la columna en la cláusula ORDER BY.

Ejemplo:

Consultar la tabla de empleados y obtener el apellido, número 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> SELECT last_name, dept_id, start_date2 FROM s_emp3 ORDER BY start_date DESC;

Bibliografía

Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Práctica 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 2975BLAKE 2850SCOTT 3000KING 5000FORD 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 800WARD 1250JONES 2975MARTIN 1250SCOTT 3000KING 5000ADAMS 1100JAMES 950FORD 3000MILLER 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 JOB HIREDATE---------- --------- ---------

ALLEN SALESMAN 20-FEB-81WARD SALESMAN 22-FEB-81JONES MANAGER 02-ABR-81BLAKE MANAGER 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 30WARD 30MARTIN 30BLAKE 30JAMES 30TURNER 30CLARK 10MILLER 10KING 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 5000BLAKE 2850CLARK 2450ALLEN 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 300TURNER 1500 0MARTIN 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----------BLAKECLARKADAMS

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---------ALLENMILLER

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 JOB SAL---------- --------- ---------SMITH CLERK 800ADAMS CLERK 1100JAMES CLERK 950MILLER 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 carácter, numero y fecha en el estatuto SELECT y describir el uso de funciones de conversión.

Sugerencias didácticas

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, enseñar la sintaxis del lenguaje y la finalidad de cada una de ellas.

Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.

Solicitarle la elaboración de programas similares, agregándoles algunas variantes.

Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.

Sugerencias de evaluación

El docente deberá considerar la evaluación, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje, además de los exámenes tradicionales se recomienda se tome en cuenta: participación en clases, elaboración de prácticas 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 actúan con los valores de las columnas, variables o constantes.

Se pueden incluir en las cláusulas SELECT, WHERE y ORDER BY.

Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones para cada tipo de datos:

Funciones Aritméticas

Función Cometido Ejemplo Resultado

ABS(n) Calcula el valor absoluto de n. select abs(-15) from dual; 15

CEIL(n) Calcula el valor entero inmediatamente superior o igual a n.

select ceil(15.7) from dual; 16

FLOOR(n) Calcula el valor entero inmediatamente inferior o igual a n.

select floor(15.7) from dual; 15

MOD(m,n) Calcula el resto resultante de dividir m entre n.

select mod(11,4) from dual; 3

POWER(m,n) Calcula la potencia n-esima de m. select power(3,2) from dual; 9

ROUND(m,n)

Calcula el redondeo de m a n decimales. Si n<0 el redondeo se efectúa a por la izquierda del punto decimal.

select round(123.456,1) from dual;

123.5

SQRT(n) Calcula la raíz cuadrada de n. select sqrt(4) from dual; 2

TRUNC(m,n) Calcula m truncado a n decimales (n puede ser negativo).

select trunc(123.456,1) from dual;

123.4

SIGN(n) Calcula el signo de n, devolviendo -1 si n<0, 0 si n=0 y 1 si n>0.

select sign(-12) from dual; -1

Funciones de Cadenas de Caracteres

Función Cometido Ejemplo Resultado

CHR(n) Devuelve el carácter cuyo valor codificado es n.

select chr(65) from dual;

A

ASCII(cad) Devuelve el valor ascii de cad. select ascii('A') from

dual; 65

CONCAT(cad1, cad2)Devuelve cad1 concatenada con cad2. Esta función es equivalente al operador ||.

select concat(concat(nombre,' es '),oficio) from emp;

Cano es Presidente, etc.

LOWER(cad) Devuelve la cadena cad con todas sus letras convertidas a minúsculas.

select lower('MinUsCulAs') from dual;

minusculas

UPPER(cad) Devuelve la cadena cad con todas sus letras convertidas a mayúsculas.

select upper('maYuSCulAs') from dual;

MAYUSCULAS

INITCAP(cad) Devuelve cad con el primer caracter en mayúsculas.

select initcap('isabel') from dual;

Isabel

LPAD(cad1,n,cad2) Devuelve cad1 con longitud n, y ajustada a la derecha, rellenando por la izquierda con cad2.

select lpad('P',5,'*') from dual;

****P

RPAD(cad1,n,cad2) Devuelve cad1 con longitud n, y ajustada a la izquierda, rellenando por la derecha con cad2.

select rpad('P',5,'*') from dual;

P****

REPLACE(cad,ant,nue) Devuelve cad en la que cada ocurrencia de la cadena ant ha sido sustituida por la cadena nue.

select replace('digo','i','ie') from dual;

diego

SUBSTR(cad,m,n) Devuelve la subcadena de cad compuesta por n caracteres a partir de la posición m.

select substr('ABCDEFG',3,2) from dual;

CD

LENGTH(cad) Devuelve la longitud de cad. select length('cadena')

from dual; 6

Funciones de Manejo de Fechas

Función Cometido Ejemplo Resultado

SYSDATE Devuelve la fecha y hora actuales.

select sysdate from dual; 14-MAR-97

ADD_MONTHS(d,n) Devuelve la fecha d incrementada en n meses.

select add_months(sysdate,4) from dual;

14-JUL-97

LAST_DAY(d) Devuelve la fecha del último día del mes de d.

select last_day(sysdate) from dual;

31-MAR-97

MONTHS_BETWEEN(d1, d2) Devuelve la diferencia en meses entre las fechas d1 y d2.

select months_between(sysdate,'01-JAN-97') from dual;

2.43409424

NEXT_DAY(d,cad) Devuelve la fecha del primer día de la semana cad después de la fecha d.

select next_day(sysdate, 'sunday') from dual;

16-MAR-97

Funciones de Conversión de Tipos

Función Cometido Ejemplo Resultado

TO_NUMBER(cad,fmto)

Convierte la cadena cad a un número, opcionalmente de acuerdo con el formato fmto.

select to_number('12345') from dual;

124345

TO_CHAR(d, fmto)

Convierte la fecha d a una cadena de caracteres, opcionalmente de acuerdo con el formato fmto.

select to_char(sysdate) from dual;

'14-MAR-97'

TO_DATE(cad,fmto)

Convierte la cadena cad de tipo varchar2 a fecha, opcionalmente de acuerdo con el formato fmto.

select to_date('1-JAN-97') from dual;

01-JAN-97

Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la presentación de una fecha. En la siguiente tabla se presentan algunos formatos de fecha y el resultado que generan.

Máscaras de Formato Numéricas

Formato Cometido Ejemplo Resultado

cc ó scc Valor del siglo. select to_char(sysdate,'cc') from dual;

20

y,yyy ó sy,yyy Año con coma, con o sin signo. select to_char(sysdate,'y,yyy')

1,997

from dual;

yyyy ó yyy ó yy ó y Año sin signo con cuatro, tres, dos o un dígitos.

select to_char(sysdate,'yyyy') from dual;

1997

q Trimestre. select to_char(sysdate,'q') from dual;

1

ww ó w Número de la semana del año o del mes.

select to_char(sysdate,'ww') from dual;

11

mm Número del mes. select to_char(sysdate,'mm') from dual;

03

ddd ó dd ó d Número del día del año, del mes o de la semana.

select to_char(sysdate,'ddd') from dual;

073

hh ó hh12 ó hh24 La hora en formato 12h. o 24h. select to_char(sysdate,'hh') from dual;

12

mi Los minutos de la hora. select to_char(sysdate,'mi') from dual;

15

ss ó sssss Los segundos dentro del minuto, o desde las 0 horas.

select to_char(sysdate,'sssss') from dual;

44159

Máscaras de Formato de Caracteres

Formato Cometido Ejemplo Resultado

syear ó year Año en Inglés select to_char(sysdate,'syear) from dual;

nineteen ninety-seven

month o mon Nombre del mes o su abreviatura de tres letras.

select to_char(sysdate,'month') from dual;

march

day ó dy Nombre del día de la semana o su abreviatura de tres letras.

select to_char(sysdate,'day') from dual;

friday

a.m. ó p.m. El espacio del día. select to_char(sysdate,'a.m.') from dual;

p.m.

b.c. ó a.d. Indicador del año respecto al del nacimiento de Cristo.

select to_char(sysdate,'b.c.') from dual;

a.d.

Otras Funciones

Función Cometido Ejemplo Resultado

DECODE(var, val1, cod1, val2, cod2, ..., defecto)

Convierte el valor de var, de acuerdo con la codificación.

select decode(oficio, 'Presidente', 'P', 'Director', 'D', 'X') from emp;

P, D, X, ...

GREATEST(exp1, exp2, ...) Devuelve el mayor valor de una lista.

sin ejemplo. sin ejemplo.

LEAST(cad,fmto) Devuelve el menor valor de una lista.

sin ejemplo. sin ejemplo.

NVL(val, exp) Devuelve la expresión exp si val es NULL, y val si en otro caso.

select salario+nvl(comision,0) from emp;

450000, 350000, ...

Funciones de Agrupamiento

Función Cometido Ejemplo

COUNT(col) Cuenta el número de filas agrupadas. select count(nombre),oficio from emp group by oficio;

AVG(col) Calcula el valor medio de todos los valores de la columna col.

select avg(salario),oficio from emp group by oficio;

MAX(col) Calcula el valor máximo de todos los valores de la columna col.

select max(salario),oficio from emp group by oficio;

MIN(col) Calcula el valor mínimo de todos los valores de la columna col.

select min(salario),oficio from emp group by oficio;

SUM(col) Calcula la suma de los valores de la columna col. select sum(salario), oficio from emp group by oficio;

STDDEV(col) Calcula la desviación típica de los valores de la columna col sin tener en cuenta los valores nulos.

select stddev(salario), oficio from emp group by oficio;

VARIANCE(col) Calcula la varianza de los valores de la columna col sin tener en cuenta los valores nulos.

select variance(salario), oficio from emp group by oficio;

Hay que tener en cuenta que los valores nulos no participan en el cálculo de las funciones de conjuntos.

Bibliografía

Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Práctica 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 ENAME SAL New Salary--------- ---------- --------- ---------- 7839 KING 5000 5750 7788 SCOTT 3000 3450 7902 FORD 3000 3450 7566 JONES 2975 3421.25 7698 BLAKE 2850 3277.5 7782 CLARK 2450 2817.5 7499 ALLEN 1600 1840 7844 TURNER 1500 1725 7934 MILLER 1300 1495 7521 WARD 1250 1437.5 7654 MARTIN 1250 1437.5 7876 ADAMS 1100 1265 7900 JAMES 950 1092.5 7369 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 ENAME SAL New Salary Increase--------- ---------- --------- ---------- --------- 7839 KING 5000 5750 750 7788 SCOTT 3000 3450 450 7902 FORD 3000 3450 450 7566 JONES 2975 3421.25 446.25 7698 BLAKE 2850 3277.5 427.5 7782 CLARK 2450 2817.5 367.5 7499 ALLEN 1600 1840 240

7844 TURNER 1500 1725 225 7934 MILLER 1300 1495 195 7521 WARD 1250 1437.5 187.5 7654 MARTIN 1250 1437.5 187.5 7876 ADAMS 1100 1265 165 7900 JAMES 950 1092.5 142.5 7369 SMITH 800 920 120

14 rows selected.

5. Display the employee’s 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 HIREDATE REVIEW---------- --------- ------------------------------------------KING 17-NOV-81 Monday, the Twenty-Fourth of May, 1982BLAKE 01-MAY-81 Monday, the Second of November, 1981CLARK 09-JUN-81 Monday, the Fourteenth of December, 1981JONES 02-APR-81 Monday, the Fifth of October, 1981MARTIN 28-SEP-81 Monday, the Twenty-Ninth of March, 1982ALLEN 20-FEB-81 Monday, the Twenty-Fourth of August, 1981TURNER 08-SEP-81 Monday, the Fifteenth of March, 1982JAMES 03-DEC-81 Monday, the Seventh of June, 1982WARD 22-FEB-81 Monday, the Twenty-Fourth of August, 1981FORD 03-DEC-81 Monday, the Seventh of June, 1982SMITH 17-DEC-80 Monday, the Twenty-Second of June, 1981SCOTT 09-DEC-82 Monday, the Thirteenth of June, 1983ADAMS 12-JAN-83 Monday, the Eighteenth of July, 1983MILLER 23-JAN-82 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 187SCOTT 188MILLER 251JAMES 252FORD 252KING 253MARTIN 254TURNER 255CLARK 258BLAKE 259JONES 260ALLEN 262WARD 262SMITH 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,400ALLEN earns $1,600 monthly but wants $4,800WARD earns $1,250 monthly but wants $3,750JONES earns $2,975 monthly but wants $8,925MARTIN earns $1,250 monthly but wants $3,750BLAKE earns $2,850 monthly but wants $8,550CLARK earns $2,450 monthly but wants $7,350SCOTT earns $3,000 monthly but wants $9,000KING earns $5,000 monthly but wants $15,000TURNER earns $1,500 monthly but wants $4,500ADAMS earns $1,100 monthly but wants $3,300JAMES earns $950 monthly but wants $2,850FORD earns $3,000 monthly but wants $9,000MILLER 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 SALARY---------- ---------------SMITH $$$$$$$$$$$$800ALLEN $$$$$$$$$$$1600WARD $$$$$$$$$$$1250JONES $$$$$$$$$$$2975MARTIN $$$$$$$$$$$1250BLAKE $$$$$$$$$$$2850CLARK $$$$$$$$$$$2450SCOTT $$$$$$$$$$$3000KING $$$$$$$$$$$5000TURNER $$$$$$$$$$$1500ADAMS $$$$$$$$$$$1100JAMES $$$$$$$$$$$$950FORD $$$$$$$$$$$3000MILLER $$$$$$$$$$$1300

14 rows selected.

9. Write a query that will display the employee’s 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 5Martin 6Adams 5James 5Miller 6

6 rows selected.

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 HIREDATE DAY--------- --------- ----------MARTIN 28-SEP-81 MONDAYCLARK 09-JUN-81 TUESDAYKING 17-NOV-81 TUESDAYTURNER 08-SEP-81 TUESDAYSMITH 17-DEC-80 WEDNESDAYADAMS 12-JAN-83 WEDNESDAYJONES 02-APR-81 THURSDAYFORD 03-DEC-81 THURSDAYSCOTT 09-DEC-82 THURSDAYJAMES 03-DEC-81 THURSDAYALLEN 20-FEB-81 FRIDAYBLAKE 01-MAY-81 FRIDAYMILLER 23-JAN-82 SATURDAYWARD 22-FEB-81 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 COMM----------- ---------------SMITH No CommissionALLEN 300WARD 500JONES No CommissionMARTIN 1400BLAKE No CommissionCLARK No CommissionSCOTT No CommissionKING No CommissionTURNER 0ADAMS No CommissionJAMES No CommissionFORD No CommissionMILLER No Commission

14 rows selected.

12. Create a query that displays the employee’s 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 GRADE------------------ ---------------PRESIDENT AMANAGER BANALYST CSALESMAN DCLERK ENone of the above O

Unidad 4 Mostrar datos desde múltiples tablas

Objetivo: El alumno será capaz de utilizar el estatuto SELECT para mas de una tabla, utilizando los diferentes tipos de JOINS.

Sugerencias didácticas

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, enseñar la sintaxis del lenguaje y la finalidad de cada una de ellas.

Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.

Solicitarle la elaboración de programas similares, agregándoles algunas variantes.

Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.

Sugerencias de evaluación

El docente deberá considerar la evaluación, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje, además de los exámenes tradicionales se recomienda se tome en cuenta: participación en clases, elaboración de prácticas en el laboratorio y proyectos.

Bibliografía

Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Práctica 4: Mostrar datos desde múltiples tablas

1. Write a query to display the name, department number and department name for all employees.

ENAME DNAME DEPTNO---------- -------------- ---------SMITH RESEARCH 20ALLEN SALES 30WARD SALES 30JONES RESEARCH 20MARTIN SALES 30BLAKE SALES 30CLARK ACCOUNTING 10SCOTT RESEARCH 20KING ACCOUNTING 10TURNER SALES 30ADAMS RESEARCH 20JAMES SALES 30FORD RESEARCH 20MILLER 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 LOC--------- -------------CLERK CHICAGOMANAGER CHICAGOSALESMAN CHICAGO

3. Write a query to display the employee name, department name and location of all employees who earn a commission.

ENAME DNAME LOC---------- -------------- -------------ALLEN SALES CHICAGOWARD SALES CHICAGOMARTIN SALES CHICAGOTURNER SALES 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 DNAME---------- --------------ALLEN SALESWARD SALESMARTIN SALESBLAKE SALESCLARK ACCOUNTINGADAMS RESEARCHJAMES 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 JOB DEPTNO DNAME---------- --------- --------- --------------SMITH CLERK 20 RESEARCHJONES MANAGER 20 RESEARCHSCOTT ANALYST 20 RESEARCHADAMS CLERK 20 RESEARCHFORD 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 7902ALLEN 7499 BLAKE 7698WARD 7521 BLAKE 7698JONES 7566 KING 7839MARTIN 7654 BLAKE 7698BLAKE 7698 KING 7839CLARK 7782 KING 7839SCOTT 7788 JONES 7566TURNER 7844 BLAKE 7698ADAMS 7876 SCOTT 7788JAMES 7900 BLAKE 7698FORD 7902 JONES 7566MILLER 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 7902ALLEN 7499 BLAKE 7698WARD 7521 BLAKE 7698

JONES 7566 KING 7839MARTIN 7654 BLAKE 7698BLAKE 7698 KING 7839CLARK 7782 KING 7839SCOTT 7788 JONES 7566KING 7839TURNER 7844 BLAKE 7698ADAMS 7876 SCOTT 7788JAMES 7900 BLAKE 7698FORD 7902 JONES 7566MILLER 7934 CLARK 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 Employee Colleague---------- ---------- ---------- 30 JAMES BLAKE 30 JAMES MARTIN 30 JAMES TURNER 30 JAMES WARD 30 TURNER ALLEN 30 TURNER BLAKE 30 TURNER MARTIN 30 TURNER JAMES 30 TURNER WARD 30 WARD ALLEN 30 WARD BLAKE 30 WARD MARTIN 30 WARD JAMES 30 WARD 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? TYPE------------------------------- -------- ------GRADE NUMBERLOSAL NUMBERHISAL NUMBER

ENAME JOB DNAME SAL GRADE---------- --------- -------------- --------- ---------SMITH CLERK RESEARCH 800 1ADAMS CLERK RESEARCH 1100 1JAMES CLERK SALES 950 1WARD SALESMAN SALES 1250 2MARTIN SALESMAN SALES 1250 2

MILLER CLERK ACCOUNTING 1300 2ALLEN SALESMAN SALES 1600 3TURNER SALESMAN SALES 1500 3JONES MANAGER RESEARCH 2975 4BLAKE MANAGER SALES 2850 4CLARK MANAGER ACCOUNTING 2450 4SCOTT ANALYST RESEARCH 3000 4FORD ANALYST RESEARCH 3000 4KING PRESIDENT ACCOUNTING 5000 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 HIREDATE---------- ---------MARTIN 28-SEP-81CLARK 09-JUN-81SCOTT 19-ABR-87KING 17-NOV-81TURNER 08-SEP-81ADAMS 23-MAY-87JAMES 03-DIC-81FORD 03-DIC-81MILLER 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 Emp Hired Manager Mgr Hired---------- --------- ---------- ---------MARTIN 28-SEP-81 BLAKE 01-MAY-81SCOTT 19-ABR-87 JONES 02-ABR-81TURNER 08-SEP-81 BLAKE 01-MAY-81ADAMS 23-MAY-87 SCOTT 19-ABR-87JAMES 03-DIC-81 BLAKE 01-MAY-81FORD 03-DIC-81 JONES 02-ABR-81MILLER 23-ENE-82 CLARK 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 cláusula GROUP BY, excluir registros con la cláusula HAVING.

Sugerencias didácticas

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, enseñar la sintaxis del lenguaje y la finalidad de cada una de ellas.

Solicitar que corrobore la validez del mismo, ejecutándolo en la computadora.

Solicitarle la elaboración de programas similares, agregándoles algunas variantes.

Solicitarle al alumno propuestas de problemas a resolver y que sean significativas para él.

Sugerencias de evaluación

El docente deberá considerar la evaluación, no solo como un medio de medir el aprendizaje, sino como un indicador para enriquecer el proceso enseñanza-aprendizaje, además de los exámenes tradicionales se recomienda se tome en cuenta: participación en clases, elaboración de prácticas en el laboratorio y proyectos.

¿Qué son funciones de grupo?

Las funciones de grupo de valores son aquellas funciones estadísticas, 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 más vieja o más 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) Porcentaje de n valores, ignorando valores nulos

COUNT ({ * | [DISTINTINC | ALL]expr}) Número de registros, donde expr evalúa todo lo distinto de valores nulos

MAX ([DISTINTINC | ALL]expr) Máximo valor de expr, ignorando valores nulos

MIN ([DISTINTINC | ALL]expr) Valor mínimo de expr, ignorando valores nulos

STDDEV ([DISTINTINC | ALL]x) Desviación estándar de n

SUM ([DISTINTINC | ALL]n) Suma de los valores de n

VARIANCE ([DISTINTINC | ALL]x) Variante de n

Usando funciones de grupo

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

o DISTINCT hace que la función considere sólo 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 numéricos.

Estas funciones miden los extremos de los datos.

SELECT AVG (sal), SUM (sal) FROM empWHERE job LIKE ‘SALES&’;

AVG (SAL) SUM (SAL)--------- ------------- 1400 5600

AVG, SUM, VARIANCE, STDDEV pueden ser solamente usados para datos numéricos.

Utilizando las funciones MIN y MAX para cualquier tipo de datos

SELECT MAX (sal), MIN (sal) FROM empWHERE job LIKE ‘SALES&’;

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

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

SELECT MIN (hiredate), MAX (hiredata)FROM emp;

MIN (HIRED MAX (HIRED---------- ----------17-DEC-80 12-JAN-83

Aquí se muestra el nombre del empleado en orden alfabético, el primero y el último en ese orden.

SELECT MAX (ename), MIN (ename) FROM emp;

MAX(ENAME) MIN (ENAME)--------------- --------------WARDS ADAMS

o La desviación estándar STDDEV y la varianza VARIANCE tienen su significado estadístico 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 función COUNT tiene dos formatos;

a) COUNT (*) : Regresa el número de registros en una tabla, incluyendo registros duplicados y registros con valores nulos en cualquiera de las comunas.

SELECT COUNT (*)FROM empWHERE deptno = 30;

COUNT (*)------------

6

b) COUNT (expr): Regresa el número de registros no nulos en la columna identificados por una expresión.

SELECT COUNT (*)FROM empWHERE deptno = 30;

COUNT (*)------------

4

Por ejemplo, podemos desplegar el número 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 opción DISTINCT frente a la opción ALL.

Por ejemplo:

COUNT ([ DISTINCT | ALL ] value)

SELECT COUNT (DISTINCT (deptno)) FROM emp;

Número distinto de departamentos

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

DISTINCT fuerza a COUNT a contar solamente el número de departamentos únicos, cuando COUNT se usa sobre deptno sin forzarlo a que busque nombres diferentes se encuentran 14.

Esto también muestra una propiedad única entre funciones de grupos para COUNT: puede trabajar sobre columnas de caracteres. No hace cálculos 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 cuántas 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 cálculo las funciones se basan sólo en los registros de la tabla donde hay un valor válido almacenado en determinada columna. COUNT es un caso especial, cuenta las filas de una columna, pero no contabiliza los NULL.

SELECT AVG (comm) FROM emp;

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

La función NVL obliga a las funciones de grupo a incluir valores nulos.

SELECT AVG (NVL (comm,0) ) FROM 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 información. En ocasiones necesitaremos dividir la tabla en pequeños grupos de información figura (3.1). Esto lo podemos realizar con la cláusula GROUP BY.

SELECT column, group_function (column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];

Group_by_expression especifica las columnas de las cuales se determinarán los valores para la agrupación de registros

Podemos usar la cláusula GROUP BY para dividir los registros de una tabla en grupos. Entonces podemos utilizar las funciones de grupo para regresar información resumida para cada grupo.

o Si incluimos en una función de grupo en una cláusula SELECT no podemos seleccionar resultados individuales, a menos que la columna individual aparezca en la cláusula GROUP BY.

o Usando la cláusula WHERE, podemos excluir registros antes de dividirlos en grupos.

o Debemos incluir las columnas en la cláusula GROUP BY, no podemos usar el alias de las columnas en esta cláusula.

o Los registros de las columnas son seleccionados de manera ascendente por default, incluso en la lista GROUP BY.

DEPTNO AVG (SAL)------ ---------- 2916.66672175

30 1566.6667

Porcentaje de salario en la

tabla EMP para cada

departamento

DEPNTO SAL------- ----------

24505000 30020 8001100300030002975160028501250 950150030 1250

Todas las columnas en la lista SELECT que no están en las funciones de grupo deben estar en la cláusula GROUP BY

SELECT deptno, AVG (sal)FROM empGROUP BY deptno;

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

Cuando usamos la cláusula GROUP BY nos aseguramos que todas las columnas en la lista SELECT que no están incluidas en las funciones de grupo estén incluidas en la cláusula GROUP BY. En el ejemplo anterior se despliega el número de departamento y el porcentaje de salario para cada departamento. Analicemos como es que el estatuto SELECT conteniendo la cláusula GROUP BY, es evaluado:

o La cláusula SELECT especifica las columnas a ser recuperadas

La columna del número de departamento de la tabla EMP.

El porcentaje de todos los salarios en el grupo especificado en la cláusula GROUP BY

o La cláusula FROM especifica las tablas que la base de datos debe accesar: la tabla EMP.

o La cláusula GROUP BY especifica como deben ser agrupados los registros. Los registros son agrupados por número de departamento, así que la función AVG es aplicada a la columna salario calcular

Sin embargo, la columna que utiliza la cláusula GROUP BY no tiene que estar en la sentencia SELECT. No obstante, sin el número de departamento el resultado no significa mucho.

SELECT AVG (sal)FROM empGROUP BY deptno;

AVG (SAL)---------2916.66672175 1566.6667

Agrupando mediante más 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 empGROUP BY deptno, job;

DEPTNO JOB SUM (SAL)-------- --------- ----------

10 CLERK 130010 MANAGER 245010 PRESIDENT 500020 ANALYST 600020 CLERK 1900

.....

9 filas seleccionadas

Podemos regresar resultados para grupos y subgrupos listado más de una columna con la cláusula GROUP BY. También podemos determinar el orden de nuestra selección, por el orden de las columnas en la cláusula GROUP BY, analicemos como es que el estatuto SELECT del ejemplo anterior, y que contiene la cláusula GROUP BY, es evaluado:

o SELECT especifica las columnas recuperadas.

Número de departamento en la tabla EMP (empleado).

Puesto desempeñado contenido dentro de la tabla EMP.

La suma de todos los salarios en el grupo que se especifico en la cláusula GROUP BY

o La cláusula FROM especifica las tablas que la base de datos debe accesar.

o La cláusula GROUP BY especifica como se deben agrupar los registros

Primero, los registros son agrupados por el número de departamento.

Segundo, dentro del grupo de número de departamento, los registros son agrupados, por el nombre del puesto.

Así que la función SUM es aplicada a la columna salario para todos los puesto (job) dentro de cada grupo de número de departamento.

Consultas ilegales usando funciones de grupo

Cualquier columna o expresión en la lista SELECT que no está agregada a una función debe estar en la cláusula GROUP BY. Cada vez que usemos una mezcla de objetos individuales y funciones de grupo, en el mismo estatuto SELECT, debemos incluir la cláusula GROUP BY que especifica el punto individual. Si la cláusula GROUP BY está omitida, ocurrirá un mensaje de error indicando “not a single function ” y un asterisco (*) señalando a la columna olvidada en la cláusula.

SELECT deptno, COUNT (ENAME)FROM emp;

SELECT deptno, COUNT (ENAME) *

ERROR at line 1:ORA-00937: not a single–group function

La solución a este problema es añadiendo la cláusula GROUP BY. Cualquier columna o expresión el la lista SELECT que no sea una función agregada debe estar en la cláusula SELECT;

SELECT deptno, COUNT (ENAME)FROM empGROUP BY deptno;

DEPTNO COUNT (ENAME)------ -------------10 320 530 6

Otra forma de consulta ilegal, es usar la cláusula WHERE para restringir grupos, esta cláusula no puede ser usada para restringir grupos.

SELECT deptno, AVG(sal)FROM empWHERE AVG (sal) > 2000GROUP BY deptno;WHERE AVG (sal) > 2000

*ERROR at line 3:ORA-00937: group function is not allowed here

Podemos corregir este problema mediante el uso de la cláusula HAVING para restringir grupos

SELECT deptno, AVG(sal)FROM empGROUP BY deptnoHAVING AVG (sal) > 2000;

DEPTNO AVG (SAL)------ ------------ 10 2916.6667 20 2175

En la misma manera que usamos la cláusula WHERE para restringir los registros que queremos seleccionar, podemos utilizar la cláusula HAVING para restringir grupos. De esta manera los registros son agrupados, y por lo tanto las funciones de grupo pueden ser aplicadas

SELECT column, group_functionFROM table [WHERE condition] [GRUOP BY group_by_expression] [HAVING group_condition] [ORDER BY column];

group_condition restringe les grupos de registros regresando a aquellos grupos para los cuales la condición especificada es verdadera.

Utilizamos la cláusula HAVING para especificar cuales grupos serán despegados. El servidor Oracle desarrolla los siguientes pasos cuando utilizamos la cláusula HAVING:

o Los registros son agrupados

o Las funciones de grupo son aplicadas al grupo.

o Los grupos que igualan el criterio de la cláusula HAVING son desplegados

SELECT deptno, max (sal)FROM empGROUP BY deptnoHAVING max (sal) > 2900;

DEPTNO MAX (SAL)------ ------------- 10 5000 20 3000

Podemos usar la cláusula 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 cláusula GROUP BY así como la cláusula HAVING.

Funciones de grupo anidadas.

SELECT max(avg (sal) )FROM empGROUP BY deptno;

MAX (AVG (SAL) )----------------

2916.6667

Bibliografía

Manual de introducción a SQL y PL-SQL Oracle, ORACLE UNIVERSITY.

Práctica 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 3000CLERK 1300 800 4150 1038MANAGER 2975 2450 8275 2758PRESIDENT 5000 5000 5000 5000SALESMAN 1600 1250 5600 1400

6. Write a query to display the number of people whit the same job.

JOB People--------- ----------ANALYST 2CLERK 4MANAGER 3PRESIDENT 1SALESMAN 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 LOC Employees Salary-------------- ------------- ------------------- ---------ACCOUNTING NEW YORK 3 2916.67RESEARCH DALLAS 5 2175SALES 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 6000CLERK 1300 1900 950 4150MANAGER 2450 2975 2850 8275PRESIDENT 5000 5000SALESMAN 5600 5600