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