SlideShare una empresa de Scribd logo
Guía de ejercicios de SQL
Prof. Claudio Gutiérrez, Aux. Mauricio Monsalve
Otoño de 2008
[P1] Corretaje de propiedades
Enunciado Sean las siguientes tablas de una base de datos de una corredora de propiedades:
Arrendatario(RUT,Nombre,Apellido)
Arrienda(RUT,Id_casa,Deuda) Ojo: Deuda >=0 (si es 0, no hay deuda)
Telefonos(RUT,Fono)
Dueño(RUT,Nombre,Apellido)
Casa(Id_casa,RUT,Nro,Calle,Comuna)
Al respecto, conteste las siguientes preguntas:
1. Los arrendatarios que arriendan la casa ubicada en la calle Carrera nº 1024, Santiago.
2. ¿Cuánto le deben a María Pérez?
3. ¿Cuál es la deuda total para cada dueño?
4. Liste todas las personas de la base de datos
5. Indique los dueños que poseen tres o más casas.
6. Liste los dueños que tengan deudores en todas sus casas.
7. Entregue estadísticas sobre los arrendatarios por casa. Entregue:
1. El promedio.
2. La varianza.
3. El máximo.
4. El mínimo.
5. La moda.
6. La mediana.
Solución Recomendación: evite colocar selects en el from. Prefiera no anidar de esa manera;
muchas veces eso se puede escribir dentro de where.
1
1. Este es el tipo más sencillo de consulta posible.
SELECT A.RUT, A.Nombre, A.Apellido
FROM Arrendatario A, Arrienda B, Casa C
WHERE A.RUT=B.RUT AND B.Id_casa=C.Id_casa
AND C.Calle='Carrera' AND C.Nro='1024' AND C.Comuna='Santiago' ;
2. Se supondrá que María Pérez hay una sola.
SELECT SUM(A.Deuda) FROM Arrienda A, Casa B, Dueño C
WHERE A.Id_casa=B.Id_casa AND B.RUT=C.RUT
AND C.Nombre='María' AND C.Apellido='Pérez' ;
3. Aquí es necesario agrupar la información, así la suma se hará dentro de cada grupo indica-
do. Entregué toda la información necesaria en el SELECT, aunque con el RUT del dueño basta-
ría (si en el trabajo le piden algo así, entregue todo).
SELECT SUM(A.Deuda), C.RUT, C.Nombre, C.Apellido
FROM Arrienda A, Casa B, Dueño C
WHERE A.Id_casa=B.Id_casa AND B.RUT=C.RUT
GROUP BY C.RUT ;
4. Las personas de la BD son los arrendatarios y los dueños. Para entregar ambos, hay que rea-
lizar una unión. Nota: para realizar una unión, los esquemas deben ser compatibles (atributos
con mismo nombre y
dominio). Afortunadamente, éste es el caso.
SELECT * FROM Arrendatario UNION SELECT * FROM Dueño ;
5. Hay dos maneras de hacer esto: con agregación y sin ésta. El caso sin agregación (menos
evidente en general) consiste en hacer un join de tres tablas.
Sin agregación:
SELECT A.RUT, A.Nombre, A.Apellido
FROM Dueño A, Casa C1, Casa C2, Casa C3
WHERE A.RUT=C1.RUT AND C1.RUT=C2.RUT AND C2.RUT=C3.RUT
AND C1.Id_casa<>C2.Id_casa AND C1.Id_casa<>C3.Id_casa
AND C2.Id_casa<>C3.Id_casa ;
2
Con agregación: en este caso, es necesario utilizar HAVING. HAVING es el WHERE pero
para funciones agregadas. En el HAVING sólo pueden aparecer funciones agregadas y cons-
tantes.
SELECT A.RUT, A.Nombre, A.Apellido
FROM Dueño A, Casa C
WHERE A.RUT=C.RUT
GROUP BY A.RUT
HAVING COUNT(DISTINCT C.Id_casa)>=3 ;
6. Jugando con la semántica vemos que un dueño con deudores en todas sus casas equivale a
un dueño con deuda en todas sus casas. Y el complemento de eso son los dueños con casas sin
deudas.
SELECT D.RUT, D.Nombre, D.Apellido
FROM Dueño D, Casa C
WHERE D.RUT=C.RUT
EXCEPT
SELECT D.RUT, D.Nombre, D.Apellido
FROM Dueño D, Casa C, Arrienda A
WHERE D.RUT=C.RUT AND C.Id_casa=A.Id_casa AND A.Deuda>0
Otra manera consiste en exigir que la deuda de cada casa del dueño sea positiva. En este caso,
una consulta
anidada exigiendo igualdad sobreALL basta.
SELECT D.RUT, D.Nombre, D.Apellido
FROM Dueño D, Casa C
WHERE D.RUT=C.RUT
AND 0 = ALL ( SELECT A.Deuda
FROM Arrienda A
WHERE C.Id_casa=A.Id_casa)
OR NOT EXISTS ( SELECT *
FROM Arrienda A
WHERE C.Id_casa=A.Id_casa) ;
Esto es equivalente a lo anterior: que no exista (NOT EXISTS) una casa con deuda para este
dueño. De hecho, es más eficiente.
SELECT D.RUT, D.Nombre, D.Apellido
FROM Dueño D, Casa C
WHERE D.RUT=C.RUT
3
AND NOT EXISTS ( SELECT *
FROM Arrienda A
WHERE C.Id_casa=A.Id_casa AND A.Deuda>0) ;
7. En esta sección veremos cómo calcular estadísticas con SQL estándar. El promedio de arren-
datarios por casa: la manera correcta de hacerlo es considerar todos los arrendatarios que efec-
tivamente arrienden y todas las casas. Así se contarán las casas con 0 arrendatarios, que debe-
rían ser consideras en el promedio.
SELECT DISTINCT COUNT(DISTINCT A.RUT)/COUNT(DISTINCT B.Id_casa)
FROM Arrienda A, Casa B ;
El máximo requiere una consulta anidada sencilla. Hay que contar el número de arrendatarios
por cada grupo y exigir que sea mayor a los de los demás grupos. Esta consulta tiene un error.
¿Cuál es?1
¿Cómo se corrige?
SELECT COUNT(A.RUT)
FROM Arrienda A
GROUP BY A.Id_casa
HAVING COUNT(A.RUT) >= ALL( SELECT COUNT(B.RUT)
FROM Arrienda B
GROUP BY B.Id_casa) ;
El mínimo es análogo. Esta consulta tiene un error. ¿Cuál es? ¿Cómo se corrige?
SELECT COUNT(A.RUT)
FROM Arrienda A
GROUP BY A.Id_casa
HAVING COUNT(A.RUT) <= ALL( SELECT COUNT(B.RUT)
FROM Arrienda B
GROUP BY B.Id_casa) ;
Ahora necesito la siguiente consulta: el número de arrendatarios por casa. Se advierte que la
práctica de realizar consultas anidadas en el FROM se debe evitar si se puede usar IN, NOT IN,
EXISTS, ALL, etc.
(*) =  SELECT Id_casa AS ID, COUNT(DISTINCT RUT) AS N
FROM Arrienda
GROUP BY Id_casa
1 Hint: puede que el error esté cerca del operador de agregación...
4
UNION
SELECT Id_casa AS ID, 0 AS N
FROM Casa
WHERE Id_casa NOT IN ( SELECT X.Id_casa
FROM Arrienda X) ;
La varianza es la desviación de la media. Puesto que dos operaciones agregadas son necesarias
para resolver esto, forzosamente necesitamos realizar una consulta previa e incluirla en el
FROM.
Fórmula: Var[X]=E[X2
]−E2
[X]
SELECT SUM(N*N)/COUNT(ID)­AVG(N)*AVG(N)
FROM (*);
La moda es la frecuencia más repetida. La frecuencia es el COUNT, por ende aplico la compa-
ración en el HAVING.
SELECT X.N
FROM (*) X
GROUP BY X.N
HAVING COUNT(DISTINCT X.ID) >= ALL ( SELECT COUNT(DISTINCT Y.ID)
FROM (*) Y
GROUP BY Y.N) ;
La mediana esla frecuencia central. Se supondrá que es única.
SELECT DISTICT X.N
FROM (*) X, (*) Y, (*) Z
WHERE X.N > Y.N AND X.N < Z.N
GROUP BY X.N
HAVING COUNT(DISTINCT Y.ID) = COUNT(DISTINCT Z.ID) ;
Propuesto: ¿Cómo se puede hacer en los casos con, por ejemplo, 4 candidatos? Algo como: 0 0
0 0 1 2 3 3 4 4 4 4 5 5 6 7 8 9 9 11. No es mucho más complicado que la consulta anterior puesto
que hay que hacer una pequeña observación para contestar la pregunta.
5
[P2] Sistema de e-learning
Enunciado Noob Saiborg2
está desarrollando un sistema de evaluación automático como par-
te de un paquete de e-learning comercial. En este sistema, los tests consisten de 1 ó más pre-
guntas con alternativas. Para hacer el sistema flexible, y para aumentar la dificultad de los pro-
blemas, uno de los requerimientos es que las preguntas -de las que consisten los tests- tengan
una o más soluciones. (Por ejemplo, una pregunta del tipo “¿Cuál de las siguientes propiedades
presenta el paradigma OOP?” requiere la selección de varias alternativas.) Actualmente, Noob
S. cuenta con el siguiente modelo de datos relacional para modelar los tests:
test(tnum,titulo,curso,descripcion,autor)
preg(tnum,pnum,enunciado)
pregalt(tnum,pnum,alt,texto,correcta)    //correcta es booleana
resp(user,tnum,pnum,alt)
alumno(user,nombre,apellido)
cursa(user,curso)
contesta(user,tnum)
cursos(curso,nombre)
En este sencillo (primitivo) modelo de datos, Noob S. necesita resolver los siguientes problemas
con SQL:
1. Sobrescribir el test X con otro test Y. (X,Y son tnum)
2. Conocer el número de tests por curso.
3. Conocer los cursos sin tests.
4. Determinar los tests con falencias. Un test tiene falencias si no tiene preguntas, si su
primera pregunta (pnum) no está numerada 1, si las preguntas no son consecutivas (ej.
1,2,4,5,8), si hay preguntas con 1 ó menos alternativas3
, si todas las alternativas son
verdaderas o si todas las alternativas son falsas.
5. Corregir los test cuya única falencia radica en la numeración de las preguntas.
6. Cuántos alumnos hay en cada curso.
7. Qué alumnos han contestado tests que no les corresponden (de cursos que no cursan).
8. Obtener el puntaje no normalizado de cada rendición de test. El puntaje no normaliza-
do ha sido definido (requerimiento) como: P = buenas – malas/4. Si un alumno no con-
testa en una pregunta exactamente lo mismo que se ha definido como correcto, la pre-
gunta cuenta como mala a menos que el alumno haya omitido.
9. Obtener el puntaje normalizado, o sea, de 1,0 a 7,0.
Solución Para resolver este problema es necesario saber cómo escribir consultas y cómo mo-
dificar datos con SQL.
2 Chiste fome MK2. Noob Saibot = Boon Tobias.
3 Esto es semánticamenteincorrecto. Una selección múltiple es, en sí misma, una alternativa. Pero en general se
entiende queuna opción y una alternativa son lo mismo. (Opción es el término correcto.)
6
[1] Sobrescribir el test X con el test Y se hace borrando el test X y copiando los datos del test Y
con el tnum X. Haremos el proceso completo de borrado de un test, considerando si el test fue
contestado, y copiaremos los datos de Y.
delete from test where tnum=X;
delete from preg where tnum=X;
delete from alt where tnum=X;
delete from contesta where tnum=X;
delete from resp where tnum=X;
insert into test select X, titulo, curso, descripcion, autor
                 from test where tnum=Y;
