EJERCICIOS CON SOLUCIONES DE SQL ÍNDICE - Oposinet

Transcription

ejer sol.sqlEJERCICIOS CON SOLUCIONES DE SQLÍNDICETABLA HOSPITAL . 4TABLA SALA . 4TABLA PLANTILLA . 4TABLA OCUPACIÓN . 5TABLA DOCTOR . 5TABLA ENFERMO . 6TABLA EMP . 7TABLA DEPT2 . 7CLÁUSULA WHERE . 81. 82. 83. 8FUNCIONES DE CADENA . 94. 95. 96. 107. 108. 109. 1110. 12OPERADORES Y FUNCIONES DE FECHAS . 1311. 1312. 1313. 1314. 1315. 14

CLÁUSULA GROUP BY . 1516. 1517. 1518. 1519. 1520. 1621. 1622. 1623. 1724. 1725. 1726. 1827. 1828. 1929. 2030. 20COMBINACIONES DE TABLAS . 2231. 2232. 2233. 2234. 2335. 2336. 2437. 2438. 25COMBINACIONES (OUTER JOIN). 2539. 2640. 2641. 27SUBCONSULTAS . 2942. 2943. 2944. 3045. 3046. 3047. 3148. 3149. 3150. 3251. 3352. 3353. 3454. 3455. 3456. 35

