Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

mysql -u root -p

mysqldump -u -p –databases >

utente password nomedb nomefile.sql

SOURCE pathname;

SHOW WARNINGS;

SHOW DATABASES;

CREATE DATABASE db;

USE db;

DROP DATABASE db;

SHOW TABLES;

DESCRIBE tabella;

SHOW CREATE TABLE tabella;

SELECT * FROM tabella;

INSERT INTO VALUES (valori);

tabella

UPDATE SET WHERE … ;

tabella attr = valore

DELETE FROM WHERE … ;

tabella

CREATE TABLE (attr );

nome tipo vincolo, …

ALTER TABLE ADD

tabella colonna tipo;

ALTER COLUMN colonna tipo;

DELETE COLUMN colonna;

DROP TABLE tabella;

CREATE VIEW (attributi) AS

nome query;

– commento monoriga

/* */

commento multiriga

MySQL non accetta: CHECK()

I vincoli generici con

– CREATE ASSERTION CHECK(NOT EXISTS (…))

Le asserzione

– INTERSECT, UNION, EXCEPT IN

Le query con che si sostituiscono con gli operatori

– EXISTS

e 'YYYY-MM-DD'

Le date si indicano con la sintassi BOOLEAN TINYINT

Il tipo booleano vero e proprio non esiste. viene mappato su

Impiegato(Nome, Titolo, Età, Salario, Dip)

Trovare il nome, il titolo e il dipartimento degli impiegati il cui titolo comincia con “Ing”

SELECT Nome, Titolo, Dip

FROM Impiegato

WHERE Titolo LIKE 'Ing%'

Trovare nome, titolo e salario di tutti coloro che hanno il titolo di programmatore e che

hanno un salario >= 50000

SELECT Nome, Titolo, Salario

FROM Impiegato

WHERE Titolo = 'Programmatore' AND Salario >= 50000

Selezionare tutte le possibili età degli impiegati

SELECT DISTINCT Età

FROM Impiegato

Selezionare lo stipendio medio degli impiegati il cui titolo comincia con “Ing”

SELECT AVG(Salario)

FROM Impiegato

WHERE Titolo LIKE 'Ing%'

Estrarre tutti i dati degli impiegati il cui nome NON è uno tra 'Hernandez', 'Jones',

'Roberts', 'Ruiz‘

SELECT *

FROM Impiegato

WHERE Nome NOT IN ('Hernandez', 'Jones', 'Roberts', 'Ruiz')

Selezionare il massimo stipendio di ogni dipartimento

SELECT Dip, MAX(Salario)

FROM Impiegato

GROUP BY Dip // Ogni attributo del group by DEVE comparire anche nella select !

Selezionare il massimo stipendio di ogni dipartimento, solo se esso supera i 20000 euro

SELECT Dip, MAX(Salario)

FROM Impiegato

GROUP BY Dip

HAVING MAX(Salario) >= 20000 // Having contiene le condizioni di funzioni aggregate

Aeroporto(Città, Nazione, NumPiste)

Volo(IdVolo, GiornoSett, CittàPart, OraPart, CittàArr, OraArr, TipoAereo)

Aereo(TipoAereo, NumPasseggeri, QtaMerci)

Trovare le città con un aeroporto di cui non è noto il numero di piste

SELECT Città

FROM Aeroporto

WHERE NumPiste IS NULL

Trovare le città da cui partono voli internazionali

SELECT DISTINCT CittàPart

FROM Aeroporto A JOIN Volo ON A.Città = CittàPart

JOIN Aeroporto B ON CittàArr = B.Città

WHERE A.Nazione <> B.Nazione

Trovare il numero di voli internazionali che partono il giovedì dalla Francia

SELECT COUNT(*)

FROM (Aeroporto A JOIN Volo ON A.Città = CittàPart)

JOIN Aeroporto B ON CittàArr = B.Città

WHERE A.Nazione = 'Francia' AND A.Nazione <> B.Nazione AND GiornoSett = 'Giovedì'

Trovare le città francesi da cui partono più di 20 voli alla settimana diretti in Germania

