Download Administración de Base de Datos

Document related concepts

SQL wikipedia , lookup

Expresiones multidimensionales wikipedia , lookup

Lenguaje de manipulación de datos wikipedia , lookup

Transcript
UNIVERSIDAD CENTRAL DEL ECUADOR
FACULTADA DE INGENIERÍA, CIENCIAS
FÍSICAS Y MATEMÁTICAS
ESCUELA DE CIENCIAS
ADMINISTRACIÓN DE BASE DE DATOS Y
SISTEMÁS OPERATIVOS
TRABAJO
PAUL JIMÉNEZ
Administración de Base de Datos
Contenido
Modelo Entidad Relación .................................................................................................................... 3
Base teórica y conceptual ............................................................................................................... 3
Entidad ........................................................................................................................................ 3
Atributos...................................................................................................................................... 3
Claves .............................................................................................................................................. 4
Entidades y Relaciones .................................................................................................................... 5

Entidad ................................................................................................................................ 5

Relación ............................................................................................................................... 6
Algunos ejemplos de relaciones...................................................................................................... 6
Tipos de datos en Oracle ................................................................................................................... 11
Bases de datos distribuidas ............................................................................................................... 14
Consideraciones Generales ........................................................................................................... 15
Estructura de Base de Datos Distribuidas ..................................................................................... 15
SELECT ............................................................................................................................................... 16
Ejemplos de algunas consultas...................................................................................................... 16
Página 2
Administración de Base de Datos
Modelo Entidad Relación
Un diagrama o modelo entidad-relación (a veces denominado por sus siglas, E-R "Entity
relationship", o, "DER" Diagrama de Entidad Relación) es una herramienta para el modelado de
datos de un sistema de información. Estos modelos expresan entidades relevantes para un
sistema de información así como sus interrelaciones y propiedades.
Base teórica y conceptual
El modelo de datos entidad-relación está basado en una percepción del mundo real que consta de
una colección de objetos básicos, llamados entidades, y de relaciones entre esos objetos.
Entidad
Representa una “cosa” u "objeto" del mundo real con existencia independiente, es decir, se
diferencia unívocamente de cualquier otro objeto o cosa, incluso siendo del mismo tipo, o una
misma entidad.
Algunos Ejemplos:

Una persona. (Se diferencia de cualquier otra persona, incluso siendo gemelos).

Un automóvil. (Aunque sean de la misma marca, el mismo modelo,..., tendrán atributos
diferentes, por ejemplo, el número de bastidor).

Una casa (Aunque sea exactamente igual a otra, aún se diferenciará en su dirección).
Una entidad puede ser un objeto con existencia física como: una persona, un animal, una casa,
etc. (entidad concreta); o un objeto con existencia conceptual como: un puesto de trabajo, una
asignatura de clases, un nombre,etc. (entidad abstracta).
Una entidad está descrita y se representa por sus características o atributos. Por ejemplo, la
entidad Persona puede llevar consigo las características: Nombre, Apellido, Género, Estatura,
Peso, Fecha de nacimiento, etc...
Atributos
Los atributos son las características que definen o identifican a una entidad. Estas pueden ser
muchas, y el diseñador solo utiliza o implementa las que considere más relevantes. Los atributos
son las propiedades que describen a cada entidad en un conjunto de entidades.
En un conjunto de entidades, cada entidad tiene valores específicos asignados para cada uno de
sus atributos, de esta forma, es posible su identificación unívoca.
Ejemplos:
A la colección de entidades «alumnos», con el siguiente conjunto de atributos en común, (id,
nombre, edad, semestre), pertenecen las entidades:
Página 3
Administración de Base de Datos

(1, Sofía, 38 años, 2)

(2, Josefa, 19 años, 5)

(3, Carlos, 20 años, 2)

...
Cada una de las entidades pertenecientes a este conjunto se diferencia de las demás por el valor
de sus atributos. Nótese que dos o más entidades diferentes pueden tener los mismos valores
para algunos de sus atributos, pero nunca para todos.
En particular, los atributos identificativos son aquellos que permiten diferenciar a una instancia
de la entidad de otra distinta. Por ejemplo, el atributo identificativo que distingue a un alumno de
otro es su número de id.
Para cada atributo, existe un dominio del mismo, este hace referencia al tipo de datos que será
almacenado o a restricciones en los valores que el atributo puede tomar (cadenas de caracteres,
números, solo dos letras, solo números mayores que cero, solo números enteros...).
Cuando algún atributo correspondiente a una entidad no tiene un valor determinado, recibe
el valor nulo, bien sea porque no se conoce, porque no existe o porque no se sabe nada al
respecto del mismo.
Claves
Es un subconjunto del conjunto de atributos comunes en una colección de entidades, que permite
identificar unívocamente cada una de las entidades pertenecientes a dicha colección. Asimismo,
permiten distinguir entre sí las relaciones de un conjunto de relaciones.
Dentro de los conjuntos de entidades existen los siguientes tipos de claves:

Superclave: Es un subconjunto de atributos que permite distinguir unívocamente cada una
de las entidades de un conjunto de entidades. Si se añade un atributo al anterior
subconjunto, el resultado seguirá siendo una superclave.

Clave candidata: Dada una superclave, si ésta deja de serlo quitando únicamente uno de
los atributos que la componen, entonces ésta es una clave candidata.

Clave primaria: Es una clave candidata, elegida por el diseñador de la base de datos, para
identificar unívocamente las entidades en un conjunto de entidades.
Los valores de los atributos de una clave, no pueden ser todos iguales para dos o más instancias.
Para poder distinguir unívocamente las relaciones en un conjunto de relaciones R, se deben
considerar dos casos:
Página 4
Administración de Base de Datos

R NO tiene atributos asociados: En este caso, se usa como clave primaria de R la unión de
las claves primarias de todos los conjuntos de entidades participantes.

R tiene atributos asociados: En este caso, se usa como clave primaria de R la unión de los
atributos asociados y las claves primarias de todos los conjuntos de entidades
participantes.
Si el conjunto de relaciones, R, sobre las que se pretende determinar la clave primaria está
compuesto de relaciones binarias, con los conjuntos de entidades participantes A y B, se
consideran los siguientes casos, según sus cardinalidades:

R es de muchos a uno de A a B entonces sólo se toma la clave primaria de A, como clave
primaria de R.

R es de uno a muchos de A a B entonces se toma sólo la clave primaria de B, como clave
primaria de R.

R es de uno a uno de A a B entonces se toma cualquiera de las dos claves primarias, como
clave primaria de R.

R es de muchos a muchos de A a B entonces se toma la unión de los atributos que
conforman las claves primarias de A y de B, como clave primaria de R.
Entidades y Relaciones
El modelo de datos más extendido es el denominado ENTIDAD/RELACIÓN (E/R) En el modelo E/R
se parte de una situación real a partir de la cual se definen entidades y relaciones entre dichas
entidades:

Entidad.- Objeto del mundo real sobre el que queremos almacenar información (Ej: una
persona). Las entidades están compuestas de atributos que son los datos que definen el
objeto (para la entidad persona serían DNI, nombre, apellidos, dirección,...). De entre los
atributos habrá uno o un conjunto de ellos que no se repite; a este atributo o conjunto de
atributos se le llama clave de la entidad, (para la entidad persona una clave seria DNI). En
toda entidad siempre hay al menos una clave que en el peor de los casos estará formada
por todos los atributos de la tabla. Ya que pueden haber varias claves y necesitamos elegir
una, lo haremos atendiendo a estas normás:

Que sea única.

Que se tenga pleno conocimiento de ella.- ¿Por qué en las empresas se asigna a
cada cliente un número de cliente?.

Que sea mínima, ya que será muy utilizada por el gestor de base de datos.
Página 5
Administración de Base de Datos

Relación.- Asociación entre entidades, sin existencia propia en el mundo real que
estamos modelando, pero necesaria para reflejar las interacciones existentes entre
entidades. Las relaciones pueden ser de tres tipos:

Relaciones 1-1.- Las entidades que intervienen en la relación se asocian una a una
(Ej: la entidad HOMBRE, la entidad MUJER y entre ellos la relación MATRIMONIO).

Relaciones 1-n.- Una ocurrencia de una entidad está asociada con muchas (n) de
otra (Ej: la entidad EMPERSA, la entidad TRABAJADOR y entre ellos la relación
TRABAJAR-EN).

Relaciones n-n.-Cada ocurrencia, en cualquiera de las dos entidades de la relación,
puede estar asociada con muchas (n) de la otra y viceversa (Ej: la entidad
ALUMNO, la entidad EMPRESA y entre ellos la relación MATRÍCULA).
Algunos ejemplos de relaciones
Ejercicio 1
Ejercicio 2
Página 6
Administración de Base de Datos
Ejercicio 3
Ejercicio 4
Ejercicio 5
Página 7
Administración de Base de Datos
Ejercicio 6
Ejercicio 7
Página 8
Administración de Base de Datos
Ejercicio 8
Ejercicio 9
Página 9
Administración de Base de Datos
Ejercicio 10
Página 10
Administración de Base de Datos
Tipos de datos en Oracle
Tipo Dato
Descripción
VARCHAR2(size [BYTE | CHAR])
Cadena de caracteres de longitud variable que tiene como
tamaño máximo el valor de size en BYTE o CHAR. El tamaño
máximo es de 4000 bytes o caracteres, y la mínima es de 1 byte o
un carácter. Se debe especificar el tamaño de para VARCHAR2.
NVARCHAR2(size)
Cadena de caracteres Unicode de longitud variable con size como
máximo tamaño de longitud. El número de bytes que pueden ser
hasta dos veces el tamaño de codificación AL16UTF16 y tres veces
el tamaño de la codificación UTF8. El tamaño máximo está
determinado por la definición del juego de caracteres nacional,
con un límite máximo de 4000 bytes. Se debe especificar el size de
NVARCHAR2.
NUMBER [ (p [, s]) ]
Número con p precisión (parte entera) y s escala (parte decimal).
La precisión p puede variar de 1 a 38. La s escala puede variar
desde -84 hasta 127. Tanto la precisión y la escala se encuentran
en dígitos decimales. Un valor numérico requiere 1 a 22 bytes.
FLOAT [(p)]
Un subtipo del tipo de datos NUMBER con precisión p. Un valor
de coma flotante se representa internamente como un NUMBER.
La precisión p puede variar desde 1 hasta 126 dígitos binarios. Un
valor flotante requiere 1 a 22 bytes.
LONG
DATE
BINARY_FLOAT
Tipo de datos de caracteres de longitud variable de hasta 2
gigabytes, o 231 -1 bytes. Permanece para compatibilidad con
versiones anteriores de Oracle.
Intervalo de fechas válidas del 1 de enero de 4712 antes de Cristo
a el 31 de diciembre de 9999. El formato por defecto se
determina explícitamente por el parámetro NLS_DATE_FORMAT o
implícitamente por el parámetro NLS_TERRITORY. El tamaño es de
7 bytes. Este tipo de datos contiene los campos de fecha y hora
AÑO, MES, día, hora, minuto y segundo. No tiene fracciones de
segundo o de una zona horaria.
Número en coma flotante de 32 bits. Este tipo de datos requiere 4
Página 11
Administración de Base de Datos
bytes.
BINARY_DOUBLE
Número en coma flotante de 64 bits. Este tipo de datos se
requieren de 8 bytes.
Año, mes y día como valores de la fecha, así como la hora,
minutos y segundos como valores de tiempo, donde
fractional_seconds_precision es el número de dígitos en la parte
fraccionaria del segundo del campo datetime. Los valores
aceptados de fractional_seconds_precision son del 0 al 9. El valor
TIMESTAMP [(fractional_seconds_ por defecto es 6. El formato por defecto se determina
explícitamente por el parámetro NLS_TIMESTAMP_FORMAT o
precision)]
implícitamente por el parámetro NLS_TERRITORY. El tamaño es de
7 o 11 bytes, dependiendo de la precisión. Este tipo de datos
contiene los campos datetime AÑO, MES, DIA, HORA, MINUTO y
SEGUNDO. Contiene las fracciones de segundo, pero no tiene una
zona horaria.
Todos los valores de TIMESTAMP, así como el valor de tiempo de
desplazamiento de la zona, donde fractional_seconds_precision
es el número de dígitos en la parte fraccionaria del segundo del
campo datetime. Los valores aceptados son del 0 al 9. El valor por
defecto es 6. El formato por defecto se determina explícitamente
TIMESTAMP [(fractional_seconds_
por el parámetro NLS_TIMESTAMP_FORMAT o implícitamente por
precision)]WITH TIME ZONE
el parámetro NLS_TERRITORY. El tamaño se fija en 13 bytes. Este
tipo de datos contiene los campos datetime AÑO, MES, DIA,
HORA, MINUTO, SEGUNDO, TIMEZONE_HOUR y
TIMEZONE_MINUTE. Cuenta con las fracciones de segundo y una
zona horaria explícita.
Todos los valores de TIMESTAMP WITH TIME ZONE, con las
siguientes excepciones:
* Los datos se normalizan con la zona horaria de base de datos
cuando se almacenan en la base de datos.
TIMESTAMP [(fractional_seconds)] * Cuando se recuperan los datos, los usuarios ven los datos en la
WITH LOCALTIME ZONE
zona de tiempo de la sesión.
El formato por defecto se determina explícitamente por el
parámetro NLS_TIMESTAMP_FORMAT o implícitamente por el
parámetro NLS_TERRITORY. El tamaño es de 7 o 11 bytes,
dependiendo de la precisión.
Página 12
Administración de Base de Datos
Almacena un período de tiempo en años y meses, donde
INTERVAL YEAR [(year_precision)] year_precision es el número de dígitos en el campo datetime
AÑO. Los valores aceptados son del 0 al 9. El valor
TO MONTH
predeterminado es 2. El tamaño se fija en 5 bytes.
Almacena un período de tiempo en días, horas, minutos y
segundos, donde
* day_precision es el número máximo de dígitos en el campo
datetime DÍA. Los valores aceptados son del 0 al 9. El valor
INTERVAL DAY [(day_precision)] T
predeterminado es 2.
O SECOND[(fractional_seconds)]
* fractional_seconds_precision es el número de dígitos en la parte
fraccionaria del campo SEGUNDO. Los valores aceptados son del 0
al 9. El valor por defecto es 6.
El tamaño se fija en 11 bytes.
RAW(size)
Datos binarios sin formato de longitud size. El tamaño máximo es
de 2000 bytes. Se debe especificar el tamaño de un valor RAW.
LONG RAW
Datos binarios de tipo RAW de longitud variable hasta 2 gigabytes.
ROWID
Cadena en base 64 que representa la dirección única de una fila
en la tabla. Este tipo de datos es principalmente para los valores
devueltos por la pseudo columna ROWID.
UROWID [(size)]
Cadena en base 64 que representa la dirección lógica de una fila
de una tabla de índice organizado. El tamaño opcional es el
tamaño de una columna de tipo UROWID de Oracle. El tamaño
máximo y por defecto es de 4000 bytes.
CHAR [(size [BYTE | CHAR])]
Cadena de caracteres de longitud fija de size bytes de tamaño o
size de caracteres. El tamaño máximo es de 2000 bytes o
caracteres, el tamaño predeterminado y mínimo es de 1 byte.
NCHAR[(size)]
Cadena de caracteres de longitud fija de size caracteres de
tamaño de largo. El número de bytes pueden ser hasta dos veces
el tamaño de codificación AL16UTF16 y tres veces el tamaño de la
codificación UTF8. El tamaño máximo está determinado por la
definición del juego de caracteres nacional, con un límite máximo
de 2000 bytes. El tamaño predeterminado y mínimo es de un
carácter.
CLOB
Un objeto de tipo LOB que contiene caracteres de un byte o
Página 13
Administración de Base de Datos
multibyte. Son compatibles tanto de ancho fijo y conjuntos de
ancho variable de caracteres, con el carácter de base de datos
establecida. El tamaño máximo es (4 gigabytes - 1) * (tamaño del
bloque de la base de datos).
NCLOB
Un objeto de tipo LOB que contiene caracteres Unicode. Son
compatible tanto de ancho fijo y conjuntos de ancho variable de
caracteres, con el conjunto base de datos de carácter nacional. El
tamaño máximo es (4 gigabytes - 1) * (tamaño del bloque de la
base de datos). Guarda los datos nacionales sobre el conjunto de
caracteres.
BLOB
Un objeto de tipo LOB binario. El tamaño máximo es (4 gigabytes 1) * (tamaño del bloque de la base de datos).
BFILE
Contiene un localizador a un archivo binario almacenado fuera de
la base de datos. Permite flujo de bytes de E/S para el acceso a
LOB externos que residen en el servidor de base de datos. El
tamaño máximo es de 4 gigabytes.
Bases de datos distribuidas
Una base de datos distribuida (BDD) es un conjunto de múltiples bases de datos lógicamente
relacionadas las cuales se encuentran distribuidas en diferentes espacios lógicos (pej. un servidor
corriendo 2 maquinas virtuales) e interconectados por una red de comunicaciones. Dichas BDD
tienen la capacidad de realizar procesamiento autónomo, esto permite realizar operaciones
locales o distribuidas. Un sistema de Bases de Datos Distribuida (SBDD) es un sistema en el cual
múltiples sitios de bases de datos están ligados por un sistema de comunicaciones de tal forma
que, un usuario en cualquier sitio puede acceder los datos en cualquier parte de la red
exactamente como si estos fueran accedidos de forma local.
Un sistema distribuido de bases de datos se almacenan en varias computadoras. Los principales
factores que distinguen un SBDD de un sistema centralizado son los siguientes:

Hay múltiples computadores, llamados sitios o nodos.

Estos sitios deben de estar comunicados por medio de algún tipo de red de
comunicaciones para transmitir datos y órdenes entre los sitios.
Página 14
Administración de Base de Datos
Consideraciones Generales
En un sistema de base de datos distribuida, los datos se almacenan en varios computadores. Los
computadores de un sistema distribuido se comunican entre sí a través de diversos medios de
comunicación, tales como cables de alta velocidad o líneas telefónicas. No comparten la memoria
principal ni el reloj.
Los procesadores de un sistema distribuido pueden variar en cuanto su tamaño y función. Pueden
incluir microcomputadores pequeños, estaciones de trabajo y sistemás de computadores grandes
de aplicación general. Estos procesadores reciben diferentes nombres, tales como localidades,
nodos o computadores.
Un sistema distribuido de bases de datos consiste en un conjunto de localidades, cada uno de las
cuales puede participar en la ejecución de transacciones que accedan a datos de una o varias
localidades. La diferencia principal entre los sistemás de base de datos centralizados y distribuidos
es que, en los primeros, los datos residen en una sola localidad, mientras que, en los últimos, se
encuentran en varias localidades.
Estructura de Base de Datos Distribuidas
Un sistema distribuido de base de datos consiste en un conjunto de localidades, cada una de las
cuales mantiene un sistema de base de datos local. Cada localidad puede procesar transacciones
locales, o bien transacciones globales entre varias localidades, requiriendo para ello comunicación
entre ellas.
Las localidades pueden conectarse físicamente de diversas formás, las principales son:

Red totalmente conectada

Red prácticamente conectada

Red con estructura de árbol

Red de estrella

Red de anillo
Las diferencias principales entre estas configuraciones son:

Coste de instalación: El coste de conectar físicamente las localidades del sistema

Coste de comunicación: El coste en tiempo y dinero que implica enviar un mensaje desde
la localidad A a la B.

Fiabilidad: La frecuencia con que falla una línea de comunicación o una localidad.

Disponibilidad: La posibilidad de acceder a información a pesar de fallos en algunas
localidades o líneas de comunicación.
Página 15
Administración de Base de Datos
Las localidades pueden estar dispersas, ya sea por un área geográfica extensa (a lo largo de un
país), llamadas redes de larga distancia; o en un área reducida (en un mismo edificio), llamadas
redes de área local. Para las primeras se utilizan en la comunicación líneas telefónicas, conexiones
de microondas y canales de satélites; mientras que para las segundas se utiliza cables coaxiales de
banda base o banda ancha y fibra óptica.
SELECT
Ejemplos de algunas consultas
--Número de empleados que tiene la empresa por departemento
SELECT DEPTNO, COUNT(*) "NÚMERO_EMPLEADOS"
FROM EMP
GROUP BY DEPTNO;
--Presentar el salario máximo, el minimo y el promedio que se paga en cada departamento
SELECT DEPTNO, MAX(SAL) "MÁXIMO_SAL", MIN(SAL) "MINIMO_SAL", AVG(SAL)
"PROMEDIO_SAL"
FROM EMP
GROUP BY ;
--Presentar el número de empleados que tiene la empresa por tipo de trabajo
SELECT JOB, COUNT(*) "NÚMERO_EMPLEADOS"
FROM EMP
GROUP BY JOB;
--Presentar el número de empleados por departamento que ganen entre 1500 y 3500 de salario
SELECT DEPTNO, COUNT(*) "EMPLEADOS"
FROM EMP
WHERE SAL BETWEEN 1500 AND 3500
GROUP BY DEPTNO;
--Presentar el número de empleados por departamento que ganen entre 1500 y 4000, de todos
--aquellos departamentos que tienen más de 2 empleados.
SELECT DEPTNO, COUNT(*) "EMPLEADOS"
FROM EMP
WHERE SAL BETWEEN 1500 AND 3500
GROUP BY DEPTNO
HAVING COUNT(*)>2;
Página 16
Administración de Base de Datos
--Presentar todos los empleados que son vendedores o que ganen en total más de 1800
SELECT EMP.*, (SAL + NVL(COMM, 0)) "TOTAL_SAL"
FROM EMP
WHERE JOB = 'SALESMAN'
OR
(SAL + NVL(COMM, 0)) > 1800;
--Presentar los datos de los empleados con el ingreso que ganan anualmente, ordenados en forma
ascendente
--por el ingreso total
SELECT EMP.*, (SAL + NVL(COMM, 0)) "TOTAL_SAL"
FROM EMP
ORDER BY TOTAL_SAL DESC;
--Presentar los datos de de los empleados de aquellos departamentos que tienen más de 4
empleados
SELECT DEPTNO, COUNT(*) "EMPLEADOS"
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*)>4;
--Presentar todos los datos de los empleados que ganan un salario superior al salario
--que ganan todos los empleados del departamento 30
SELECT *
FROM EMP
WHERE SAL > ( SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = 30);
SELECT *
FROM EMP
WHERE SAL > ALL ( SELECT SAL
FROM EMP
WHERE DEPTNO = 30);
--Presentar todos los datos de los empleados del departamneto 20 que ganan un salario superior
--a cualquiera de los salarios que ganan todos los empleados del departamento 30
SELECT *
FROM EMP
WHERE DEPTNO=20
AND
SAL > ( SELECT MIN(SAL)
FROM EMP
WHERE DEPTNO = 30);
Página 17
Administración de Base de Datos
SELECT *
FROM EMP
WHERE DEPTNO=20
AND
SAL > ANY ( SELECT SAL
FROM EMP
WHERE DEPTNO = 30);
--Presentar los datos de los empleados que ganan un salario superior al salario promedio de toda la
empresa
SELECT *
FROM EMP
WHERE SAL>(SELECT AVG(SAL)
FROM EMP);
--Presentar los datos de los empleados más antiguos de empresa
SELECT *
FROM EMP
WHERE HIREDATE = (SELECT MIN(HIREDATE)
FROM EMP);
--Presentar los datos del empleado que más gana en la empresa
SELECT *
FROM EMP
WHERE (SAL + NVL(COMM, 0)) > (SELECT MAX(SAL + NVL(COMM,0))
FROM EMP);
--Presentar los datos de los empleados que trabajan en la ciudad de DALLAS
SELECT *
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO
FROM DEPT
WHERE LOC='DALLAS');
--Presentar los datos de los empleados que realizan el mismo trabajo que Ford
SELECT *
FROM EMP
WHERE JOB = (SELECT JOB
FROM EMP
WHERE ENAME = 'FORD');
Página 18
Administración de Base de Datos
--Presentar los datos de los empleados que trabajan en DALLAS y hacen el mismo
--trabajo que FORD
SELECT *
FROM EMP
WHERE JOB = (SELECT JOB
FROM EMP
WHERE ENAME = 'FORD')
AND
DEPTNO = ( SELECT DEPTNO
FROM DEPT
WHERE LOC = 'DALLAS');
--Presentar los datos de los empleados que trabajan en DALLAS y que ganan el máximo
--salario de su departamento
SELECT *
FROM EMP
WHERE SAL = (SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO= (SELECT DEPTNO
FROM DEPT
WHERE LOC = 'DALLAS' )
GROUP BY DEPTNO);
--Presentar los datos de los empleados que ganan un salario superior al salario promedio
--de su departamento
SELECT *
FROM EMP A
WHERE SAL > ( SELECT AVG (SAL)
FROM EMP B
WHERE A.DEPTNO = B.DEPTNO );
--Presentar todos los datos de los empleados más antiguos en cada uno de los departamentos
SELECT *
FROM EMP A
WHERE A.HIREDATE = ( SELECT MIN (HIREDATE)
FROM EMP B
WHERE B.DEPTNO = A.DEPTNO );
--Presentar los empleados que reciben como ingreso total un valor inferior al 30%
--del ingreso que recibe el presidente.
SELECT EMP.*, SAL + NVL(COMM,0) "INGRESO_TOTAL"
FROM EMP
WHERE SAL < ( SELECT ((SAL + NVL(COMM,0))*30)/100
FROM EMP
WHERE JOB = 'PRESIDENT');
Página 19
Administración de Base de Datos
--Presentar el nombre del departamento yel número de empleados que tiene el departamento
--incluidos los departamentos que no tienen empleados
SELECT B.DNAME, A.DEPTNO, COUNT (A.ENAME) "NUM_EMPLEADOS"
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO(+)
GROUP BY B.DNAME, A.DEPTNO;
Otras consultas en SQLPLUS
Presentación 1: 5 ejercicios por cada tema de cada
1) Muestra todos los registros de la tabla "employees", mostrará los campos especificados y
el campo "salary" lo renombra (con un alias) a "Salario "
SELECT ename, job, sal AS Salario
FROM emp
2) Muestra todos los registros y todos los campos de la tabla "employees"
SELECT
FROM emp;
*
Página 20
Administración de Base de Datos
3) Muestra el campo "last_name" y el campo "Salario Anual" (que es el resultado de
multiplicar el campo "salary" por 12) de la tabla employees
SELECT
FROM emp;
ename,
sal
*
12
AS
"Salario
Anual"
4) Concatena los campos "first_name" y "last_name" y los muestra en un solo campo
llamado "Nombre empleado", también añade una "," entre los campos
Página 21
Administración de Base de Datos
SELECT
empno
FROM emp;
||
',
'
||
ename
"Nombre
empleado"
5) Muestra el campo "last_name" de la tabla "employees" cuyo "employee_id" es mayor que
176
SELECT ename
FROM emp
WHERE empno > 176;
6) Muestra los campos "last_name" y "salary" de aquellos empleados cuyo salario no esté
entre 5000 y 12000
Página 22
Administración de Base de Datos
SELECT
FROM
WHERE sal NOT BETWEEN 5000 AND 12000
ename,
sal
emp
7) Muestra el campo "last_name" de aquellos registros de la tabla "employees" cuyo
"department_id" sea 20 ó 50
SELECT
FROM
WHERE
ORDER BY last_name
department_id
IN
(20,
last_name
employees
50)
8) Muestra los empleados cuyo salario sea superior a la media
SELECT
FROM
WHERE
SELECT
FROM employees)
salary
>
AVG
Página 23
employee_id
employees
(
(salary)
Administración de Base de Datos
9) Muestra los empleados que pertenezcan a un departamento que contenga la letra "K" en
el nombre
SELECT
last_name,
FROM
WHERE
department_id
SELECT
FROM
WHERE UPPER(department_name) LIKE '%K%')
IN
job_id
employees
(
department_id
departments
10) Crea una función
DELETE FROM con empleado WHERE id empleado = 'ANY' (ids);
END;
$BODY$
LANGUAGE 'plpgsql';
11) agregar columna a una tabla
ALTER TABLE 'TABLA_NOMBRE' (
ADD NUEVO_CAMPO INT UNSIGNED meel
12) tenemos una tabla de coches, en la que tenemos referenciada la marca a través del código
de marca. Para realizar la consulta combinada entre estas dos tablas debemos escribir una
consulta SELECT en cuya claúsula FROM escribiremos el nombre de las dos tablas,
separados por comas, y una condición WHERE que obligue a que el código de marca de la
tabla de coches sea igual al código de la tabla de marcas.
SELECT
tCoches.matricula,
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
Página 24
Administración de Base de Datos
tCoches.num_plazas
FROM
WHERE tCoches.marca = tMarcas.codigo
tCoches,
tMarcas
13) El ejemplo anterior escrito utilizando la clausula INNER JOIN quedaria de la siguiente
manera:
14) SELECT
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
tCoches.num_plazas
FROM
INNER JOIN tMarcas ON tCoches.marca = tMarcas.codigo
tCoches.matricula,
tCoches
15) Esta consulta devolverá todos los registros de la tabla tCoches, independientemente de
que tengan marca o no. En el caso de que el coche no tenga marca se devolverá el valor
null para los campos de la tabla tMarcas.
16) SELECT
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
tCoches.num_plazas
FROM
LEFT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo
17) El mismo ejemplo con RIGHT OUTER JOIN.
Página 25
tCoches.matricula,
tCoches
Administración de Base de Datos
SELECT
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
tCoches.num_plazas
FROM
RIGHT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo
tCoches.matricula,
tCoches
18) El siguiente ejemplo muestra el uso de UNION
SELECT
tMarcas.marca,
tCoches.modelo,
tCoches.color,
tCoches.numero_kilometros,
tCoches.num_plazas
FROM
INNER
JOIN tMarcas
UNION
tCoches.matricula,
ON
tCoches.marca
=
tCoches
tMarcas.codigo
19)
SELECT
tMarcas.marca,
tMotos.modelo,
tMotos.color,
tMotos.numero_kilometros,
0
FROM
INNER JOIN tMarcas ON tMotos.marca = tMarcas.codigo;
20) Devuelve la suma de los salarios
Página 26
tMotos.matricula,
tMotos
Administración de Base de Datos
SELECT
SUM(Sales)
WHERE
(SELECT
store_name
WHERE region_name = 'West')
FROM
Store_name
FROM
Store_Information
IN
Geography
Résultat :
SUM(Sales)
2050
21) SELECT
SUM(a1.Sales)
FROM
WHERE
a1.Store_name
(SELECT
store_name
FROM
WHERE a2.store_name = a1.store_name)
Store_Information
Geography
a1
IN
a2
22) El ejemplo siguiente devuelve todos los productos vendidos con un descuento
igual o mayor al 25 por ciento.:
SELECT * FROM Productos WHERE IDProducto
IN
(SELECT IDProducto FROM DetallePedido WHERE Descuento >= 0.25);
23) El
ejemplo
siguiente
devuelve
los
nombres
de
cuyo
salario
es
igual
o
mayor
que
medio
de
todos
los
empleados
con
el
mismo
tabla Empleados se le ha dado
SELECT Apellido, Nombre, Titulo, Salario
FROM Empleados AS T1
WHERE Salario >= (SELECT Avg(Salario) FROM Empleados
WHERE T1.Titulo = Empleados.Titulo) ORDER BY Titulo;
Página 27
los
empleados
el
salario
título.
A
la
Administración de Base de Datos
24) Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo
salario
es
mayor
que el de todos los jefes y directores.
SELECT Apellidos, Nombre, Cargo, Salario
FROM Empleados
WHERE Cargo LIKE "Agente Ven*" AND Salario > ALL (SELECT Salario
FROM
Empleados WHERE (Cargo LIKE "*Jefe*") OR (Cargo LIKE "*Director*"));
25) Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo
precio
que
el
almíbar anisado.
SELECT DISTINCTROW NombreProducto, Precio_Unidad
FROM Productos
WHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERE
Nombre_Producto = "Almíbar anisado");
26) Obtiene una lista de las compañías y los contactos de todos los clientes que han realizado
un pedido en el segundo trimestre de 1993
SELECT DISTINCTROW Nombre_Contacto,
Nombre_Compañia, Cargo_Contacto,
Telefono FROM Clientes WHERE (ID_Cliente IN (SELECT DISTINCTROW
ID_Cliente FROM Pedidos WHERE Fecha_Pedido >= #04/1/93# <#07/1/93#);
27) Selecciona el nombre de todos los empleados que han reservado al menos un pedido.
SELECT Nombre, Apellidos FROM Empleados
AS E WHERE EXISTS
(SELECT * FROM Pedidos AS O WHERE O.ID_Empleado = E.ID_Empleado);
28) Recupera el Código del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el
nombre
del producto de la tabla de productos.
Página 28
Administración de Base de Datos
SELECT DISTINCTROW Pedidos.Id_Producto,
Pedidos.Cantidad,
(SELECT DISTINCTROW Productos.Nombre FROM Productos WHERE
Productos.Id_Producto = Pedidos.Id_Producto) AS ElProducto FROM
Pedidos WHERE Pedidos.Cantidad > 150 ORDER BY Pedidos.Id_Producto;
29)
Despliegue los nombres de todos los empleados que ganen menos que el
salario promedio de la compañía.
30) Un operador IN puede ser usado como una alternativa para un operador
EXISTS, como se ve en el siguiente ejemplo:
1.SELECT empno, ename, deptno
FROM emp
WHERE ename = 'higgins';
2.-
Página 29
Administración de Base de Datos
SELECT empno, ename, deptno
FROM emp
WHERE LOWER(ename) = 'higgins';
3.SELECT empno, CONCAT(name, last_name) NAME,
mgr, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM emp
WHERE SUBSTR(mgr, 4) = 'REP';
4.SELECT ROUND(45.923,2), ROUND(45.923,0),
ROUND(45.923,-1)
FROM DUAL;
5.SELECT ROUND(45.923,2), ROUND(45.923),
ROUND(45.923,-1)
FROM DUAL;
Página 30
Administración de Base de Datos
6.SELECT ename, sal, MOD(sal, 5000)
FROM emp
WHERE mgr= 'SA_REP';
7.SELECT ename, hiredate
FROM emp
WHERE hiredate < '01-FEB-88';
8.SELECT ename, (SYSDATE-hiredate)/7 AS WEEKS
FROM emp
WHERE deptno = 90;
Página 31
Administración de Base de Datos
9.SELECT ename,
TO_CHAR(hiredate, 'fmDD Month YYYY')
AS HIREDATE
FROM employees;
10.SELECT TO_CHAR(sal, '$99,999.00') SALARIO
FROM emp
WHERE ename = 'Ernst';
Página 32
Administración de Base de Datos
11.SELECT ename, TO_CHAR(hiredate, 'DD-Mon-YYYY')
FROM emp
WHERE hiredate < TO_DATE('01-Jan-90','DD-Mon-RR');
12.- INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL SALARIOS PROMEDIO QUE SE PAGA SIN LA
FUNCION AVG
SELECT SUM (SAL)/COUNT(*)'SALARIO PROMEDIO'
FROM EMP
-----------------------------------------------------------------------------------------------------13.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL SALARIO PROMEDIO QUE SE PAGA SIN
AVG Y CON DOS DECIMALES
SELECT CONVERT (DECIMAL(10,2),SUM (SAL)/COUNT(*))'SALARIO PROMEDIO'
FROM EMP
Página 33
Administración de Base de Datos
-----------------------------------------------------------------------------------------------------14.-INSTRUCCION SQL QUE PRESENTE EN PANTALLAS EL SALARIO PROMEDIO CON LA FUNCION
AVG
SELECT AVG(SAL)'SAL. PROM'
FROM EMP
-----------------------------------------------------------------------------------------------------15.-INSTRUCCION SQL QUE PRESENTE EN PANTALLAS EL SALARIO PROMEDIO CON LA FUNCION
AVG Y CON DOS DECIMALES
SELECT CONVERT(DECIMAL(10,2),AVG(SAL))'SALARIO PROMEDIO'
FROM EMP
-----------------------------------------------------------------------------------------------------16.-INSTRUCCION SQL QUE PRESENTE EN PANTALLAS EL SALARIO MAXIMO , SALARIO MINIMO Y
SALARIO PROMEDIO
--CON DOS DECIMALES
SELECT
MIN(SAL)'SAL.
MINIMO',MAX(SAL)'SAL.
(DECIMAL(10,3),AVG(SAL))'SAL. PROMEDIO'
MAXIMO',CONVERT
FROM EMP
-----------------------------------------------------------------------------------------------------17.-INSTRUCCION SQL QUE PRESENTE EN PANTALLAS EL TOTAL DE SALARIOS QUE SE PAGA Y EL #
DE EMPLEADOS
Página 34
Administración de Base de Datos
SELECT SUM(SAL)'SUMATORIA DE SALARIOS',COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP
-----------------------------------------------------------------------------------------------------18.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL SUELDO PROMEDIO DE LOS EMPLEADOS
DEL DEPARTAMENTO 10
SELECT CONVERT(DECIMAL(10,2),AVG(SAL))'SUELDO PROMEDIO DPTO. 10'
FROM EMP
WHERE DEPTNO=10
-----------------------------------------------------------------------------------------------------19.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL SUELDO PROMEDIO DE LOS EMPLEADOS
DEL DEPARTAMENTO 20
SELECT CONVERT(DECIMAL(10,2),AVG(SAL))'SUELDO PROMEDIO DPTO. 20'
FROM EMP
WHERE DEPTNO=20
-----------------------------------------------------------------------------------------------------20.-INSTRUCCION SQL
DEPARTAMENTOS
QUE
PRESENTE
EN
PANTALLA
EL
SUELDO
PROMEDIO
POR
SELECT DEPTNO,CONVERT(DECIMAL(10,2),AVG(SAL))
FROM EMP
GROUP BY DEPTNO
-----------------------------------------------------------------------------------------------------21.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS NOMBRES DE LOS EMPLEADOS CON EL
SALARIO PROMEDIO QUE SE
--LES PAGA
SELECT ENAME,CONVERT(DECIMAL(10,2),AVG(SAL))
FROM EMP
GROUP BY ENAME
Página 35
Administración de Base de Datos
-----------------------------------------------------------------------------------------------------22.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL NUMERO DE EMPLEADOS DE LA EMPRESA
POR EL TRABAJO QUE HACEN
SELECT JOB, COUNT(*)
FROM EMP
GROUP BY JOB
-----------------------------------------------------------------------------------------------------24.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL # DE EMPLEADOS POR EL TRABAJO Y EL
DEPARTAMENTO
--ORDENADO PRIMERO JOB LUEGO DEPTNO
SELECT JOB,DEPTNO,COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP
GROUP BY JOB,DEPTNO
ORDER BY DEPTNO
--ORDENADO PRIMERO DEPTNO LUEGO JOB
SELECT JOB,DEPTNO,COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP
GROUP BY DEPTNO,JOB
ORDER BY DEPTNO
Página 36
Administración de Base de Datos
--------------------------------------------------------------------------------------------------------
CLAUSULA HAVING
-----------------------------------------------------------------------------------------------------25.-ISNTRUCCION SQL QUE PRESENTE EN PANTALLA EL NUMERO DE DEPARTAMENTO Y EL
NUMERO DE EMPLEADOS DE TODOS
--AQUELLOS DEPARTAMENTOS QUE TIENEN 5 O MAS EMPLEADOS
SELECT DEPTNO,COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*)>=5
-----------------------------------------------------------------------------------------------------26.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL NUMERO DE VENDEDORES Y ANALISTAS
DE LA EMPRESA
SELECT JOB,COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP
WHERE JOB IN('ANALYST','SALESMAN')
GROUP BY(JOB)
Página 37
Administración de Base de Datos
-----------------------------------------------------------------------------------------------------27.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL CODIGO DE DEPTO Y EL NUMERO DE
EMPLEADOS DE AQUELLOS DEPTOS
--QUE TENGAN MAS DE DOS OBREROS
SELECT DEPTNO,JOB,COUNT(*)'NUMERO DE EMPLEDOS'
FROM EMP
WHERE JOB='CLERK'
GROUP BY DEPTNO,JOB
HAVING COUNT(*)>=2
-------------------------------------------------------------------------------------------------------
SELECTS ANIDADOS
-----------------------------------------------------------------------------------------------------28.-PRESENTAR EN PANTALLA TODOS LOS DATOS DE LOS EMP QUE TIENEN EL MISMO TRABAJO
QUE JONES
--SIN SELECTS ANIDADOS
SELECT JOB
FROM EMP
Página 38
Administración de Base de Datos
WHERE ENAME='JONES'
SELECT *
FROM EMP
WHERE JOB='MANAGER'
--CON SELECTS ANIDADOS
SELECT *
FROM EMP
WHERE JOB=(SELECT JOB
FROM EMP
WHERE ENAME='JONES')
------------------------------------------------------------------------------------------------------
Página 39
Administración de Base de Datos
29.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA TODOS LOS DATOS DEL EMPLEADO MAS
ANTIGUO DE LA EMPRESA
SELECT *
FROM EMP
WHERE HIREDATE=(SELECT MIN(HIREDATE)
FROM EMP)
-----------------------------------------------------------------------------------------------------30.-PRESENTE EN PANTALLA EL NO DE EMP QUE EXISTEN POR TIPO DE TRABAJO Y POR NOMBRE
DE DEPARTAMENTO
--SIN UNIÓN DE TABLAS
SELECT JOB,DEPTNO,COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP
GROUP BY JOB,DEPTNO
--CON UNIÓN DE TABLAS
SELECT JOB,DNAME,COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP,DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO
Página 40
Administración de Base de Datos
GROUP BY DNAME ,JOB
ORDER BY DNAME, JOB ASC
31.-CONSULTAS VARIAS CON SELECT DISTINCT
SELECT DISTINCT DEPTNO,COMN
FROM EMP
ORDER BY DEPTNO
--------------------------------------32.-USO DEL ORDER BY CON NUMEROS
SELECT DISTINCT DEPTNO,COMN
FROM EMP
ORDER BY 2 DESC
Página 41
Administración de Base de Datos
--------------------------------------33.-COMPARACION ENTRE DOS ATRIBUTOS CUANDO SALARIO SEA MENOR QUE COMICIÓN
SELECT *
FROM EMP
WHERE SAL<COMN
ORDER BY DEPTNO ASC
-----------------------------------------------------------------------------34.-DATOS EMPLEADOS CUANDO SALARIO SEA MAYOR QUE COMICIÓN
SELECT *
FROM EMP
WHERE SAL>COMN
ORDER BY DEPTNO ASC
-----------------------------------------------------------------------------35.-OPERACIONES CON REGISTROS
--OBTENER LOS DATOS Y EL SALARIO ANUAL DE LOS EMPLEADOS
Página 42
Administración de Base de Datos
SELECT DEPTNO,ENAME,JOB,SAL,COMN,SAL*12 'SALARIO ANUAL'
FROM EMP
ORDER BY SAL*12 ASC
-----------------------------------------------------------------------------36.-USO SENTENCIA IN (COMPARACIONES CON OR MULTIPLES)
--OBTENER LOS DATOS DE LOS EMPLEADOS SMITH , ALLEN,WARD,KING
--SIN SENTENCIA IN
SELECT DEPTNO,ENAME,JOB,SAL,COMN
FROM EMP
WHERE ENAME='SMITH' OR ENAME='ALLEN' OR ENAME='WARD' OR ENAME='KING'
--CON SENTENCIA IN
SELECT DEPTNO,ENAME,JOB,SAL,COMN
FROM EMP
WHERE ENAME IN ('SMITH','ALLEN','WARD','KING')
Página 43
Administración de Base de Datos
-----------------------------------------------------------------------------37.-OBTENER LOS DATOS DE LOS EMPLEADOS QUE NO SEAN CLERK, SALESMAN O PRESIDENT
SELECT DEPTNO,ENAME,JOB,SAL,COMN
FROM EMP
WHERE JOB NOT IN ('CLERK','SALESMAN','PRESIDENT')
--OTRA FORMA DE LO MISMO SERIA:
SELECT DEPTNO,ENAME,JOB,SAL,COMN
FROM EMP
WHERE JOB != 'CLERK' AND JOB != 'SALESMAN' AND JOB !='PRESIDENT'
--Y OTRA FORMA SERIA:
SELECT DEPTNO,ENAME,JOB,SAL,COMN
FROM EMP
WHERE NOT (JOB = 'CLERK' OR JOB = 'SALESMAN' OR JOB ='PRESIDENT')
Página 44
Administración de Base de Datos
-----------------------------------------------------------------------------38.-ESCRIBIR INSTRUCCION SQL QUE PRESENTEN LOS DATOS DE LOS GERENTES QUE
--TRABAJAN EN EL DEPARTAMENTO 10 O EN EL DEPARTAMENTO 20
SELECT *
FROM EMP
WHERE (JOB='MANAGER')AND (DEPTNO=10 OR DEPTNO=20)
--UTILIZANDO IN
SELECT *
FROM EMP
WHERE (JOB='MANAGER')AND (DEPTNO IN(10,20))
-----------------------------------------------------------------------------39.-ESCRIBIR INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS
--QUE GANEN ENTRE 1300 Y 1800 DOLARES
SELECT *
FROM EMP
WHERE SAL>=1300 AND SAL <=1800
40.-UTILIZANDO INTRUCCION BETWEEN (OJO ESTA ES INCLUSIVA)
SELECT *
Página 45
Administración de Base de Datos
FROM EMP
WHERE SAL BETWEEN 1300 AND 1800
-----------------------------------------------------------------------------41.-PRESENTAR EN PANTALLA LOS EMPLEADOS QUE GANEN MENOS DE 1200 O MAS DE 1800
SELECT *
FROM EMP
WHERE SAL<1200 OR SAL>1800
--OTRA FORMA
SELECT *
FROM EMP
WHERE SAL NOT BETWEEN 1200 AND 1800
-----------------------------------------------------------------------------42.-PRESENTAR EN PANTALLA LOS DATOS DE LOS EMPLEADOS CON UN SALARIO MAYOR IGUAL A
--1500 Y MENOR A 2000 Y QUE ADICIONAL TRABAJEN MAS DE 25 AÑOS
SELECT * FROM EMP
WHERE (SAL>=1500 AND SAL <2000) AND (HIREDATE<'1984/01/01')
------------------------------------------------------------------------------
43.- --INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS
--QUE NO GANEN COMISIÓN
SELECT * FROM EMP
WHERE COMN=0 OR COMN IS NULL
------------------------------------------------------------------------
Página 46
Administración de Base de Datos
44.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS
--QUE GANEN COMISIÓN
SELECT * FROM EMP
WHERE COMN!=0 AND COMN IS NOT NULL
----------------------------------------------------------------------------
USO DE LA INSTRUCCION LIKE
--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE COMIENCE
--CON M
SELECT *
FROM EMP
WHERE ENAME LIKE 'M%'
-----------------------------------------------------------------------45-PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TERMINE
--CON S
SELECT *
FROM EMP
WHERE ENAME LIKE '%S'
-----------------------------------------------------------------------46-PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA COMO
--SEGUNDO CARACTER LA LETRA L
SELECT *
FROM EMP
WHERE ENAME LIKE '_D%'
-----------------------------------------------------------------------47--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA
--5 CARACTERES
Página 47
Administración de Base de Datos
SELECT *
FROM EMP
WHERE ENAME LIKE '_____'
-----------------------------------------------------------------------48--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA
--MENOS O MAS DE 5 CARACTERES
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '_____'
-----------------------------------------------------------------------49--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA LA
--LETRA S Y LUEGO LA LETRA H SIN IMPORTAR LA POSICION
SELECT *
FROM EMP
WHERE ENAME LIKE '%S%H%'
50.-INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS
--QUE NO GANEN COMISIÓN
SELECT * FROM EMP
WHERE COMN=0 OR COMN IS NULL
-------------------------------------------------------------------------INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS
--QUE GANEN COMISIÓN
SELECT * FROM EMP
WHERE COMN!=0 AND COMN IS NOT NULL
----------------------------------------------------------------------------
USO DE LA INSTRUCCION LIKE
Página 48
Administración de Base de Datos
51.--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE COMIENCE
--CON M
SELECT *
FROM EMP
WHERE ENAME LIKE 'M%'
-----------------------------------------------------------------------52.--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TERMINE
--CON S
SELECT *
FROM EMP
WHERE ENAME LIKE '%S'
-----------------------------------------------------------------------53.--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA COMO
--SEGUNDO CARACTER LA LETRA L
SELECT *
FROM EMP
WHERE ENAME LIKE '_D%'
-----------------------------------------------------------------------54.-PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA
--5 CARACTERES
SELECT *
FROM EMP
WHERE ENAME LIKE '_____'
-----------------------------------------------------------------------55.--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA
--MENOS O MAS DE 5 CARACTERES
Página 49
Administración de Base de Datos
SELECT *
FROM EMP
WHERE ENAME NOT LIKE '_____'
-----------------------------------------------------------------------56.--PRESENTAR EN PANTLLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE TENGA LA
--LETRA S Y LUEGO LA LETRA H SIN IMPORTAR LA POSICION
SELECT *
FROM EMP
WHERE ENAME LIKE '%S%H%'
-----------------------------------------------------------------------57.- --FUNCIONES CON CARACTERES
--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS CUYO NOMBRE
TENGA 5 CARACTERES
SELECT *
FROM EMP
WHERE LEN(ENAME)=5 **oracle 11g length**
---------------------------------------------------------------------------------------------------58.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS CUYO
CODIGO SEA IMPAR
SELECT *
FROM EMP
WHERE (EMPNO%2)=1
---------------------------------------------------------------------------------------------------59.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL VALOR TOTAL QUE GANA CADA
EMPLEADO
SELECT *,SAL+ISNULL(COMN,0)'SUELDO TOTAL'
Página 50
Administración de Base de Datos
FROM EMP
ORDER BY ENAME ASC
---------------------------------------------------------------------------------------------------60.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS NOMBRES DE LOS DEPARTAMENTOS
CUYO NOMBRE TENGA MAS DE
--8 CARACTERES
SELECT *
FROM DEPT
WHERE LEN(DNAME)>=8
---------------------------------------------------------------------------------------------------61.--INSTRUCCION SQL QUE MUESTR TODOS LOS NOMBRES DE LOS EMPLEADOS EN MAYUSCULA
SELECT *, UPPER(ENAME)'ENAME MAYUSC'
FROM EMP
---------------------------------------------------------------------------------------------------62.--INSTRUCCION SQL QUE MUESTRE TODOS LOS NOMBRES DE LOS EMPLEADOS EN MINUSUCLA
SELECT *, LOWER(ENAME)'ENAME MINUSC'
FROM EMP
---------------------------------------------------------------------------------------------------63.--INSTRUCCION SQL QUE UNA EL NOMBRE Y EL CARGO EN UN SOLO CAMPO
SELECT *, (ENAME + ' ' +JOB) 'ENAME Y TRABAJO'
FROM EMP
---------------------------------------------------------------------------------------------------64.--INSTRUCCION SQL QUE SELECCIONE LOS 3 PRIMEROS CARACTERES DEL NOMBRE DEL
EMPLEADO
SELECT *, SUBSTRING(ENAME,1,3)'NOMBRE 3 CARACT'
FROM EMP
Página 51
Administración de Base de Datos
---------------------------------------------------------------------------------------------------65.--INSTRUCCION SQL QUE SELECCIONE LOS 5 PRIMEROS CARACTERES DEL NOMBRE DEL
DEPARTAMENTO
SELECT *, SUBSTRING(DNAME,1,3)'DEPTO 3 CARACT'
FROM DEPT
---------------------------------------------------------------------------------------------------66.--INSTRUCCION SQL QUE MUESTRE EL TAMAÑO DE LOS ATRIBUTOS DE LA TABLA EMPLEADO
SELECT *,LEN(EMPNO)'L EMPNO', LEN(ENAME)'L ENAME', LEN(JOB)'L JOB',LEN(MGR)'L MGR'
FROM EMP
----------------------------------------------------------------------------------------------------
67.--INSTRUCCION SQL QUE OBTENGA LA RAIZA CUADRADA DEL SALARIO DEL EMPLEADO Y LA
REDONDEE A 2 DECIMALES'
SELECT *,ROUND(SQRT(SAL),2)'RAIZ DEL SALARIO'
FROM EMP
---------------------------------------------------------------------------------------------------68.--INSTRUCCION SQL QUE OBTENGA EL SUELDO AL CUADRADO DEL EMPLEADO
SELECT *, POWER (SAL,2)'SUELDO AL CUADRADO'
FROM EMP
69.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL NUMERO DE CARACTERES DE LOS
NOMBRES DE LOS
--EMPLEADOS SIN QUE SE REPITA LA LONGITUD
SELECT DISTINCT LEN(ENAME)
FROM EMP
Página 52
Administración de Base de Datos
----------------------------------------------------------------------------------------70--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS CON LA
FECHA DE
--CONTRATACION EN EL FORMATO DIA MES Y AÑO
SELECT *,CONVERT(CHAR(12),HIREDATE,103)'FECHA EN DD/MM/AA'
FROM EMP
----------------------------------------------------------------------------------------71--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS MAS EL
SALARIO QUE
--GANA CADA EMPLEADO POR HORA CON DOS DECIMALES
--CON EL CONVERT
SELECT *,SAL,CONVERT(DECIMAL(10,2),SAL/(30*8))'SALARIO POR HORA'
FROM EMP
--CON EL ROUND
SELECT *,ROUND(SAL/(30*8),2)'SALARIO POR HORA'
FROM EMP
----------------------------------------------------------------------------------------72.--IMSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS AÑOS QUE TRABAJA EL PRESIDENTE EN
LA EMPRESA
SELECT *,DATEDIFF(YEAR,HIREDATE,GETDATE())'AÑOS EN LA EMPRESA'
FROM EMP
WHERE JOB='PRESIDENT'
----------------------------------------------------------------------------------------73.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS MESES QUE TRABAJAN LOS
VENDEDORES Y ANALISTAS
--EN LA EMPRESA
SELECT *,DATEDIFF(MONTH,HIREDATE,GETDATE())'MESES EN LA EMPRESA'
Página 53
Administración de Base de Datos
FROM EMP
WHERE JOB IN('SALESMAN','ANALYST')
----------------------------------------------------------------------------------------74.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DIAS, MESES Y AÑOS QUE TRABAJAN
LOS EMPLEADOS
--EN LA EMPRESA
SELECT
*,DATEDIFF(YEAR,HIREDATE,GETDATE())'AÑOS',DATEDIFF(MONTH,HIREDATE,GETDATE())'MESES',
DATEDIFF(DAY,HIREDATE,GETDATE())'DIAS'
FROM EMP
----------------------------------------------------------------------------------------75--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE
TRABAJEN MAS DE 20
--Y MENOS DE 30 AÑOS EN LA EMPRESA
SELECT *
FROM EMP
WHERE DATEDIFF(YEAR,HIREDATE,GETDATE()) BETWEEN 20 AND 30
----------------------------------------------------------------------------------------76.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS EL MES DE DICIEMBRE
--SIN EL DATEPART
SELECT *,CONVERT(CHAR,HIREDATE,101)'FECHA'
FROM EMP
WHERE CONVERT(CHAR,HIREDATE,101) LIKE '12%'
--CON EL DATEPART
SELECT *
Página 54
Administración de Base de Datos
FROM EMP
WHERE DATEPART(MONTH,HIREDATE)=12
----------------------------------------------------------------------------------------77.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS ENTRE LOS DIAS 01 AL 20
SELECT *
FROM EMP
WHERE DATEPART(DAY,HIREDATE) BETWEEN 1 AND 20
----------------------------------------------------------------------------------------78.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS ENTRE LOS DIAS 20 AL 31
SELECT *
FROM EMP
WHERE DATEPART(DAY,HIREDATE) BETWEEN 20 AND 31
----------------------------------------------------------------------------------------79.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS ENTRE LOS MESES DE ENERO A JUNIO
SELECT *
FROM EMP
WHERE DATEPART(MONTH,HIREDATE) BETWEEN 1 AND 6
----------------------------------------------------------------------------------------80.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS ENTRE LOS MESES DE JULIO A DICIEMBRE
Página 55
Administración de Base de Datos
SELECT *
FROM EMP
WHERE DATEPART(MONTH,HIREDATE) BETWEEN 7 AND 12
----------------------------------------------------------------------------------------81.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS ENTRE LOS AÑOS DE 1980 A 1981
SELECT *
FROM EMP
WHERE DATEPART(YEAR,HIREDATE) BETWEEN 1980 AND 1981
----------------------------------------------------------------------------------------82.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE HAYAN
SIDO
--CONTRATADOS ENTRE LOS AÑOS DE 1982 A 1985
SELECT *
FROM EMP
WHERE DATEPART(YEAR,HIREDATE) BETWEEN 1982 AND 1985
83.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DEL EMPLEADO MAS
RECIENTEMENTE CONTRATADO
--Y EL MAS ANTIGUO
--MAS ANTIGUO
SELECT *
FROM EMP
WHERE HIREDATE = (SELECT MIN(HIREDATE)
Página 56
Administración de Base de Datos
FROM EMP)
--MAS NUEVO
SELECT *
FROM EMP
WHERE HIREDATE = (SELECT MAX(HIREDATE)
FROM EMP)
---------------------------------------------------------------------------------------------84.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE TODOS LOS EMPLEADOS QUE
TRABAJAN EN DALLAS
SELECT *
FROM EMP
WHERE DEPTNO =(SELECT DEPTNO
FROM DEPT
WHERE LOC='DALLAS')
---------------------------------------------------------------------------------------------85.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE TODOS LOS EMPLEADOS QUE
REALIZAN EL MISMO
--TRABAJO QUE SCOTT O QUE GANAN AL MENOS TANTO COMO FORD
SELECT *
FROM EMP
WHERE JOB=(SELECT JOB FROM EMP
WHERE ENAME='SCOTT')
OR SAL>=(SELECT SAL FROM EMP
WHERE ENAME ='FORD')
---------------------------------------------------------------------------------------------86--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE TODOS LOS EMPLEADOS DEL
DEPARTAMENTO 20
Página 57
Administración de Base de Datos
--Y QUE REALIZAN EL MISMO TRABAJO DEL DEPARTAMENTO 30 ORDENADO DESCENDENTEMENTE
POR SALARIO
SELECT *
FROM EMP
WHERE DEPTNO=20 AND JOB IN (SELECT JOB FROM EMP
WHERE DEPTNO=30)
---------------------------------------------------------------------------------------------87--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE TODOS LOS EMPLEADOS QUE
TENGAN UN SALARIO
--SUPERIOR AL SALARIO DE CUALQUIERA DE LOS EMPLEADOS DEL DEPARTAMETO 30
SELECT *
FROM EMP
WHERE SAL> ANY(SELECT SAL FROM EMP
WHERE DEPTNO=30)
---------------------------------------------------------------------------------------------88--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE TODOS LOS EMPLEADOS QUE
TENGAN UN SALARIO
--SUPERIOR AL SALARIO DE TODOS LOS EMPLEADOS DEL DEPARTAMETO 30
SELECT *
FROM EMP
WHERE SAL> ALL(SELECT SAL FROM EMP
WHERE DEPTNO=30)
---------------------------------------------------------------------------------------------89--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE TODOS LOS EMPLEADOS DEL
DEPARTAMENTO 20
--QUE REALIZAN EL MISMO TRABAJO QUE EL DEPARTAMENTO DE VENTAS
Página 58
Administración de Base de Datos
SELECT *
FROM EMP
WHERE DEPTNO=20 AND JOB IN(SELECT JOB
FROM EMP
WHERE DEPTNO =(SELECT DEPTNO
FROM DEPT
WHERE DNAME='SALES'))
90--INSTRUCCION SQL QUE PRESENTE EN PANTALLA TODOS LOS DATOS DEL EMPLEADO DEL
DEPARTAMENTO 30
--QUE GANEN MENOS EN SU DEPARTAMENTO
SELECT *
FROM EMP
WHERE DEPTNO=30 AND SAL=(SELECT MIN(SAL)
FROM EMP
WHERE DEPTNO=30)
--CON ALL
SELECT *
FROM EMP
WHERE DEPTNO=30 AND SAL<=ALL(SELECT SAL
FROM EMP
WHERE DEPTNO=30)
Página 59
Administración de Base de Datos
--
SELECTS CORRELACIONADOS
91.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE GANAN
EL SUELDO
--MAXIMO EN SU DEPARTAMENTO
SELECT *
FROM EMP E
WHERE SAL IN (SELECT MAX(SAL)
FROM EMP
WHERE E.DEPTNO=DEPTNO)
-----------------------------------------------------------------------------------------93.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS QUE GANAN
MAS DEL
--SUELDO PROMEDIO EN SU DEPARTAMENTO
SELECT *
FROM EMP E
WHERE SAL > (SELECT AVG(SAL)
FROM EMP
WHERE E.DEPTNO=DEPTNO)
------------------------------------------------------------------------------------------
94.--INSTRUCCIONS SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS Y SUS
DEPARTAMENTOS
SELECT E.*,D.*
FROM EMP E, DEPT D
Página 60
Administración de Base de Datos
WHERE E.DEPTNO=D.DEPTNO
-----------------------------------------------------------------------------------------95--INSTRUCCIONS SQL QUE PRESENTE EN PANTALLA EL NOMBRE Y CODIGO DE DEPARTAMENTO
,Y EL NOMBRE
--Y SALARIO DEL EMPLEADO
SELECT ENAME, SAL,E.DEPTNO,DNAME
FROM EMP E, DEPT D
WHERE D.DEPTNO=E.DEPTNO
-----------------------------------------------------------------------------------------96--INSTRUCCION SQL QUE PRESENTE EN PANTALLA: NOMBRE,SALARIO, NOMBRE DE
DEPARTAMENTO Y LOCALI--ZACION DE TODOS LOS EMPLEADOS QUE GANEN MAS DE 2500 DOLARES
SELECT ENAME,SAL,DNAME,LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO AND SAL>2500
-----------------------------------------------------------------------------------------127.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL NOMBRE DEL DEPARTAMENTO Y EL
NUMERO DE EMPLEADOS
--QUE TIENE CADA DEPARTAMENTO
SELECT DNAME'NOMBRE DEPARTAMENTO',COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
GROUP BY DNAME
-----------------------------------------------------------------------------------------128.--INSTRUCCIONS SQL QUE PRESENTE EL NOMBRE DEL DEPARTAMENTO Y EL SALARIO TOTAL
QUE SE PAGA POR
--DEPARTAMENTO
Página 61
Administración de Base de Datos
SELECT
DNAME,SUM(SAL)'SALARIO',SUM(ISNULL(COMN,0))'COMISION',SUM(SAL
ISNULL(COMN,0))'TOTAL A PAGAR'
+
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
GROUP BY DNAME
-----------------------------------------------------------------------------------------129.--INSTRUCCIONS SQL QUE PRESENTE EN PANTALLA EL NOMBRE DEL DEPARTAMENTO Y EL
SALARIO PROMEDIO DE
--TODOS AQUELLOS DEPARTAMENTOS QUE TENGAN 5 O MAS EMPLEADOS
SELECT DNAME,AVG(SAL)'SALARIO PROMEDIO',COUNT(*)'NUMERO DE EMPLEADOS'
FROM EMP E,DEPT D
WHERE E.DEPTNO=D.DEPTNO
GROUP BY DNAME
HAVING COUNT(*)>=5
SELECT *
FROM EMP JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
--ES LO MISMO QUE HACER ESTO
SELECT *
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
130.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL CODIGO DEL EMPLEADO,NOMBRE DEL
EMPLEADO,
--CODIGO DEL JEFE DEL EMPLEADO Y EL NOMBRE DEL JEFE DE ESE EMPLEADO
SELECT E.EMPNO,E.ENAME,E.MGR,J.ENAME
FROM EMP E, EMP J
Página 62
Administración de Base de Datos
WHERE J.EMPNO=E.MGR
--OTRA FORMA DE LO MISMO SERÍA CON JOINS
SELECT E.EMPNO,E.ENAME,E.MGR,J.ENAME
FROM EMP E JOIN EMP J
ON J.EMPNO=E.MGR
-------------------------------------------------------------------------------------131.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL CODIGO DEL JEFE, EL NOMBRE DEL JEFE,
--Y EL NUMERO DE EMPLEADOS QUE SE REPORTAN A CADA UNO DE LOS JEFES
SELECT J.EMPNO,J.ENAME,COUNT(*)
FROM EMP J JOIN EMP E
ON J.EMPNO=E.MGR
GROUP BY J.EMPNO,J.ENAME
--OTRA FORMA DE LO MISMO CON SELECTS ANIDADOS
SELECT *,(SELECT COUNT(*) FROM EMP WHERE MGR=X.EMPNO)
FROM EMP X
WHERE EMPNO IN (SELECT MGR FROM EMP)
SELECT *
FROM EMP FULL JOIN DEPT
ON EMP.DEPTNO=DEPT.DEPTNO
132.--INSTRUCCION PARA PODER USAR LA NOMENCLATURA * CONOUTERS JOIN
SP_DBCMPTLEVEL Ejercicios, 80
SELECT *
FROM EMP,DEPT
WHERE EMP.DEPTNO=*DEPT.DEPTNO
Página 63
Administración de Base de Datos
133.--Y EL NUMERO DE EMPLEADOS DE CADA DEPARTAMENTO, INCLUIDOS AQUELLOS QUE NO
TENGAN EMPLEADOS
SELECT D.DEPTNO,D.DNAME,COUNT(E.EMPNO)
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
GROUP BY D.DEPTNO,D.DNAME
-----------------------------------------------------------------------------------------134.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL CODIGO DEL EMPLEADO, NOMBRE DEL
EMPLEADO,
--CÓDIGO DEL JEFE Y NOMBRE DEL JEFE DE TODOS LOS EMPLEADOS INCLUIDOS AQUELLOS QUE
NO
--TENGAN JEFE
SELECT E.EMPNO,E.ENAME,E.MGR,J.ENAME
FROM EMP E LEFT JOIN EMP J
ON J.EMPNO=E.MGR
-------------------------------------------------------------------------------------------Y COMISIONES DE ABSOLUTAMENTE TODOS LOS DEPARTAMENTOS
SELECT
SALARIO,ISNULL(SUM(ISNULL(E.COMN,0)),0)
ISNULL(E.COMN,0)),0) 'TOTAL A PAGAR'
D.DEPTNO,D.DNAME,D.LOC,ISNULL(SUM(E.SAL),0)
COMISION,ISNULL(SUM(E.SAL+
FROM EMP E RIGHT JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
GROUP BY D.DEPTNO,D.DNAME,D.LOC
-----------------------------------------------------------------------------------------135.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA TODOS LOS DATOS DE LOS
DEPARTAMENTOS EN LOS CUALES
--SE PAGA COMISION
SELECT *
Página 64
Administración de Base de Datos
FROM DEPT
WHERE DEPTNO IN (SELECT DEPTNO FROM EMP
WHERE COMN IS NOT NULL)
--OTRA FORMA
SELECT D.*,SUM(ISNULL(E.COMN,0)) COMISION
FROM EMP E JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
GROUP BY D.DEPTNO,D.DNAME,D.LOC
HAVING SUM(ISNULL(E.COMN,0))>0
136.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DEL EMPLEADO Y EL NOMBRE
DEL DEPARTAMENTO
--AL QUE PERTENECE Y LOS DATOS DE SU RESPECTIVO JEFE Y EL NOMBRE DEL DEPARTAMENTO AL
QUE PERTENECE
--EL JEFE
SELECT
E.EMPNO,E.ENAME,E.MGR,E.DEPTNO,(SELECT
DEPTNO=E.DEPTNO),
DNAME
FROM
DEPT
WHERE
J.EMPNO,J.ENAME,J.DEPTNO,(SELECT DNAME FROM DEPT WHERE DEPTNO=J.DEPTNO)
FROM EMP E LEFT JOIN EMP J
ON E.MGR=J.EMPNO
ORDER BY 5
Página 65
Administración de Base de Datos
-------------------------------------------------------------------------------------------------------------------137.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS SUELDOS DE LOS EMPLEADOS Y LOS
SUELDOS DEL JEFE
SELECT E.SAL 'SUELDO EMPLEADO',J.SAL 'SUELDO JEFE'
FROM EMP E JOIN EMP J
ON E.MGR=J.EMPNO
-------------------------------------------------------------------------------------------------------------------138.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA LOS DATOS DE LOS EMPLEADOS CUYO
SUELDO SUPERE AL DE SU JEFE
SELECT E.ENAME,E.SAL 'SUELDO EMPLEADO',J.ENAME,J.SAL 'SUELDO JEFE'
Página 66
Administración de Base de Datos
FROM EMP E JOIN EMP J
ON E.MGR=J.EMPNO AND E.SAL>J.SAL
-------------------------------------------------------------------------------------------------------------------139.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA EL CODIGO DEL EMPLEADO, NOMBRE DEL
EMPLEADO, CODIGO DEL JEFE,
--NOMBRE DEL JEFE, CODIGO DEL DEPARTAMENTO AL QUE PERTENECE EL JEFE Y EL NOMBRE DEL
DEPARTAMENTO Y LOS CODIGOS
--Y NOMBRE DEL DEPARTAMENTO AL QUE PERTENECE EL EMPLEADO
--CON SELECTS ANIDADOS
SELECT E.*,E.DEPTNO,(SELECT DNAME FROM DEPT WHERE DEPTNO=E.DEPTNO),
J.*,J.DEPTNO, (SELECT DNAME FROM DEPT WHERE DEPTNO=E.DEPTNO)
FROM EMP E, EMP J
WHERE E.MGR=J.EMPNO
Página 67
Administración de Base de Datos
--CON 4 TABLAS
SELECT E.*,E.DEPTNO,DE.DNAME,J.*,J.DEPTNO,DJ.DNAME
FROM EMP E, EMP J, DEPT DE, DEPT DJ
WHERE E.MGR=J.EMPNO AND E.DEPTNO=DE.DEPTNO AND J.DEPTNO=DJ.DEPTNO
Página 68
Administración de Base de Datos
--CON JOINS
SELECT E.*,E.DEPTNO,DE.DNAME,J.*,J.DEPTNO,DJ.DNAME
FROM EMP E
JOIN EMP J ON E.MGR=J.EMPNO
JOIN DEPT DE ON E.DEPTNO=DE.DEPTNO
JOIN DEPT DJ ON J.DEPTNO=DJ.DEPTNO
Página 69
Administración de Base de Datos
-------------------------------------------------------------------------------------------------------------------140.--INSTRUCCION SQL QUE PRESENTE EN PANTALLA TODOS LOS DATOS DE LOS EMPLEADOS
QUE TRABAJEN EN LA
--CIUDAD DE DALLAS
--CON SELECTS ANIDADOS
SELECT *
FROM EMP
WHERE DEPTNO=(SELECT DEPTNO FROM DEPT WHERE LOC='DALLAS')
Página 70
Administración de Base de Datos
--CON JOINS
SELECT E.*,D.LOC
FROM EMP E JOIN DEPT D
ON E.DEPTNO=D.DEPTNO AND D.LOC='DALLAS'
--LO MISMO QUE EL ANTERIOR PERO CON OTRA SINTAXIS
SELECT E.*,D.LOC
FROM EMP E JOIN DEPT D
ON E.DEPTNO=D.DEPTNO
WHERE D.LOC = 'DALLAS'
Página 71