Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Anonymous250 en 19 Diciembre 2011, 10:26 am



Título: [Solucionado]Dudas Sql subconsultas relacionando varias tablas
Publicado por: Anonymous250 en 19 Diciembre 2011, 10:26 am
Bueno vereis se me dan las consultas que son de 1 sola tabla,pero las que implican sacar datos de dos tablas poniendo requisitos esas no,nose como hacerlas y estoy un poco frustado,ya que tengo que hacer unas 90 consultas y la mayoria son subconsultas :huh:
Consultas de este estilo
Varias tablas ,una llamada equipos, otra ciclista,otra puertos,otra malliots,otra llevar y otra etapas

Obtener el nombre y el director de los equipos tales que todos sus ciclistas son mayores de 20 años.

Obtener el valor del atributo netapa de aquellas etapas tales que todos los puertos que estan en ellas tienen mas de 700 metros de altura.

Obetener el nombre de los ciclistas que han ganado todos los puertos de una etapa y ademas han ganado esa misma etapa.

Obtener el nombre de los equipos tales que todos sus corredores han llevado algun malliot o han ganado algun puerto.

Obtener el nombre de los equipos tal que sus ciclistas solo hayan ganado puertos de la 1 categoria.

El caso es que nose hacer la consulta con varios select creo que era
Domino mas o menos los :
  • Where
  • Or
  • Gruop by
  • from
  • Min
  • Max



Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: adastra en 19 Diciembre 2011, 10:32 am
No se cual es el modelo de datos que tienes, mencionas las tablas pero no especificas los tipos de relaciones que tienen ni su cardinalidad, sin embargo las consultas que indicas son básicas en cualquier sistema que maneje tablas en SQL, creo que tienes que aprender SQL básico antes de comenzar ejecutar consultas.

http://es.scribd.com/doc/1555902/Tutorial-SQL-basico



Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Saberuneko en 24 Diciembre 2011, 13:40 pm
En caso de que tengas un campo clave que una tabla con otra (por ejemplo, el mismo nombre de ciclista en las dos tablas) puedes hacer una unión de tablas, metiendo una condición que te quedaría tal que así:

Suponiendo dos tablas llamadas A y B, ambas teniendo un campo llamado nombre que utilizaremos para unir ambas tablas.

Código:
SELECT nombre, <otros campos>
FROM A, B
WHERE A.nombre = B.nombre
AND <otras condiciones o subconsultas>

Ese WHERE A.nombre = B.nombre es una condición que evita que salgan duplicados los datos de las dos tablas, sólo mostrando cada nombre una vez (cuando coinciden el nombre de la tabla A con el nombre de la tabla B)

Si nos pasas el modelo de datos, te podremos orientar un poco mejor.

Un saludo.


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Anonymous250 en 24 Diciembre 2011, 14:40 pm
Ok pondre como estan las tablas ,para que las veais,pero no se ven las relaciones,me las an dao en papel,y e de escanearlo.
El caso es que tengo que entregar unas 90 consultas SQL,y la unica manera que se me ocurre de lograrlo es ponerme 5 dias o mas,las 24 horas,  a estudiar a saco consultas,y ir provandolas viendo que funcionan para ver que estan bien.
No es nada del otro mundo,lo que pasa es que bases de datos,se me da bien hasta cierto punto,pero la verdad es que tengo poca seguridad en mi mismo,con subconsultas.

Por cierto adastra mire el tuto que me pasastes asi por encima,gracias,me lo estudiare.
En 1 o 2 dias escaneare eso y lo pongo aqui.
Saludos.




Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Hadess_inf en 24 Diciembre 2011, 16:18 pm
Lo mejor que puedes hacer es usar INNER JOIN y LEFT OUTER JOIN para unir tus tablas.


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Anonymous250 en 5 Enero 2012, 16:54 pm
Bueno estoy intentando hacer subconsultas,y las faciles,no tengo muchas complicacion pero cuando empiezan a pedir muchos requisitos me hago un lio,por  ejemplo.