SELECT DISTINCT CittàPart

FROM Aeroporto A JOIN Volo ON A.Città = CittàPart

JOIN Aeroporto B ON CittàArr = B.Città

WHERE A.Nazione = 'Francia' AND B.Nazione = 'Germania'

GROUP BY CittàPart

HAVING COUNT(*) > 20

Trovare il numero di voli del giovedì di ogni aeroporto da cui partano almeno 100 voli a

settimana

SELECT CittàPart, COUNT(*)

FROM Volo

WHERE GiornoSett = 'Giovedì' AND CittàPart IN ( SELECT CittàPart

FROM Volo

GROUP BY CittàPart

HAVING COUNT(*) >= 100 )

GROUP BY CittàPart

// Qui non si poteva fare una query unica perché il count(*) della select e della having

contano la stessa quantità di tuple e non quantità differenti, non discriminando il numero

dei voli settimanali da quelli del solo giovedì

Trovare l’aeroporto italiano con il maggior numero di piste

SELECT Città, NumPiste

FROM Aeroporto

WHERE Nazione = 'Italia' AND NumPiste >= ALL ( SELECT NumPiste

FROM Aeroporto

WHERE Nazione = 'Italia' )

// il >= ALL è uno stratagemma per aggirare il fatto di non poter usare la funzione max()

nella clausola where

Orchestra(CodOrchestra, NomeO, NomeDirettore, NumElementi, AnnoFondata)

Concerto(CodC, Data, CodO, CodS, PrezzoBiglietto)

Sala(CodSala, NomeS, Città, Capienza)

Trovare il codice e il nome delle orchestre con più di 30 elementi che hanno tenuto

concerti sia a Genova, sia a Milano e non hanno mai tenuto concerti a Bologna.

SELECT CodOrchestra, NomeO

FROM Orchestra JOIN Concerto ON CodOrchestra = CodO

WHERE NumElementi > 30 AND CodOrchestra IN ( SELECT CodO

FROM Concerto JOIN Sala ON

CodS = CodSala

WHERE Città = 'Genova' )

AND CodOrchestra IN ( SELECT CodO

FROM Concerto JOIN Sala ON

CodS = CodSala

WHERE Città = 'Milano' )

AND CodOrchestra NOT IN ( SELECT Cod

FROM Concerto JOIN Sala ON

CodS = CodSala

WHERE Città = 'Bologna' )

Scrivere un comando SQL che aumenta del 10% il prezzo del biglietto dei concerti di

quelle orchestre che sono state fondate prima del 2000, che hanno tenuto in totale nella

loro vita più di 100 concerti e il cui prezzo medio dei biglietti sia inferiore ai 20 euro.

UPDATE Concerto

SET PrezzoBiglietto = PrezzoBiglietto*1.1

WHERE CodO IN ( SELECT CodOrchestra

FROM Orchestra JOIN Concerto ON CodOrchestra = CodO

WHERE AnnoFondata < 2000

GROUP BY CodOrchestra

HAVING COUNT(*) > 100 AND AVG(PrezzoBiglietto) < 20 )

Trovare il nome delle orchestre che hanno tenuto un concerto in tutte le sale

SELECT CodOrchestra, NomeO

FROM Orchestra JOIN Concerto ON CodOrchestra = CodO

GROUP BY CodOrchestra, NomeO

HAVING COUNT(DISTINCT CodS) = ALL ( SELECT COUNT(*)

FROM Sala )

Cliente(CodCliente, Nome, Indirizzo, MinutiTotali)

Telefonata(CodCliente, DataInizio, OraInizio, DurataInMinuti, TipoTariffa)

Tariffa(TipoTariffa, CostoAlMinuto)

Trovare il nome dei clienti che non hanno mai effettuato telefonate di durata superiore ai

10 minuti usando una tariffa con costo al minuto superiore ai 25 centesimi di euro al

minuto.

SELECT Nome

FROM Cliente

