Newsgroup: it.comp.appl.access
Titolo: URGENTE: Come scrivere queste query sql per access 2000

URGENTE: Sto preparando un esame,dopo svariati tentativi falliti ,qualcuno
mi puo' dare una mano a scrivere le seguenti query per access 2000 ? GRAZIE
 
 Sia dato il seguente schema di base di dati:
STUDENTI(Matricola, Nome, Cognome, DataNascita, Indirizzo, Telefono,
Cod_CorsodiLaurea)
DOCENTI(Codice_Docente, Nome, Cognome)
CORSO_DI_LAUREA(Codice_CdL, Nome, Cod_Fac)
INSEGNAMENTO(Codice_Insegnamento, Nome, Cod_Docente, Codice_CdL)
ESAMI(MatrStud, Voto, Data, Lode, Cod_Ins)
FACOLTA(Codice_Fac, Nome, Indirizzo_Sede, N_Telefonico)
Scrivere le query SQL per trovare:
1. Il corso di laurea con il massimo numero di insegnamenti.
2. L'elenco degli studenti iscritti alla facoltà di Medicina Veterinaria, in
ordine decrescente di esami sostenuti.
3. L’elenco dei corsi di laurea offerti dalla facoltà di Ingegneria e il
numero degli iscritti a ciascun corso, in ordine decrescente(elencare anche
i corsi di laurea che non hanno studenti iscritti).
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:151Z8Z67Z42Y11...@usenet.libero.it...

Mancano le relazioni. Tra queste la più "difficile" è quella molti a molti 
tra studenti e docenti. Infatti per ogni corso di laurea esistono più 
docenti e più studenti. Per ogni insegnamento possono esserci più docenti e 
sicuramente più studenti. Per ogni insegnamento possono esserci più esami e 
più studenti. Da quello che scrivi si potrebbe ipotizzare che la tabella 
Esami sia la tabella intermedia tra Studenti e Insegnamento realizzando così 
una relazione molti a molti tra Studenti e Insegnamento. Questo potrebbe 
bastare se ad ogni insegnamento corrisponde un solo docente ma se ci sono 
più docenti per lo stesso insegnamento, manca qualcosa. La tabella 
Insegnamento è la tabella di congiunzione per la relazione molti a molti tra 
CDL e Docenti?.
Chiariti questi punti ho bisogno di sapere se devi usare query singole o 
puoi usare query multiple.
In ultimo permettimi una domanda: se devi preparare l'esame hai almeno 
studiato un po' di sintassi delle istruzioni sql?
Fammi sapere.
Ciao, Carlo

Ciao Carlo,io programmo in visual c++,da un mesetto sto prendendo mano con
il linguaggio sql,sono uno studente lavoratore che usa il fai da te per
preparare gli esami,
mi trovo un po impacciato a sviluppare queste query anche se il linguaggio
basilare lo conosco.
Io preferirei una query singola , ma se questo complica potrebbe essere
anche multipla,mi sto affiancando solo ora al mondo dell'sql,quindi ho tutto
da imparare.
Ecco le ralzioni che leganoi le tabelle:
STUDENTI(Matricola, Nome, Cognome, DataNascita, Indirizzo, Telefono,
Cod_CorsodiLaurea) matricola è chiave
DOCENTI(Codice_Docente, Nome, Cognome)
Codice_Docente è chiave
CORSO_DI_LAUREA(Codice_CdL, Nome, Cod_Fac)
codice_cdl è chiave
INSEGNAMENTO(Codice_Insegnamento, Nome, Cod_Docente, Codice_CdL)
codice_insegnamento è chiave
ESAMI(MatrStud, Voto, Data, Lode, Cod_Ins)
MatrStud, Cod_Ins è chiave
FACOLTA(Codice_Fac, Nome, Indirizzo_Sede, N_Telefonico)
codice_fac è chiave
Diciamo che a me interesserebbe principalmente la domanda 3 che ripropongo:
3. L'elenco dei corsi di laurea offerti dalla facoltà di Ingegneria e il
numero degli iscritti a ciascun corso, in ordine decrescente(elencare
anche corsi di laurea che non hanno studenti iscritti).
il punto cruciale è che non riesco ad elencare i corsi di laurea che non
hanno studenti iscritti.Allego l'sql da me sviluppata
SELECT corso, numero_studenti
FROM
(
SELECT corso_di_laurea.nome as corso, studenti.cod_corsodilaurea,
corso_di_laurea.codice_cdl, count(corso_di_laurea.nome) AS numero_studenti
FROM facolta, studenti, corso_di_laurea
WHERE facolta.codice_fac= corso_di_laurea.cod_fac and facolta.nome=
'ingegneria'
GROUP BY corso_di_laurea.nome, studenti.cod_corsodilaurea,
corso_di_laurea.codice_cdl
HAVING
studenti.cod_corsodilaurea=corso_di_laurea.codice_cdl
);
é logigo che non mi dia il numero di studenti per i corsi che non hanno
nessun iscritto,infatti ho messo la condizione
'studenti.cod_corsodilaurea=corso_di_laurea.codice_cdl ' ,ma non so come
risolvere il problema.
Le domande 1 e 2 le ho risolte ma volevo confrontare sql sviluppate da altri
per vedere se ci sono vie piu' semplici.
Grazie spero tu possa aiutarmi




Ciao eddy
hai elencato le chiavi primarie e non le relazioni.
Comunque ho realizzato (qui io mi diverto) una struttura simile alla tua 
proposta, con le relazioni che mi sembravano più giuste.
Onde evitare di perdermi in chiacchere ti allego il link per scaricare il db 
di esempio (A97 che si può convertire). Dagli un'occhiata e fammi sapere.
Ciao, Carlo
http://www.frantoiogestione.com/Universita.zip
 

 ha scritto nel messaggio 
news:43986bbb$0$13261$4faf...@reader2.news.tin.it...

Ciao Carlo
Complimenti!!! Bravo 7+  :)
scusami per l'intrusione. non è cosa che mi riguarda ma solo per 
capire......
dalla Riepilogo Elenco0 selezionando un corso
la casella di testo2 non si dovrebbe aggiornare?
Daniele
messenger: Cidi45 


Certo che si potrebbe fare...ma questo è un altro discorso. Se vuoi puoi 
lavorarci tu.
Ad eddy servivano le istruzioni sql...ed anche capire un po' le relazioni.
Ciao, Carlo 

ad occhio, invece di una clausola where che ovviamente ti mostra
solmente i record accoppiati (cioè i corsi che hanno studenti) ti
consiglierei una left join, che mostra tutti i record da una parte, e
solo quelli accoppiati dall'altra (c'è anche la righ join, che fa
giusto il contrario). Per vedere di preciso come si scrive, io di
solito creo una query in Access con il QBE, poi vado a leggermi l'sql
generato. In alternativa, per vedere come funziona la join asimmetrica,
fati generare una query di ricerca dati non corrispondenti, lì il
codice è estremamente chiaro.