Query in Access:aiuto!

martedì 27 marzo 2007 - 18.33

Anonimo Profilo | Senior Member

Ciao ragazzi,
come vedete sono nuova del mondo SQL ma ho assolutamente bisogno di voi per la risoluzione di 6 maledette query da implementare in Access per l'orale di un esame..nella cartella che ho caricato ci sono i due db, semplicissimi e le indicazioni di quello che dovrei fare.

DATEMI UNA MANO, VI PREGO!!!!!!!!!!!!!

Sara

bluland Profilo | Guru

Ciao, ma ci sono gia delle risposte!!

edit:

le prime due domande gia ci sono un accenno di risposta nel file mdb, poi dimmi una cosa ma
"Secondo i dati che ho inserito, i risultati dovrebbero essere:
1. 239, 219 e 29 €
2. C438, C487, C543, C567, E874, HP213, HP872, HP908, HP964, HP902, HP876
3. C432, HP214
4. C432

"

sono le risposte?


--------------------
Vincenzo PESANTE

lbenaglia Profilo | Guru

>come vedete sono nuova del mondo SQL ma ho assolutamente bisogno
>di voi per la risoluzione di 6 maledette query da implementare
>in Access per l'orale di un esame

Ciao Sara,

Io una mano te la do volentieri, ma mi devi promettere che "ci sbatterai la testa" sulle soluzioni che ti sto per proporre, OK?
Allora, iniziamo subito a dire che esistono più risposte per ogni singola domanda (usando combinazioni di inner/outer join e degli operatori IN ed EXISTS), ma ho preferito rispondere in modo differente proponendoti di volta in volta costrutti diversi.

1. Costo delle periferiche che sono compatibili con almeno un computer Apple

