universidad central del ecuador€¦estos modelos expresan entidades relevantes para un sistema de...

71
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

Upload: phungnga

Post on 29-Sep-2018

214 views

Category:

Documents


0 download

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

Página 2

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

Administración de Base de Datos

Página 3

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:

Administración de Base de Datos

Página 4

(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:

Administración de Base de Datos

Página 5

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.

Administración de Base de Datos

Página 6

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

Administración de Base de Datos

Página 7

Ejercicio 3

Ejercicio 4

Ejercicio 5

Administración de Base de Datos

Página 8

Ejercicio 6

Ejercicio 7

Administración de Base de Datos

Página 9

Ejercicio 8

Ejercicio 9

Administración de Base de Datos

Página 10

Ejercicio 10

Administración de Base de Datos

Página 11

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

Tipo de datos de caracteres de longitud variable de hasta 2

gigabytes, o 231 -1 bytes. Permanece para compatibilidad con

versiones anteriores de Oracle.

DATE

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.

BINARY_FLOAT Número en coma flotante de 32 bits. Este tipo de datos requiere 4

Administración de Base de Datos

Página 12

bytes.

BINARY_DOUBLE Número en coma flotante de 64 bits. Este tipo de datos se

requieren de 8 bytes.

TIMESTAMP [(fractional_seconds_

precision)]

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

por defecto es 6. 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. 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.

TIMESTAMP [(fractional_seconds_

precision)]WITH TIME ZONE

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

por el parámetro NLS_TIMESTAMP_FORMAT o implícitamente por

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.

TIMESTAMP [(fractional_seconds)]

WITH LOCALTIME ZONE

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.

* Cuando se recuperan los datos, los usuarios ven los datos en la

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.

Administración de Base de Datos

Página 13

INTERVAL YEAR [(year_precision)]

TO MONTH

Almacena un período de tiempo en años y meses, donde

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

predeterminado es 2. El tamaño se fija en 5 bytes.

INTERVAL DAY [(day_precision)] T

O SECOND[(fractional_seconds)]

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

predeterminado es 2.

* 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

Administración de Base de Datos

Página 14

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.

Administración de Base de Datos

Página 15

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.

Administración de Base de Datos

Página 16

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;

Administración de Base de Datos

Página 17

--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);

Administración de Base de Datos

Página 18

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');

Administración de Base de Datos

Página 19

--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');

Administración de Base de Datos

Página 20

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

Administración de Base de Datos

Página 21

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 ename, sal * 12 AS "Salario Anual"

FROM emp;

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

Administración de Base de Datos

Página 22

SELECT empno || ', ' || ename "Nombre empleado"

FROM emp;

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

Administración de Base de Datos

Página 23

SELECT ename, sal

FROM emp

WHERE sal NOT BETWEEN 5000 AND 12000

7) Muestra el campo "last_name" de aquellos registros de la tabla "employees" cuyo

"department_id" sea 20 ó 50

SELECT last_name

FROM employees

WHERE department_id IN (20, 50)

ORDER BY last_name

8) Muestra los empleados cuyo salario sea superior a la media

SELECT employee_id

FROM employees

WHERE salary > (

SELECT AVG (salary)

FROM employees)

Administración de Base de Datos

Página 24

9) Muestra los empleados que pertenezcan a un departamento que contenga la letra "K" en

el nombre

SELECT last_name, job_id

FROM employees

WHERE department_id IN (

SELECT department_id

FROM departments

WHERE UPPER(department_name) LIKE '%K%')

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,

Administración de Base de Datos

Página 25

tCoches.num_plazas

FROM tCoches, tMarcas

WHERE tCoches.marca = tMarcas.codigo

13) El ejemplo anterior escrito utilizando la clausula INNER JOIN quedaria de la siguiente

manera:

14) SELECT tCoches.matricula,

tMarcas.marca,

tCoches.modelo,

tCoches.color,

tCoches.numero_kilometros,

tCoches.num_plazas

FROM tCoches

INNER JOIN tMarcas ON tCoches.marca = tMarcas.codigo

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 tCoches.matricula,

tMarcas.marca,

tCoches.modelo,

tCoches.color,

tCoches.numero_kilometros,

tCoches.num_plazas

FROM tCoches

LEFT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo

17) El mismo ejemplo con RIGHT OUTER JOIN.

Administración de Base de Datos

Página 26

SELECT tCoches.matricula,

tMarcas.marca,

tCoches.modelo,

tCoches.color,

tCoches.numero_kilometros,

tCoches.num_plazas

FROM tCoches

RIGHT OUTER JOIN tMarcas ON tCoches.marca = tMarcas.codigo

18) El siguiente ejemplo muestra el uso de UNION

SELECT tCoches.matricula,

tMarcas.marca,

tCoches.modelo,

