Está en la página 1de 51

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, sal


2 FROM emp;

ENAME HIREDATE SAL


--------- -------- ---------
SMITH 17/12/80 800
ALLEN 20/02/81 1600
WARD 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 1100
ALLEN 1600 1900
WARD 1250 1550
JONES 2975 3275
MARTIN 1250 1550
BLAKE 2850 3150
CLARK 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 9700
ALLEN 1600 19300
WARD 1250 15100
JONES 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 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 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 _ANUAL
2 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
-------------------
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 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 deptno
2 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 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
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] Guarda el contenido actual del buffer de SQL a un archivo. Utilice
APPEND para agregarlo a un archivo existente. La extensión de
[REP[lace] | APPE[END]]
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| Almacena los resultados de la consulta en un archive. OFF cierra
OUT] 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 DATE
SAL 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
---------
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 # 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,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 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, deptno
2 FROM emp
3 WHERE job= ´SALESMAN´;

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-1995’
WHERE sal>=1500
WHERE 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 ENAME, SAL, HIREDATE
2 FROM emp
3 WHERE HIREDATE BETWEEN ’09-may-1991’
4 OR ’17-jun-1991’;

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 ENAME, SAL
2 FROM EMP
3 WHERE SAL IN (800,1500,3000);

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 Ename
2 FROM emp
3 WHERE Ename 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, mgr
2 FROM emp
3 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 emp
3 WHERE job NOT IN ('CLERK','ANALYST');

ENAME JOB
---------- ---------
ALLEN SALESMAN
WARD SALESMAN
JONES MANAGER
MARTIN SALESMAN
BLAKE MANAGER
CLARK MANAGER
KING PRESIDENT
TURNER 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 1600
WARD SALESMAN 1250
MARTIN SALESMAN 1250
KING PRESIDENT 5000
TURNER 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>1500
SQL> /

ENAME JOB SAL


---------- --------- ---------
ALLEN SALESMAN 1600
KING 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 ENAME,SAL,JOB
2 FROM emp
3 ORDER BY HIREDATE 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 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 JOB HIREDATE


---------- --------- ---------
ALLEN SALESMAN 20-FEB-81
WARD SALESMAN 22-FEB-81
JONES MANAGER 02-ABR-81
BLAKE 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 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 JOB SAL


---------- --------- ---------
SMITH CLERK 800
ADAMS CLERK 1100
JAMES CLERK 950
MILLER 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
Calcula el valor entero inmediatamente
CEIL(n) select ceil(15.7) from dual; 16
superior o igual a n.
Calcula el valor entero inmediatamente
FLOOR(n) select floor(15.7) from dual; 15
inferior o igual a n.
Calcula el resto resultante de dividir m
MOD(m,n) select mod(11,4) from dual; 3
entre n.
POWER(m,n) Calcula la potencia n-esima de m. select power(3,2) from dual; 9
Calcula el redondeo de m a n
decimales. Si n<0 el redondeo se select round(123.456,1) from
ROUND(m,n) 123.5
efectúa a por la izquierda del punto dual;
decimal.
SQRT(n) Calcula la raíz cuadrada de n. select sqrt(4) from dual; 2
Calcula m truncado a n decimales (n select trunc(123.456,1) from
TRUNC(m,n) 123.4
puede ser negativo). dual;
Calcula el signo de n, devolviendo -1 si
SIGN(n) select sign(-12) from dual; -1
n<0, 0 si n=0 y 1 si n>0.
Funciones de Cadenas de Caracteres
Función Cometido Ejemplo Resultado
Devuelve el carácter cuyo valor select chr(65) from
CHR(n) A
codificado es n. dual;
Devuelve el valor ascii de cad. select ascii('A') from
ASCII(cad) 65
dual;
Devuelve cad1 concatenada con cad2. select
Cano es
CONCAT(cad1, cad2) Esta función es equivalente al operador concat(concat(nombre,'
Presidente, etc.
||. es '),oficio) from emp;
Devuelve la cadena cad con todas sus select
LOWER(cad) letras convertidas a minúsculas. lower('MinUsCulAs') minusculas
from dual;
Devuelve la cadena cad con todas sus select
UPPER(cad) letras convertidas a mayúsculas. upper('maYuSCulAs') MAYUSCULAS
from dual;
Devuelve cad con el primer caracter en select initcap('isabel')
INITCAP(cad) Isabel
mayúsculas. from dual;
Devuelve cad1 con longitud n, y
select lpad('P',5,'*')
LPAD(cad1,n,cad2) ajustada a la derecha, rellenando por la ****P
from dual;
izquierda con cad2.
Devuelve cad1 con longitud n, y
select rpad('P',5,'*')
RPAD(cad1,n,cad2) ajustada a la izquierda, rellenando por P****
from dual;
la derecha con cad2.
Devuelve cad en la que cada select
REPLACE(cad,ant,nue) ocurrencia de la cadena ant ha sido replace('digo','i','ie') diego
sustituida por la cadena nue. from dual;
Devuelve la subcadena de cad select
SUBSTR(cad,m,n) compuesta por n caracteres a partir de substr('ABCDEFG',3,2) CD
la posición m. from dual;
Devuelve la longitud de cad. select length('cadena')
LENGTH(cad) 6
from dual;
Funciones de Manejo de Fechas
Función Cometido Ejemplo Resultado

Devuelve la fecha y hora


SYSDATE select sysdate from dual; 14-MAR-97
actuales.

Devuelve la fecha d select add_months(sysdate,4)


ADD_MONTHS(d,n) 14-JUL-97
incrementada en n meses. from dual;

Devuelve la fecha del select last_day(sysdate) from


LAST_DAY(d) 31-MAR-97
último día del mes de d. dual;

Devuelve la diferencia en select


MONTHS_BETWEEN(d1, d2) 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,
NEXT_DAY(d,cad) primer día de la semana cad 16-MAR-97
'sunday') from dual;
después de la fecha d.

Funciones de Conversión de Tipos


Función Cometido Ejemplo Resultado

Convierte la cadena cad a


un número, opcionalmente select to_number('12345')
TO_NUMBER(cad,fmto) 124345
de acuerdo con el formato from dual;
fmto.

Convierte la fecha d a una


cadena de caracteres, select to_char(sysdate) from
TO_CHAR(d, fmto) '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')
TO_DATE(cad,fmto) 01-JAN-97
opcionalmente de acuerdo from dual;
con el formato fmto.

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

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

