Problemi con semplici esercizi di sql, qualcuno sa risolverli?

martedì 10 marzo 2009 - 12.38

salvo77 Profilo | Newbie

Ciao a tutti ho un esercizio di cui non so fare alcune cose e le posto, spero che la vostra esperienza mi possa essere utile. Grazie 100000000.

E' dato il seguente schema relazionale per modellare la struttura di un'azienda :
___________________________________________________________________
impiegato( i_id, nome, cognome, stipendio, data_inizio, data_fine);
sede( s_id, nome, indirizzo)
dipartimento ( d_id, nome, budget)
in dipartimento( i_id, d_id, percento_tempo)
in_sede( i_id, s_id)
manager( i_id, d_id)
___________________________________________________________________
Scrivere le seguenti query in SQL:

1. II nome e il budget dei dipartimenti dove lavorano più di 50 persone
2. II nome del dipartimento e l'indirizzo della sede dove lavora l'impiegato con lo stipendio più alto di tutti
3 II nome del dipartimento con nessun impiegato
4. Nome, cognome e stipendio del manager che gestisce più dipartimenti
__________________________________________________________________
PS Se qualcuno le sa risolvere anche in algebra relazionale, gli sarei ancora più grato. GRAZIE

Stroke Profilo | Junior Member

>Ciao a tutti ho un esercizio di cui non so fare alcune cose e
>le posto, spero che la vostra esperienza mi possa essere utile.
>Grazie 100000000.
>
>E' dato il seguente schema relazionale per modellare la struttura
>di un'azienda :
>___________________________________________________________________
>impiegato( i_id, nome, cognome, stipendio, data_inizio, data_fine);
>sede( s_id, nome, indirizzo)
>dipartimento ( d_id, nome, budget)
>in dipartimento( i_id, d_id, percento_tempo)
>in_sede( i_id, s_id)
>manager( i_id, d_id)
>___________________________________________________________________
>Scrivere le seguenti query in SQL:
>
>1. II nome e il budget dei dipartimenti dove lavorano più di
>50 persone
>2. II nome del dipartimento e l'indirizzo della sede dove lavora
>l'impiegato con lo stipendio più alto di tutti
>3 II nome del dipartimento con nessun impiegato
>4. Nome, cognome e stipendio del manager che gestisce più dipartimenti
>__________________________________________________________________
>PS Se qualcuno le sa risolvere anche in algebra relazionale,
>gli sarei ancora più grato. GRAZIE
>
>
Con questi dati è impossibile, non ci sono elementi sufficiento per gestire la cosa. Non c'è legame tra i dipendenti e le sedi e i dipartimenti. Non si capisce come sono gestiti dipartimenti e sedi, cioè se è una struttura ad albero per cui dalla sede dipendono n dipartimenti oppure se i dipartimenti sono in struttura trasversale e quindi un dipartimento può essere presente in più sedi. La tadella in Dipartimento non si capisce che intento avrebbe, la tabella manager composta da un codice e id cosa dovrebbe significare?
In pratica la prima domanda che poni figurerebbe così: Ti do il nome dei miei amici e l'elenco telefonico, devi sapermi dire dove abitano.
Devi fornire qualche dato in più.
ciao

Furio
http://www.opsi.ws

salvo77 Profilo | Newbie

Ciao Stroke, innanzi tutto grazie per avermi risposto.
Lo so il tutto è un po complesso da capire, ma questo è il quesito che mi e stato chiesto.
Quello che è per certo è che gli impiegati possono lavorare in 2 o più dipartimenti per una certa percentuale di tempo, la tabella in_dipartimento contine i codici di riferimento
della tabella impiegato e dipartimento, in_sede contiene i codici di riferimento di impiegato e di sede, manager contiene invece quelli di impiegato e di dipartimento, quindi un manager può essere anche un impiegato che lavora in uno o più dipartimenti.
Lo so sono delle query un po complicatucce, io ci sto sbattendo da due giorni, mi sono fatto un database con mysql e cerco di formulare le interrogazioni che me li risolvono,
ma ancora non ci sono riuscito.
Ciao, spero di averti dato qualche informazione in più.
Salvo

Stroke Profilo | Junior Member

questa potrebbe essere la risposta numero 1 se ho capito bene i joint

SELECT dip.nome, dip.budget
FROM (dipartimento as dip INNER JOIN in_dipartimento ON dip.d_id = in_dipartimento.d_id) INNER JOIN impiegati as imp1 ON in_dipartimento.i_id = imp1.i_id
where
(SELECT Count(impo.i_id) AS ConteggioDii_id
FROM dipartimento as dipo INNER JOIN (impiegati as impo INNER JOIN in_dipartimento ON impo.i_id = in_dipartimento.i_id) ON dipo.d_id = in_dipartimento.d_id
GROUP BY dipo.d_id
HAVING (((Count(impo.i_id))>50) AND ((dipo.d_id)=dip.d_id)))
;
Da testare con un po di dati
ciao
Furio
http://www.opsi.ws

Stroke Profilo | Junior Member

e questa per la seconda query
SELECT dipartimento.nome, dipartimento.budget
FROM (dipartimento INNER JOIN in_dipartimento ON dipartimento.d_id = in_dipartimento.d_id) INNER JOIN impiegati as imp1 ON in_dipartimento.i_id = imp1.i_id
WHERE (((imp1.i_id) =exists
(SELECT top 1 impiegati.nome, impiegati.cognome, Max(impiegati.stipendio) AS MaxDistipendio
FROM impiegati
GROUP BY impiegati.nome, impiegati.cognome
ORDER BY Max(impiegati.stipendio) DESC)
));

Furio
http://www.opsi.ws

salvo77 Profilo | Newbie

Ciao Stroke, complimenti , ho perso un po di tempo per aggiungere tutti i possibili campi,e per testarli, ma le tue due query funzionano alla grande!
Per le altre due puoi fare qualcosa?
Un altra domanda: pensi che queste quattro query si possano fare in algebra relazionale? E se si le sai fare?
Un salutone, CIAOOOOOOOOO!!!!!

Stroke Profilo | Junior Member

>Ciao Stroke, complimenti , ho perso un po di tempo per aggiungere
>tutti i possibili campi,e per testarli, ma le tue due query funzionano
>alla grande!
>Per le altre due puoi fare qualcosa?
>Un altra domanda: pensi che queste quattro query si possano fare
>in algebra relazionale? E se si le sai fare?
>Un salutone, CIAOOOOOOOOO!!!!!
Pensavo che lo schema query e subquery ti fosse suffiecente per comprendere il meccanismo delle altre 2, purtroppo sono un po incasinato e non riesco a farle subito, per cui ti chiederei di provare e caso mai ti correggo se non riesci.
Per l'algebra relazionale è solo un modo sintattico di rappresentare le query, sinceramente non conosco questa sintassi, ma da quel poco che ho visto se hai capito la struttura delle query non mi sembra così difficile.

ciao
Furio
http://www.opsi.ws
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5