Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 ITPS - Secondo Anno
 Progettazione di Basi di dati + Lab.
 Soluzioni appelli lab 16/01, 29/01, 13/02

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista Inserisci Faccine
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Smilies
Approvazione [^] Arrabbiato [:(!] Bacio [:X] Bevuta [:273]
Caldo [8D] Compiaciuto [8)]    
compleanno [:269]
Davvero Felice [:D] Diavoletto [}:)] Disapprovazione [V] Domanda [?]
Felice [:)] Fumata [:29] Goloso [:P] Imbarazzato [:I]
Infelice [:(] Morte improvvisa da [:62]
Morto [xx(] Occhio Nero [B)] Occhiolino [;)] Palla 8 [8]
pc [:205]    
Riproduzione [:76]
Scioccato [:O]      

   Allega file
  Clicca qui per inserire la tua firma nel messaggio.
Clicca qui per sottoscrivere questa Discussione.
    

V I S U A L I Z Z A    D I S C U S S I O N E
supernova87 Inserito il - 30/08/2008 : 16:00:06
ciao ragazzi,
ho risolto per esercizio gli appelli di laboratorio di gennaio e febbraio, perciò posterò qui le soluzioni così chi ha ancora problemi con mysql 5 può dare un'occhiata ai punti che non riesce a svolgere.
Le soluzioni le ho testate e funzionano, tranne quelle in cui ho specificato di non averle testate.

A voi:

Appello del 16 gennaio 2008
ESERCIZIO 1)
CREATE TABLE Filiali (
Nro_filiale char(1),
Nome_filiale char(20),
Sede_filiale char (20),
Nro_dipendenti integer,
PRIMARY KEY (Nro_filiale)
);

ALTER TABLE Scorte ADD FOREIGN KEY (Nro_filiale);

ESERCIZIO 2)
INSERT INTO Filiali VALUES ('1','Henrys Downtown','16 Riverview',10);
INSERT INTO Filiali VALUES ('2','Henrys On The Hill','1289 Bedford',6);
INSERT INTO Filiali VALUES ('3','Henrys Brentwood','Brentwood Mall',15);
INSERT INTO Filiali VALUES ('4','Henrys Eastshore','Eastshore Mall',9);

ESERCIZIO 3)
SELECT *
FROM Filiali
WHERE Nro_dipendenti<10;

ESERCIZIO 4)
SELECT Titolo_libro, Cognome_autore, Nome_autore
FROM Libri,Autori,LibriAutori
WHERE Libri.Codice_libro=LibriAutori.Codice_libro
AND LibriAutori.Nro_autore=Autori.Nro_autore;

ESERCIZIO 5)
CREATE VIEW TipoLibro_at_HenrysDowntown AS
SELECT Tipo_libro, Nome_filiale
FROM Libri,Filiali,Scorte
WHERE Libri.codice_libro=Scorte.codice_libro
AND Scorte.Nro_filiale=FIliali.Nro_filiale
AND Scorte.nro_filiale='1';

ESERCIZIO 6)
per quanto riguarda questo esercizio ho capito che bisognerebbe contare il numero dei tipi di libro e poi contarne quelli con il numero massimo, facendo questo con una query annidata.
Io sono riuscito solo a contarli in questo modo:

SELECT Tipo_libro, COUNT(Tipo_libro) AS Numero_tipi
FROM TipoLibro_at_HenrysDowntown
GROUP BY Tipo_libro;

Un amico mi ha suggerito la seguente soluzione che non ho ancora provato però:
SELECT MAX(Conta)
FROM (
SELECT COUNT(*) AS Conta
FROM TipoLibro_at_HenrysDowntown
GROUP BY Tipo_libro);


Se ci sono errori scriveteli per tutti.
In serata posterò le altre soluzioni.
Ciao e buono studio.
16   U L T I M E    R I S P O S T E    (in alto le più recenti)
Paki Inserito il - 15/09/2008 : 17:48:58
Mi sa tanto che domani ci sara da divertirsi
noname Inserito il - 15/09/2008 : 17:39:14
Vedo che anche tu condividi le mie perplessità!

Negli esempi la prof quando crea viste usa l'asterisco e quindi lascia sempre tutti i campi. Se non lo facesse la query successiva si complicherebbe di molto, e come dici tu non avrebbero senso le richieste di dopo.

Mah! :D
Paki Inserito il - 15/09/2008 : 13:58:31
Non ne ho la piu pallida idea...per quanto riguarda l'uso del DISTINCT in quella query non avrebbe senso dato che successivamente l'esercizio chiede di contare le occorrenze...
cmq piu di una volta mi è capitato di vedere che il penultimo esercizio è ambiguo!!

esempio:

Citazione:

[punti 6] Creare una vista LibriInVendita_HenrysEastshore che elenchi i titoli dei libri in vendita presso la filiale Henrys Eastshore



La prima cosa che mi viene in mente è di generare una vista in cui ci sono solo I TITOLI!!!

poi dopo chiede:
Citazione:

[punti 6] Trovare i libri, fra quelli in vendita nella filiale Henrys Eastshore, del tipo 'NAR' (query sulla vista LibriInVendita_HenrysEastshore).