WHERE CodCliente NOT IN ( SELECT CodCliente

FROM Telefonata JOIN Tariffa ON

Telefonata.TipoTariffa = Tariffa.TipoTariffa

WHERE DurataInMinuti > 10 AND CostoAlMinuto > 25 )

Scrivere il comando SQL che seleziona il codice cliente, il nome e il numero di minuti totali

di telefonate urbane (TipoTariffa='URBANA') effettuate da ogni cliente, per i clienti che

hanno fatto almeno 20 telefonate urbane.

SELECT CodCliente, Nome, SUM(DurataInMinuti)

FROM Cliente JOIN Telefonata ON Cliente.CodCliente = Telefonata.CodCliente

WHERE TipoTariffa = 'Urbana'

GROUP BY CodCliente, Nome

HAVING COUNT(*) >= 20

Scrivere il comando SQL che trova per ogni cliente il costo, la data di inizio e l’ora di inizio

della sua telefonata più cara registrata nella base di dati.

CREATE VIEW CostoTelefonata (CodCliente, DataInizio, OraInizio, Costo) AS

SELECT CodCliente, DataInizio, OraInizio, DurataInMinuti*CostoAlMinuto

FROM Telefonata JOIN Tariffa ON Telefonata.TipoTariffa = Tariffa.TipoTariffa

SELECT *

FROM CostoTelefonata A

WHERE Costo = ANY ( SELECT MAX(Costo)

FROM CostoTelefonata B

WHERE A.CodCliente = B.CodCliente )

// In questa query assurda dovevamo calcolare il costo che non era un attributo. Per

questo abbiamo creato una vista e da quella abbiamo fatto i conti molto facilmente.

Ammissione(NTS, Data, Ora, Nome, Sesso, Reparto)

Dimissione(NTS, Data, Ora, Reparto)

PostiLetto(Reparto, Data, MattSera, LiberiMaschi, LiberiFemmine)

Calcolare il numero di pazienti attualmente ricoverati in ciascun reparto dell’ospedale (si

noti che i pazienti attualmente ricoverati sono quelli ammessi e non ancora dimessi, e si

badi a generare un risultato che abbia la struttura [<nome_reparto>, <numero_ricoverati>]

SELECT Reparto, COUNT(*) AS NumeroRicoveriAttuali

FROM Ammissione AS A

WHERE NOT EXISTS ( SELECT *

FROM Dimissione

WHERE (NTS = A.NTS AND Data > A.Data ) OR (NTS = A.NTS

AND Data = A.Data AND Ora > A.Ora) )

GROUP BY Reparto

Trovare il paziente (o i pazienti) con la degenza più lunga, misurata in giorni (si trascurino

cioè gli orari di ammissione e dimissione, e si ipotizzi che una operazione di differenza

sulle date restituisca un numero intero che rappresenta il numero di giorni, anziché un

valore di tipo interval)

CREATE VIEW DurataRicoveri (NTS, Giorni) AS

SELECT NTS, D.Data – A.Data

FROM Ammissione A JOIN Dimissione D ON A.NTS = D.NTS

WHERE A.Data < D.Data AND NOT EXISTS ( SELECT *

FROM Dimissione D2

WHERE A.NTS = D2.NTS AND D2.DATA

BETWEEN A.Data AND D.Data )

SELECT *

FROM DurataRicoveri

WHERE Giorni >= ALL ( SELECT Giorni

FROM DurataRicoveri )


ACQUISTATO

2 volte

PAGINE

14

PESO

114.49 KB

AUTORE

fiorixf2

PUBBLICATO

+1 anno fa


DETTAGLI
Esame: Basi di dati
Corso di laurea: Corso di laurea in ingegneria informatica (COMO - CREMONA - MILANO)
SSD:
A.A.: 2017-2018

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher fiorixf2 di informazioni apprese con la frequenza delle lezioni di Basi di dati e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano - Polimi o del prof Fornara Nicoletta.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Basi di dati

Appunti completi corso Basi di dati
Appunto
Esercizi sulla programmazione in C
Esercitazione
Architettura dei calcolatori e sistemi operativi - Appunti
Appunto
Livello di linea
Appunto