SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
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áticosAgustí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 systemEdgar Mata
 
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 - solvedEdgar Mata
 
jaisan
jaisanjaisan
jaisanjai
 
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
 
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 IIVideoconferencias 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 HaskellJosé 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 systemEdgar Mata
 
Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenesanar26
 
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 unkEdgar 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 HaskellJosé A. Alonso
 
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 22samuel 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

Metodos de conteo
Metodos de conteoMetodos de conteo
Metodos de conteokaoko7
 
Metodos de conteo
Metodos de conteoMetodos de conteo
Metodos de conteokaoko7
 
Diseño algoritmosoo sentenciascondicionales
Diseño algoritmosoo sentenciascondicionalesDiseño algoritmosoo sentenciascondicionales
Diseño algoritmosoo sentenciascondicionalesMaría Luisa Velasco
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujocarlospaul
 
Solucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de AlgoritmosSolucionar Problemas Por Medio de Algoritmos
Solucionar Problemas Por Medio de Algoritmospilgrim15
 
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 2010mybloggerunitec
 
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 TablaSebastian 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 parte1j4u8a8n4
 
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 sqlj4u8a8n4
 
Estructura de datos avanzada
Estructura de datos avanzadaEstructura de datos avanzada
Estructura de datos avanzadaMaestros en Linea
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formaleslaloflatland
 
Lenguajes formales
Lenguajes formalesLenguajes formales
Lenguajes formaleslaloflatland
 
Actividad3.5 equipo4completa
Actividad3.5 equipo4completaActividad3.5 equipo4completa
Actividad3.5 equipo4completaviovazquez1780
 

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

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
 
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 drogasAshley Stronghold Witwicky
 
Derivadas e integrales apunte para principiantes
Derivadas e integrales apunte para principiantesDerivadas e integrales apunte para principiantes
Derivadas e integrales apunte para principiantesAshley 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 fiuncionalAshley 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

novelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesis
novelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesisnovelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesis
novelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesisPsicClinGlendaBerrez
 
ACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLA
ACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLAACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLA
ACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLAJAVIER SOLIS NOYOLA
 
POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...
POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...
POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...Agrela Elvixeo
 
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...Reneeavia
 
Pasos para enviar una tarea en SIANET - sólo estudiantes.pdf
Pasos para enviar una tarea en SIANET - sólo estudiantes.pdfPasos para enviar una tarea en SIANET - sólo estudiantes.pdf
Pasos para enviar una tarea en SIANET - sólo estudiantes.pdfNELLYKATTY
 
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
Lineamientos de la Escuela de la Confianza  SJA  Ccesa.pptxLineamientos de la Escuela de la Confianza  SJA  Ccesa.pptx
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptxDemetrio Ccesa Rayme
 
tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...
tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...
tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...Chema R.
 
Estudios Sociales libro 8vo grado Básico
Estudios Sociales libro 8vo grado BásicoEstudios Sociales libro 8vo grado Básico
Estudios Sociales libro 8vo grado Básicomaxgamesofficial15
 
Estrategia Nacional de Refuerzo Escolar SJA Ccesa007.pdf
Estrategia Nacional de Refuerzo Escolar  SJA  Ccesa007.pdfEstrategia Nacional de Refuerzo Escolar  SJA  Ccesa007.pdf
Estrategia Nacional de Refuerzo Escolar SJA Ccesa007.pdfDemetrio Ccesa Rayme
 
Apunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfApunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfGonella
 
TEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilizaciónTEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilizaciónVasallo1
 
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdf
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdfDISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdf
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdfVerenice Del Rio
 
Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...
Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...
Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...Pere Miquel Rosselló Espases
 
Los caminos del saber matematicas 7°.pdf
Los caminos del saber matematicas 7°.pdfLos caminos del saber matematicas 7°.pdf
Los caminos del saber matematicas 7°.pdfandioclex
 
REGLAMENTO FINAL DE EVALUACIÓN 2024 pdf.pdf
REGLAMENTO  FINAL DE EVALUACIÓN 2024 pdf.pdfREGLAMENTO  FINAL DE EVALUACIÓN 2024 pdf.pdf
REGLAMENTO FINAL DE EVALUACIÓN 2024 pdf.pdfInformacionesCMI
 