y,yyy ó sy,yyy Año con coma, con o sin signo. select 1,997
to_char(sysdate,'y,yyy')
from dual;

Año sin signo con cuatro, tres, dos o un select to_char(sysdate,'yyyy')


yyyy ó yyy ó yy ó y 1997
dígitos. from dual;

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

Número de la semana del año o del select to_char(sysdate,'ww')


ww ó w 11
mes. from dual;

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

Número del día del año, del mes o de la select to_char(sysdate,'ddd')


ddd ó dd ó d 073
semana. from dual;

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

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

Los segundos dentro del minuto, o select to_char(sysdate,'sssss')


ss ó sssss 44159
desde las 0 horas. from dual;

Máscaras de Formato de Caracteres


Formato Cometido Ejemplo Resultado

select to_char(sysdate,'syear) nineteen


syear ó year Año en Inglés
from dual; ninety-seven

Nombre del mes o su abreviatura de select to_char(sysdate,'month')


month o mon march
tres letras. from dual;

Nombre del día de la semana o su select to_char(sysdate,'day')


day ó dy friday
abreviatura de tres letras. from dual;

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

Indicador del año respecto al del select to_char(sysdate,'b.c.')


b.c. ó a.d. a.d.
nacimiento de Cristo. from dual;
Otras Funciones
Función 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;
codificación.

Devuelve el mayor valor


GREATEST(exp1, exp2, ...) sin ejemplo. sin ejemplo.
de una lista.

Devuelve el menor valor


LEAST(cad,fmto) sin ejemplo. sin ejemplo.
de una lista.

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

Funciones de Agrupamiento
Función Cometido Ejemplo

select count(nombre),oficio from


COUNT(col) Cuenta el número de filas agrupadas.
emp group by oficio;

Calcula el valor medio de todos los valores de la select avg(salario),oficio from emp
AVG(col)
columna col. group by oficio;

Calcula el valor máximo de todos los valores de la select max(salario),oficio from emp
MAX(col)
columna col. group by oficio;

Calcula el valor mínimo de todos los valores de la select min(salario),oficio from emp
MIN(col)
columna col. group by oficio;

select sum(salario), oficio from


SUM(col) Calcula la suma de los valores de la columna col.
emp group by oficio;

Calcula la desviación típica de los valores de la select stddev(salario), oficio from


STDDEV(col)
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
VARIANCE(col)
sin tener en cuenta los valores nulos. 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, 1982
BLAKE 01-MAY-81 Monday, the Second of November, 1981
CLARK 09-JUN-81 Monday, the Fourteenth of December, 1981
JONES 02-APR-81 Monday, the Fifth of October, 1981
MARTIN 28-SEP-81 Monday, the Twenty-Ninth of March, 1982
ALLEN 20-FEB-81 Monday, the Twenty-Fourth of August, 1981
TURNER 08-SEP-81 Monday, the Fifteenth of March, 1982
JAMES 03-DEC-81 Monday, the Seventh of June, 1982
WARD 22-FEB-81 Monday, the Twenty-Fourth of August, 1981
FORD 03-DEC-81 Monday, the Seventh of June, 1982
SMITH 17-DEC-80 Monday, the Twenty-Second of June, 1981
SCOTT 09-DEC-82 Monday, the Thirteenth of June, 1983
ADAMS 12-JAN-83 Monday, the Eighteenth of July, 1983
MILLER 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 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 SALARY
---------- ---------------
SMITH $$$$$$$$$$$$800
ALLEN $$$$$$$$$$$1600
WARD $$$$$$$$$$$1250
JONES $$$$$$$$$$$2975
MARTIN $$$$$$$$$$$1250
BLAKE $$$$$$$$$$$2850
CLARK $$$$$$$$$$$2450
SCOTT $$$$$$$$$$$3000
KING $$$$$$$$$$$5000
TURNER $$$$$$$$$$$1500
ADAMS $$$$$$$$$$$1100
JAMES $$$$$$$$$$$$950
FORD $$$$$$$$$$$3000
MILLER $$$$$$$$$$$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 5
Martin 6
Adams 5
James 5
Miller 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 MONDAY
CLARK 09-JUN-81 TUESDAY
KING 17-NOV-81 TUESDAY
TURNER 08-SEP-81 TUESDAY
SMITH 17-DEC-80 WEDNESDAY
ADAMS 12-JAN-83 WEDNESDAY
JONES 02-APR-81 THURSDAY
FORD 03-DEC-81 THURSDAY
SCOTT 09-DEC-82 THURSDAY
JAMES 03-DEC-81 THURSDAY
ALLEN 20-FEB-81 FRIDAY
BLAKE 01-MAY-81 FRIDAY
MILLER 23-JAN-82 SATURDAY
WARD 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 Commission
ALLEN 300
WARD 500
JONES No Commission
MARTIN 1400
BLAKE No Commission
CLARK No Commission
SCOTT No Commission
KING No Commission
TURNER 0
ADAMS No Commission
JAMES No Commission
FORD No Commission
MILLER 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 A
MANAGER B
ANALYST C
SALESMAN D
CLERK E
None 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 20
ALLEN SALES 30
WARD SALES 30
JONES RESEARCH 20
MARTIN SALES 30
BLAKE SALES 30
CLARK ACCOUNTING 10
SCOTT RESEARCH 20
KING ACCOUNTING 10
TURNER SALES 30
ADAMS RESEARCH 20
JAMES SALES 30
FORD RESEARCH 20
MILLER 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 CHICAGO
MANAGER CHICAGO
SALESMAN 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 CHICAGO
WARD SALES CHICAGO
MARTIN SALES CHICAGO
TURNER 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 SALES
WARD SALES
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
ADAMS RESEARCH
JAMES 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 RESEARCH
JONES MANAGER 20 RESEARCH
SCOTT ANALYST 20 RESEARCH
ADAMS CLERK 20 RESEARCH
FORD 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 7654 BLAKE 7698
BLAKE 7698 KING 7839
CLARK 7782 KING 7839
SCOTT 7788 JONES 7566
KING 7839
TURNER 7844 BLAKE 7698
ADAMS 7876 SCOTT 7788
JAMES 7900 BLAKE 7698
FORD 7902 JONES 7566
MILLER 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 NUMBER
LOSAL NUMBER
HISAL NUMBER

ENAME JOB DNAME SAL GRADE


---------- --------- -------------- --------- ---------
SMITH CLERK RESEARCH 800 1
ADAMS CLERK RESEARCH 1100 1
JAMES CLERK SALES 950 1
WARD SALESMAN SALES 1250 2
MARTIN SALESMAN SALES 1250 2
MILLER CLERK ACCOUNTING 1300 2
ALLEN SALESMAN SALES 1600 3
TURNER SALESMAN SALES 1500 3
JONES MANAGER RESEARCH 2975 4
BLAKE MANAGER SALES 2850 4
CLARK MANAGER ACCOUNTING 2450 4
SCOTT ANALYST RESEARCH 3000 4
FORD ANALYST RESEARCH 3000 4
KING 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-81
CLARK 09-JUN-81
SCOTT 19-ABR-87
KING 17-NOV-81
TURNER 08-SEP-81
ADAMS 23-MAY-87
JAMES 03-DIC-81
FORD 03-DIC-81
MILLER 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-81
SCOTT 19-ABR-87 JONES 02-ABR-81
TURNER 08-SEP-81 BLAKE 01-MAY-81
ADAMS 23-MAY-87 SCOTT 19-ABR-87
JAMES 03-DIC-81 BLAKE 01-MAY-81
FORD 03-DIC-81 JONES 02-ABR-81
MILLER 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)as promedio, SUM (sal)


FROM emp
WHERE 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 emp
WHERE 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 emp
WHERE 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 emp
WHERE 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.

DEPNTO SAL
------- ----------
2450
5000
300
20 800 Porcentaje de
1100 salario en la DEPTNO AVG (SAL)
3000 ------ ----------
tabla EMP para 2916.6667
3000
2975 cada 2175
1600 departamento 30 1566.6667
2850
1250
950
1500
30 1250

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.
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) as ”promedio”
FROM emp
GROUP 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 emp
GROUP BY deptno;

AVG (SAL)
---------
2916.6667
2175
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 emp
GROUP BY deptno, job;
DEPTNO JOB SUM (SAL)
-------- --------- ----------
10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 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 emp
GROUP BY deptno;

DEPTNO COUNT (ENAME)


------ -------------
10 3
20 5
30 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 emp
WHERE AVG (sal) > 2000
GROUP 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 emp
GROUP BY deptno
HAVING 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_function
FROM 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 emp
GROUP BY deptno
HAVING 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 emp
GROUP 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 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 LOC Employees Salary


-------------- ------------- ------------------- ---------
ACCOUNTING NEW YORK 3 2916.67
RESEARCH DALLAS 5 2175
SALES 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