insert into preg select X, pnum, enunciado
                 from preg where tnum=Y;
insert into pregalt select X, pnum, alt, texto, correcta
                    from pregalt where tnum=Y;
[2] El número de tests por curso tiene la forma (curso, número). Es una simple y vil agrupación
con count(*).
select curso, count(*)
from test
group by curso;
[3] Una simple sustracción.
select curso from cursos
except
select curso from test;
[4] Cada exigencia del enunciado puede ser consultada por separado y luego unida para obte-
ner los tnum que corresponden a tests inválidos.
(
 select tnum from test 
 EXCEPT select tnum from preg
)
UNION
(
 select tnum from preg
 group by tnum having min(pnum)<1
)
7
UNION
(
 select tnum from preg
 group by tnum having max(pnum)<>count(pnum)
)
UNION
(
 select tnum from pregalt
 group by tnum,pnum having count(alt)=1
)
UNION
(
 select tnum from (select tnum,preg from preg
                   EXCEPT select tnum,preg from pregalt)
)
UNION
(
 select tnum from pregalt
 group by tnum,alt having count(distinct cierta)=1
);
El resto de las preguntas se dejan como ejercicios propuestos.
8

Más contenido relacionado

La actualidad más candente

Acerca de los algoritmos de mezcla en cajeros automáticos
Acerca de los algoritmos de mezcla en cajeros automáticosAcerca de los algoritmos de mezcla en cajeros automáticos
Acerca de los algoritmos de mezcla en cajeros automáticos
Agustín Ortiz Valdiviezo
 