Tres tablas

Tabla Empleado:
CREATE TABLE EMPLEADO (
ID NUMBER(10) NOT NULL,
NOMBRE VARCHAR2(30),
APELLIDOS VARCHAR2(60),
CARGO VARCHAR2(20),
JEFE_ID NUMBER(10),
FECHA_ALTA DATE,
SUELDO NUMBER(9,2),
COMISION NUMBER(9,2),
DEPARTAMENTO_ID NUMBER(10) NOT NULL,
CONSTRAINT EMPLEADOS_PK
PRIMARY KEY (ID)
USING INDEX);
Tabla Departamento:
CREATE TABLE DEPARTAMENTO (
ID NUMBER(10) NOT NULL,
NOMBRE VARCHAR2(50),
LOCALIDAD VARCHAR2(50),
CONSTRAINT DEPARTAMENTOS_PK
PRIMARY KEY (ID)
USING INDEX);
Tabla Rango_Sueldo:
CREATE TABLE RANGO_SUELDO (
GRADO NUMBER(2),
SUELDO_MIN NUMBER(9,2),
SUELDO_MAX NUMBER(9,2));


Y esta consulta:
Obtener el nonbre del departamento,y el numero de empleados que tiene.
El nombre del departamento da igual,puede ser informatica,prensa,etc

Lo que tiene que hacer la consulta es relacionar la tabla de empleado con la de departamento,haciendo un count entre los empleados cuyo departament_id sean iguales ,los que sean iguales que los cuente y esa cuenta la ponga al lado del nombre del departamento.

Esta claro que aun nose que hace cada cosa bien,por que si lo supiese sabria que poner en este caso y no me aria un lio.
E pensado,pero no doy con la consulta, puede que sea una subconsulta donde haya un count,un having o un where. Del inner join y out join se me dan fatal aun no les e cojido el trankillo,a los alias si. As.

Se que esta mal,pero e intentado algo asi,es que soy un poco corto de mente

SELECT nombre,Count(distinct departament_id) As numero empleados
From empleado,departamento
Where departament_id =
En fin creo que voy a suspender,estas son las faciles a las difiles no e llegado aun..... :-\


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: ‭lipman en 5 Enero 2012, 22:44 pm
Este miércoles tengo yo el examen final de BBDD precisamente xD

Código
  1. SELECT Departamento.nombre, COUNT(*) FROM Empleado JOIN Departamento
  2. ON(Departamento.Departamento_ID=Empleado.ID) GROUP BY Departamento.nombre

Deberia de ser así, aunque no me gusta tener que usar tanto el "." para identificar la tabla.. si es para estudiar y hacer ejercicios, me sorprende que te lien con tanto nombre igual.

Si no lo ves muy claro, haz primero esto:

Código
  1. SELECT * FROM Empleado JOIN Departamento
  2. ON(Departamento.Departamento_ID=Empleado.ID)

Y fíjate que puedes hacer grupos con los nombres de los departamentos, ya que estarán repetidos (una vez por cada empleado). Entonces simplemente los agrupas, y sacas el nombre y el count(*).

Un saludo.


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Anonymous250 en 7 Enero 2012, 01:17 am
Hoy me e puesto a hacer consultas,me han ayudado ,y la verdad que no uso el INNER JOIN ni el OUT JOIN

E estado un par de horas para 29 consultas.......e terminado con dolor de cabeza  :xD y desorientacion.

Me han quedado unas 4 consultas o 5 sin hacer a ver si alguno me aconseja.Y la tabla Rango_sueldos,no establesco la relacion.Son las siguientes:

Obtener el nombre de los comerciales, la comisión, el sueldo mensual y el sueldo incrementado como sigue: si la comisión es menor que 50 €, aumentar un 25%; y si es igual o superior, aumentar un 12%.