Questo lascia intendere che nella vista voleva anche il tipo di libro!!

ufff

Abbasso le ambiguità
noname Inserito il - 15/09/2008 : 12:52:51
Citazione:
Messaggio inserito da Paki

Si si! Grande!!!

Io alla fine c'ero riuscito cosi:


SELECT Tipo_libro, count(*) as Numero FROM TipoLibro_at_henrysdowntown GROUP BY Tipo_libro HAVING Numero=(SELECT MAX(temp.quantita) FROM (SELECT count(*) as quantita FROM TipoLibro_at_henrysDowntown Group by tipo_libro) as temp);


credo sia simile come cosa...



Sisi è identica, solo al posto di usare la WHERE usi l'HAVING (che vabbè è pensata per filtrare ulteriormente i record dopo aver usato la WHERE). Cmq nella mia query c'è un tipo_libro inutile ;)

Quindi diventa:



SELECT tipo_libro FROM
(
	SELECT tipo_libro, Count(tipo_libro) AS "num" FROM tipi GROUP BY tipo_libro
)
AS a
WHERE num =
(
	SELECT MAX(num) FROM
	(
		SELECT Count(tipo_libro) AS "num" FROM tipi GROUP BY tipo_libro
	)
	AS b
)



Yo! Domani è il giorno della verità

Una domandina: nella vista ci sono le categorie di libri ma ognuna è ripetuta più volte se ci sono più libri di quella categoria. E questo è il motivo per cui riusciamo a fare l'esercizio successivo: contiamo quale categoria compare più di tutte.
Però in realtà sarebbe più corretto creare la vista con la clausola DISTINCT. Solo che così si perde l'informazione della quantità...

La prof (che come sapete è imprevedibile) come valuta queste cose?

So di per certo che ci sono alcune cose che fanno alzare la valutazione, tipo rinominare i campi di una select, ordinare, a volte anche reperire campi che non sono strettamente necessari. Voi come vi siete comportati? (Voi o amici/parenti che hanno dato il lab :) )

Paki Inserito il - 15/09/2008 : 12:04:59
Si si! Grande!!!

Io alla fine c'ero riuscito cosi:


SELECT Tipo_libro, count(*) as Numero FROM TipoLibro_at_henrysdowntown GROUP BY Tipo_libro HAVING Numero=(SELECT MAX(temp.quantita) FROM (SELECT count(*) as quantita FROM TipoLibro_at_henrysDowntown Group by tipo_libro) as temp);


credo sia simile come cosa...
noname Inserito il - 14/09/2008 : 23:44:51
La famosa soluzione all'esercizio 6


SELECT tipo_libro FROM
(
	SELECT tipo_libro, Count(tipo_libro) AS "num" FROM tipi GROUP BY tipo_libro
)
AS a
WHERE num =
(
	SELECT MAX(num) FROM
	(
		SELECT tipo_libro, Count(tipo_libro) AS "num" FROM tipi GROUP BY tipo_libro
	)
	AS b
)
Paki Inserito il - 31/08/2008 : 18:57:07
cmq io per oggi mi fermo!! Tu l'esame ce l'hai domani, giusto?
In bocca al lupo... (quasi quasi vengo vedere!!!)
buh...vediamo un po...
Paki Inserito il - 31/08/2008 : 18:54:14
Gia!! e la cosa piu brutta è che non ho la piu pallida idea di cosa cavolo possa essere lo scritto!!! Il LAB bene o male penso di riuscirci!! HELPPPPPPPPPPPPPP!!!
supernova87 Inserito il - 31/08/2008 : 18:53:26
caro paki, sembra che a farlo siamo rimasti noi 2...poveri noi...
Paki Inserito il - 31/08/2008 : 18:48:48
Citazione:
in quanto tale, non è possibile determinarne la prima, la seconda...l'ultima.


beh in realta è possibile se si utilizzano ORDER DESC o ASC! la prima tupla sara sempre la piu ALTA in questo caso :)
cmq dubito anch'io che l'accetti... ma quelli che hanno fatto gia sto esame come minkia hanno fatto?
supernova87 Inserito il - 31/08/2008 : 18:45:47
non credo che l'accetterebbe...anche perchè ricorda che sql considera qualunque database come un INSIEME di tupre, ed, in quanto tale, non è possibile determinarne la prima, la seconda...l'ultima. Inoltre "l'ordinamento delle tuple non fa parte della definizione di una relazione, perchè una relazione tenta di rappresentare fatti a livello logico o astratto".
wow...ma che mi son fumato per dare una risposta così?
Paki Inserito il - 31/08/2008 : 18:17:25
Metodo un po grezzino ma funzionale e logico per la soluzione del quesito 6 della prova del 16/01:


mysql> SELECT tipo_libro, count(*) from tipolibro_at_henrysdowntown GROUP BY Tip
o_libro ORDER BY count(*) DESC LIMIT 1;
+------------+----------+
| Tipo_libro | count(*) |
+------------+----------+
| NAR        |        3 |
+------------+----------+
1 row in set (0.00 sec)