Break even point two linear equations system
Break even point two linear equations systemBreak even point two linear equations system
Break even point two linear equations system
Edgar Mata
 
Unidad 2
Unidad 2Unidad 2
Template 2 1 the stright line 2020 - solved
Template 2 1 the stright line 2020 - solvedTemplate 2 1 the stright line 2020 - solved
Template 2 1 the stright line 2020 - solved
Edgar Mata
 
jaisan
jaisanjaisan
jaisan
jai
 
Matlab
MatlabMatlab
Actividad nro 2 (parte a y b)
Actividad nro 2 (parte a y b)Actividad nro 2 (parte a y b)
Actividad nro 2 (parte a y b)
Rafael Garcia
 
1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
Ángel Leonardo Torres
 
Arreglos
ArreglosArreglos
Arreglos
rosariocoral
 
Estructura de datos s14
Estructura de datos s14Estructura de datos s14
Estructura de datos s14
Maestros Online
 
Lógica de la Programación Naturaleza de los Datos II
Lógica de la  Programación Naturaleza de los Datos IILógica de la  Programación Naturaleza de los Datos II
Lógica de la Programación Naturaleza de los Datos II
Videoconferencias UTPL
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
José A. Alonso
 
Break even point two linear equations system
Break even point two linear equations systemBreak even point two linear equations system
Break even point two linear equations system
Edgar Mata
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
anar26
 
Exercise 3 3 - two linear eq two unk
Exercise 3 3 - two linear eq two unkExercise 3 3 - two linear eq two unk
Exercise 3 3 - two linear eq two unk
Edgar Mata
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
José A. Alonso
 
ALGEBRA
ALGEBRAALGEBRA
ALGEBRA
eduardo13116
 
Multiplicación de un monomio y polinomio tarea 22
Multiplicación de un monomio y  polinomio tarea  22Multiplicación de un monomio y  polinomio tarea  22
Multiplicación de un monomio y polinomio tarea 22
samuel Mercado
 

La actualidad más candente (18)

Acerca de los algoritmos de mezcla en cajeros automáticos
Acerca de los algoritmos de mezcla en cajeros automáticosAcerca de los algoritmos de mezcla en cajeros automáticos
Acerca de los algoritmos de mezcla en cajeros automáticos
 
Break even point two linear equations system
Break even point two linear equations systemBreak even point two linear equations system
Break even point two linear equations system
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Template 2 1 the stright line 2020 - solved
Template 2 1 the stright line 2020 - solvedTemplate 2 1 the stright line 2020 - solved
Template 2 1 the stright line 2020 - solved
 
jaisan
jaisanjaisan
jaisan
 
Matlab
MatlabMatlab
Matlab
 
Actividad nro 2 (parte a y b)
Actividad nro 2 (parte a y b)Actividad nro 2 (parte a y b)
Actividad nro 2 (parte a y b)
 
1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos1. vers. cap-3_tipos_dedatos
1. vers. cap-3_tipos_dedatos
 
Arreglos
ArreglosArreglos
Arreglos
 
Estructura de datos s14
Estructura de datos s14Estructura de datos s14
Estructura de datos s14
 
Lógica de la Programación Naturaleza de los Datos II
Lógica de la  Programación Naturaleza de los Datos IILógica de la  Programación Naturaleza de los Datos II
Lógica de la Programación Naturaleza de los Datos II
 
