56
SQL (STRUCTURED QUERY LANGUAGE) Prof. Nicoletta D‟Alpaos & Prof. Andrea Borghesan DDL Data Definition Language DML Data Manipulation Language DCL Data Control Language SQL

SQL (STRUCTURED QUERY LANGUAGE) - …venus.unive.it/borg/04-eipeSQL.pdf · Nota 1: in Access i database devono essere creati all‟interno dell‟ambiente GUI. Nota 2: esiste anche:

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;

DML

15

SQL

(STRUCTURED QUERY LANGUAGE)

DML

16

Modificare i dati contenuti nel database, con operazioni diinserimento, variazione e cancellazione (DML: DataManipulation Language)

DML

Insert

Update

Delete

Select

Insert

17

Il comando “insert into” permette l’inserimento dei nuovi

dati

INSERT INTO nome_tabella [nome_campo [, …]]

{VALUES (espressione[,…]) | SELECT ….}

Insert

18

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

19

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

20

Il comando “update” permette l’aggiornamento di una

tabella

UPDATE nome_tabella

SET nome_campo = { espressione | NULL | DEFAULT |

SELECT …}

WHERE condizione };

Update

21

Esempi:

UPDATE studenti SET classe = classe+1

WHERE promosso = true AND classe < 5;

Delete

22

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

23

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

24

SQL

(STRUCTURED QUERY LANGUAGE)

DCL

25

Gestire il controllo degli accessi e i permessi per gli utenti (DCL: Data Control Language)

DCL

Grant

Revoke

QUERY Language

26

SQL

(STRUCTURED QUERY LANGUAGE)

QUERY Language

27

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

28

selezione

proiezione

congiunzione (join)

Selezione

29

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

30

L’operazione di proiezione estrae un sottoinsieme di colonne da una

tabella

Esempio selezione:

31

SELECT * FROM articoli WHERE colore= “Rosso”;

Esempio proiezione:

32

SELECT colore FROM articoli;

Esempio:

33

SELECT DISTINCT colore FROM articoli ORDER BY colore;

Esempio selezione e proiezione:

34

SELECT descrizione FROM articoli WHERE colore= “Rosso”;

Join

35

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

36

Date le tabelle di partenza

tblA e tblB:

Join

37

Outer join

Esempio selezione:

38

SELECT * FROM TblLibri WHERE prezzo < 20,00;

Esempio proiezione:

39

SELECT Titolo, isbn FROM TblLibri ORDER BY Titolo;

Esempio join:

40

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:

41

SELECT * FROM TblLibri LEFT JOIN TblEditore

ON TblLibri.Id_CasaEditrice = TblEditori.Id_CasaEditrice;

Esempio outer join :

42

SELECT * FROM TblLibri RIGHT JOIN TblEditore

ON TblLibri.Id_CasaEditrice = TblEditori.Id_CasaEditrice;

Altri operatori

43

ORDER BY

LIKE

BETWEEN

IN

Esempio:

44

SELECT isbn,titolo FROM TblLibri WHERE

DataPubblicazione BETWEEN #01/01/2005 # AND #31/12/2005#

AND isbn LIKE “88-*” ORDER BY isbn DESC;

Esempio:

45

SELECT editore FROM TblEditori

WHERE provincia IN („TO‟ , „PD‟, „VE‟);

Esempio:

46

SELECT titolo FROM TblLibri

WHERE Id_CasaEditrice IN (

SELECT Id_CasaEditrice FROM TblEditori

WHERE provincia =“MI”);

…query nidificata…

Operatori di aggregazione

47

AVG

COUNT

MAX

MIN

SUM

Operatori di aggregazione (2)

48

STDEV (access)

STDDEV (mysql)

VAR (access)

VARIANCE (mysql)

Esempio:

49

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

50

“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

51

“HAVING” permette di porre condizioni sulla nuova tabella

ottenuta dopo il raggruppamento

SELECT …

FROM … [JOIN] … [WHERE] ….

GROUP BY ….

[HAVING condizione];

Esempio:

52

SELECT trimestre, SUM (totale) AS venduto

FROM TblVendite

GROUP BY trimestre;

Esempio:

53

SELECT zona, AVG (totale) AS media

FROM TblVendite

GROUP BY zona

HAVING AVG (totale) < 1000;

Appendice

54

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

55

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

56