Torna alla pagina di Basi di Dati
:: Basi di dati - Esercizio 1 ::
Query: Cellulari
CELLULARE (Codice, CFUtente, Modello, Marca, Colore)
ABBONAMENTO (Numero, CFUtente, Operatore, Tariffa)
UTENTE (CF, Nome, Cognome, Città)
Domanda 1
Determinare il codice dei cellulari di marca Nokia di colore rosso e di colore nero.
Prioetta la colonna del codice cellulare e visualizza le tuple in cui colore = rosso o nero e marca = Nokia
ΠCodice (σ (Colore='rosso' ν Colore='nero') Λ Marca='Nokia' CELLULARE)
Domanda 2
Determinare il codice dei cellulari degli utenti residenti a Milano.
Attinge le informazioni dalla tabella UTENTE e crea la tabella UTENTI MILANO che ha la colonna CF e contiene le tuple che hanno il campo città = Milano
UT_MIL := ΠCF (σ Città='Milano' UTENTE)
Si fa il Join tra la tabella UTENTI MILANO e CELLULARE(perchè il codice cellulare si trova nella tabella CELLULARE) con la condizione che si tratti dello stesso utente (CF = CFUtente).Si proietta il codice del cellulare
ΠCodice (UT_MIL ⋈ CF=CFUtente CELLULARE)
Domanda 3
Determinare la marca dei cellulari degli utenti serviti da Tim a Milano.
Creo una tabella UTENTI TIM formata dalla colonna CFUtente presa da UTENTE e proietto la colonna CFUtente che rinomino CF e seleziono le tuple in cui città = Milano
UT_TIM := ΠCFUtente (σ Operatore='Tim' ABBONAMENTO)
Creo la tabella UTENTI MILANO che ha la colonna CF presa dalla tabella UTENTE e contiene le tuple in cui città = MILANO
UT_MIL := ρ CFUtente ← CF (ΠCF (σ Città='Milano' UTENTE))
Ora trovotutti gli utenti che abitano a MILANO e che hanno l'operatore TIM (l' intersezione ) poi faccio il join con la tabella CELLULARE perchè voglio proiettare la marca
ΠMarca ((UT_TIM ⋂ UT_MIL) ⋈ CELLULARE)
Domanda 4
Determinare gli operatori che servono tutti gli utenti della città di Milano.
Creo la solita tabella UTENTI MILANO
UT_MIL := ρ CFUtente ← CF (ΠCF (σ Città='Milano' UTENTE))
Creo la tabella OP che ha la colonna operatore della tabella ABBONAMENTO
OP := ΠOperatore (ABBONAMENTO)
Ora creo la tabella TUTTI che contiene la colonna operatore e CFUtente con tutte le combinazioni possibili di tuple ( prodotto cartesiano )
TUTTI := UT_MIL x OP
Join tra UT MIL e ABBONAMENTO e proiezione delle colonne CFUtente e operatore. Così facendo trovo tutti gli utenti di Milano e i loro rispettivi abbonamenti. La tabella così formata la chiamo ABB MIL
ABB_MIL := ΠCFUtente, Operatore (UT_MIL ⋈ ABBONAMENTO)
TUTTI - ABB MIL mi da tutti gli operatori che non hanno nemmeno un utente a Milano. Ora faccio la differenza tra gli utenti di Milano con i loro operatori e gli operatori che non hanno nemmeno un utente a Milano.
ΠOperatore (ABB_MIL) - ΠOperatore (TUTTI - ABB_MIL)
Domanda 5
Determinare la tariffa minima applicata da Tim.
Per prima cosa creiamo TAR TIM che dalla tabella ABBONAMENTO prende la colonna tariffa e tutte le tuple in cui operatore = TIM
TAR_TIM := ΠTariffa (σ Operatore='Tim' ABBONAMENTO)
Creo una copia di TAR TIM in cui la colonna tariffa si chiama tariffa'. Join tra le due tabelle con condizione trariffa >tariffa' per trovare tutte le tariffe alte. Differenza tra TAR TIM e tabella appena trovata per trovare la tariffa più piccola
TAR_TIM - ΠTariffa (TAR_TIM ⋈ Tariffa>Tariffa' (ρ Tariffa' ← Tariffa TAR_TIM))
Domanda 6
Determinare gli utenti (CF, Nome, Cognome e Città) per i quali tutti i numeri di telefono loro intestati hanno tariffa maggiore di 100.
Creo la tabella UT MIN dove ho la colonna CFUtente e la tariffa minore di 100. Ovviamente le info le prendo dalla tabella ABBONAMENTO
UT_MIN := ΠCFUtente (σ Tariffa<=100 ABBONAMENTO)
Per trovare tutti coloro che hanno tariffa >100 devo fare TUTTI - QUELLI CHE HANNO TARIFFA <100 perciò
UT_RIS := ΠCFUtente (ABBONAMENTO) - UT_MIN
ora Join tra UT RIS e UTENTE ( perchè le colonne che devo proiettare sono nella tabella UTENTE ) tenendo presente che la colonna CF di UT RIS = colonna CF di UTENTE. Proietto CF, nome, cognome e città
ΠCF, Nome, Cognome, Città (UT_RIS ⋈ CFUtente=CF UTENTE)
Torna alla pagina di Basi di Dati