Tema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en HaskellTema 7: Funciones de orden superior en Haskell
Tema 7: Funciones de orden superior en Haskell
 
Break even point two linear equations system
Break even point two linear equations systemBreak even point two linear equations system
Break even point two linear equations system
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Exercise 3 3 - two linear eq two unk
Exercise 3 3 - two linear eq two unkExercise 3 3 - two linear eq two unk
Exercise 3 3 - two linear eq two unk
 
Tema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con HaskellTema 11: Aplicaciones de la programación funcional con Haskell
Tema 11: Aplicaciones de la programación funcional con Haskell
 
ALGEBRA
ALGEBRAALGEBRA
ALGEBRA
 
Multiplicación de un monomio y polinomio tarea 22
Multiplicación de un monomio y  polinomio tarea  22Multiplicación de un monomio y  polinomio tarea  22
Multiplicación de un monomio y polinomio tarea 22
 

Similar a Guia sql

Módulo 2
Módulo 2Módulo 2
Metodos de conteo
Metodos de conteoMetodos de conteo
Metodos de conteo
kaoko7
 
Metodos de conteo
Metodos de conteoMetodos de conteo
Metodos de conteo
kaoko7
 
Diseño algoritmosoo sentenciascondicionales
Diseño algoritmosoo sentenciascondicionalesDiseño algoritmosoo sentenciascondicionales
Diseño algoritmosoo sentenciascondicionales
María Luisa Velasco
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujo
carlospaul
 
Solucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de AlgoritmosSolucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de Algoritmos
pilgrim15
 
Temas de probabilidad
Temas de probabilidadTemas de probabilidad
Temas de probabilidad
Alberto de Avila
 
Consultas de Acción y expresiones Access 2010
Consultas de Acción y expresiones Access 2010Consultas de Acción y expresiones Access 2010
Consultas de Acción y expresiones Access 2010
mybloggerunitec
 
Practicas de excel sena
Practicas  de excel senaPracticas  de excel sena
Practicas de excel sena
Diover Castrillon
 
Método SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
Método SQL para Calcular el valor máximo de un conjunto de columnas de una TablaMétodo SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
Método SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
Sebastian Rodriguez Robotham
 
Manipulación avanzada de datos con sql parte1
Manipulación avanzada de datos con sql parte1Manipulación avanzada de datos con sql parte1
Manipulación avanzada de datos con sql parte1
j4u8a8n4
 
Manipulación avanzada de datos con sql
Manipulación avanzada de datos con sqlManipulación avanzada de datos con sql
Manipulación avanzada de datos con sql
j4u8a8n4
 
P:\Lenguajes Formales
P:\Lenguajes FormalesP:\Lenguajes Formales
P:\Lenguajes Formales
johanamtzuribe
 
Tarea de word
Tarea de wordTarea de word
Tarea de word
abigailhernandez123
 
Optimización
OptimizaciónOptimización
Optimización
sarahyjoffre
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzada
Maestros en Linea
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
laloflatland
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
laloflatland
 
1 simulacion introduccion
1 simulacion introduccion1 simulacion introduccion
1 simulacion introduccion
Delia Marina Herazo Tuiran
 
Actividad3.5 equipo4completa
Actividad3.5 equipo4completaActividad3.5 equipo4completa
Actividad3.5 equipo4completa
viovazquez1780
 

Similar a Guia sql (20)

Módulo 2
Módulo 2Módulo 2
Módulo 2
 
Metodos de conteo
Metodos de conteoMetodos de conteo
Metodos de conteo
 
Metodos de conteo
Metodos de conteoMetodos de conteo
Metodos de conteo
 
Diseño algoritmosoo sentenciascondicionales
Diseño algoritmosoo sentenciascondicionalesDiseño algoritmosoo sentenciascondicionales
Diseño algoritmosoo sentenciascondicionales
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujo
 
Solucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de AlgoritmosSolucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de Algoritmos
 
Temas de probabilidad
Temas de probabilidadTemas de probabilidad
Temas de probabilidad
 
Consultas de Acción y expresiones Access 2010
Consultas de Acción y expresiones Access 2010Consultas de Acción y expresiones Access 2010
Consultas de Acción y expresiones Access 2010
 
Practicas de excel sena
Practicas  de excel senaPracticas  de excel sena
Practicas de excel sena
 
Método SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
Método SQL para Calcular el valor máximo de un conjunto de columnas de una TablaMétodo SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
Método SQL para Calcular el valor máximo de un conjunto de columnas de una Tabla
 
Manipulación avanzada de datos con sql parte1
Manipulación avanzada de datos con sql parte1Manipulación avanzada de datos con sql parte1
Manipulación avanzada de datos con sql parte1
 
Manipulación avanzada de datos con sql
Manipulación avanzada de datos con sqlManipulación avanzada de datos con sql
Manipulación avanzada de datos con sql
 
P:\Lenguajes Formales
P:\Lenguajes FormalesP:\Lenguajes Formales
P:\Lenguajes Formales
 
Tarea de word
Tarea de wordTarea de word
Tarea de word
 
Optimización
OptimizaciónOptimización
Optimización
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzada
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formales
 
1 simulacion introduccion
1 simulacion introduccion1 simulacion introduccion
1 simulacion introduccion
 
Actividad3.5 equipo4completa
Actividad3.5 equipo4completaActividad3.5 equipo4completa
Actividad3.5 equipo4completa
 

Más de Ashley Stronghold Witwicky

Clase 0.3 normalizacion. sql server aplicado
Clase 0.3   normalizacion. sql server aplicadoClase 0.3   normalizacion. sql server aplicado
Clase 0.3 normalizacion. sql server aplicado
Ashley Stronghold Witwicky
 