Mostrar la localidad, nombre y sueldo del empleado cuyo grado es 2 o 3.

Obtener los departamentos sin empleados.

De los departamentos que tienen empleados, obtener el identificador del departamento, el sueldo máximo y el nombre del departamento.

Saludos


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: ‭lipman en 7 Enero 2012, 11:52 am
Si te siguen faltando esas consultas, luego me pondré a ellas que tendré que hacer repaso de BBDD, pero eso si, aprovecho para preguntarte algo.

Cuando estás estudiando BBDD simplemente estudias con el código que has puesto? No tienes más código (INSERTs por ejemplo, para que puedas ver si es más gráfico).

Un saludo

Edito: La de "Departamentos sin empleados" es facil.
Departamentos sin empleados = Departamentos - Departamentos con empleados:

Código
  1. SELECT nombre FROM Departamento
  2. EXCEPT
  3. SELECT Departamento.nombre FROM Departamento JOIN Empleado ON(Empleado.Departamento_ID=Departament.Id)


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Anonymous250 en 8 Enero 2012, 11:16 am
Si te siguen faltando esas consultas, luego me pondré a ellas que tendré que hacer repaso de BBDD, pero eso si, aprovecho para preguntarte algo.

Cuando estás estudiando BBDD simplemente estudias con el código que has puesto? No tienes más código (INSERTs por ejemplo, para que puedas ver si es más gráfico).

Un saludo

Edito: La de "Departamentos sin empleados" es facil.
Departamentos sin empleados = Departamentos - Departamentos con empleados:

Código
  1. SELECT nombre FROM Departamento
  2. EXCEPT
  3. SELECT Departamento.nombre FROM Departamento JOIN Empleado ON(Empleado.Departamento_ID=Departament.Id)
Bueno nunca habia visto el EXCEPT ,creo que estoy utilizando el where not exitst y el Where not in.Subconsultas de hasta 4 SElECT Con un monton con and y or.......El caso es que a mi en clase me enseñaron super poco no entiendo como me mandan esta base de datos que se complica un montonazo,creo que el examen lo hicieron mas facil de lo que era,por que el ejercicio que estoy haciendo yo no lo hico de 30 personas nadie.
Y bueno sobre mis avances e de decir que e compredido mejor lo de las subconsultas y comparaciones,mi hermano me esta ayudando y van saliendo.
Lo que pasa que si son muy dificiles y implican 4 tablas por ejemplo,buff ahi que pensar un monton la clave son las relaciones.me quedan unas 35 consultas para terminar los ejercicios,espero que salgan a ver,culkier duda la pongo aki ok.
Saludos y gracias.


Título: Re: Una Ayudita con subconsultas Sql relacionando varias tablas
Publicado por: Anonymous250 en 8 Enero 2012, 12:59 pm
Ahora toy con otra base de datos

Y me e encontrado con que tengo que hacer hasta 4 subconsultas para que me resuelva esta consulta,estoy trabado ahi.

Nombre de los ciclistas que han llevado el mismo maillot que alberto contador:

Y resulta que para ver eso ahi que comparar el codigo de maillot,que esta en la tabla llevar,y en la tabla maillots.......en fin un lio,yo lo e intentado asi.Pero esta mal es evidente.

SELECT nombre
FROM Ciclistas
WHERE EXISTS
(SELECT dorsal FROM Ciclistas Where dorsal=(SELECT codigomalliot from llevar where codigomalliot=(SELECT codigomalliot From Malliots Where Ciclistas.nombre ="Alberto Contador"
)));


Título: Re: Dudas Sql subconsultas relacionando varias tablas
Publicado por: Anonymous250 en 10 Enero 2012, 12:36 pm
Bueno me han faltado hacer 8 consultas,de 95 que eran,pero ahora comprendo mejor las subconsultas,las mas complicadas y que no e podido hacer tenian hasta 3 o 4 filtros.
Doy el tema por solucionado,gracias por la ayuda