SQL - Ayuda con iniciado al SQL

 
Vista:
sin imagen de perfil

Ayuda con iniciado al SQL

Publicado por Armando (5 intervenciones) el 14/11/2017 20:23:50
Buenas Chicos/as, pues vereis, no tengo mucho tiempo porque he tenido problemas de configuración y para cuando los tengo mas o menos arreglados, la entrega está ya casi encima mio. La questión es que no tengo mucha idea en las consultas SQL y necesito responderlas urgente. He de responderlas sobre la base de datos de archivo adjunto.

1-Mostrar datos de coches que no han participado en ninguna carrera.
2-En cuantas carreras ha particiado cada coche?
3-Cuantas carreras ha ganado cada coche?
4-Mostrar datos de coches que han ganado mas de 3 carreras.
4-Mostrar Nombre y apellido del piloto que conducía el coche que ganó la carrera numero 3 en el año 2017.
5-Mostrar nombre de la escuderia de los coches que tienen potencia superior a la media.
6-Mostrar nombre de la escuderia que tiene mas coches.
7-Mostrar nombre y apellidos de los mecanicos que tienen el nombre igual al de un piloto.

El asunto es que con una tabla es muy facil, pero claro, aqui hay hasta 3 tablas implicadas y pruebo y pruebo pero no doy una. Si veo alguna respuesta me puedo orientar.

Muchas gracias por adelantado a todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con iniciado al SQL

Publicado por leonardo_josue (1173 intervenciones) el 14/11/2017 20:31:35
Hola Armando:

Lamentablemente, la mayoría de los foristas no tenemos tanto tiempo como para hacerle la tarea a otros, así es que no creo que obtengas mucha ayuda en el foro, ya que esto no es "El Rincón del Vago"....

Aquí no vale eso de "No tengo idea de cómo se hacen las cosas"... si tú no sabes lo que tienes que hacer, imagina nosotros que no somos adivinos... La mayoría de las consultas son bastante simples, me sorprende que no hayas podido hacer ninguna de ellas.

El foro está para AYUDAR, pero lo menos que pedimos es que pongas algo de esfuerzo de tu parte. Puedes comenzar por decirnos qué haz intentado hacer (porque por lo que dices haz probado muchas consultas)... vamos por partes y postea aquello que haz hecho y con gusto te ayudamos a corregir y/o completar lo que haga falta...

Veo que esta es tu primer intervención así es que mucho ojo en lo que pides y cómo lo pides.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con iniciado al SQL

Publicado por Armando (5 intervenciones) el 14/11/2017 21:05:09
Buenas, de primeras quiero pedir disculpas si alguien se ha incomodado por mi post, aunque no creo haber faltado al respeto a nadie.
Por otro lado entiendo que no es plato de buen gusto hacerle los deberes a los demás, cosa que no estoy pidiendo.
Sé que bastantes de las consultas son bastante simples, el asunto es que yo llevo muy poco con esto.
Sobre el tema de haber probado, pues a ver, dado que no tengo todas las sentencias que he generado, voy a poner por ejemplo una, para responder a la pregunta 1-Mostrar datos de coches que no han participado en ninguna carrera:

select codiCoche, nomEsc
from Coche
where Participación IS NULL

Esta es una. Se supone que hay algo que no llego a ver, pero vaya.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con iniciado al SQL

Publicado por Isaias (1921 intervenciones) el 14/11/2017 22:00:15
Debes tener una tabla de PARTICIPANTES y una de REGISTRO DE CARRERAS, entre ambas, deberia haber una que las relaciona, ya que un auto puedo correr en muchas carreras con un participantes y por ende, una carrera puede tener muchos participantes, esta relacion es de MUCHOS A MUCHOS, entonces, deberia ser algo como

1
2
3
SELECT p.* -- Dame todos los datos de PARTICIPANTE
FROM participantes p join registro_carrera rc on p.participanteid = rc.participanteid --relaciona dos tablas
inner join carrera ca on ca.carreraid = rc.carreraid -- relaciona a la carrera

Esto en teoria, te deberia dar TODOS los participantes que han participado en alguna carrera

Todos son supuestos, ya que desconozco las tablas que intervienen

Por otro lado, como bien dice Leo, es la forma en que se pide, vienes y nos das una lista de consultas que debes resolver, asumimos (tal vez mal) que quieres que lo hagamos por ti.

En lugar de venir y decirnos (algo mas o menos asi), "estoy ejecutando esta consulta (codigo de la consulta), pero no me da el resultado esperado que es (ejemplo de resultado)"

Con eso, estoy seguro que mas de uno te apoyaria en tu DUDA PUNTUAL.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con iniciado al SQL

Publicado por Armando (5 intervenciones) el 15/11/2017 00:07:19
Buenas Isaias, pues mira, me has dado justo lo que andaba buscando, no solo la respuesta a una de las consultas, cosa que con eso me basta de momento, sinó también , la explicación de la parte derecha de cada apartado de la consulta que me servirá de guia para futuras consultas. Te debo dar las gracias por tomarte la molestia de allanarme un poco el camino y vuelvo a lo mismo, si te has sentido ofendido con algo de lo que dije o alguna manera de como lo dije, pido disculpas, soy novato en esto, y me he registrado aqui para obtener ayuda, que es justo lo que me acabas de dar tu. Si alguien mas me viene diciendo algo de modales etc, pues tambien le pediré disculpas, no problemo.

Gracias de verdad!!!