Carpeta de investidura para guias mayores (venezuela)
Carpeta de investidura para guias mayores (venezuela)Carpeta de investidura para guias mayores (venezuela)
Carpeta de investidura para guias mayores (venezuela)
Ashley Stronghold Witwicky
 
Sanson mata un leon con sus manos
Sanson mata un leon con sus manosSanson mata un leon con sus manos
Sanson mata un leon con sus manos
Ashley Stronghold Witwicky
 
Consecuencias personales y sociales del uso de drogas
Consecuencias personales y sociales del uso de drogasConsecuencias personales y sociales del uso de drogas
Consecuencias personales y sociales del uso de drogas
Ashley Stronghold Witwicky
 
Constancia de servicio
Constancia de servicioConstancia de servicio
Constancia de servicio
Ashley Stronghold Witwicky
 
Requisitos para Guia Mayor
Requisitos para Guia MayorRequisitos para Guia Mayor
Requisitos para Guia Mayor
Ashley Stronghold Witwicky
 
Instructivo de llenado carta poder
Instructivo de llenado carta poderInstructivo de llenado carta poder
Instructivo de llenado carta poder
Ashley Stronghold Witwicky
 
Constancia experiencia profesional
Constancia experiencia profesionalConstancia experiencia profesional
Constancia experiencia profesional
Ashley Stronghold Witwicky
 
Ideales ja
Ideales jaIdeales ja
Mysql
MysqlMysql
Especialidad de insectos desarrollada
Especialidad de insectos desarrolladaEspecialidad de insectos desarrollada
Especialidad de insectos desarrollada
Ashley Stronghold Witwicky
 
Manual basico autocad_2012
Manual basico autocad_2012Manual basico autocad_2012
Manual basico autocad_2012
Ashley Stronghold Witwicky
 
Derivadas e integrales apunte para principiantes
Derivadas e integrales apunte para principiantesDerivadas e integrales apunte para principiantes
Derivadas e integrales apunte para principiantes
Ashley Stronghold Witwicky
 
Ecuaciones primer grado con una incognita
Ecuaciones primer grado con una incognitaEcuaciones primer grado con una incognita
Ecuaciones primer grado con una incognita
Ashley Stronghold Witwicky
 
Conversion de unidades
Conversion de unidadesConversion de unidades
Conversion de unidades
Ashley Stronghold Witwicky
 
Curso de my sql
Curso de my sqlCurso de my sql
Manual de microsoft publisher 2007
Manual de microsoft publisher 2007Manual de microsoft publisher 2007
Manual de microsoft publisher 2007
Ashley Stronghold Witwicky
 
Unidad v paradigma funcional de programacion fiuncional
Unidad v   paradigma funcional de programacion fiuncionalUnidad v   paradigma funcional de programacion fiuncional
Unidad v paradigma funcional de programacion fiuncional
Ashley Stronghold Witwicky
 
Biblia de publisher 2007
Biblia de publisher 2007Biblia de publisher 2007
Biblia de publisher 2007
Ashley Stronghold Witwicky
 
Ejercicios en microsoft publisher 2007
Ejercicios en microsoft publisher 2007Ejercicios en microsoft publisher 2007
Ejercicios en microsoft publisher 2007
Ashley Stronghold Witwicky
 

Más de Ashley Stronghold Witwicky (20)

Clase 0.3 normalizacion. sql server aplicado
Clase 0.3   normalizacion. sql server aplicadoClase 0.3   normalizacion. sql server aplicado
Clase 0.3 normalizacion. sql server aplicado
 
Carpeta de investidura para guias mayores (venezuela)
Carpeta de investidura para guias mayores (venezuela)Carpeta de investidura para guias mayores (venezuela)
Carpeta de investidura para guias mayores (venezuela)
 
Sanson mata un leon con sus manos
Sanson mata un leon con sus manosSanson mata un leon con sus manos
Sanson mata un leon con sus manos
 
Consecuencias personales y sociales del uso de drogas
Consecuencias personales y sociales del uso de drogasConsecuencias personales y sociales del uso de drogas
Consecuencias personales y sociales del uso de drogas
 
Constancia de servicio
Constancia de servicioConstancia de servicio
Constancia de servicio
 
Requisitos para Guia Mayor
Requisitos para Guia MayorRequisitos para Guia Mayor
Requisitos para Guia Mayor
 
Instructivo de llenado carta poder
Instructivo de llenado carta poderInstructivo de llenado carta poder
Instructivo de llenado carta poder
 
Constancia experiencia profesional
Constancia experiencia profesionalConstancia experiencia profesional
Constancia experiencia profesional
 
Ideales ja
Ideales jaIdeales ja
Ideales ja
 
Mysql
MysqlMysql
Mysql
 
Especialidad de insectos desarrollada
Especialidad de insectos desarrolladaEspecialidad de insectos desarrollada
Especialidad de insectos desarrollada
 
Manual basico autocad_2012
Manual basico autocad_2012Manual basico autocad_2012
Manual basico autocad_2012
 
Derivadas e integrales apunte para principiantes
Derivadas e integrales apunte para principiantesDerivadas e integrales apunte para principiantes
Derivadas e integrales apunte para principiantes
 
Ecuaciones primer grado con una incognita
Ecuaciones primer grado con una incognitaEcuaciones primer grado con una incognita
Ecuaciones primer grado con una incognita
 
Conversion de unidades
Conversion de unidadesConversion de unidades
Conversion de unidades
 
Curso de my sql
Curso de my sqlCurso de my sql
Curso de my sql
 