57. 3558. 36INSERCIONES. 3759. 3760. 3761. 3762. 37ACTUALIZACIONES . 3863. 3864. 3865. 3866. 38CREACIÓN DE TABLAS . 3967. 3968. 3969. 4070. 40CREACIÓN DE VISTAS . 4071. 4072. 4173. 4174. 4175. 41

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASETABLA HOSPITALCOLUMNA--------HOSPITAL CODNOMBREDIRECCIONTELEFONONUM CAMA------NULOS----------NOT CAMA--------------------- --------13Provincial0 Donell 5O,964-426450218GeneralAtocha s/n595-311198722La PazCastellana 1000923-541141245San CarlosCiudad Universitaria597-1500845TABLA SALACOLUMNA-------HOSPITAL CODSALA CODNOMBRENUM CAMA-------NULOS---NOT NULLNOT NULLHOSPITAL-CODSALA-COD--------------------- idados IntensivosPsiquiátricoCuidados ciónMaternidad1011834551324TABLA PLANTILLACOLUMNA----------------HOSPITAL CODSALA CODEMPLEADO NOAPELLIDOFUNCIONTURNOSALARIONULOSTIPO-----NOT NULLNUMBER(2)NOT NULLNUMBER(2)NOT MBER(10)Ejercicios con soluciones de SQLPágina 4 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEHOSPITAL-COD SALA-COD EMPLEADO-NO APELLIDO FUNCION TURNO SALARIO------------ ------------------------- ------ ----------1363754Diaz B. EnfermeraT22620001363106Hernandez J.Enfermero T27550001846357Karplus W.Interno T33790002261009Higueras D.Enfermera T20050002268422Bocina G.Enfermero M 16380002229901NuÑez C.Interno M22100002216065Rivera G.EnfermeraN16260002217379Carlos R.EnfermeraT21190004541280Amigo R.Interno N22100004518526Frank H. EnfermeraT25220002221234Garcia J. Enfermo M30000002222222Garcia JTABLA OCUPACIÓNCOLUMNA--------------INSCRIPCIONHOSPITAL CODSALA CODCAMANULOS----NOT NULLNOT NULLNOT PCION HOSPITAL CODSALA COD------------------------------ 26590762266382722664823222CAMA123121231TABLA DOCTORCOLUMNA----------------HOSPITAL CODDOCTOR NOAPELLIDOESPECIALIDADNULOS--------NOT NULLNOT NULLTIPOHOSPITAL COD-------------------13181822222245DOCTOR NO APELLIDOESPECIALIDAD-------- -------------435Lopez A.Cardiología585Miller G.Ginecología982Cajal R. Cardiología453Galo D. Pediatría398Best K. Urología386Cabeza D.Psiquiatría607Niqo P. 6)Ejercicios con soluciones de SQLPágina 5 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASE45522Adams C.NeurologíaTABLA ECCIONFECHA-NACSNSSNULOS------NOT AR2(1)NUMBER(9)INSCRIPCION APELLIDODIRECCIONFECHA-NACSNSS------------------ ----------------- -------10995 Laguia M.Recoletos 5023-JUN-67M28086248218004 Serrano V.Alcala 1221-MAY-60F28499145214024 Fernandez MRecoletos 5023-JUN-67F32179005936658 Domin S.Mayor 7101-JAN-42M16065747138702 Neal R. Orense 1118-JUN-40F38001021739217 Cervantes M.Peron 3829-FEB-52M44029439059076 Miller G.Lopez de Hoyos 216-SEP-45F31196904463827 Ruiz P. Esquerdo 10326-DEC-80M10097325364823 Fraser A.Soto 310-JUL-80F28520177674835 Benitez E.Argentina 505-OCT-57M154811767Ejercicios con soluciones de SQLPágina 6 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASETABLA EMPCOLUMNA--------------EMP N0APELLIDOOFICIODIRFECHA ALTASALARIOCOMISIÓNDEPT (10)NUMBER(4)DATENUMBER(10)NUMBER(10)NUMBER(2)EMP NO APELLIDOOFICIO DIRFECHA ALTA SALARIO COMISIÓN DEPT NO----- --------------- ------------- ------- --------- ----- VENDEDOR769820-FEB-81208000 39000 307521SALAVENDEDOR769822-FEB-81162500 65000 ASVENDEDOR769828-SEP-81162500 182000 3-DEC-81123500307902FERNANDEZ 2 23-JAN-8216900010TABLA DEPT2COLUMNA--------DEPT AR2(14)VARCHAR2(14)DEPT NONOMBRE-------- �N30VENTAS40OPERACIONESEjercicios con soluciones de SQLLOCMADRIDBILBAOSEVILLAMALAGAPágina 7 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASECLÁUSULA WHERE1. Encuentre a todos los miembros del personal cuyo nombre empiece por 'H'.select apellidofrom plantillawhere upper(apellido) like 'H%';APELLIDO----------Hernandez J.Higueras D.2. )Quienes son las enfermeras y enfermeros que trabajan en turnos de Tarde o Mañana?select apellidofrom plantillawhere upper(funcion) in ('ENFERMERO' ,'ENFERMERA')and upper(turno) in ('T','M');APELLIDO---------Diaz B.Hernandez J.Higueras D.Bocina G.Carlos R.Frank H.3. Haga un listado de las enfermeras que ganan entre 2.000.000 y 2.500.000 Pts.select apellido, salariofrom plantillawhere salario between 2000000 and 2500000and upper(funcion) 'ENFERMERA';APELLIDO-------------Diaz B.Higueras D.Carlos s con soluciones de SQLPágina 8 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEFUNCIONES DE CADENA4.Mostrar, para todos los hospitales, el código de hospital, el nombre completo del hospitaly su nombre abreviado de tres letras (a esto podemos llamarlo ABR) Ordenar la recuperación poresta abreviatura.select substr(nombre,1,3) abr, hospital cod, nombrefrom hospitalorder by 1;ABR HOSPITAL COD NOMBRE----- ------------------------ -----------Gen 18GeneralLa22La PazPro 13ProvincialSan 45San Carlos5.En la tabla DOCTOR otorgar a Cardiología un código de 1, a Psiquiatría un código de 2,a Pediatría un código de 3 y a cualquier otra especialidad un código de 4. Recuperar todos losdoctores, su especialidad y el código asignado.select apellido, especialidad,decode(especialidad, 'Cardiología', lpad('1',6,' '),'Psiquiatría', lpad('2',6,' '),'Pediatría', lpad('3',6,' '),lpad('4',6,' '), códigofrom doctor;APELLIDO-------------Lopez A.Miller G.Cajal R.Galo D.Best K.Cabeza D.Niqo P.Adams �aPediatríaNeurologíaEjercicios con soluciones de SQLCÓDIGO------------14134234.Página 9 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASE6. Hacer un listado de los nombres de los pacientes y la posición de la primera letra 'A' queaparezca en su apellido, tomando como referencia la primera letra del mismoselect apellido, instr(apellido,'A',1) "PRIMERA LETRA A"from enfermo;APELLIDO--------------Laguia M.Serrano V.Fernandez M.Domin S.Neal R.Cervantes M.Miller G.Ruiz P.Fraser A.Benitez E.7.PRIMERA LETRA A-------------------------2550350030Queremos conseguir:COMENTARIO-------------------El departamento de CONTABILIDAD esta en SEVILLAEl departamento de INVESTIGACIÓN esta en MADRIDEl departamento de VENTAS esta en BARCELONAEl departamento de PRODUCCIÓN esta en BILBAOselect 'El departamento de' dnombre 'esta en ' loc comentariofrom dept2;8.Para cada empleado cuyo apellido contenga una "N", queremos que nos devuelva "nnn",pero solo para la primera ocurrencia de la "N". La salida debe estar ordenada por apellidoascendentemente.select substr( apellido,1, instr(apellido,'N',1,1) -1) 'nnn' substr( apellido, instr(apellido, 'N',1,1) 1) "TRES N"from empwhere upper(apellido) like '%N%'order by apellido;Ejercicios con soluciones de SQLPágina 10 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASETRES RTInnnnnnEGROSAnnnCHEZ9.Para cada empleado se pide que salga su salario total (salario mas comisión) y luego susalario fragmentado, es decir, en centenas de mil, decenas de mil. decenas y unidades. La salidadebe estar ordenada por el salario y el apellido descendéntemente.select apellido, salario nvl(comision,O) sal total,substr(salario nvl(comision,O),1,1) c,substr(salario nvl(comision,O),2,1) d,substr(salario nvl(comision,O),3,1) m,substr(salario nvl(comision,O),4,1) c,substr(salario nvl(comision,O),5,1) d,substr(salario nvl(comision,O),6,1) ufrom emporder by 2 desc, HEZ10.SAL 4000CDMCDU-- -- -- -- -- -6 5 0 0 0 03 9 0 0 0 03 9 0 0 0 03 8 6 7 5 03 7 0 5 0 03 4 4 5 0 03 1 8 5 0 02 4 7 0 0 02 2 7 5 0 01 9 5 0 0 01 6 9 0 0 01 4 3 0 0 01 2 3 5 0 01 0 4 0 0 0Para cada empleado que no tenga comisión o cuya comisión sea mayor que el 15% de suEjercicios con soluciones de SQLPágina 11 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEsalario, se pide el salario total que tiene. Este será: si tiene comisión su salario mas su comisión,y si no tiene, su salario mas su nueva comisión (15% del salario). La salida deberá estarordenada por el oficio y por el salario que le queda descendéntemente.select apellido, oficio, salario nvl(comision,salario*0.15) salario totalfrom empwhere comisión is null or comisión salario*0.15order by oficio, 3 OFICIOSALARIO DOR247000VENDEDOR227500Ejercicios con soluciones de SQLPágina 12 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEOPERADORES Y FUNCIONES DE FECHAS11.uno.Encuentre a todas las enfermeras y enfermeros con indicación del salario mensual de cadaselect apellido, trunc(salario/12) "SALARIO MENSUAL"from plantillawhere upper(funcion) in ('ENFERMERA', 'ENFERMERO');APELLIDO--------------Diaz B.Hernandez J.Higueras D.Bocina G.Rivera G.Carlos R.Frank H.12.SALARIO 136500135500176583210166Que fecha fue hace tres semanas?select sysdate -21 fechafrom dual;13. Se pide el nombre, oficio y fecha de alta del personal del departamento 20 que ganan mas de150000 ptas. mensuales.select apellido, oficio,to char (fecha alt, 'day month dd " de " yyyy hh24:mi') altafrom empwhere (dept no 20) and (salario FICIOALTA---------------- ------------------------------DIRECTORthursday april 02 de 1981 00:00ANALISTAmonday november 09 de 1981 00:00ANALISTAthursday december 03 de 1981 00:0014.Se pide el nombre, oficio y el día de la semana en que han sido dados de alta losempleados de la empresa, pero solo de aquellos cuyo día de alta haya sido entre martes y jueves.Ordenado por oficio.select emp no, oficio, to char(fecha alt, 'day') díafrom empwhere to char(fecha alt,'DY') in ('TUE','WED','THU')Ejercicios con soluciones de SQLPágina 13 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEorder by 5.Para todos los empleados, el día en que fueron dados de alta en la empresa debe estarordenada por el día de la semana (Lunes, Martes . Viernes) . Los días no laborables serán "Finde semana".select apellido, oficio, decode(to char(fecha alt,'DY'),'MON', 'Lunes','TUE', 'Martes','WED', 'Miercoles','THU', 'jueves','FRI', 'Viernes','Fin de semana')from emporder by EADOVENDEDOREMPLEADOEjercicios con soluciones de SQLDÍA--------------------Fin de semanaFin de tesMiercolesMiercolesMiercolesPágina 14 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASENEGRODIRECTOREjercicios con soluciones de SQLViernesPágina 15 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASECLÁUSULA GROUP BY16.Encontrar el salario medio de los Analistas.select avg(salario) "SALARIO MEDIO"from empwhere upper(oficio) 'ANALISTA';SALARIO MEDIO----------------------39000017.Encontrar el salario mas alto y el salario mas bajo de la tabla de empleados, así como ladiferencia entre ambos.select max(salario) maximo, min(salario) mínimo,max(salario) - min(salario) diferenciafrom 000DIFERENCIA---------54600018.Calcular el numero de oficios diferentes que hay, en total, en los departamentos 10 y 20de la empresa.select count(distinct oficio) tareasfrom empwhere dept no in (10,20);TAREAS-----------419. Calcular el numero de personas que realizan cada oficio en cada departamento.select dept no, oficio, count(*)from empgroup by dept no, oficio;Ejercicios con soluciones de SQLPágina 16 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEDEPT DOR4Buscar que departamentos tienen mas de cuatro personas trabajando.select dept no, count(*)from empgroup by dept nohaving count(*) 4;DEPT r que departamentos tienen mas de dos personas trabajando en la misma profesión.select dept no, count(*)from empgroup by dept no, oficiohaving count (*) 2;DEPT NO-----------30PERSONAS--------------422.Se desea saber el numero de empleados por departamento que tienen por oficio el de"EMPLEADO". La salida debe estar ordenada por el numero de departamento.select dept no, count(*)from empwhere upper(oficio) 'EMPLEADO'group by dept no;Ejercicios con soluciones de SQLPágina 17 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEDEPT e desea saber el salario total (salario mas comisión) medio anual de los vendedores denuestra empresa.select oficio, avg(salario nvl(comision,O)) 'SALARIO MEDIO ANUAL'from empwhere upper(oficio) in ('VENDEDOR')group by oficio;OFICIOSALARIO MEDIO NDEDOR25350024.Se desea saber el salario total (salario mas comisión) medio anual, tanto de los empleadoscomo de los vendedores de nuestra empresa.select oficio, avg(salario nvl(comision,O)) 'SALARIO MEDIO ANUAL'from empwhere upper(oficio) in ('VENDEDOR', 'EMPLEADO')group by oficio;OFICIOSALARIO MEDIO MPLEADO134875VENDEDOR25350025.Se desea saber para cada departamento y en cada oficio, el maximo salario y la suma totalde salarios, pero solo de aquellos departamentos y oficios cuya suma salarial supere o sea igualque el 50% de su maximo salario. En el muestreo, solo se estudiaron a aquellos empleados queno tienen comisión o la tengan menor que el 25% de su salario.select dept no, oficio, sum(salario) suma, max(salario) maximofrom empwhere (comisión is null) or (comisión 0.25*salario)group by dept no, oficiohaving sum(salario) 0.5*max(salario);Ejercicios con soluciones de SQLPágina 18 M.J.M.

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASEDEPT IRECTOREMPLEADOVENDEDORSUMAMAXIMO-------------- 0012350040300020800026.Se desea saber para cada oficio, dentro de cada año de alta distinto que existe en nuestraempresa, el numero de empleados y la media salarial que tiene. Para este estudio, no se tendrá encuenta a los empleados que no hayan sido dados de alta en un día laboral. Además,

Desarrollo de Aplicaciones en Entornos de Cuarta Generación y Herramientas CASE Ejercicios con soluciones de SQL Página 10 M.J.M. 6. Hacer un listado de los nombres de los pacientes y la posición de la primera letra 'A' que aparezca en su apellido, tomando como referencia la primera letra del mismo