Edito: Acabo de ver que eso es para ver todos los que han participado en una carrera, pero si no han participado en ninguna, que es lo que yo ando buscando, supongo que faltaría un not o algo parecido por alguna parte.
Gracias de todas formas, me sirve igual para ver un poco la estructura.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con iniciado al SQL

Publicado por Isaias (1921 intervenciones) el 15/11/2017 17:00:24
Hay unos verbos que dicen, EXISTS y NOT EXISTS, para resolver la duda que tienes, y aclaro, nadie (o al menos en lo personal) se siente ofendido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con iniciado al SQL

Publicado por Armando (5 intervenciones) el 15/11/2017 20:03:18
Gracias Isaias, esto de las consultas al menos al empezar es bastante complicado, o yo lo percibo asi, no veo que lógica seguir al momento de emplear una estructura u otra para implicar mas de una tabla.

Veo los Join, veo que puedes hacer los FROM <Tabla1>,<Tabla2>, pero no veo muy claro como usar todo esto.
Si que veo en algunos ejemplos resueltos que al redactar una sentencia se parece mucho al lenguaje hablado humano:

Selecciona columnaX,
de tablaX
donde haya Xcosa
Y ordenala por Xcosa.

Visto asi no parece dificil, pero vaya, cuando empleas mas de una tabla es mas complicado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con iniciado al SQL

Publicado por leonardo_josue (1173 intervenciones) el 15/11/2017 20:37:25
Hola de nuevo Armando:

1
2
esto de las consultas al menos al empezar es bastante complicado, o yo lo percibo asi, no veo que
lógica seguir al momento de emplear una estructura u otra para implicar mas de una tabla.

Creo que estás equivocando el camino, antes que querer hacer las consultas SQL, primero tienes qué entender qué es lo que se te pide... de lo contrario, es como si quisieras resolver problemas de Cálculo Integral sin siquiera saber aritmética.

1
2
Veo los Join, veo que puedes hacer los FROM <Tabla1>,<Tabla2>, pero no veo muy
claro como usar todo esto.

Los JOIN's con la esencia del modelo ENTIDAD RELACIÓN, si no entiendes cómo se relacionan las tablas, entonces estás completamente perdido... afortunadamente SANTA WIKIPEDIA creo que explica de manera muy sencilla cómo funcionan cada tipo de JOIN's, deberías darle un vistazo a esto:

https://es.wikipedia.org/wiki/Join


1
2
3
4
5
6
7
Si que veo en algunos ejemplos resueltos  que al redactar una sentencia se parece
mucho al lenguaje hablado humano:
 
Selecciona columnaX,
de tablaX
donde haya Xcosa
Y ordenala por Xcosa.

De hecho, esto que comentas es la Base de SQL... ya que trata de "simular" de manera estructurada un problema, entonces, si entiendes en "lenguaje humano" lo que te están pidiendo, será más sencillo que después "conviertas" ese lenguaje a SQL...

Para un ejemplo, podemos utilizar el primero de tus ejercicios

1
1-Mostrar datos de coches que no han participado en ninguna carrera.

Entonces, en "lenguaje humano", podrías transformar esto es

SELECCIONA aquellos coches DE COCHES donde el codiCoche NO EXISTA en la tabla PARTICIPACIONES

Si transformas esto a SQL, entonces el ejercicio queda resuelto.

haz la prueba y nos comentas.

Saludos
Leo,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con iniciado al SQL

Publicado por Armando (5 intervenciones) el 18/11/2017 22:47:19
Buenas, estoy probando ahora con la 5, mostrar nombre de Escuderia de los coches que tienen potencia superior a la media,
estoy intentando con este codigo y algunos otros y no me funciona, si me pueden hacer ver que es lo que hago mal sería genial:

1
2
3
4
SELECT nomEsc FROM Esudería
WHERE Escuderia IN (Select distinct(coche))
       WHERE potencia>(SELECT AVG(potencia))
       FROM Coche;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con iniciado al SQL

Publicado por Isaias (1921 intervenciones) el 14/11/2017 20:41:18
"pruebo y pruebo", Como bien dice Leo, muestranos que has probado y que no te da el resultado esperado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con iniciado al SQL

Publicado por thure (1 intervención) el 21/11/2017 20:49:17
1.
select * from empleat where cognom1 like 'C%';
2.
select nom,cognom1,cognom2 from empleat natural join pilot order by cognom1, nom;
3.
select * from cotxe where codiCotxe not in (select codiCotxe from participació);
4.
select CONCAT(codiCotxe, " ", nomEsc) as coche, count(*) as nuCarrerasPartici
from participació group by codiCotxe, nomEsc;
5.
select CONCAT(codiCotxe, " ", nomEsc) as coche, count(*) as carreraGanadas
from participació where posició =1 group by codiCotxe, nomEsc ;
6.
select *, count(*) as carrerasGanadas
from participació where posició =1 group by codiCotxe, nomEsc having count(posició=1)>3 ;
7.
select distinct nom,cognom1,cognom2 from empleat E inner join participació P inner join carrera C
where C.número=3 and P.posició=1 and P.any=2017 group by codiCotxe, nomEsc;
8.
select avg(potencia) from cotxe;
select codiCotxe,nomEsc from cotxe where potencia > 908;

9.

10.
select distinct nom,cognom1,cognom2 from empleat E, mecànic M, pilot P where nom in (select distinct nom from empleat group by nom having count(nom)>1);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar