Accedi per seguire   
Seguaci 0
dj GCE

Query Sql

8 messaggi in questa discussione

Dato lo schema:

Studente (Mat, Nome, Cognome, Indirizzo, Citta, CAP, Sesso)

Insegnante (Mat, Nome, Cognome, Citta, Telefono, Stipendio)

Corso (Cod, Nome, Facolta, NumCrediti)

Esame (CodCorso, MatStudente, Voto)

Insegnamenti (CodCorso, MatProf, NumStud)

è corretto che per selezionare il numero di studenti che hanno superato l'esame di "Basi di Dati", insegnato dal professore Mario Rossi, si debba usare la seguente query:

SELECT COUNT (MatStudente)
FROM Esame, Insegnamento, Insegnante
WHERE Insegnante.Cognome = 'Rossi' AND Insegnante.Nome = 'Mario' AND Insegnamento.MatProf = Insegnante.Mat AND Insegnamento.Corso = Esame.CodCorso

?

Se sbagliata, come correggerla?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

il criterio "superato l'esame" da cosa è distinto? perche in questa maniera selezioni tutti gli studenti che seguono quel corso con qul professore. secondo me bisogna inserire anche la valutazione su "voto"

SELECT COUNT (MatStudente)

FROM Esame, Insegnamento, Insegnante

WHERE Insegnante.Cognome = 'Rossi' AND Insegnante.Nome = 'Mario' AND Insegnamento.MatProf = Insegnante.Mat AND Insegnamento.Corso = Esame.CodCorso and esame.voto > 18

per quel poco che mi ricordo di SQL

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Bene, grazie :)

Beh, superare l'esame significava proprio da 18 in su, giacché si simula un'univeristà.

A questo appunto aspetto la conferma di uno che di SQL ne sa un pò di più, solo per avere conferma :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

io avrei fatto diversamente... una vista e un'interrogazione...

CREATE VIEW StudentiDB (Matricola, NomeS, CognomeS)

SELECT Mat, Nome, Cognome

FROM Studente JOIN Esame ON Studente.Mat=Esame.MatStudente

JOIN Corso ON Esame.CodCorso=Corso.Cod

WHERE Corso.Nome='Basi di Dati'

AND Esame.Voto BETWEEN 18 AND 30 OR Esame.Voto='30 e lode'

------------------

SELECT COUNT (Matricola)

FROM StudentiDB JOIN Esame ON StudentiDB.Matricola=Esame.MatStudente

JOIN (Insegnamenti ON Esame.CodCorso=Insegnamenti.CodCorso)

JOIN (Insegnante ON Insegnamenti.MatProf=Insegnante.Mat)

WHERE Insegnante.Nome='Mario'

AND Insegnante.Cognome='Rossi'

Poi non sò :) correggetemi se sbaglio qualcosa e mi auto-criticherò e auto-correggerò :P

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

No, perchè l'unione delle tabelle per join (che ti lega le tabelle in base ai campi primary key e foreign key) non viene fatto nel WHERE ma nel FROM, quindi dato:

Dato lo schema:

Studente (Mat, Nome, Cognome, Indirizzo, Citta, CAP, Sesso)

Insegnante (Mat, Nome, Cognome, Citta, Telefono, Stipendio)

Corso (Cod, Nome, Facolta, NumCrediti)

Esame (CodCorso, MatStudente, Voto)

Insegnamenti (CodCorso, MatProf, NumStud)

Dovrebbe essere:

SELECT COUNT (MatStudente)

FROM Corso JOIN (Insegnante JOIN Insegnamenti ON Insegnante.Mat = Insegnamenti.MatProf) ON Corso.Cod = Insegnamenti.CodCorso, Corso JOIN (Studente JOIN Esame ON Studente.Mat=Esame.MatStudente) ON Corso.Cod = Esame.CodCorso

WHERE Insegnante.Cognome = 'Rossi' AND Insegnante.Nome = 'Mario' AND Esame.Voto >= '18' AND Corso.Nome= 'Basi di Dati' ;

Spero di non aver dimenticato nulla :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Ci ho riflettuto un pò, anche dopo una chattata con la Lory :) (PS: Presentati :P).

Io credo che la query che ho messo sopra sia giusta ma incompeta, cioé manca il distinguo sul nome corso (sul voto va invece contato se vengono registrate solo le materie superate o meno); avremmo, quindi:

SELECT COUNT (MatStudente)
FROM Esame, Insegnamento, Insegnante
WHERE Insegnante.Cognome = 'Rossi' AND Insegnante.Nome = 'Mario' AND Insegnamento.MatProf = Insegnante.Mat AND Insegnamento.Corso = Esame.CodCorso AND Corso.Nome = "Basi di Dati" AND Esame.Voto >= 18

Può essere oppure è corretta quella di frman?

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Scusa.. ma la query la stai lanciando tramite MySQL? o l'SQL 'adattato' di Access?

tramite MySql le operazioni di Join devono essere presentate nel FROM :)

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Da nessun programma, stavo verificando l'esattezza di una query posta in un quaderno come esercitazione...

Condividi questo messaggio


Link di questo messaggio
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per partecipare

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!


Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.


Accedi Ora
Accedi per seguire   
Seguaci 0