Manual de microsoft publisher 2007
Manual de microsoft publisher 2007Manual de microsoft publisher 2007
Manual de microsoft publisher 2007
 
Unidad v paradigma funcional de programacion fiuncional
Unidad v   paradigma funcional de programacion fiuncionalUnidad v   paradigma funcional de programacion fiuncional
Unidad v paradigma funcional de programacion fiuncional
 
Biblia de publisher 2007
Biblia de publisher 2007Biblia de publisher 2007
Biblia de publisher 2007
 
Ejercicios en microsoft publisher 2007
Ejercicios en microsoft publisher 2007Ejercicios en microsoft publisher 2007
Ejercicios en microsoft publisher 2007
 

Último

SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptxSEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
Osiris Urbano
 
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdfGuia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Demetrio Ccesa Rayme
 
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptxEVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
Victor Elizalde P
 
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Juan Martín Martín
 
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptxNuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
lautyzaracho4
 
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdfMundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
ViriEsteva
 
tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)
saradocente
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
EricaCouly1
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
RAMIREZNICOLE
 
Liturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptxLiturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptx
YeniferGarcia36
 
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdfEl Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
Robert Zuñiga Vargas
 
La necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdfLa necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdf
JonathanCovena1
 
Sesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdfSesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdf
https://gramadal.wordpress.com/
 
Respuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadasRespuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadas
KarenCaicedo28
 
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdfGuia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Demetrio Ccesa Rayme
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Demetrio Ccesa Rayme
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Alejandrino Halire Ccahuana
 
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdfp4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
DavidCamiloMosquera
 
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdfFEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
Jose Luis Jimenez Rodriguez
 

Último (20)

SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptxSEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
SEMIOLOGIA DE HEMORRAGIAS DIGESTIVAS.pptx
 
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdfGuia para Docentes como usar ChatGPT  Mineduc Ccesa007.pdf
Guia para Docentes como usar ChatGPT Mineduc Ccesa007.pdf
 
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptxEVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
EVALUACION ESTUDIANTIL 2023-2024 Ecuador - Costa.pptx
 
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
Soluciones Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinar...
 
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptxNuevos espacios,nuevos tiempos,nuevas practica.pptx
Nuevos espacios,nuevos tiempos,nuevas practica.pptx
 
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdfMundo ABC Examen 1 Grado- Tercer Trimestre.pdf
Mundo ABC Examen 1 Grado- Tercer Trimestre.pdf
 
tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)tema 7. Los siglos XVI y XVII ( resumen)
tema 7. Los siglos XVI y XVII ( resumen)
 
La vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primariaLa vida de Martin Miguel de Güemes para niños de primaria
La vida de Martin Miguel de Güemes para niños de primaria
 
pueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptxpueblos originarios de chile presentacion twinkl.pptx
pueblos originarios de chile presentacion twinkl.pptx
 
A VISITA DO SENHOR BISPO .
A VISITA DO SENHOR BISPO                .A VISITA DO SENHOR BISPO                .
A VISITA DO SENHOR BISPO .
 
Liturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptxLiturgia día del Padre del siguiente domingo.pptx
Liturgia día del Padre del siguiente domingo.pptx
 
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdfEl Cerebro se Cambia a si Mismo-Norman Doidge.pdf
El Cerebro se Cambia a si Mismo-Norman Doidge.pdf
 
La necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdfLa necesidad de bienestar y el uso de la naturaleza.pdf
La necesidad de bienestar y el uso de la naturaleza.pdf
 
Sesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdfSesión: El espiritismo desenmascarado.pdf
Sesión: El espiritismo desenmascarado.pdf
 
Respuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadasRespuesta del icfes pre saber verificadas
Respuesta del icfes pre saber verificadas
 
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdfGuia Practica de ChatGPT para Docentes Ccesa007.pdf
Guia Practica de ChatGPT para Docentes Ccesa007.pdf
 
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdfLas Tecnologias Digitales en los Aprendizajesdel Siglo XXI  UNESCO Ccesa007.pdf
Las Tecnologias Digitales en los Aprendizajesdel Siglo XXI UNESCO Ccesa007.pdf
 
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docxLecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
Lecciones 10 Esc. Sabática. El espiritismo desenmascarado docx
 
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdfp4s.co Ecosistema de Ecosistemas - Diagrama.pdf
p4s.co Ecosistema de Ecosistemas - Diagrama.pdf
 
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdfFEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
FEEDBACK DE LA ESTRUCTURA CURRICULAR- 2024.pdf
 