In pratica l'interrogazione crea una tabella in cui ci sono i tipi di libri e la quantita presente, poi li ordina in maniera decrescente (dal piu presente al meno presente) e successivamente prende solo la prima tupla che ovviamente è il max!

Che ne dite? la prof.ssa Lisi lo accetterebbe?

Voi come fareste?
supernova87 Inserito il - 31/08/2008 : 16:42:51
e come promesso...ecco la soluzione dell'appello del 13 febbraio 2008:

# Esercizio 1)
ALTER TABLE Scorte
ADD FOREIGN KEY(Nro_filiale)
REFERENCES Filiali(Nro_filiale);


# Esercizio 2)
UPDATE Filiali
SET Nro_dipendenti=Nro_dipendenti-1
WHERE Nome_filiale='Henrys Brentwood';


# Esercizio 3)
DELETE FROM Filiali
WHERE Nro_filiale='5';


# Esercizio 4)
SELECT SUM(Nro_dipendenti)
FROM Filiali;


# Esercizio 5)
SELECT Nome_filiale,Titolo_libro,Prezzo_libro
FROM Libri,Scorte,FIliali
WHERE Filiali.Nro_filiale=Scorte.Nro_filiale
AND Libri.Codice_libro=Scorte.Codice_libro;


# Esercizio 6)
CREATE VIEW LibriInVendita_HenrysEastshore AS
SELECT Titolo_libro,Nome_filiale,Tipo_libro
FROM Libri,Scorte,Filiali
WHERE Filiali.Nro_filiale=Scorte.Nro_filiale
AND Libri.Codice_libro=Scorte.Codice_libro
AND Nome_filiale='Henrys Eastshore';


# Esercizio 7)
SELECT Titolo_libro,Tipo_libro
FROM LibriInVendita_HenrysEastshore
WHERE Tipo_libro='NAR';
Paki Inserito il - 30/08/2008 : 18:21:48
Ah inoltre il punto numero 6 della stessa traccia probabilmente va fatto in un altro modo.
Ho provato a cercare un po in giro e sono riuscito ad ottenere un risultato con questa query:


SELECT Tipo_libro, count(*) from tipolibro_at_henrysdowntown group by Tipo_libro having count(*) >= ALL(SELECT COUNT(*) from tipolibro_at_henrysdowntown group by Tipo_libro);



il risultato a schermo sara questo:


+------------+----------+
| Tipo_libro | count(*) |
+------------+----------+
| NAR        |        3 |
+------------+----------+
1 row in set (0.13 sec)

Paki Inserito il - 30/08/2008 : 18:17:47
Esercizio 2 del 16/01
Citazione:

INSERT INTO Filiali VALUES ('1','Henrys Downtown','16 Riverview',10);
INSERT INTO Filiali VALUES ('2','Henrys On The Hill','1289 Bedford',6);
INSERT INTO Filiali VALUES ('3','Henrys Brentwood','Brentwood Mall',15);
INSERT INTO Filiali VALUES ('4','Henrys Eastshore','Eastshore Mall',9);



si riassume in:


INSERT INTO Filiali VALUES ('1','Henrys Downtown','16 Riverview',10),('2','Henrys On The Hill','1289 Bedford',6),('3','Henrys Brentwood','Brentwood Mall',15),('4','Henrys Eastshore','Eastshore Mall',9);


:D
supernova87 Inserito il - 30/08/2008 : 17:21:08
questa è la soluzione del 29 gennaio 2008, trovata in tempo di record:

ESERCIZIO 1)
ALTER TABLE Scorte
ADD FOREIGN KEY(Codice_libro)
REFERENCES Libri(Codice_libri);

ESERCIZIO 2)
UPDATE Filiali
SET Nro_dipendenti=10
WHERE Nro_filiale='1';

ESERCIZIO 3)
INSERT INTO Filiali
VALUES ('4','Henrys Eastshore','Eastshore Mall',9);

ESERCIZIO 4)
SELECT SUM(Nro_dipendenti)
FROM Filiali;

ESERCIZIO 5)
SELECT Titolo_libro,Nome_filiale
FROM Libri,Scorte,Filiali
WHERE Libri.Codice_libro=Scorte.Codice_libro
AND Scorte.Nro_filiale=Filiali.Nro_filiale
AND Nro_copie_disponibili>0;

ESERCIZIO 6)
CREATE VIEW LibriDisponibili_HenrysEastshore AS
SELECT Titolo_libro,Prezzo_libro,Nro_copie_disponibili
FROM Libri,Scorte,FIliali
WHERE Libri.codice_libro=Scorte.codice_libro
AND Scorte.Nro_filiale=Filiali.Nro_filiale
AND Nome_filiale='Henrys Eastshore';

ESERCIZIO 7)
SELECT Titolo_libro, MIN(Prezzo_libro) AS Prezzo_minimo
FROM LibriDisponibili_HenrysEastshore;

Adesso siccome mi sono rotto il ca22o, vuoi il caldo, vuoi la stanchezza, mi fermo.
Accontentatevi di queste 2 soluzioni e domani posto l'altra.
Ciao!

Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,06 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000