Upload
others
View
64
Download
0
Embed Size (px)
Citation preview
SQL
(STRUCTURED QUERY LANGUAGE)Prof. Nicoletta D‟Alpaos & Prof. Andrea Borghesan
DDL
Data Definition Language
DML
Data Manipulation Language
DCL
Data Control Language
SQL
DDL
2
Obiettivo:
Definire la struttura delle relazioni del database (DDL: Data
Definition Language)
DDL
Create
Drop
Alter
Create database
3
Il comando create database serve a creare un nuovo database, che
potrà contenere :
Tabelle
Viste
stored procedure
Trigger
altri tipi di oggetti.
Nota 1: in Access i database devono essere creati all‟interno dell‟ambiente GUI.
Nota 2: esiste anche:
ALTER DATABASE nome_database CHARACTER SET caratteri;
(caratteri per esempio latin1).
Create database
4
CREATE DATABASE nome_database;
Esempio:
CREATE DATABASE azienda;
Drop database
5
Il comando drop database serve a cancellare un database.
DROP DATABASE nome_database;
Esempio:
DROP DATABASE azienda;
Create table
6
Il comando create table ha la funzione di creare una nuova
tabella (o tavola).
Una tabella è composta da:
attributi
domini
vincoli
Create table
7
Il nome della tabella:
1. Può essere scritto indifferentemente in MAIUSCOLO o in
minuscolo
2. Può essere formato da lettere e numeri, ma il primo carattere
deve sempre essere una lettera;
3. Non può superare i 30 caratteri di lunghezza;
4. Non può avere lo stesso nome di una tabella o vista già esistente
sullo stesso utente di database.
La tabella può :
essere creata vuota (create table)
essere creata e riempita di dati (create table + select)
Create table
8
CREATE TABLE nome_tabella (
nome_campo tipo [(lunghezza)] [NOT NULL | NULL][DEFAULT valore_di_default] [AUTO_INCREMENT][[PRIMARY] KEY] [UNIQUE][CHECK (espressione)]
[PRIMARY KEY (nome_campo [,…])][[UNIQUE] INDEX [nome_indice] (nome_campo [,…])]
[FOREIGN KEY [nome_indice] (nome_campo [,…]) REFERENCES nome_tabella_f nome_campo_f [ON
DELETE | ON UPDATE (CASCADE | SET DEFAULT | SET NULL |
RESTRICT) ] );
Create table
9
CREATE TABLE nome_tabella
AS
SELECT ...;
La struttura della tabella, in questo caso, è definita implicitamente dal numero
di colonne (o campi) estratti dalla select, dal tipo di dato di ciascuna colonna e
dai nomi delle rispettive colonne estratte dalla select (o dagli alias ad esse
applicati).
Create table
10
Esempio:
CREATE TABLE tblAmici (codice SMALLINT PRIMARY KEY,nome CHAR (20) NOT NULL,cognome CHAR (30),telefono VARCHAR (15) DEFAULT ‘0’,data_nascita date,gruppo INTEGER,UNIQUE (nome,cognome),FOREIGN KEY (gruppo) REFERENCEScompagnie (id_gruppo) ON DELETE CASCADE
)
Create table
11
…. Che cos‟è il tipo ?
Domini:
Domini elementari (predefiniti)
Domini definiti dall'utente (semplici, ma riutilizzabili)
(vedi più avanti)
Create table
12
…. Foreign key ?
REFERENCES nome_tabella [ ( colonna1 [ , colonna2 ... ] ) ]
[ ON DELETE { CASCADE | SET DEFAULT | SET NULL } ]
[ ON UPDATE { CASCADE | SET DEFAULT | SET NULL } ]
Le clausole ON DELETE e ON UPDATE indicano quale azione deve essere compiuta nel
caso in cui una tupla nella tabella referenziata venga eliminata o aggiornata. Infatti in tali
casi nella colonna referenziante (che e' quella che si sta definendo) potrebbero esserci dei
valori inconsistenti. Le azioni possono essere:
o CASCADE: eliminare la tupla contenente la colonna referenziante (nel caso di ON
DELETE) o aggiornare anche la colonna referenziante (nel caso di ON UPDATE).
o SET DEFAULT: assegnare alla colonna referenziante il suo valore di default.
o SET NULL: assegnare alla colonna referenziante il valore NULL.
Drop table
13
Il comando “drop table” consente di distruggere una tabella, eliminandola fisicamente dal database.
Come tutti i comandi DDL è un'operazione irreversibile, e provoca la perdita di tutti i dati contenuti nella tabella.
DROP TABLE nome_tabella;
Rename
14
Il comando rename consente di rinominare una tabella.
RENAME nome_tabellaTO nuovo_nome_tabella;
Domini
15
Domini elementari (predefiniti)
Domini definiti dall'utente (semplici, ma riutilizzabili)
Domini elementari
16
Carattere: singoli caratteri o stringhe, anche di lunghezza
variabile
Bit: singoli booleani o stringhe
Numerici, esatti e approssimati
Data, ora, intervalli di tempo
Domini elementari (1)
17
Esempi dei principali tipi previsti dallo standard SQL:
CHARACTER(n) o CHAR(n)Una stringa a lunghezza fissa di esattamente n caratteri.
CHARACTER VARYING(n) o VARCHAR o CHAR VARYINGUna stringa a lunghezza variabile di al massimo n caratteri.esempio stringa variabile di 500 caratteri al massimo, alfabeto grecocharacter varying (500) character set Greek
INTEGER o INTUn numero intero con segno. La precisione, cioe' la grandezza del numero intero che puo' essere memorizzato in una colonna di questo tipo, dipende dall'implementazione del particolare DBMS.
SMALLINTUn numero intero con segno con precisione non superiore a INTEGER.
Domini elementari (2)
18
FLOAT(p) o REAL o DOUBLE PRECISION
Un numero a virgola mobile, con precisione p. Il valore massimo di p dipende dall'implementazione del DBMS.
E' possibile usare FLOAT senza indicazione della precisione, utilizzando quindi la precisione di default,
anch'essa dipendente dall'implementazione.
DECIMAL(p,q) o DEC(p,q)
Un numero a virgola fissa di almeno p cifre e segno, con q cifre dopo la virgola
INTERVAL
Un periodo di tempo (anni, mesi, giorni, ore, minuti, secondi e frazioni di secondo).
DATE, TIME e TIMESTAMP
Un preciso istante temporale. DATE permette di indicare l'anno, il mese e il giorno, TIME ora, minuti e
secondi. TIMESTAMP e' la combinazione dei due precedenti. (secondi sono un numero con la virgola per
specificare anche frazioni di secondo).
Altri domini secondo SQL-3
19
boolean (restrizione del dominio bit)
blob (binary large object)
clob (character large object)
ref
array
row
Domini definiti dall’utente
20
CREATE DOMAIN:
– definisce un dominio (semplice), utilizzabile in
definizioni di relazioni, anche con vincoli e valori di
default
– La definizione di un nuovo dominio consente una
maggiore flessibilità della base di dati, in particolare se si
vogliono cambiare i vincoli di un dominio è sufficiente
modificarne la definizione
Create domain
21
esempio
CREATE DOMAIN Voto
AS SMALLINT DEFAULT NULL
CHECK ( value >=18 AND value <= 30 );
DML
22
SQL
(STRUCTURED QUERY LANGUAGE)
DML
23
Modificare i dati contenuti nel database, con operazioni diinserimento, variazione e cancellazione (DML: DataManipulation Language)
DML
Insert
Update
Delete
Select
Insert
24
Il comando “insert into” permette l‟inserimento dei nuovi
dati
INSERT INTO nome_tabella [nome_campo [, …]]
{VALUES (espressione[,…]) | SELECT ….}
Insert
25
Esempi (1):
INSERT INTO studenti (matricola, nome, cognome, via, citta, telefono)
VALUES (100, “Mario”, “Rossi”, “viale indipendenza 15”, “Milano”, “02-12345678”);
INSERT INTO studenti (matricola, nome, cognome, via, citta, telefono) VALUES
(100, “Mario”, “Rossi”, “viale indipendenza 15”, “Milano”, “02-12345678”),
(101,“Valentina”,”Bianchi”, “Piazza delle Erbe”, “Padova”, “049-98765432”);
Insert
26
Esempi (2):
INSERT INTO studenti
VALUES (100, “Mario”, “Rossi”);
INSERT INTO studenti (matricola, nome, cognome, citta)
SELECT matricola, nome, cognome, citta
FROM nuoviIscritti
WHERE citta = “Milano”;
Update
27
Il comando “update” permette l‟aggiornamento di una
tabella
UPDATE nome_tabella
SET nome_campo = { espressione | NULL | DEFAULT |
SELECT …}
WHERE condizione };
Update
28
Esempi:
UPDATE studenti SET classe = classe+1
WHERE promosso = true AND classe < 5;
Delete
29
Il comando “delete from” permette l‟eliminazione di righe di una tabella
DELETE FROM nome_tabella[WHERE condizione ][LIMIT massimo_numero righe];
Nota access non supporta “limit”
Delete
30
Esempi:
DELETE FROM studenti
WHERE promosso = true AND classe = 5;
DELETE FROM nuoviIscritti;
(che differenza c’è con DROP TABLE nuoviIscritti; ?)
Nota: se il vincolo di integrità non è definito nello schema di creazione della tabella,
l‟eliminazione è sempre possibile, altrimenti …. (vedi foreign key)
DCL
31
SQL
(STRUCTURED QUERY LANGUAGE)
DCL
32
Gestire il controllo degli accessi e i permessi per gli utenti (DCL: Data Control Language)
DCL
Grant
Revoke
Grant
33
GRANT{privilegio[,…] [nome_campi[,…] ]}
ON nome_tabella | nome_databaseTO (nome_utente[,…]);
Revoke
34
REVOKE{privilegio[,…]
ON nome_tabella | nome_database
FROM (nome_utente[,…]);
Privilegi:
35
ALL
ALTER
CREATE
DELETE
DROP
INDEX
INSERT
SELECT
UPDATE
USAGE
GRANT OPTION
DCL
36
Esempi:
GRANT SELECT, INSERT, UPDATE (voto, condotta)
ON studenti TO professore;
GRANT ALL
ON studenti TO segreteria;
GRANT SELECT
ON dbScuola.* TO „%‟@„localhost‟;
REVOKE ALL
ON studenti TO preside;
QUERY Language
37
SQL
(STRUCTURED QUERY LANGUAGE)
QUERY Language
38
Porre interrogazioni al database
SELECT [ALL | DISTINCT]
{* | (nome_campo [AS alias])[,…]}
FROM nome_tabella [AS alias] [,…]
[WHERE condizione]
[GROUP BY nome_campo]
[HAVING condizione]
[ORDER BY (nome_campo) [ASC | DESC] [,…]
[LIMIT [ riga_iniziale,][righe]];
Nota: LIMIT per MYSQL; TOP per ACCESS.
Operatori relazionali
39
selezione
proiezione
congiunzione (join)
Selezione
40
L‟operazione di selezione (non confondere con il comando SQL, SELECT !)
estrae un sottoinsieme di righe da una tabella in base a delle condizioni imposte ai valori contenuti in una o più colonne.
Proiezione
41
L‟operazione di proiezione estrae un sottoinsieme di colonne da una
tabella
Esempio selezione:
42
SELECT * FROM articoli WHERE colore= “Rosso”;
Esempio proiezione:
43
SELECT colore FROM articoli;
Esempio:
44
SELECT DISTINCT colore FROM articoli ORDER BY colore;
Esempio selezione e proiezione:
45
SELECT descrizione FROM articoli WHERE colore= “Rosso”;
Join
46
L‟operazione di congiunzione (non confondere nella
traduzione dall‟inglese UNION con JOIN) combina le
operazioni di prodotto e di selezione tra due (o più
tabelle); viene cioè effettuato prima il prodotto fra le
tabelle e poi estratte solo le righe che soddisfano una
determinata condizione tra le colonne della prima e della
seconda tabella.
Join
47
Date le tabelle di partenza
tblA e tblB:
Join
48
Outer join
Esempio selezione:
49
SELECT * FROM TblLibri WHERE prezzo < 20,00;
Esempio proiezione:
50
SELECT Titolo, isbn FROM TblLibri ORDER BY Titolo;
Esempio join:
51
SELECT * FROM TblLibri,TblEditore
WHERE TblLibri.Id_CasaEditrice = TblEditori.Id_CasaEditrice;
SELECT * FROM TblLibri INNER JOIN TblEditore
ON TblLibri.Id_CasaEditrice = TblEditori.Id_CasaEditrice;
Esempio outer join:
52
SELECT * FROM TblLibri LEFT JOIN TblEditore
ON TblLibri.Id_CasaEditrice = TblEditori.Id_CasaEditrice;
Esempio outer join :
53
SELECT * FROM TblLibri RIGHT JOIN TblEditore
ON TblLibri.Id_CasaEditrice = TblEditori.Id_CasaEditrice;
Altri operatori
54
ORDER BY
LIKE
BETWEEN
IN
Esempio:
55
SELECT isbn,titolo FROM TblLibri WHERE
DataPubblicazione BETWEEN #01/01/2005 # AND #31/12/2005#
AND isbn LIKE “88-*” ORDER BY isbn DESC;
Esempio:
56
SELECT editore FROM TblEditori
WHERE provincia IN („TO‟ , „PD‟, „VE‟);
Esempio:
57
SELECT titolo FROM TblLibri
WHERE Id_CasaEditrice IN (
SELECT Id_CasaEditrice FROM TblEditori
WHERE provincia =“MI”);
…query nidificata…
Operatori di aggregazione
58
AVG
COUNT
MAX
MIN
SUM
Operatori di aggregazione (2)
59
STDEV (access)
STDDEV (mysql)
VAR (access)
VARIANCE (mysql)
Esempio:
60
SELECT AVG(Prezzo) FROM TblLibri; 21,28
SELECT COUNT(*) FROM TblLibri; 5
SELECT COUNT(Id_CasaEditrice) FROM TblLibri; 4
SELECT COUNT(*) - COUNT(Id_CasaEditrice) FROM TblLibri; 1
SELECT COUNT(DISTINCT Id_CasaEditrice) FROM TblLibri; 3
(ma solo mysql)
Raggruppamenti
61
“GROUP BY” serve per raggruppare ed elaborare diverse
righe che nella tabella origine hanno valori uguali in una (o
più) determinata colonna
Condizioni di gruppo
62
“HAVING” permette di porre condizioni sulla nuova tabella
ottenuta dopo il raggruppamento
SELECT …
FROM … [JOIN] … [WHERE] ….
GROUP BY ….
[HAVING condizione];
Esempio:
63
SELECT trimestre, SUM (totale) AS venduto
FROM TblVendite
GROUP BY trimestre;
Esempio:
64
SELECT zona, AVG (totale) AS media
FROM TblVendite
GROUP BY zona
HAVING AVG (totale) < 1000;
Appendice
65
Caratteri Jolly (ACCESS)
Carat
tere
Utilizzo Esempio
* Corrisponde a un numero qualsiasi di
caratteri. Può essere utilizzato come
primo o ultimo carattere nella stringa
dei caratteri.
no* trova nome, note e
notare
? Corrisponde a qualsiasi singolo
carattere alfabetico.
B?llo trova ballo, bello
e bollo
[] Corrisponde a qualsiasi singolo
carattere all'interno delle parentesi
quadre
B[ae]llo trova ballo e
bello, ma non bollo
66
Caratteri Jolly (ACCESS)
Carat
tere
Utilizzo Esempio
! Corrisponde a qualsiasi carattere non
incluso nelle parentesi quadre
b[!ae]llo trova bollo e
bullo, ma non ballo e
bello
- Corrisponde a uno qualsiasi dei
caratteri di un intervallo. È necessario
specificare l'intervallo in ordine
crescente (dalla A alla Z, non dalla Z
alla A)
b[a-c]d trova bad, bbd
e bcd
# Corrisponde a qualsiasi singolo
carattere numerico
Corrisponde a qualsiasi
singolo carattere
numerico.
1#3 trova 103, 113
67