Guia sql

  • 1. Guía de ejercicios de SQL Prof. Claudio Gutiérrez, Aux. Mauricio Monsalve Otoño de 2008 [P1] Corretaje de propiedades Enunciado Sean las siguientes tablas de una base de datos de una corredora de propiedades: Arrendatario(RUT,Nombre,Apellido) Arrienda(RUT,Id_casa,Deuda) Ojo: Deuda >=0 (si es 0, no hay deuda) Telefonos(RUT,Fono) Dueño(RUT,Nombre,Apellido) Casa(Id_casa,RUT,Nro,Calle,Comuna) Al respecto, conteste las siguientes preguntas: 1. Los arrendatarios que arriendan la casa ubicada en la calle Carrera nº 1024, Santiago. 2. ¿Cuánto le deben a María Pérez? 3. ¿Cuál es la deuda total para cada dueño? 4. Liste todas las personas de la base de datos 5. Indique los dueños que poseen tres o más casas. 6. Liste los dueños que tengan deudores en todas sus casas. 7. Entregue estadísticas sobre los arrendatarios por casa. Entregue: 1. El promedio. 2. La varianza. 3. El máximo. 4. El mínimo. 5. La moda. 6. La mediana. Solución Recomendación: evite colocar selects en el from. Prefiera no anidar de esa manera; muchas veces eso se puede escribir dentro de where. 1
  • 2. 1. Este es el tipo más sencillo de consulta posible. SELECT A.RUT, A.Nombre, A.Apellido FROM Arrendatario A, Arrienda B, Casa C WHERE A.RUT=B.RUT AND B.Id_casa=C.Id_casa AND C.Calle='Carrera' AND C.Nro='1024' AND C.Comuna='Santiago' ; 2. Se supondrá que María Pérez hay una sola. SELECT SUM(A.Deuda) FROM Arrienda A, Casa B, Dueño C WHERE A.Id_casa=B.Id_casa AND B.RUT=C.RUT AND C.Nombre='María' AND C.Apellido='Pérez' ; 3. Aquí es necesario agrupar la información, así la suma se hará dentro de cada grupo indica- do. Entregué toda la información necesaria en el SELECT, aunque con el RUT del dueño basta- ría (si en el trabajo le piden algo así, entregue todo). SELECT SUM(A.Deuda), C.RUT, C.Nombre, C.Apellido FROM Arrienda A, Casa B, Dueño C WHERE A.Id_casa=B.Id_casa AND B.RUT=C.RUT GROUP BY C.RUT ; 4. Las personas de la BD son los arrendatarios y los dueños. Para entregar ambos, hay que rea- lizar una unión. Nota: para realizar una unión, los esquemas deben ser compatibles (atributos con mismo nombre y dominio). Afortunadamente, éste es el caso. SELECT * FROM Arrendatario UNION SELECT * FROM Dueño ; 5. Hay dos maneras de hacer esto: con agregación y sin ésta. El caso sin agregación (menos evidente en general) consiste en hacer un join de tres tablas. Sin agregación: SELECT A.RUT, A.Nombre, A.Apellido FROM Dueño A, Casa C1, Casa C2, Casa C3 WHERE A.RUT=C1.RUT AND C1.RUT=C2.RUT AND C2.RUT=C3.RUT AND C1.Id_casa<>C2.Id_casa AND C1.Id_casa<>C3.Id_casa AND C2.Id_casa<>C3.Id_casa ; 2
  • 3. Con agregación: en este caso, es necesario utilizar HAVING. HAVING es el WHERE pero para funciones agregadas. En el HAVING sólo pueden aparecer funciones agregadas y cons- tantes. SELECT A.RUT, A.Nombre, A.Apellido FROM Dueño A, Casa C WHERE A.RUT=C.RUT GROUP BY A.RUT HAVING COUNT(DISTINCT C.Id_casa)>=3 ; 6. Jugando con la semántica vemos que un dueño con deudores en todas sus casas equivale a un dueño con deuda en todas sus casas. Y el complemento de eso son los dueños con casas sin deudas. SELECT D.RUT, D.Nombre, D.Apellido FROM Dueño D, Casa C WHERE D.RUT=C.RUT EXCEPT SELECT D.RUT, D.Nombre, D.Apellido FROM Dueño D, Casa C, Arrienda A WHERE D.RUT=C.RUT AND C.Id_casa=A.Id_casa AND A.Deuda>0 Otra manera consiste en exigir que la deuda de cada casa del dueño sea positiva. En este caso, una consulta anidada exigiendo igualdad sobreALL basta. SELECT D.RUT, D.Nombre, D.Apellido FROM Dueño D, Casa C WHERE D.RUT=C.RUT AND 0 = ALL ( SELECT A.Deuda FROM Arrienda A WHERE C.Id_casa=A.Id_casa) OR NOT EXISTS ( SELECT * FROM Arrienda A WHERE C.Id_casa=A.Id_casa) ; Esto es equivalente a lo anterior: que no exista (NOT EXISTS) una casa con deuda para este dueño. De hecho, es más eficiente. SELECT D.RUT, D.Nombre, D.Apellido FROM Dueño D, Casa C WHERE D.RUT=C.RUT 3
  • 4. AND NOT EXISTS ( SELECT * FROM Arrienda A WHERE C.Id_casa=A.Id_casa AND A.Deuda>0) ; 7. En esta sección veremos cómo calcular estadísticas con SQL estándar. El promedio de arren- datarios por casa: la manera correcta de hacerlo es considerar todos los arrendatarios que efec- tivamente arrienden y todas las casas. Así se contarán las casas con 0 arrendatarios, que debe- rían ser consideras en el promedio. SELECT DISTINCT COUNT(DISTINCT A.RUT)/COUNT(DISTINCT B.Id_casa) FROM Arrienda A, Casa B ; El máximo requiere una consulta anidada sencilla. Hay que contar el número de arrendatarios por cada grupo y exigir que sea mayor a los de los demás grupos. Esta consulta tiene un error. ¿Cuál es?1 ¿Cómo se corrige? SELECT COUNT(A.RUT) FROM Arrienda A GROUP BY A.Id_casa HAVING COUNT(A.RUT) >= ALL( SELECT COUNT(B.RUT) FROM Arrienda B GROUP BY B.Id_casa) ; El mínimo es análogo. Esta consulta tiene un error. ¿Cuál es? ¿Cómo se corrige? SELECT COUNT(A.RUT) FROM Arrienda A GROUP BY A.Id_casa HAVING COUNT(A.RUT) <= ALL( SELECT COUNT(B.RUT) FROM Arrienda B GROUP BY B.Id_casa) ; Ahora necesito la siguiente consulta: el número de arrendatarios por casa. Se advierte que la práctica de realizar consultas anidadas en el FROM se debe evitar si se puede usar IN, NOT IN, EXISTS, ALL, etc. (*) =  SELECT Id_casa AS ID, COUNT(DISTINCT RUT) AS N FROM Arrienda GROUP BY Id_casa 1 Hint: puede que el error esté cerca del operador de agregación... 4
  • 5. UNION SELECT Id_casa AS ID, 0 AS N FROM Casa WHERE Id_casa NOT IN ( SELECT X.Id_casa FROM Arrienda X) ; La varianza es la desviación de la media. Puesto que dos operaciones agregadas son necesarias para resolver esto, forzosamente necesitamos realizar una consulta previa e incluirla en el FROM. Fórmula: Var[X]=E[X2 ]−E2 [X] SELECT SUM(N*N)/COUNT(ID)­AVG(N)*AVG(N) FROM (*); La moda es la frecuencia más repetida. La frecuencia es el COUNT, por ende aplico la compa- ración en el HAVING. SELECT X.N FROM (*) X GROUP BY X.N HAVING COUNT(DISTINCT X.ID) >= ALL ( SELECT COUNT(DISTINCT Y.ID) FROM (*) Y GROUP BY Y.N) ; La mediana esla frecuencia central. Se supondrá que es única. SELECT DISTICT X.N FROM (*) X, (*) Y, (*) Z WHERE X.N > Y.N AND X.N < Z.N GROUP BY X.N HAVING COUNT(DISTINCT Y.ID) = COUNT(DISTINCT Z.ID) ; Propuesto: ¿Cómo se puede hacer en los casos con, por ejemplo, 4 candidatos? Algo como: 0 0 0 0 1 2 3 3 4 4 4 4 5 5 6 7 8 9 9 11. No es mucho más complicado que la consulta anterior puesto que hay que hacer una pequeña observación para contestar la pregunta. 5
  • 6. [P2] Sistema de e-learning Enunciado Noob Saiborg2 está desarrollando un sistema de evaluación automático como par- te de un paquete de e-learning comercial. En este sistema, los tests consisten de 1 ó más pre- guntas con alternativas. Para hacer el sistema flexible, y para aumentar la dificultad de los pro- blemas, uno de los requerimientos es que las preguntas -de las que consisten los tests- tengan una o más soluciones. (Por ejemplo, una pregunta del tipo “¿Cuál de las siguientes propiedades presenta el paradigma OOP?” requiere la selección de varias alternativas.) Actualmente, Noob S. cuenta con el siguiente modelo de datos relacional para modelar los tests: test(tnum,titulo,curso,descripcion,autor) preg(tnum,pnum,enunciado) pregalt(tnum,pnum,alt,texto,correcta)    //correcta es booleana resp(user,tnum,pnum,alt) alumno(user,nombre,apellido) cursa(user,curso) contesta(user,tnum) cursos(curso,nombre) En este sencillo (primitivo) modelo de datos, Noob S. necesita resolver los siguientes problemas con SQL: 1. Sobrescribir el test X con otro test Y. (X,Y son tnum) 2. Conocer el número de tests por curso. 3. Conocer los cursos sin tests. 4. Determinar los tests con falencias. Un test tiene falencias si no tiene preguntas, si su primera pregunta (pnum) no está numerada 1, si las preguntas no son consecutivas (ej. 1,2,4,5,8), si hay preguntas con 1 ó menos alternativas3 , si todas las alternativas son verdaderas o si todas las alternativas son falsas. 5. Corregir los test cuya única falencia radica en la numeración de las preguntas. 6. Cuántos alumnos hay en cada curso. 7. Qué alumnos han contestado tests que no les corresponden (de cursos que no cursan). 8. Obtener el puntaje no normalizado de cada rendición de test. El puntaje no normaliza- do ha sido definido (requerimiento) como: P = buenas – malas/4. Si un alumno no con- testa en una pregunta exactamente lo mismo que se ha definido como correcto, la pre- gunta cuenta como mala a menos que el alumno haya omitido. 9. Obtener el puntaje normalizado, o sea, de 1,0 a 7,0. Solución Para resolver este problema es necesario saber cómo escribir consultas y cómo mo- dificar datos con SQL. 2 Chiste fome MK2. Noob Saibot = Boon Tobias. 3 Esto es semánticamenteincorrecto. Una selección múltiple es, en sí misma, una alternativa. Pero en general se entiende queuna opción y una alternativa son lo mismo. (Opción es el término correcto.) 6
  • 7. [1] Sobrescribir el test X con el test Y se hace borrando el test X y copiando los datos del test Y con el tnum X. Haremos el proceso completo de borrado de un test, considerando si el test fue contestado, y copiaremos los datos de Y. delete from test where tnum=X; delete from preg where tnum=X; delete from alt where tnum=X; delete from contesta where tnum=X; delete from resp where tnum=X; insert into test select X, titulo, curso, descripcion, autor                  from test where tnum=Y; insert into preg select X, pnum, enunciado                  from preg where tnum=Y; insert into pregalt select X, pnum, alt, texto, correcta                     from pregalt where tnum=Y; [2] El número de tests por curso tiene la forma (curso, número). Es una simple y vil agrupación con count(*). select curso, count(*) from test group by curso; [3] Una simple sustracción. select curso from cursos except select curso from test; [4] Cada exigencia del enunciado puede ser consultada por separado y luego unida para obte- ner los tnum que corresponden a tests inválidos. (  select tnum from test   EXCEPT select tnum from preg ) UNION (  select tnum from preg  group by tnum having min(pnum)<1 ) 7