View Full Version : [Algebra relazionale e SQL] Contare in algebra relazionale
Ciao a tutti :D
volevo qualche info su come posso contare con l'algebra relazionale. Con SQL si può usare count, ma esiste un "trucco" analogo nell'algebra?
Mi serve sapere quali persone hanno fatto più di un viaggio in 6 mesi precedenti in un database di un'agenzia turistica, dunque volevo contare ciascuno quanti viaggi ha fatto e vedere se sono >2.
Qualcuno riesce a darmi una dritta? :confused: :help: :help:
Se non erro non è una cosa esprimibile in algebra relazionale.
yorkeiser
05-01-2010, 15:55
Scusa la curiosità, ma perchè non ti va bene un count visto che parli di database ?
khelidan1980
05-01-2010, 15:58
Scusa la curiosità, ma perchè non ti va bene un count visto che parli di database ?
count è un istruzione sql, se è un esercizio didatti ci sta che gli venga chiesto prima di esprimelo sotto forma di algebra relazionale
yorkeiser
05-01-2010, 16:00
count è un istruzione sql, se è un esercizio didatti ci sta che gli venga chiesto prima di esprimelo sotto forma di algebra relazionale
Ah ecco, era un esercizio. Sorry, era semplice curiosità :)
Puoi farlo in un modo un po' contorto, creando una tabella contenente l'identificativo della persona e delle colonne che userai per il conteggio, qualcosa tipo:
PERSONA | VIAGGIO1 | VIAGGIO2 | VIAGGIO3
in cui nelle colonne dei viaggi inserirai tutti i viaggi fatti dalla persona.
Eliminando i record in cui VIAGGIO1 = VIAGGIO2 o VIAGGIO2 = VIAGGIO3 o VIAGGIO1 = VIAGGIO3 e tenendo solo la colonna persona dovresti ottenere l'elenco che ti serve.
Puoi farlo in un modo un po' contorto, creando una tabella contenente l'identificativo della persona e delle colonne che userai per il conteggio, qualcosa tipo:
PERSONA | VIAGGIO1 | VIAGGIO2 | VIAGGIO3
in cui nelle colonne dei viaggi inserirai tutti i viaggi fatti dalla persona.
Eliminando i record in cui VIAGGIO1 = VIAGGIO2 o VIAGGIO2 = VIAGGIO3 o VIAGGIO1 = VIAGGIO3 e tenendo solo la colonna persona dovresti ottenere l'elenco che ti serve.
Se questo è un esercizio vince il premio come "The Most Wasteful Exercise of Intellectual Resources" per quanto mi riguarda :fagiano:
Non c'è niente di equivalente a count() in algebra relazionale, in quanto l'algebra relazionale è una una logica del primo ordine che opera su relazioni e spara fuori relazioni come prodotto; diversamente una cosa come count() opererebbe su relazioni ma produrrebbe un intero non negativo come risultato.
Tu però non vuoi sapere quanti viaggi ha fatto il signor x ma quali sono i signori y,z,w... che hanno fatto due (numero noto e finito) o più viaggi.
Supponendo di avere una relazione Cliente, una relazione Viaggio e una relazione ViaggioSvolto ( molti a molti tra Cliente e Viaggio ) credo che potresti cavartela con un join furbo e sfruttando la proprietà insiemistica delle relazioni di non contenere duplicati.
ciao!
british
Se questo è un esercizio vince il premio come "The Most Wasteful Exercise of Intellectual Resources" per quanto mi riguarda :fagiano:
Quando ho seguito io il corso di basi di dati ci avevano fatto fare una cosa molto simile, preparati alla cerimonia di premiazione ;-)
Beppessj4
05-06-2010, 11:27
Ciao a tutti, io ho il seguente schema relazionale:
Linea(Codice, Km)
Stazione(Nome, numBinari)
Fermata(linea, numero, stazione)
la query è la seguente:
Trovare le linee che incrociano ogni linea più lunga di 3km
Come posso fare per risolverla in algebra relazionale?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.