Skip to content

Commit

Permalink
feat(appunti): Aggiunti appunti comandi SQL (#72)
Browse files Browse the repository at this point in the history
Aggiunto un file Markdown che contiene tutti i principali comandi SQL e la definizione dei
vari tipi di variabili, chiavi, ecc...
Aggiunte altre esercitazioni con spiegazione.
  • Loading branch information
ncvescera authored Apr 18, 2024
2 parents 28410d2 + 0cb6579 commit 1f33018
Show file tree
Hide file tree
Showing 12 changed files with 1,870 additions and 0 deletions.
1,271 changes: 1,271 additions & 0 deletions triennale/Anno 3/Basi di Dati/ComandiSQL.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
02 S. Angelo Via Lucida 6 Perugia
01 Zenith Via Bonfigli 8 Perugia
03 Multisala Clarici Corso Cavour 84 Foligno
04 Multiplx Giometti Strava Centova Perugia
11 changes: 11 additions & 0 deletions triennale/Anno 3/Basi di Dati/Esercitazione2/cinema/film.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
01 15 Crash Drammatico 1996
02 15 False Sembianze Commedia 1988
03 14 Pulp Fiction Poliziesco 1994
04 13 Breaking the waves Drammatico 1996
05 13 Dogville Drammatico 2002
06 12 Alamo Western 1960
07 18 Pericolosamente in tre Spionaggio 1985
08 19 Cavallo bianco, cuore nero Drammatico 1989
09 19 Nel giardino del bene e del male Poliziesco \N
10 21 American Beauty Drammatico 1999
11 \N Lo scambio \N 2008
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
01 05 Grace
02 05 Tom Edison
03 04 Bess
04 04 Jan
05 03 Vincent Vega
06 03 Jules Winnfield
07 03 Butch Coolidge
08 02 Beverly & Elliot Mantle
09 01 James Ballard
10 01 Helen Remington
11 01 Gabrielle
04 05 Chuck
16 07 May Day
19 08 John Wilson
20 09 Jim Williams
20 10 Lester Burnham
22 changes: 22 additions & 0 deletions triennale/Anno 3/Basi di Dati/Esercitazione2/cinema/persona.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
01 Kidman Nicole
02 Bettany Paul
03 Watson Emily
04 Skarsgard Stellan
05 Travolta John
06 L. Jackson Samuel
07 Willis Bruce
08 Irons Jeremy
09 Spader James
10 Hunter Holly
11 Arquette Rosanna
12 Wayne John
13 von Trier Lars
14 Tarantino Quentin
15 Cronenberg David
16 Mazursky Paul
17 Jones Grace
18 Glen John
19 Eastwood Clint
20 Spacey Kevin
21 Mendes Sam
22 Jolie Angelina
25 changes: 25 additions & 0 deletions triennale/Anno 3/Basi di Dati/Esercitazione2/cinema/proiezione.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
02 05 01/05/2002
02 05 02/05/2002
02 05 03/05/2002
02 04 02/12/1996
01 01 07/05/1996
02 07 09/05/1985
01 04 02/08/1996
04 03 08/04/1994
03 06 02/12/1990
02 02 08/12/1990
03 03 05/11/1994
04 03 06/11/1994
01 06 05/07/1980
02 04 02/09/1996
04 06 01/08/2002
03 06 09/11/1960
01 02 12/03/1988
02 08 01/02/1989
02 01 11/05/1997
02 03 05/07/1994
02 06 01/08/2002
01 03 02/03/1994
02 09 02/12/2008
02 10 03/10/2000
02 11 02/03/2004
40 changes: 40 additions & 0 deletions triennale/Anno 3/Basi di Dati/Esercitazione2/esercitazione2.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
create schema cinema;

-- Verifico la presenza dello schema nella mia base di dati
\dn

-- Imposto il PATH di lavoro su cinema così da non dover scrivere ogni volta cinema.<table>
set search_path to cinema;

CREATE TABLE persona(id_persona integer primary key, nome varchar not null, cognome varchar not null);

CREATE TABLE film (id_film integer primary key, id_regista integer references persona on delete set null, titolo varchar, genere varchar, anno integer CHECK(anno > 0 OR anno is null));

CREATE TABLE cinema (id_cinema INTEGER PRIMARY KEY, nome VARCHAR NOT NULL, indirizzo VARCHAR);

CREATE TABLE partecipazione (id_attore INTEGER REFERENCES persona ON DELETE CASCADE, id_film INTEGER REFERENCES film ON DELETE CASCADE, ruolo VARCHAR, PRIMARY KEY (id_attore, id_film));

CREATE TABLE proiezione (id_cinema INTEGER REFERENCES cinema ON DELETE CASCADE, id_film INTEGER REFERENCES film ON DELETE CASCADE, giorno DATE, PRIMARY KEY (id_cinema, id_film, giorno));

\d --> Verifico la presenza delle tabelle nel mio schema
\d film --> Verifico la correttezza delle caratteristiche settate per la mia tabella
\d persona --> Verifico la correttezza delle caratteristiche settate per la mia tabella

INSERT INTO cinema VALUES (2, 'S. Angelo', 'Via Lucida 6 Perugia'),
(1, 'Zenith', 'Via Bonfigli 8 Perugia'),
(3, 'Multisala Clarici', 'Corso Cavour 84 Foligno'),
(1, 'Multiplx Giometti', 'Strada Centova Perugia');

-- Per sbrigarmi posso usare dei file dove ho già tutti i valori:
\copy persona FROM ~/persona.txt; --> inserisco dati (le persone) nella tabella "persona" tramite il file "persona.txt"
\copy cinema FROM ~/cinema1/cinema.txt;
\copy film FROM ~/cinema1/film.txt;
\copy partecipazione FROM ~/cinema1/partecipazione.txt;
\copy proiezione FROM ~/cinema1/proiezione.txt;


-- Controllo i valori inseriti in persona
SELECT * FROM persona;

-- Si elimina l'attore John Travolta dalla base di dati
delete FROM persona WHERE id_persona=5;
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
DROP SCHEMA IF EXISTS cinema CASCADE;
CREATE SCHEMA CINEMA;
SET search_path TO cinema;

CREATE TABLE persona (
id_persona INTEGER PRIMARY KEY,
cognome VARCHAR NOT NULL,
nome VARCHAR NOT NULL);

CREATE TABLE film (
id_film INTEGER PRIMARY KEY,
id_regista INTEGER REFERENCES persona ON DELETE SET NULL,
titolo VARCHAR NOT NULL,
genere VARCHAR,
anno INTEGER CHECK(anno > 0 OR anno IS NULL));

CREATE TABLE cinema (
id_cinema INTEGER PRIMARY KEY,
nome VARCHAR NOT NULL,
indirizzo VARCHAR);

CREATE TABLE partecipazione (
id_attore INTEGER REFERENCES persona ON DELETE CASCADE,
id_film INTEGER REFERENCES film ON DELETE CASCADE,
ruolo VARCHAR,
PRIMARY KEY (id_attore, id_film));

CREATE TABLE proiezione (
id_cinema INTEGER REFERENCES cinema ON DELETE CASCADE,
id_film INTEGER REFERENCES film ON DELETE CASCADE,
giorno DATE,
PRIMARY KEY (id_cinema, id_film, giorno));

\copy persona FROM ~/cinema1/persona.txt;
\copy cinema FROM ~/cinema1/cinema.txt;
\copy film FROM ~/cinema1/film.txt;
\copy partecipazione FROM ~/cinema1/partecipazione.txt;
\copy proiezione FROM ~/cinema1/proiezione.txt;

SET datestyle='DMY';
Binary file not shown.
81 changes: 81 additions & 0 deletions triennale/Anno 3/Basi di Dati/Esercitazione3/esercitazione3.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
-- Stampo il contenuto della tabella persona
SELECT * FROM persona;

-- Selezionare i cognomi delle persone nella BD, senza eliminare i doppioni
SELECT cognome FROM persona;

-- Selezionare i cognomi delle persone ordinati in ordine alfabetico, senza eliminare i doppioni
SELECT cognome FROM persona order by cognome ASC;

-- Definire l'insieme dei cognomi delle persone rimaste nella BD
SELECT distinct cognome FROM persona order by cognome;

-- Selezionare le persone di nome John mantenute nella BD
SELECT * FROM persona WHERE nome='John';

-- Selezionare i cognomi delle persone di nome John, rimaste nella BD
SELECT cognome FROM persona WHERE nome='John';

-- Selezionare le persone mantenute nella BD che sono attori
SELECT nome,cognome FROM persona,partecipazione WHERE id_persona=id_attore;

/* Definire la lista di tutte le interpretazioni, precisando:
- il nome dell'attore
- il cognome dell'attore
- il ruolo interpretato
- il titolo del film
*/
SELECT nome,cognome,ruolo,titolo FROM persona,partecipazione,film WHERE id_persona=id_attore and film.id_film=partecipazione.id_film;


/* Definire la lista di tutte le interpretazioni, precisando:
- il nome dell'attore
- il cognome dell'attore
- il ruolo interpretato
- il titolo del film.
Il risultato dovrà essere nella forma:
- 'Nicole Kidman ha interpretato il ruolo di Grace nel film Dogville'
- 'Paul Bettany ha interpretato il ruolo di Tom Edison nel film Dogville'
*/
SELECT DISTINCT nome||' '||cognome||' ha interpretato il ruolo di '||ruolo||' nel film '||titolo FROM persona, partecipazione, film WHERE (partecipazione.id_attore = persona.id_persona AND partecipazione.id_film = film.id_film);


-- Quali sono i titoli dei film di genere drammatico?
SELECT titolo FROM film WHERE genere='Drammatico';

-- Quali film (titoli) sono stati proiettati nel 2002?
SELECT titolo FROM film,proiezione WHERE (film.id_film=proiezione.id_film and (giorno >= '2002-01-01' AND giorno <= '2002-12-31'));

-- Quali film (titoli) sono stati proiettati nel 2002?
SELECT titolo FROM film,proiezione WHERE (film.id_film=proiezione.id_film and CAST(proiezione.giorno AS varchar) LIKE '2002%');

SELECT titolo FROM film,proiezione WHERE (film.id_film=proiezione.id_film and giorno::text LIKE '2002%');

SELECT titolo FROM film,proiezione WHERE (film.id_film=proiezione.id_film and extract(year FROM giorno)=2002);

-- Elencare i titoli dei film diretti da Lars von Trier
SELECT titolo FROM persona,film WHERE id_persona=id_regista and nome='Lars' and cognome='von Trier';

-- Elencare i film (titoli) proiettati al cinema S. Angelo
SELECT titolo FROM film, proiezione, cinema WHERE proiezione.id_cinema=cinema.id_cinema and cinema.nome='S. Angelo' and film.id_film=proiezione.id_film;

-- Elencare i nomi ed i cognomi dei registi
SELECT nome, cognome FROM persona, film WHERE id_persona=id_regista;

-- Selezionare i nomi ed i cognomi degli attori
SELECT nome, cognome FROM persona, partecipazione WHERE id_persona=id_attore;

-- Selezionare i nomi di cognomi degli attori che sono anche registi
SELECT distinct nome, cognome FROM persona, partecipazione, film WHERE id_persona=id_attore and id_attore=id_regista;

-- Quali attori hanno preso parte a film proiettati al cinema Zenith dopo l'anno 2000?
SELECT distinct persona.nome, persona.cognome FROM persona, partecipazione, proiezione, cinema, film WHERE id_persona=id_attore and proiezione.id_cinema=cinema.id_cinema and cinema.nome='Zenith' and film.id_film=proiezione.id_film and proiezione.giorno >= '2000-01-01' ;


/* Quali sono i titoli dei film interpretati da Nicole Kidman che non sono stati proiettati al cinema Zenith?
Cioè vogliamo fare una all film MENO all film proiettati allo Zenith.
Quindi anche se un film era stato proiettato sia allo Zenith che in un'altro cinema, va eliminato lo stesso dal risultato.
*/
SELECT distinct film.titolo FROM (persona join partecipazione on id_persona = id_attore) join film using (id_film) WHERE nome = 'Nicole' and cognome = 'Kidman' EXCEPT SELECT titolo FROM (cinema natural join proiezione) natural join film WHERE cinema.nome = 'S.Angelo';
Binary file not shown.
Loading

0 comments on commit 1f33018

Please sign in to comment.