SELECT P.Costo_P FROM Periferica AS P INNER JOIN ( SELECT C1.Periferica FROM [Compatibilita'] AS C1 INNER JOIN Computer AS C2 ON C1.Computer = C2.Codice_C WHERE C2.Costruttore_C = "Apple" GROUP BY C1.Periferica ) AS Q ON P.Codice_P = Q.Periferica;


2. Descrizione delle periferiche che non sono compatibili con alcun computer Apple

SELECT P.Descrizione, P.Codice_P FROM Periferica AS P INNER JOIN [Compatibilita'] AS C ON P.Codice_P = C.Periferica WHERE NOT EXISTS( SELECT * FROM Computer WHERE Codice_C = C.Computer AND Costruttore_C = "Apple" );

3. Codice e Descrizione periferiche installabili su tutti i computer Apple

SELECT P.Codice_P, P.Descrizione FROM Periferica AS P INNER JOIN ( SELECT C1.Periferica FROM [Compatibilita'] AS C1 INNER JOIN Computer AS C2 ON C1.Computer = C2.Codice_C WHERE C2.Costruttore_C = "Apple" GROUP BY C1.Periferica HAVING COUNT(*) = ( SELECT COUNT(*) FROM Computer WHERE Costruttore_C = "Apple" ) ) AS Q ON P.Codice_P = Q.Periferica;

4.Codice e Descrizione periferiche installabili su tutti i computer Apple nell’anno 2007

SELECT P.Codice_P, P.Descrizione FROM Periferica AS P INNER JOIN ( SELECT C1.Periferica FROM [Compatibilita'] AS C1 INNER JOIN Computer AS C2 ON C1.Computer = C2.Codice_C WHERE C2.Costruttore_C = "Apple" AND C1.Anno_Produzione = "2007" GROUP BY C1.Periferica HAVING COUNT(*) = ( SELECT COUNT(*) FROM Computer WHERE Costruttore_C = "Apple" ) ) AS Q ON P.Codice_P = Q.Periferica;



1. Selezionare tutti i dati degli abbonati che non hanno sottoscritto alcuna offerta di abbonamento che comprenda anche l’Espresso.

SELECT A1.* FROM Abbonato AS A1 INNER JOIN ( SELECT A.Abbonato FROM Abbonamento AS A INNER JOIN ( SELECT C.Offerta, C.Rivista FROM Comprende AS C INNER JOIN Rivista AS R ON C.Rivista = R.Codice_R WHERE R.Descrizione <> "Espresso" ) AS O ON A.Offerta = O.Offerta GROUP BY A.Abbonato ) AS A2 ON A1.Codice_Abbonato = A2.Abbonato;

2. Selezionare le riviste che non sono mai state offerte in abbonamento all’Espresso

SELECT R.* FROM Rivista AS R INNER JOIN ( SELECT C2.Rivista FROM Comprende AS C2 LEFT JOIN ( SELECT C1.Offerta FROM Comprende AS C1 INNER JOIN Rivista AS R ON C1.Rivista = R.Codice_R WHERE R.Descrizione = "Espresso" ) AS O ON C2.Offerta = O.Offerta WHERE O.Offerta IS NULL ) AS Q ON R.Codice_R = Q.Rivista;

Un esercizio utile sarebbe quello di riscrivere 6 query equivalenti a quelle suggerite...

In bocca al lupo!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Anonimo Profilo | Senior Member

Ciao Vincenzo!
nel file word che ho caricato ci sono le 4+2 query che devo implementare.
Per quanto riguarda IT.mdb le risposte ci sono perchè io ho creato il db e inserito le tuple presenti in modo da poter controllare i risultati. Rimane sottointeso che il contenuto del db è modificabile ma le query 3 e 4 su IT non le so fare!!!!

Per quanto riguarda Abbonamenti.mdb, la query 1 è già risolta, l'ho implementata scrivendo l'SQL e funziona. La numero 2 non so farla.

Quindi ho problemi con:

IT-query 3 e 4 (ammesso che 1 e 2 siano ok!!)
ABBONAMENTI-query 2

Mi puoi aiutare...EXPERT???

Anonimo Profilo | Senior Member

GRAZIEEEEEEEEEEEEEEEEEE!Certo che ci sbatterò la testa!!!

ma ragazzi credetemi che non è facile seguire i corsi di Ingegneria ad ordinamento trimestrale: ora ho 3 esami da dare in 12 giorni!!!!! e il Prof. di Sistemi Informativi non ci ha mai parlato di SQL!
Cmq sono convinta che prima o poi approfondirò il mondo delle basi di dati...se poi ci sono persone gentili come voi a cui chiedere!

Grazie infinite!!!

bluland Profilo | Guru

beh il mitico Lorenzo gia ti ha dato + che una mano!

cmq come dice lui se questa è una materia importante per il tuo percorso di studi sbattici la testa

saluti e in bocca al lupo
--------------------
Vincenzo PESANTE

lbenaglia Profilo | Guru

>ma ragazzi credetemi che non è facile seguire i corsi di Ingegneria
>ad ordinamento trimestrale: ora ho 3 esami da dare in 12 giorni!!!!!
>e il Prof. di Sistemi Informativi non ci ha mai parlato di SQL!
Guarda, io ho mollato Ingegneria dopo aver dato per 7 volte l'esame di chimica, passando sempre lo scritto ma inciampando all'ultima domanda agli orali (completamente campata per aria)...

>Cmq sono convinta che prima o poi approfondirò il mondo delle
>basi di dati...
Ti suggerisco questo testo accademico:
http://www.ateneonline.it/atzeni/desclibroA.asp

>se poi ci sono persone gentili come voi a cui
>chiedere!
Grazie, sei molto gentile

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

>Guarda, io ho mollato Ingegneria dopo aver dato per 7 volte l'esame di chimica, passando sempre lo scritto ma inciampando >all'ultima domanda agli orali (completamente campata per aria)...

beh se ti puo consolare io l'ho ripetuto 4 volte chimica
sempre passato allo scritto e bocciato all'orale, l'ultima volta fui bocciato perche mi disse che non sapevo disegnare bene le molecole !!!
poi meno male la cattedra cambiò..

Saluti
--------------------
Vincenzo PESANTE

lbenaglia Profilo | Guru

>beh se ti puo consolare io l'ho ripetuto 4 volte chimica
>sempre passato allo scritto e bocciato all'orale, l'ultima volta
>fui bocciato perche mi disse che non sapevo disegnare bene le
>molecole !!!
Ricordo ancora una domanda: "Cosa succede se comprimo 1L d'aria?"
Tu cosa risponderesti? Succedono 1 milione di cose.
Iniziai a dire che aumenta la pressione e la temperatura... supponendo che si tratti di un gas perfetto, iniziai a spiegare la legge p × V = n × R × T, bla, bla...

Parlai per mezz'ora poi quello "stronzo" mi disse: "No, no, se ne vada, bocciato".
Io: "Si può sapere almeno la risposta corretta?"
Docente: "Certo, l'aria diventa blu perché c'è formazione d'ozono."

Al che ho capito che Ingegneria non faceva per me, e dopo ben 15 anni non ne sento la mancanza

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

>>beh se ti puo consolare io l'ho ripetuto 4 volte chimica
>>sempre passato allo scritto e bocciato all'orale, l'ultima volta
>>fui bocciato perche mi disse che non sapevo disegnare bene le
>>molecole !!!
>Ricordo ancora una domanda: "Cosa succede se comprimo 1L d'aria?"
>Tu cosa risponderesti? Succedono 1 milione di cose.
>Iniziai a dire che aumenta la pressione e la temperatura... supponendo
>che si tratti di un gas perfetto, iniziai a spiegare la legge
>p × V = n × R × T, bla, bla...
>
>Parlai per mezz'ora poi quello "stronzo" mi disse: "No, no, se
>ne vada, bocciato".
>Io: "Si può sapere almeno la risposta corretta?"
>Docente: "Certo, l'aria diventa blu perché c'è formazione d'ozono."

ma sarà lo stesso prof??

Beh pensa un pò che con i nuovi ordinamenti per i corsi di informatica chimica è facoltativa!!


ciao!
--------------------
Vincenzo PESANTE

lbenaglia Profilo | Guru

>ma sarà lo stesso prof??
Noi lo chiamavamo Gargamella (ai tempi non c'erano ancora i Simpsons, ma era sputato al Sig. Burns)
Il suo "vero" cognome era Citterio...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

No invece a me aveva una faccia cattiva e basta tipo cosi
si chiama o chiamava chissà (sai dopo tutte le benedizioni ricevute )
Branda...

cmq ritornando all'università la verità e che non ti lascia il tempo di imparare, tutto troppo in fretta non riesci ad approfondire bene le cose, quando ho fatto l'esame di stato ho visto molti colleghi impappinarsi sul pratico con esercizi tipo quello della nostra amica, purtroppo l'universita diventa una corsa per finire e non hai tempo spesso di approfondire, anche perche mia modesta opinione, ci sono troppi pochi esami specialistici e molti non, l'80% di esami tra matematica, fisica, economia e varie e solo il 20% di esami informatica.
Ed il bello che quando ci si laurea la maggior parte delle azienda ti chiede che tu sappia gia fare tante cose.....


saluti
--------------------
Vincenzo PESANTE

Anonimo Profilo | Senior Member

>Ti suggerisco questo testo accademico:
>http://www.ateneonline.it/atzeni/desclibroA.asp
E' prprio quello che abbiamo usato durante il corso: davvero un ottimo testo!!!!!!!!

Però dato che il corso ha avuto solo 54 ore in 9 settimane abbiamo completamente saltato SQL e normalizzazione...bravi no?! Però all'orale il prof vuole l'appello implementato in Access e le query in algebra relazionale+.....SQL!!!

PS: la query "1. Costo delle periferiche che sono compatibili con almeno un computer Apple", mi fa crashare Access...per fortuna è una delle poche che avevo fatto attraverso la maschera grafica!!!

CIAO...vado a fare un altro esame!!!!!!!!!

lbenaglia Profilo | Guru

>>Ti suggerisco questo testo accademico:
>>http://www.ateneonline.it/atzeni/desclibroA.asp
>E' prprio quello che abbiamo usato durante il corso: davvero
>un ottimo testo!!!!!!!!
Bene

>PS: la query "1. Costo delle periferiche che sono compatibili
>con almeno un computer Apple", mi fa crashare Access...per fortuna
>è una delle poche che avevo fatto attraverso la maschera grafica!!!
Probabilmente con "maschera grafica" intendi il Query By Example (QBE) di Access... Se vuoi impadronirti veramente dei comandi SQL e della logica relazionale, ti suggerisco di non utilizzare il QBE ma di scrivere a manina ogni singola query.

>CIAO...vado a fare un altro esame!!!!!!!!!
In bocca al lupo!!

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Anonimo Profilo | Senior Member

Ciao Lorenzo, ho provato ad implementare definitivamente le query ma ho dei problemi con queste due:
>1. Selezionare tutti i dati degli abbonati che non hanno sottoscritto
>alcuna offerta di abbonamento che comprenda anche l’Espresso.
>
>SELECT A1.*
>FROM Abbonato AS A1
>INNER JOIN (
> SELECT A.Abbonato
> FROM Abbonamento AS A
> INNER JOIN (
> SELECT C.Offerta, C.Rivista
> FROM Comprende AS C
> INNER JOIN Rivista AS R
> ON C.Rivista = R.Codice_R
> WHERE R.Descrizione <> "Espresso"
> ) AS O
> ON A.Offerta = O.Offerta
> GROUP BY A.Abbonato
>) AS A2
>ON A1.Codice_Abbonato = A2.Abbonato;
Non restituisce il risultato corretto, anzi include degli abbonati che lo sono anche all'Espresso.

>2. Selezionare le riviste che non sono mai state offerte in abbonamento
>all’Espresso
>
>SELECT R.*
>FROM Rivista AS R
>INNER JOIN (
> SELECT C2.Rivista
> FROM Comprende AS C2
> LEFT JOIN (
> SELECT C1.Offerta
> FROM Comprende AS C1
> INNER JOIN Rivista AS R
> ON C1.Rivista = R.Codice_R
> WHERE R.Descrizione = "Espresso"
> ) AS O
> ON C2.Offerta = O.Offerta
> WHERE O.Offerta IS NULL
>) AS Q
>ON R.Codice_R = Q.Rivista;
Questa invece include alcune riviste che appaiono comprese in offerte insieme all'Espresso..Ho provato a modificare l'SQL che mi hai dato ma è troppo complesso per me..con tutti quegli AS e Group by perdo il filo, sono troppo indietro!

Nella cartella che ho caricato c'è ABBONAMENTI.mdb, ci dai un'occhiata per favore?

Grazie,
Sara


lbenaglia Profilo | Guru

>1. Selezionare tutti i dati degli abbonati che non hanno sottoscritto
>alcuna offerta di abbonamento che comprenda anche l’Espresso.
...
>Non restituisce il risultato corretto, anzi include degli abbonati
>che lo sono anche all'Espresso.

Mmmmm... sei sicura?
La tabella derivata

SELECT C.Offerta, C.Rivista, R.Descrizione FROM Comprende AS C INNER JOIN Rivista AS R ON C.Rivista = R.Codice_R WHERE R.Descrizione <> "Espresso"

restituisce i codici offerta relativi alle riviste che non contengono l'Espresso... come è possibile che la query finale restituisca abbonati all'Espresso?

>Questa invece include alcune riviste che appaiono comprese in
>offerte insieme all'Espresso..
Hai ragione!
Avevo implementato un algoritmo che prendeva in considerazione tutte le offerte ad esclusione di quelle contenenti l'Espresso, senza pensare che tali offerte possono contenere le singole riviste offerte insieme all'Espresso

OK, vediamo come correggere la query:

SELECT R.* FROM Rivista AS R LEFT JOIN ( SELECT C2.Rivista FROM Comprende AS C2 INNER JOIN ( SELECT C1.Offerta FROM Comprende AS C1 INNER JOIN Rivista AS R ON C1.Rivista = R.Codice_R WHERE R.Descrizione = "Espresso" ) AS O ON C2.Offerta = O.Offerta GROUP BY C2.Rivista ) AS Q ON R.Codice_R = Q.Rivista WHERE Q.Rivista IS NULL;

Come prima inizio a ricavare le offerte che contengono l'Espresso;
Successivamente vado a prendere tutte le riviste contenute in queste offerte eliminando eventuali duplicati;
Infine prendo tutte le riviste che non esistono nell'insieme definito nel precedente punto.

>Grazie,
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Anonimo Profilo | Senior Member

Ok, ora vado a casa e provo a implementarle definitivamente..
Grazie di avermi spiegato come funzionano, è un buon inizio per capire come si articolano i costrutti del codice!

Buona serata!!!
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5