SQL (STRUCTURED QUERY LANGUAGE)venus.unive.it/borg/Sql.pdf · SQL (STRUCTURED QUERY LANGUAGE) Prof....

Preview:

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