Sql-A
Sql-A
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.
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.
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
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 12*SAL+COMM
---------- -----------
KING
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 ] ] ]
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.
SQL> SELECT *
2 FROM salgrade;
5. There are four coding errors in this statement. Can you identify them?
salary * 12 ANNUAL_SALARY
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)
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)
14 rows selected.
JOB
---------
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
9. Load p1q7.sql into the SQL buffer. Name the column headings Emp #, Employee,
Job, and Hire date, respectively. Run your query.
14 rows selected.
10. Display the name concatenated with the job, separated by a comma and space, and
name the column Employee and Title.
14 rows selected.
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=’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>=1500
WHERE ename=’SMITH’
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_date
2 FROM s_emp
3 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_id
2 FROM s_dept
3 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_name
2 FROM s_emp
3 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, 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';
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> /
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 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.
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.
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
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.
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.
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
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;
select to_char(sysdate,'q')
q Trimestre. 1
from dual;
select to_char(sysdate,'mm')
mm Número del mes. 03
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;
select to_char(sysdate,'a.m.')
a.m. ó p.m. El espacio del día. p.m.
from dual;
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 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
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;
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.
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.
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”.
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.
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.
14 rows selected.
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.
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.
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.
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
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
13 rows selected.
7. Modify p4q6.sql to display all employees including King , who has no manager
.Resave as p4q7.sql. Run p4q7.sql
14 rows selected.
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.
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
14 rows selected.
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.
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.
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&’;
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;
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;
COUNT (*)
------------
6
COUNT (*)
------------
4
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;
AVG (COMM)
----------
550
La función NVL obliga a las funciones de grupo a incluir valores nulos.
SELECT AVG (NVL (comm,0) )
FROM emp;
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
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)
FROM emp
GROUP BY deptno;
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
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;
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;
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];
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
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.
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
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
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.
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.