tCoches.color,

tCoches.numero_kilometros,

tCoches.num_plazas

FROM tCoches

INNER JOIN tMarcas ON tCoches.marca = tMarcas.codigo

UNION

19)

SELECT tMotos.matricula,

tMarcas.marca,

tMotos.modelo,

tMotos.color,

tMotos.numero_kilometros,

0

FROM tMotos

INNER JOIN tMarcas ON tMotos.marca = tMarcas.codigo;

20) Devuelve la suma de los salarios

Administración de Base de Datos

Página 27

SELECT SUM(Sales) FROM Store_Information

WHERE Store_name IN

(SELECT store_name FROM Geography

WHERE region_name = 'West')

Résultat :

SUM(Sales)

2050

21) SELECT SUM(a1.Sales) FROM Store_Information a1

WHERE a1.Store_name IN

(SELECT store_name FROM Geography a2

WHERE a2.store_name = a1.store_name)

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 los empleados

cuyo salario es igual o mayor que el salario

medio de todos los empleados con el mismo título. A la

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;

Administración de Base de Datos

Página 28

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.

Administración de Base de Datos

Página 29

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

Administración de Base de Datos

Página 30

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;

Administración de Base de Datos

Página 31

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;

Administración de Base de Datos

Página 32

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';

Administración de Base de Datos

Página 33

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

Administración de Base de Datos

Página 34

------------------------------------------------------------------------------------------------------

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. MAXIMO',CONVERT

(DECIMAL(10,3),AVG(SAL))'SAL. PROMEDIO'

FROM EMP

------------------------------------------------------------------------------------------------------

17.-INSTRUCCION SQL QUE PRESENTE EN PANTALLAS EL TOTAL DE SALARIOS QUE SE PAGA Y EL #

DE EMPLEADOS

Administración de Base de Datos

Página 35

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 QUE PRESENTE EN PANTALLA EL SUELDO PROMEDIO POR

DEPARTAMENTOS

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

Administración de Base de Datos

Página 36

------------------------------------------------------------------------------------------------------

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

Administración de Base de Datos

Página 37

------------------------------------------------------------------------------------------------------

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

Administración de Base de Datos

Página 38

------------------------------------------------------------------------------------------------------

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

Administración de Base de Datos

Página 39

WHERE ENAME='JONES'

SELECT *

FROM EMP

WHERE JOB='MANAGER'

--CON SELECTS ANIDADOS

SELECT *

FROM EMP

WHERE JOB=(SELECT JOB

FROM EMP

WHERE ENAME='JONES')

------------------------------------------------------------------------------------------------------

Administración de Base de Datos

Página 40

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

Administración de Base de Datos

Página 41

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

Administración de Base de Datos

Página 42

---------------------------------------

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

Administración de Base de Datos

Página 43

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')

Administración de Base de Datos

Página 44

------------------------------------------------------------------------------

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')

Administración de Base de Datos

Página 45

------------------------------------------------------------------------------

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 *

Administración de Base de Datos

Página 46

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

------------------------------------------------------------------------

Administración de Base de Datos

Página 47

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

Administración de Base de Datos

Página 48

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

Administración de Base de Datos

Página 49

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

Administración de Base de Datos

Página 50

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'

Administración de Base de Datos

Página 51

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

Administración de Base de Datos

Página 52

----------------------------------------------------------------------------------------------------

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

Administración de Base de Datos

Página 53

-----------------------------------------------------------------------------------------

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'

Administración de Base de Datos

Página 54

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 *

Administración de Base de Datos

Página 55

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

Administración de Base de Datos

Página 56

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)

Administración de Base de Datos

Página 57

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

Administración de Base de Datos

Página 58

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

Administración de Base de Datos

Página 59

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)

Administración de Base de Datos

Página 60

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

Administración de Base de Datos

Página 61

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

Administración de Base de Datos

Página 62

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

Administración de Base de Datos

Página 63

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

Administración de Base de Datos

Página 64

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 D.DEPTNO,D.DNAME,D.LOC,ISNULL(SUM(E.SAL),0)

SALARIO,ISNULL(SUM(ISNULL(E.COMN,0)),0) COMISION,ISNULL(SUM(E.SAL+

ISNULL(E.COMN,0)),0) 'TOTAL A PAGAR'

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 *

Administración de Base de Datos

Página 65

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 DNAME FROM DEPT WHERE

DEPTNO=E.DEPTNO),

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

Administración de Base de Datos

Página 66

--------------------------------------------------------------------------------------------------------------------

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'

Administración de Base de Datos

Página 67

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

Administración de Base de Datos

Página 68

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

Administración de Base de Datos

Página 69

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

Administración de Base de Datos

Página 70

--------------------------------------------------------------------------------------------------------------------

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')

Administración de Base de Datos

Página 71

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