Esercizi - Corsi a Distanza

Transcript

Esercizi - Corsi a Distanza
Sistemi informativi
Gestione delle tabelle
Esercizi di SQL
È riportato di seguito un insieme di esercizi risolti in SQL in cui viene richiesto di eseguire delle
operazioni per la gestione delle tabelle di uno schema relazionale. Ogni esercizio è caratterizzato dallo
schema relazionale sul quale deve essere eseguito, dal testo in linguaggio naturale dell’operazione che
deve essere eseguita e da una soluzione espressa in SQL.
Esercizio 1.
È dato lo schema relazionale costituito dalle seguenti tabelle (le chiavi primarie sono sottolineate)
CD(IdCD, Titolo, Prezzo)
AUTORICD(IdArtista, IdCD)
Operazione di gestione da eseguire.
Scrivere i comandi SQL necessari per creare tutte le tabelle riportate nello schema relazionale. Selezionare per ogni attributo il tipo di dato ritenuto più opportuno e indicare
i vincoli di integrità ritenuti necessari.
Soluzione
CREATE TABLE CD
( IdCD
SMALLINT,
Titolo VARCHAR(20) NOT NULL,
Prezzo NUMBER(5,2) NOT NULL,
PRIMARY KEY(IdCD)
);
CREATE TABLE AUTORICD
( IdArtista SMALLINT,
IdCD
SMALLINT,
PRIMARY KEY(IdArtista, IdCD),
FOREIGN KEY IdCD REFERENCES CD(IdCD)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Esercizio 2.
È dato lo schema relazionale costituito dalle seguenti tabelle (le chiavi primarie sono sottolineate)
DOCENTE(CodDocente, Nome, Cognome, DataNascita)
CORSI(CodCorso, NomeCorso, Sede, CodDocente)
LEZIONI SVOLTE(CodCorso, Data, OraInizio, Aula, Durata)
Operazione di gestione da eseguire.
Scrivere i comandi SQL necessari per creare tutte le tabelle riportate nello schema relazionale. Selezionare per ogni attributo il tipo di dato ritenuto più opportuno e indicare
i vincoli di integrità ritenuti necessari.
c 2007 Politecnico di Torino
1
Sistemi informativi
Gestione delle tabelle
Soluzione
CREATE TABLE DOCENTE
( CodDocente
SMALLINT,
Nome
VARCHAR(20) NOT NULL,
Cognome VARCHAR(20) NOT NULL,
DataNascita DATE NOT NULL,
PRIMARY KEY(CodDocente)
);
CREATE TABLE CORSI
( CodCorso
SMALLINT,
NomeCorso VARCHAR(20) NOT NULL,
Sede
VARCHAR(20) NOT NULL,
CodDocente
SMALLINT,
PRIMARY KEY(CodCorso),
FOREIGN KEY Docente REFERENCES DOCENTE(Docente)
ON DELETE SET NULL
ON UPDATE CASCADE
);
CREATE LEZIONI_SVOLTE
( CodCorso
SMALLINT,
Data
DATE,
OraInizio TIMESTAMP,
Aula
VARCHAR(5) NOT NULL,
Durata
FLOAT,
PRIMARY KEY(CodCorso, Data, OraInizio),
FOREIGN KEY CodCorso REFERENCES CORSI(CodCorso)
ON DELETE NO ACTION
ON UPDATE CASCADE
);
Esercizio 3.
È dato lo schema relazionale costituito dalle seguenti tabelle (le chiavi primarie sono sottolineate)
DOCENTE(CodDocente, Nome, Cognome, DataNascita)
CORSI(CodCorso, NomeCorso, Sede, CodDocente)
LEZIONI SVOLTE(CodCorso, Data, OraInizio, Aula, Durata)
Operazione di gestione da eseguire.
Scrivere il comando SQL necessario per eliminare la tabella LEZIONI SVOLTE.
Soluzione
DROP TABLE LEZIONI_SVOLTE;
Esercizio 4.
È dato lo schema relazionale costituito dalla seguente tabella (le chiavi primarie sono
sottolineate)
c 2007 Politecnico di Torino
2
Sistemi informativi
Gestione delle tabelle
DOCENTE(CodDocente, Nome, Cognome, DataNascita)
Operazione di gestione da eseguire.
Scrivere il comando SQL necessario per aggiungere la colonna StatoDiNascita alla tabella
DOCENTE.
Soluzione
ALTER TABLE DOCENTE
ADD COLUMN StatoDiNascita VARCHAR(10);
Esercizio 5.
È dato lo schema relazionale costituito dalla seguente tabella (le chiavi primarie sono
sottolineate)
DOCENTE(CodDocente, Nome, Cognome, DataNascita)
Operazione di gestione da eseguire.
Scrivere il comando SQL necessario per eliminare la colonna DataNascita dalla tabella
DOCENTE.
Soluzione
ALTER TABLE DOCENTE
DROP COLUMN StatoDiNascita;
Esercizio 6.
È dato lo schema relazionale costituito dalla seguente tabella (le chiavi primarie sono
sottolineate)
CORSI(CodCorso, NomeCorso, Sede, NumeroCrediti)
Operazione di gestione da eseguire.
Scrivere il comando SQL necessario per creare la tabella riportata nello schema relazionale.
Selezionare per ogni attributo il tipo di dato ritenuto più opportuno e indicare i vincoli
di integrità ritenuti necessari. Si specifichi nel comando di creazione della tabella che per
ogni corso il numero di crediti deve essere compreso tra 1 e 10.
Soluzione
CREATE TABLE CORSI
( CodCorso
SMALLINT,
NomeCorso
VARCHAR(20) NOT NULL,
Sede
VARCHAR(20) NOT NULL,
NumeroCrediti SMALLINT NOT NULL CHECK(NumeroCrediti>=1 and NumeroCrediti<=10),
PRIMARY KEY(CodCorso)
);
Esercizio 7.
È dato lo schema relazionale costituito dalla seguente tabella (le chiavi primarie sono
sottolineate)
SALA RIUNIONI(CodiceSala, CodiceSede, NomeSala)
SEDE(CodiceSede, Nome, Indirizzo)
c 2007 Politecnico di Torino
3
Sistemi informativi
Gestione delle tabelle
Operazione di gestione da eseguire.
Scrivere i comandi SQL necessari per creare tutte le tabelle riportate nello schema relazionale. Selezionare per ogni attributo il tipo di dato ritenuto più opportuno e indicare
i vincoli di integrità ritenuti necessari. Si specifichi nei comandi di creazione delle tabelle
che non possono esistere sale riunioni con lo stesso nome all’interno della stessa sede.
Soluzione
CREATE TABLE SEDE
( CodiceSede
SMALLINT,
Nome
VARCHAR(20) NOT NULL,
Indirizzo
VARCHAR(30) NOT NULL,
PRIMARY KEY(CodiceSede)
);
CREATE TABLE SALA_RIUNIONI
( CodiceSala
SMALLINT,
CodiceSede
SMALLINT,
NomeSala
VARCHAR(20) NOT NULL,
PRIMARY KEY(CodiceSala, CodiceSede),
UNIQUE (NomeSala, CodiceSede),
FOREIGN KEY CodiceSala REFERENCES SEDE(CodiceSala)
ON DELETE CASCADE
ON UPDATE CASCADE
);
Esercizio 8.
È dato lo schema relazionale costituito dalla seguente tabella (le chiavi primarie sono
sottolineate)
SALA RIUNIONE(CodiceSala, CodiceSede, NomeSala, NumeroPosti)
SEDE(CodiceSede, Nome, Indirizzo)
Operazione di gestione da eseguire.
Scrivere il comando SQL necessario per aggiungere un vincolo tale da imporre che non
possano esistere nella base di dati sale riunione con meno di 15 posti.
Soluzione
ALTER TABLE SALA_RIUNIONE
ADD CONSTRAINT MinPosti CHECK(NumeroPosti>=15);
c 2007 Politecnico di Torino
4