Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

SOS con consultas

Estas en el tema de SOS con consultas en el foro de Bases de Datos General en Foros del Web. Buenas a todos, estoy intentando aprender SQL por mi cuenta, para ello estoy usando SQL developer, me descargue varios ejercicios de internet y estoy intentando ...
  #1 (permalink)  
Antiguo 18/02/2015, 08:23
 
Fecha de Ingreso: diciembre-2009
Mensajes: 31
Antigüedad: 14 años, 11 meses
Puntos: 0
Pregunta SOS con consultas

Buenas a todos, estoy intentando aprender SQL por mi cuenta, para ello estoy usando SQL developer, me descargue varios ejercicios de internet y estoy intentando resolverlos, pero tengo dificultades con las consultas un poco más avanzadas y no tengo el solucionario de este ejercicio y tengo curiosidad por saber que código debería utilizar ¿podríais ayudarme?

Partimos de tres tablas con diferentes campos:
  • Socios: codigo(PK), nombre(varchar2), saldo_deudor(number)
  • Actividades: codigo(PK), actividad(varchar2), precio(number), plazas(number)
  • Reservas: cod_A(PFK), cod_S(PFK), plaz_reservadas(number)

Y me piden las siguientes consultas:
1) Consulta en la que aparezcan el código de la actividad (campo código tabla actividad), el número de plazas de la actividad (campo plazas de la tabla actividad) y número de plazas que quedan libres (campo plazas de la tabla actividad menos campo plaz_reservadas de la tabla reservas). Agrupado todo por el código de la actividad.

2) Registro de socios agrupado por nombre de socio (campo nombre de tabla socios) que muestre todas las plazas reservadas (campo plaz_reservadas tabla reservas) por dicho cliente y la cantidad en euros (campo precio tabla actividades) que cuestan todas las plazas.

3) Muestra nombre del socio y su saldo deudor, de los socios que tengan reservadas dos o más actividades.

4) Mostrar para cada actividad, el número de plazas reservadas. El listado debe incluir las actividades para los que aún no se ha realizado ninguna reserva.
Muchas gracias de antemano :) y si podéis darme alguna recomendación para seguir aprendiendo os lo agradeceré.
  #2 (permalink)  
Antiguo 18/02/2015, 08:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SOS con consultas

Podemos ayudarte, pero solo si posteas las consultas que intentaste para esos casos.
Regalar código, por principios, no regalamos. En especial cuando se trata de ejercicios. Pero podemos guiarte para que logres la solución.
Pero no desde la nada.

Postea al menos un intento por cada caso, aclarando bien en que DBMS estas haciéndolas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/02/2015 a las 09:56
  #3 (permalink)  
Antiguo 18/02/2015, 09:37
 
Fecha de Ingreso: diciembre-2009
Mensajes: 31
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: SOS con consultas

Muchas gracias, me parece justo :)
Esta tarde me pondre con ello de nuevo y os colgare lo que tengo hecho.
  #4 (permalink)  
Antiguo 19/02/2015, 13:39
 
Fecha de Ingreso: diciembre-2009
Mensajes: 31
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: SOS con consultas

Este es el codigo que logre sacar pertenece al apartado 4, he logrado agruparlo por actividades pero me da la suma de todas las reservas de plazas y no el sumatorio de las plazas de cada actividad, he dado vueltas pero no soy capaz a lograr el resultado.
Código SQL:
Ver original
  1. SELECT A.ACTIVIDAD, SUM(R.PLAZAS_RES)
  2. FROM RESERVAS R, ACTIVIDADES A
  3. GROUP BY A.ACTIVIDAD (+);
  #5 (permalink)  
Antiguo 20/02/2015, 05:00
 
Fecha de Ingreso: diciembre-2009
Mensajes: 31
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: SOS con consultas

Bueno he logrado agrupar las actividades y que me pusiese al lado el sumatorio de las plazas reservadas en cada una, el caso es que el ejercicio pide que se muestren tambien los resultados en los que no hay ninguna reserva y no soy capaz a que los muestre, sabriais decirme donde fallo??
Código SQL:
Ver original
  1. SELECT A.ACTIVIDAD, SUM(R.PLAZAS_RES)
  2. FROM RESERVAS R, ACTIVIDADES A
  3. WHERE A.CODIGO = R.CODIGO_A
  4. GROUP BY A.ACTIVIDAD (+);
  #6 (permalink)  
Antiguo 20/02/2015, 05:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: SOS con consultas

Para lograr aquellas donde no existen reservas no puedes usar simples JOIN o INNER JOIN, o sean implícitos (la coma), forzosamente debes usar LEFT JOIN o RIGH JOIN, adicionando en el WHERE la condición de nulidad en la relación.
Código MySQL:
Ver original
  1. SELECT A.ACTIVIDAD, SUM(R.PLAZAS_RES) TotalReservas
  2. FROM ACTIVIDADES A LEFT JOIN RESERVAS R  ON A.CODIGO = R.CODIGO_A
  3. WHERE TRUE OR R.CODIGO_A IS NULL
  4. GROUP BY A.ACTIVIDAD;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 20/02/2015, 14:56
 
Fecha de Ingreso: diciembre-2009
Mensajes: 31
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: SOS con consultas

Muchas gracias por la pista ;) repasare tu codigo, seguramente con esta explicacion resuelva tambien los otros tres ejercicios creo que mis fallos se deben a los mismo.

Etiquetas: campos, registro, sos, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:30.