Último (20)

Revista Faro Normalista 6, 18 de mayo 2024
Revista Faro Normalista 6, 18 de mayo 2024Revista Faro Normalista 6, 18 de mayo 2024
Revista Faro Normalista 6, 18 de mayo 2024
 
novelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesis
novelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesisnovelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesis
novelas-cortas--3.pdf Analisis introspectivo y retrospectivo, sintesis
 
ACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLA
ACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLAACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLA
ACERTIJO SOPA DE LETRAS OLÍMPICA. Por JAVIER SOLIS NOYOLA
 
POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...
POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...
POEMAS ILUSTRADOS DE LUÍSA VILLALTA. Elaborados polos alumnos de 4º PDC do IE...
 
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...4ª SESION  la misión santificadora del Espíritu Santo en la vida de la Iglesi...
4ª SESION la misión santificadora del Espíritu Santo en la vida de la Iglesi...
 
Pasos para enviar una tarea en SIANET - sólo estudiantes.pdf
Pasos para enviar una tarea en SIANET - sólo estudiantes.pdfPasos para enviar una tarea en SIANET - sólo estudiantes.pdf
Pasos para enviar una tarea en SIANET - sólo estudiantes.pdf
 
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
Lineamientos de la Escuela de la Confianza  SJA  Ccesa.pptxLineamientos de la Escuela de la Confianza  SJA  Ccesa.pptx
Lineamientos de la Escuela de la Confianza SJA Ccesa.pptx
 
tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...
tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...
tema 6 2eso 2024. Ciencias Sociales. El final de la Edad Media en la Penínsul...
 
TÉCNICAS OBSERVACIONALES Y TEXTUALES.pdf
TÉCNICAS OBSERVACIONALES Y TEXTUALES.pdfTÉCNICAS OBSERVACIONALES Y TEXTUALES.pdf
TÉCNICAS OBSERVACIONALES Y TEXTUALES.pdf
 
Estudios Sociales libro 8vo grado Básico
Estudios Sociales libro 8vo grado BásicoEstudios Sociales libro 8vo grado Básico
Estudios Sociales libro 8vo grado Básico
 
Estrategia Nacional de Refuerzo Escolar SJA Ccesa007.pdf
Estrategia Nacional de Refuerzo Escolar  SJA  Ccesa007.pdfEstrategia Nacional de Refuerzo Escolar  SJA  Ccesa007.pdf
Estrategia Nacional de Refuerzo Escolar SJA Ccesa007.pdf
 
flujo de materia y energía ecosistemas.
flujo de materia y  energía ecosistemas.flujo de materia y  energía ecosistemas.
flujo de materia y energía ecosistemas.
 
Motivados por la esperanza. Esperanza en Jesús
Motivados por la esperanza. Esperanza en JesúsMotivados por la esperanza. Esperanza en Jesús
Motivados por la esperanza. Esperanza en Jesús
 
Apunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdfApunte clase teorica propiedades de la Madera.pdf
Apunte clase teorica propiedades de la Madera.pdf
 
TEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilizaciónTEMA EGIPTO.pdf. Presentación civilización
TEMA EGIPTO.pdf. Presentación civilización
 
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdf
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdfDISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdf
DISEÑO DE ESTRATEGIAS EN MOMENTOS DE INCERTIDUMBRE.pdf
 
Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...
Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...
Realitat o fake news? – Què causa el canvi climàtic? - Modificacions dels pat...
 
¿Que es Fuerza? online 2024 Repaso CRECE.pptx
¿Que es Fuerza? online 2024 Repaso CRECE.pptx¿Que es Fuerza? online 2024 Repaso CRECE.pptx
¿Que es Fuerza? online 2024 Repaso CRECE.pptx
 
Los caminos del saber matematicas 7°.pdf
Los caminos del saber matematicas 7°.pdfLos caminos del saber matematicas 7°.pdf
Los caminos del saber matematicas 7°.pdf
 
REGLAMENTO FINAL DE EVALUACIÓN 2024 pdf.pdf
REGLAMENTO  FINAL DE EVALUACIÓN 2024 pdf.pdfREGLAMENTO  FINAL DE EVALUACIÓN 2024 pdf.pdf
REGLAMENTO FINAL DE EVALUACIÓN 2024 pdf.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