SQL - consulta sql

 
Vista:
sin imagen de perfil
Val: 13
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql

Publicado por fernando (6 intervenciones) el 06/06/2017 21:49:05
Hola a partir de estas tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
create table Pasajero (
 
    IdPasajero decimal not null Primary Key,
 
    NombrePasajero varchar(60),
 
    APaternoPasajero varchar(60),
 
    AMaternoPasajero varchar(60),
 
    TipoDocumentoPasajero char(3),
 
    NumeroDocumentoPasajero decimal,
 
    FechaNacimientoPasajero date,
 
    EmailPasajero varchar(60),
 
    PasswordPasajero character(40),
 
    IdPais decimal not null foreign key references Pais(IdPais)
 
);
 
 
create table Boleto (
idBoleto decimal not null primary key,
 
    IdPasajero decimal not null foreign key references Pasajero (IdPasajero),
 
    IdTren decimal not null foreign key references Tren (IdTren),
 
    FilaAsiento integer,
 
    LetraAsiento char(2),
 
    FechaCompraBoleto date,
 
    IdViaje decimal not null foreign key references Viaje (IdViaje),
 
    Foreign key (IdTren,FilaAsiento,LetraAsiento) references Asiento(IdTren,FilaAsiento,LetraAsiento)
 
);

se me pide la consulta:

Listar todos los datos de los pasajeros para los cuales haya registrados en el sistema más de 5 boletos
comprados.


Hice estas dos consultas:

1
2
3
select * from pasajero,Boleto where Pasajero.IdPasajero=Boleto.IdPasajero
 
select count(*) from pasajero, Boleto where Pasajero.IdPasajero=Boleto.IdPasajero group by Boleto.IdPasajero having count(*)>5;

Se que por separado me da bien aunque esté mal en si , lo que quiero es que en el resultado de la consulta me muestre todos los datos de los pasajero y la cantidad de boleto que compro cada pasajero, ya que cuando mezco las dos consultas me salta un error.

Desde ya les agradezco mucho, es para un proyecto de la fac :(
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: 182
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql

Publicado por leonardo_josue (1171 intervenciones) el 06/06/2017 22:27:31
Hola Fernando:

en realidad casi tienes la consullta armada, sólo tendría que hacerte algunas recomendaciones:

1. En lugar de hacer JOIN'S implicitos, haz JOIN's explícitos, en otras palabras, en lugar de hacer esto:

1
2
3
4
....
FROM tabla1, tabla2
WHERE tabla1.campo = tabla2.campo
...

haz esto

1
2
3
4
....
FROM tabla1
INNER JOIN tabla2  ONtabla1.campo = tabla2.campo
...

El resultado es el mismo, pero los JOIN's son más rápidos además de que dejan el código más "limpio", para conocer los distintos tipos de JOINS, puedes preguntarle a SANTA WIKIPERIA:

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

2. Trata de evitar en la medida de lo posible consultas tipo SELECT *, es decir, aunque necesites TODOS los campos de tus tablas, es mejor listarlos a poner asterisco. En la práctica muy pocas veces necesitas de todos los campos, así es que es mejor listar sólo lo que realmente necesitas.

Ahora, bien, como te comenté, prácticamente tienes la consulta armada, lo único que tienes que hacer es "unirlas" hacer un pequeño ajuste:

1
2
3
4
5
6
7
8
9
10
11
12
SELECT
   Pasajero.IdPasajero,
   Pasajero.NombrePasajero,
   count(Pasajero.IdPasajero)
FROM
   pasajero
INNER JOIN
   Boleto ON Pasajero.IdPasajero=Boleto.IdPasajero
GROUP BY
   Pasajero.IdPasajero, Pasajero.NombrePasajero
HAVING
   COUNT(Pasajero.IdPasajero )>0

Si necesitas información adicional del PASAJERO, debes incluir los campos en el SELECT y es posible que también en el GROUP BY, ya que la mayoría de los DBMS's piden no permiten que se seleccionen campos adicionales sin que se agrupe (excepto MySQL, MariaDB y algunos otros).

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
2
Comentar
sin imagen de perfil
Val: 13
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

consulta sql

Publicado por fernando (6 intervenciones) el 06/06/2017 22:35:55
Muchisimas gracias leo! Si es que es mi primer semestre con base de datos y estoy medio embolado con las consultas, me quedó clarísimo tu respuesta y me ajusto algunas cosas que tenía media suelta. Nuevamente te agradezco por tu respuesta detallada. Ya lo probe en SQL Server 2014 Management Studio , y corre sin problemas. 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