sql structured query language comandi base di dml rosalba giugno [email protected] giugno/ rosalba...

131
SQL Structured Query Language Comandi base di DML Rosalba Giugno [email protected] www.dmi.unict.it/~giugno/

Upload: rosina-valeri

Post on 01-May-2015

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

SQL Structured Query

Language Comandi base di DML

SQL Structured Query

Language Comandi base di DML

Rosalba Giugno

[email protected]

www.dmi.unict.it/~giugno/

Rosalba Giugno

[email protected]

www.dmi.unict.it/~giugno/

Page 2: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

2

Generalita’

SQL sviluppato alla IBM nel 1973 e’ lo standard per tutti i sistemi commerciali (Oracle, Informix,Postgres,Sybase,DB2 etc..) .

Esistono sistemi commerciali che utilizzano interfacce tipo QBE :ACCESS. Tuttavia hanno sistemi per la traduzione automatica in SQL.

Page 3: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

3

Standard SQL-92

E’ utilizzato ,nel DML, dai principali DBMS relazionali. Mentre per il DDL ci sono variazioni significative.Prevede 3 livelli di linguaggio, di complessita’ crescente: Entry SQL, Intermediate SQL, Full SQL.3 Modi di usare SQL: Direct, Embedded, Module

Page 4: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

4

Direct ed Embedded SQL

Direct SQL : per l’uso interattivo.

Embedded SQL : per l’uso all’interno di linguaggi di programmazione (Ada, C, COBOL, FORTRAN, PASCAL, PL/1, etc..). I comandi SQL sono preceduti dalle parole chiave EXEC SQL

Module SQL: Per scrivere procedure il cui contenuto e’ un singolo comando SQL,compilate separatamente, chiamate come procedure esterne da programmi.

Page 5: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

5

Capacità del comando SQL SELECT

Capacità del comando SQL SELECT

SelezioneSelezione ProiezioneProiezione

Tabella 1Tabella 1 Tabella 2Tabella 2

Tabella 1Tabella 1 Tabella 1Tabella 1JoinJoin

Page 6: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

6

SELECT

SELECT [DISTINCT] Attributi

FROM Tabelle

[WHERE Condizione]

Page 7: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

7

Attributi e Tabelle

Attributi ::= * | Attributo {, Attributo}

Tabelle ::= Tabella {, Tabella}

Dove Tabella sta per una determinata relazione ed Attributo e’ uno degli attributi delle tabelle citate nel FROM

Page 8: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

8

QUERY SU UNA TABELLANOME MATRICOL INDIRIZZO TELEFONO Mario Rossi 123456 Via Etnea 1 222222 Ugo Bianchi 234567 Via Roma 2 333333 Teo Verdi 345678 Via Enna 3 444444

Vorrei conoscere indirizzo e telefono di Teo Verdi

Via Enna 3 444444

Page 9: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

9

Esempi

SELECT Indirizzo, Telefono

FROM Studenti

WHERE Nome=‘Teo Verdi’

NOME MATRICOL INDIRIZZO TELEFONO Mario Rossi 123456 Via Etnea 1 222222 Ugo Bianchi 234567 Via Roma 2 333333 Teo Verdi 345678 Via Enna 3 444444

Page 10: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

10

QUERY SU DUE TABELLE

NOME MATRICOL INDIRIZZO TELEFONO Mario Rossi 123456 Via Etnea 1 222222 Ugo Bianchi 234567 Via Roma 2 333333 Teo Verdi 345678 Via Enna 3 444444

CORSO MATRICOLA VOTO Programmazione 345678 27 Architetture 123456 30 Programmazione 234567 18 Matematica Discreta

345678 22

Architettura 345678 30

Quali esami ha superato Mario Rossi?

Architetture

Page 11: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

11

Esempi

SELECT Corso

FROM Esami,Studenti

WHERE

Esami.Matricola = Studenti.Matricola AND Nome=‘Mario Rossi’;

Page 12: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

12

QUERY SU PIU’ TABELLE

NOME MATRICOL INDIRIZZO TELEFONO Mario Rossi 123456 Via Etnea 1 222222 Ugo Bianchi 234567 Via Roma 2 333333 Teo Verdi 345678 Via Enna 3 444444

CORSO MATRICOLA VOTO Programmazione 345678 27 Architetture 123456 30 Programmazione 234567 18 Matematica Discreta

345678 22

Architettura 345678 30

CORSO PROFESSORE Programmazione Ferro Architetture Pappalardo Matematica Discreta Lizzio

Quali Professori hanno dato piu' di 24 a Teo Verdi ed in quali corsi?

Ferro Programmazione Pappalardo Architetture

Page 13: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

13

Esempi

SELECT Professore, Corsi.Corso

FROM Corsi,Esami,Studenti

WHERE Corsi.Corso = Esami.Corso AND Esami.Matricola = Studenti.Matricola AND Nome=‘Teo Verdi’ AND Voto > 24

Page 14: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

14

Scrittura Comandi SQLScrittura Comandi SQL

I comandi SQL non sono case sensitive. Possono essere distribuiti in una o più

righe.Clausole sono usualmente inserite in

linee separate.

I comandi SQL non sono case sensitive. Possono essere distribuiti in una o più

righe.Clausole sono usualmente inserite in

linee separate.

Page 15: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

15

Selezionare tutte le colonne

Selezionare tutte le colonne

DEPTNO DNAME LOC--------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

SQL> SELECT * 2 FROM dept;

Page 16: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

16

Selezionare una particolare colonna

Selezionare una particolare colonna

DEPTNO LOC--------- ------------- 10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON

SQL> SELECT deptno, loc 2 FROM dept;

DEPTNO DNAME LOC--------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Page 17: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

17

Espressioni AritmeticheEspressioni AritmeticheCreare espressioni attraverso l’uso di operatori aritmetici.Creare espressioni attraverso l’uso di operatori aritmetici.

Operatore

+

-

*

/

Descrizione

Somma

Sottrazione

Moltiplicazione

Divisione

Page 18: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

18

Uso degli operatori Aritmetici

Uso degli operatori Aritmetici

SQL> SELECT ename, sal, sal+300 2 FROM emp;

ENAME SAL exp---------- --------- ---------KING 5000 5300BLAKE 2850 3150CLARK 2450 2750JONES 2975 3275MARTIN 1250 1550ALLEN 1600 1900...14 rows selected.

Page 19: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

19

Precedenza OperatoriPrecedenza Operatori

SQL> SELECT ename, sal, 12*sal+100 2 FROM emp;

ENAME SAL exp---------- --------- ----------KING 5000 60100BLAKE 2850 34300CLARK 2450 29500JONES 2975 35800MARTIN 1250 15100ALLEN 1600 19300...14 rows selected.

Page 20: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

20

Uso delle parentesiUso delle parentesi

SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp;

ENAME SAL exp---------- --------- -----------KING 5000 61200BLAKE 2850 35400CLARK 2450 30600JONES 2975 36900MARTIN 1250 16200...14 rows selected.

Page 21: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

21

Alias delle colonne Alias delle colonne

Rinominare il nome di una colonnaUtile con dei calcoliDeve seguire immediatamente il nome di

una colonna (SENZA VIRGOLA); può essere usata opzionalmente la parola chiave AS tra il nome della colonna e l’alias.

Richiede doppio apice se l’alias ha degli spazi

Rinominare il nome di una colonnaUtile con dei calcoliDeve seguire immediatamente il nome di

una colonna (SENZA VIRGOLA); può essere usata opzionalmente la parola chiave AS tra il nome della colonna e l’alias.

Richiede doppio apice se l’alias ha degli spazi

Page 22: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

22

Uso dell’AliasUso dell’Alias

SQL> SELECT ename AS name, sal salary 2 FROM emp;

NAME SALARY

------------- ---------

...

SQL> SELECT ename "Name", 2 sal*12 "Annual Salary" 3 FROM emp;

Name Annual Salary

------------- -------------

...

Page 23: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

23

Alias o Correlation Names

SELECT Professore

FROM CP p, CMV e

WHERE p.Corso = e.Corso AND Matricola = 123456

Per evitare ambiguita’, quando si usano piu’ tabelle con lo stesso nome-attributo, si mette il punto.

Per evitare ambiguita’, quando si usano piu’ tabelle con lo stesso nome-attributo, si mette il punto.

Page 24: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

24

Alias o Correlation Names

SELECT c1.Matricola, c2.Matricola

FROM CMV c1, CMV c2

WHERE c1.voto < c2.voto

Page 25: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

25

Righe duplicateRighe duplicateLe righe duplicate sono restituite per defaultLe righe duplicate sono restituite per defaultSQL> SELECT deptno 2 FROM emp;

SQL> SELECT deptno 2 FROM emp;

DEPTNO--------- 10 30 10 20...14 rows selected.

Page 26: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

26

Eliminazione delle righe duplicate

Eliminazione delle righe duplicate

E’ consentito dall’uso della parola chiave E’ consentito dall’uso della parola chiave DISTINCT nella clausola SELECTDISTINCT nella clausola SELECTSQL> SELECT DISTINCT deptno 2 FROM emp;

DEPTNO--------- 10 20 30

Page 27: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

Restrizioni ed ordinamento Dati

Restrizioni ed ordinamento Dati

Page 28: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

28

ObiettiviObiettivi

Al completamento della lezione, dovreste essere in grado di:Limitare il numero di righe ottenute da una

queryRiordinare le righe ottenute da una query

Al completamento della lezione, dovreste essere in grado di:Limitare il numero di righe ottenute da una

queryRiordinare le righe ottenute da una query

Page 29: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

29

EsempioEsempio

"…selezionare "…selezionare tutti gli impiegati tutti gli impiegati

del dipartimeto 10"del dipartimeto 10"

IMPIEGATIIMPIEGATI

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7698 BLAKE MANAGER 30 7782 CLARK MANAGER 10 7566 JONES MANAGER 20 ...

IMPIEGATIIMPIEGATI

EMPNO ENAME JOB ... DEPTNO

7839 KING PRESIDENT 10 7782 CLARK MANAGER 10 7934 MILLER CLERK 10

Page 30: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

30

Limitare le righe selezionate

Limitare le righe selezionate

Limitare le righe tramite l’uso della clausola WHERE.

La clausola WHERE segue la clausola FROM.

Limitare le righe tramite l’uso della clausola WHERE.

La clausola WHERE segue la clausola FROM.

SELECT [DISTINCT] {*| colonna [alias], ...}FROM tabella[WHERE condizione(i)];

Page 31: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

31

Uso della clausola WHEREUso della clausola WHERE

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK';

ENAME JOB DEPTNO---------- --------- ---------JAMES CLERK 30SMITH CLERK 20ADAMS CLERK 20MILLER CLERK 10

Page 32: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

32

Stringhe di caratteri e Date

Stringhe di caratteri e Date

Stringhe di caratteri e le date vanno incluse tra apici.

I caratteri sono case sensitive e le date sono format sensitive.

Stringhe di caratteri e le date vanno incluse tra apici.

I caratteri sono case sensitive e le date sono format sensitive.

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = 'JAMES';

SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = 'JAMES';

Page 33: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

33

CONDIZIONE

Condizione : := Predicato | “(“Condizione”)” | NOT Condizione | Condizione (AND | OR) Condizione

Il risultato puo’ essere TRUE(T),FALSE(F) o UNKOWN(U).

Page 34: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

34

Predicati di confronto

Espr op (Espr | “(“ Sottoselect “)” )

op {=, , >, , <, }

SottoSelect deve dare come risultato una tabella con un solo elemento o vuota (nel qual caso produce il valore U). Il valore U viene prodotto anche nel caso che uno degli operandi ha il valore NULL.

Page 35: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

35

Operatori di confrontoOperatori di confronto

Operatore

=

>

>=

<

<=

<>

Significato

Uguale a

più grande di

maggiore o uguale di

minore di

minore o uguale a

diverso

Page 36: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

36

Uso degli Operatori di Confronto

Uso degli Operatori di Confronto

SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm;

ENAME SAL COMM---------- --------- ---------MARTIN 1250 1400

Page 37: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

37

Altri Operatori di Confronto

Altri Operatori di Confronto

Operatore

BETWEEN

...AND...

IN(list)

LIKE

IS NULL

Significato

compreso tra due valori

Corrisp. ad uno dei valori nella lista

Operatore di pattern matching

Valore nullo

Page 38: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

38

Uso dell’operatore BETWEEN

Uso dell’operatore BETWEEN

ENAME SAL---------- ---------MARTIN 1250TURNER 1500WARD 1250ADAMS 1100MILLER 1300

SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500;

Limiteinferiore

Limitesuperiore

BETWEEN consente la selezione di righe con attributi in un particolare range.

BETWEEN consente la selezione di righe con attributi in un particolare range.

Page 39: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

39

Predicato Between AND

Espr1 [NOT] BETWEEN Espr2 AND Espr3.

Equivale a

[NOT] Espr2 Espr1 AND Espr1Espr3

Page 40: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

40

Uso dell’operatore IN Uso dell’operatore IN E’ usato per selezionare righe che hanno un attributo che assume valori contenuti in una lista.

E’ usato per selezionare righe che hanno un attributo che assume valori contenuti in una lista.

SQL> SELECT empno, ename, sal, mgr 2 FROM emp 3 WHERE mgr IN (7902, 7566, 7788);

EMPNO ENAME SAL MGR--------- ---------- --------- --------- 7902 FORD 3000 7566 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788

Page 41: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

41

Uso dell’operatore LIKEUso dell’operatore LIKE• LIKE è usato per effettuare ricerche

wildcard di una stringa di valori.

• Le condizioni di ricerca possono contenere sia letterali, caratteri o numeri.

– % denota zero o più caratteri.

– _ denota un carattere.

• LIKE è usato per effettuare ricerche wildcard di una stringa di valori.

• Le condizioni di ricerca possono contenere sia letterali, caratteri o numeri.

– % denota zero o più caratteri.

– _ denota un carattere.

SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE 'S%';

Page 42: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

42

Uso dell’operatore LIKEUso dell’operatore LIKE Il pattern-matching di caratteri può essere

combinato.

I’identificatore ESCAPE (\) deve essere usato per cercare "%" o "_".

Il pattern-matching di caratteri può essere combinato.

I’identificatore ESCAPE (\) deve essere usato per cercare "%" o "_".

SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '_A%';

ENAME---------- MARTINJAMES WARD

Page 43: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

43

Operatori di Match

Attributo [NOT] LIKE Stringa

Dove Stringa puo’ contenere anche:

“_” che fa “match” con qualunque carattere

“%” che fa match con qualunque sequenza di caratteri

vale U se l’attributo e’ NULL

Page 44: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

44

Esempio

SELECT Nome

FROM Studenti

WHERE Indirizzo LIKE “Via Etnea %”

Fornisce tutti gli studenti che abitano in Via Etnea

Page 45: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

45

PredicatiEspr IS [NOT] NULL

esempio:

SELECT Nome

FROM Studenti

WHERE Telefono IS NOT NULL

Page 46: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

46

Operatori LogiciOperatori Logici

Operatore

AND

OR

NOT

Significato

Restituisce TRUE if entrambe le

condizioni sono TRUE

Restituisce TRUE se almeno una

delle condizioni è TRUE

Restituisce TRUE se la condizione è FALSE

Page 47: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

47

LOGICA A 3 VALORIp q p and q P or q not p

T T T T F

T F F T F

T U U T F

F F F F T

F U F U T

U U U U U

U=Unknown;U=Unknown;

Page 48: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

48

Uso dell’operatore ANDUso dell’operatore ANDAND AND richiede entrambe le condizionirichiede entrambe le condizioni TRUE. TRUE.

SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 AND job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7876 ADAMS CLERK 1100 7934 MILLER CLERK 1300

Page 49: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

49

Uso dell’operatore ORUso dell’operatore OROR OR richiede almeno una condizionerichiede almeno una condizione TRUE. TRUE.OR OR richiede almeno una condizionerichiede almeno una condizione TRUE. TRUE.SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 OR job='CLERK';

EMPNO ENAME JOB SAL--------- ---------- --------- --------- 7839 KING PRESIDENT 5000 7698 BLAKE MANAGER 2850 7782 CLARK MANAGER 2450 7566 JONES MANAGER 2975 7654 MARTIN SALESMAN 1250 ... 7900 JAMES CLERK 950 ...14 rows selected.

Page 50: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

50

Uso dell’operatore NOTUso dell’operatore NOT

SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST');

ENAME JOB---------- ---------KING PRESIDENTMARTIN SALESMANALLEN SALESMANTURNER SALESMANWARD SALESMAN

Page 51: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

51

Regole di precedenzaRegole di precedenza

L’override delle regole di precedenza è ottenuto con l’uso delle parentesi.L’override delle regole di precedenza è ottenuto con l’uso delle parentesi.

Ordine di val. Operatore

1 Tutti gli operatori diconfronto

2 NOT

3 AND

4 OR

Page 52: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

52

Regole di precedenzaRegole di precedenza

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000MARTIN SALESMAN 1250ALLEN SALESMAN 1600TURNER SALESMAN 1500WARD SALESMAN 1250

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job='SALESMAN' 4 OR job='PRESIDENT' 5 AND sal>1500;

Page 53: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

53

Regole di precedenzaRegole di precedenza

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000ALLEN SALESMAN 1600

ENAME JOB SAL---------- --------- ---------KING PRESIDENT 5000ALLEN SALESMAN 1600

L’uso delle parentesi forza la prioritàL’uso delle parentesi forza la prioritàL’uso delle parentesi forza la prioritàL’uso delle parentesi forza la priorità

SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE (job='SALESMAN' 4 OR job='PRESIDENT') 5 AND sal>1500;

Page 54: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

54

ORDINAMENTO

ORDER BY Attributo [DESC] {, Attributo [DESC] }

Va posto dopo il WHERE e fa si che il risultato sia ordinato secondo Attributo in senso crescente mentre se lo si vuole decrescente si deve aggiungere DESC

Page 55: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

55

Esempio

SELECT e.Corso, e.Voto

FROM Esami e, Studenti s

WHERE e.Matricola = s.Matricola

AND s.Nome = ‘Mario Rossi’

ORDER BY Voto DESC

Page 56: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

Visualizzare Dati da più Tabelle

Visualizzare Dati da più Tabelle

Page 57: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

57

ObiettiviObiettivi

Al completamento della lezione, dovreste essere in grado di:Scrivere comandi SELECT per accedere

a dati da più tabelle Vedere dati che generalmente non

soddisfano una condizione di join con l’uso delle outer join

Fare la Join di una tabella con se stessa

Al completamento della lezione, dovreste essere in grado di:Scrivere comandi SELECT per accedere

a dati da più tabelle Vedere dati che generalmente non

soddisfano una condizione di join con l’uso delle outer join

Fare la Join di una tabella con se stessa

Page 58: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

58

EMPNO DEPTNO LOC----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO...14 rows selected.

EMPNO DEPTNO LOC----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO...14 rows selected.

Ottenere dati da più TabelleOttenere dati da più TabelleIMPIEGATIIMPIEGATI DDIPARTIMENTIIPARTIMENTI EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

Page 59: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

59

Cosa è una Join?Cosa è una Join?

La join viene usata per effettuare query su più tabelle.

La condizione di join va scritta nella clausola WHERE.

Mettere come prefisso il nome della tabella se la stessa colonna appare in più di una tabella.

La join viene usata per effettuare query su più tabelle.

La condizione di join va scritta nella clausola WHERE.

Mettere come prefisso il nome della tabella se la stessa colonna appare in più di una tabella.

SELECT tabella1.colonna, tabella2.colonnaFROM tabella, tabella2WHERE tabella1.colonna1 = tabella2.colonna2;

SELECT tabella1.colonna, tabella2.colonnaFROM tabella, tabella2WHERE tabella1.colonna1 = tabella2.colonna2;

Page 60: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

60

Prodotto CartesianoProdotto Cartesiano

Il prodotto cartesiano e’ ottenuto quando:

Una condizione join e’ omessaUna condizione join e’ non validaTutte le righe della prima tabella ammettono

join con tutte le righe della secondaPer evitare il prodotto cartesiano, includere

sempre condizioni join valida nella clausola WHERE .

Il prodotto cartesiano e’ ottenuto quando:

Una condizione join e’ omessaUna condizione join e’ non validaTutte le righe della prima tabella ammettono

join con tutte le righe della secondaPer evitare il prodotto cartesiano, includere

sempre condizioni join valida nella clausola WHERE .

Page 61: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

61

Generare un Prodotto CartesianoGenerare un Prodotto Cartesiano

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

ENAME DNAME------ ----------KING ACCOUNTINGBLAKE ACCOUNTING ...KING RESEARCHBLAKE RESEARCH...56 rows selected.

IMPIEGATI (14 righe) IMPIEGATI (14 righe) DIPARTIMENTI (4 righe) DIPARTIMENTI (4 righe)

EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

EMPNO ENAME ... DEPTNO------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

““ProdottoProdottoCartesiano: Cartesiano:

14*4=56 rows”14*4=56 rows”

Page 62: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

62

Cosa e’ una Equijoin?Cosa e’ una Equijoin?IMPIEGATI IMPIEGATI DIPARTIMENTI DIPARTIMENTI EMPNO ENAME DEPTNO------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20...14 rows selected.

DEPTNO DNAME LOC ------- ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS...14 rows selected.

Chiave Straniera Chiave Straniera Chiave PrimariaChiave Primaria

Page 63: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

63

Estrarre Record con Equijoin

Estrarre Record con Equijoin

SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC----- ------ ------ ------ --------- 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS...14 rows selected.

Page 64: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

64

Condizioni di Ricerca addizioli

Uso dell’operatore AND

Condizioni di Ricerca addizioli

Uso dell’operatore ANDEMP EMP DEPT DEPT EMPNO ENAME DEPTNO------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20...14 rows selected.

DEPTNO DNAME LOC ------ --------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS...14 rows selected.

Page 65: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

65

Condizioni di Ricerca Uso dell’operatore AND

Condizioni di Ricerca Uso dell’operatore AND

SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno AND ENAME=‘KING’;

Page 66: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

66

Join di piu’ di due TabelleJoin di piu’ di due Tabelle

NAME CUSTID----------- ------JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107... ...9 rows selected.

NAME CUSTID----------- ------JOCKSPORTS 100TKB SPORT SHOP 101VOLLYRITE 102JUST TENNIS 103K+T SPORTS 105SHAPE UP 106WOMENS SPORTS 107... ...9 rows selected.

CLIENTI CLIENTI

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

CUSTID ORDID------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605... 21 rows selected.

ORDINIORDINI

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

ORDID ITEMID------ ------- 610 3 611 1 612 1 601 1 602 1...64 rows selected.

PROD. PROD.

Page 67: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

67

Join di piu’ di due TabelleJoin di piu’ di due Tabelle

SQL> SELECT * 2 FROM clienti, ordini, prod 3 WHERE clineti.custid=ordini.custid

AND prod.ordid=prod.ordid;

Page 68: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

68

Predicati Di Appartenenza e Quantificatori

Page 69: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

69

CONDIZIONE

Condizione : := Predicato | “(“Condizione”)” | NOT Condizione | Condizione (AND | OR) Condizione

Il risultato puo’ essere TRUE(T),FALSE(F) o UNKOWN(U).

Page 70: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

70

Predicati di Appartenenza

Espr [NOT] IN ( “(“SottoSelect”)” | “(“Valore {, Valore} “)” ).

Vale U se Espr e’ NULL oppure se

NULL e’ fra i valori della SottoSelect

SELECT Matricola

FROM Esami

WHERE Voto IN ( 18, 19, 20 )

Page 71: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

71

IN o Join?

IN va usato quando e’ strettamente necessario e non a posto di giunzioni

SELECT Nome

FROM Studenti

WHERE Matricola IN

(SELECT Matricola

FROM Esami

WHERE Voto>27)

Page 72: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

72

Va meglio scritta come

SELECT DISTINCT s.Nome

FROM Studenti s, Esami e

WHERE s.Matricola = e.Matricola AND

Voto > 27

E’ piu’ efficiente perche’ c’e’ un ottimizzatore che velocizza le join rispetto alle SottoSelect

Page 73: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

73

Predicati Esistenziali[NOT] EXISTS “(“ SottoSelect “)”

E’ Vero se la SottoSelect non ritorna l’insieme vuoto.

SELECT Nome

FROM Studenti s

WHERE NOT EXISTS

(SELECT *

FROM Esami e, Corsi c

WHERE e.Corso = c.Corso

AND s.Matricola = e.Matricola

AND c.Professore = “Ferro”)

Nota: nella sottoselect si puo’ usare la variabile di correlazione della select superiore ma non il contrario

Nota: nella sottoselect si puo’ usare la variabile di correlazione della select superiore ma non il contrario

Page 74: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

74

EXISTS o JOIN?

SELECT e.Matricola

FROM Esami e

WHERE EXISTS

(SELECT *

FROM Corsi c

WHERE c.Corso = e.Corso

AND c.Professore=‘Ferro’)

Page 75: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

75

Usando l’Ottimizzatore di Join

SELECT e.Matricola

FROM Esami e, Corsi c

WHERE c.Corso = e.Corso

AND c.Professore=‘Ferro’

E’ piu’ efficiente.

Page 76: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

76

Altri Quantificatori

Espr op (ANY | ALL) “(“SottoSelect”)”

op {=, , >, , <, }

SELECT s.Nome

FROM Studenti s, Esami e

WHERE s.Matricola = e.Matricola AND

e.Voto > ALL

(SELECT DISTINCT f.Voto

FROM Esami f , Studenti t

WHERE f.Matricola = t.Matricola AND

t.Nome = ‘Mario Rossi’)

Page 77: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

77

Espr = ANY (SottoSelect) equivale a Espr IN (Sottoselect)

Espr NOT IN (SottoSelect) non equivale a Espr <> ANY (SottoSelect) ma a Espr <> All (SottoSelect)

Page 78: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

78

Ricordiamo l’esempio

Agenti(CodiceAgente,Nome,Zona Supervisore,Commissione)

Clienti(CodiceCliente,Nome,Citta’,Sconto)

Ordini(CodiceOrdine,CodiceCliente,CodiceAgente,Articolo,Data,Ammontare)

Page 79: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

79

Quantificatore Universale

Supponiamo di voler trovare i codici di quei clienti che hanno fatto ordini a TUTTI gli agenti di Catania.

Per ogni agente z di Catania esiste un ordine y del nostro cliente x a z.

zy y(n,x,z,p,d,a) sse

z y y(n,x,z,p,d,a)

Page 80: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

80

Tradotta in SQL

SELECT c.CodiceCliente

FROM Clienti c

WHERE NOT EXISTS

(SELECT *

FROM Agenti a

WHERE a.Zona = ‘Catania’

AND NOT EXISTS

( SELECT *

FROM Ordini v

WHERE v.CodiceCliente = c.CodiceCliente

AND v.CodiceAgente = a.CodiceAgente) )

Page 81: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

Aggregazione datiAggregazione dati

Page 82: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

82

ObiettiviObiettivi

Al completamento della lezione, dovreste essere in grado di: Identificare le funzioni di

raggruppamentoDescriverne l’usoRaggruppare dati usando GROUP BY Includere ed escludere righe tramite

l’uso di HAVING

Al completamento della lezione, dovreste essere in grado di: Identificare le funzioni di

raggruppamentoDescriverne l’usoRaggruppare dati usando GROUP BY Includere ed escludere righe tramite

l’uso di HAVING

Page 83: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

83

Cosa sono?Cosa sono?Operano su insiemi di righe per dare un risultato per gruppo.Operano su insiemi di righe per dare un risultato per gruppo.

IMPIEGATIIMPIEGATI

““SalarioSalarioMassimo”Massimo”

DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

MAX(SAL)

---------

5000

Page 84: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

84

Funzioni Statistiche

MAX,MIN,COUNT,AVG,SUM

Operano sui valori di un certo attributo ignorando i valori NULL

Se i valori sono tutti NULL allora valgono tutte NULL eccetto COUNT che vale zero . COUNT(DISTINCT..) da’ il numero dei valori distinti di un attributo mentre COUNT(*) da’ il numero delle righe

Page 85: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

85

Esempi

SELECT MIN(Voto),MAX(Voto),AVG(Voto)

FROM Esami

WHERE Matricola = ‘123456’

SELECT COUNT(*)

FROM Esami

WHERE Corso = ‘Database 1’

Page 86: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

86

Quali sonoQuali sono

AVG COUNT MAXMIN STDDEV SUMVARIANCE

AVG COUNT MAXMIN STDDEV SUMVARIANCE

Page 87: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

87

UsoUso

SELECT [column,] group_function(column)FROM table[WHERE condition][GROUP BY column][ORDER BY column];

Page 88: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

88

Uso di AVG e SUMUso di AVG e SUM

AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)-------- --------- --------- --------- 1400 1600 1250 5600

Possono essere usati su dati numerici.Possono essere usati su dati numerici.

SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%';

Page 89: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

89

Uso di MIN e MAXUso di MIN e MAX

Possono essere usati su qualsiasi tipo.Possono essere usati su qualsiasi tipo.

SQL> SELECT MIN(hiredate), MAX(hiredate) 2 FROM emp;

MIN(HIRED MAX(HIRED--------- ---------17-DEC-80 12-JAN-83

Page 90: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

90

Uso di COUNTUso di COUNT

COUNT(*)--------- 6

SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30;

COUNT(*) ritorna il numero di righe di una tabella.COUNT(*) ritorna il numero di righe di una tabella.

Page 91: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

91

Creare gruppi di datiCreare gruppi di datiIMPIEGATIIMPIEGATI

““salariosalariomedio medio

in IMPIEGATIin IMPIEGATIper ogniper ogni

dipartimento”dipartimento”

2916.66672916.6667

21752175

1566.66671566.6667

DEPTNO SAL--------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

DEPTNO AVG(SAL)

------- ---------

10 2916.6667

20 2175

30 1566.6667

Page 92: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

92

Creare gruppi tramite: GROUP BY

Creare gruppi tramite: GROUP BY

SELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];

Divide le righe di una tabella in gruppi piu’ piccoli.Divide le righe di una tabella in gruppi piu’ piccoli.

Page 93: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

93

Raggruppamento

GROUP BY Attributo {, Attributo} [HAVING Condizione]

Va posto dopo WHERE e opera una partizione delle righe del risultato in base ad eguali valori su quegli attributi (NULL incluso). Quindi si produce una n-upla per ogni classe di equivalenza che soddisfa la condizione HAVING

Page 94: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

94

Uso di GROUP BYUso di GROUP BYTutte le colonne della SELECT che non sono in funzioni di gruppo devono essere nella GROUP BY.

Tutte le colonne della SELECT che non sono in funzioni di gruppo devono essere nella GROUP BY.

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno;

DEPTNO AVG(SAL)--------- --------- 10 2916.6667 20 2175 30 1566.6667

Page 95: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

95

Uso GROUP BYUso GROUP BY

La colonna di GROUP BY non deve essere necessariamente nella SELECT.La colonna di GROUP BY non deve essere necessariamente nella SELECT.

SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno;

AVG(SAL)--------- 2916.6667 21751566.6667

Page 96: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

96

Raggruppare piu’ di una colonna

Raggruppare piu’ di una colonnaIMPIEGATIIMPIEGATI

““sommare I salari sommare I salari in IMPIEGATIin IMPIEGATI

per ongi lavoro, per ongi lavoro, RagruppatiRagruppati

per dipartimeno”per dipartimeno”

DEPTNO JOB SAL

--------- --------- ---------

10 MANAGER 2450

10 PRESIDENT 5000

10 CLERK 1300

20 CLERK 800

20 CLERK 1100

20 ANALYST 3000

20 ANALYST 3000

20 MANAGER 2975

30 SALESMAN 1600

30 MANAGER 2850

30 SALESMAN 1250

30 CLERK 950

30 SALESMAN 1500

30 SALESMAN 1250

JOB SUM(SAL)

--------- ---------

CLERK 1300

MANAGER 2450

PRESIDENT 5000

ANALYST 6000

CLERK 1900

MANAGER 2975

CLERK 950

MANAGER 2850

SALESMAN 5600

DEPTNO

--------

10

10

10

20

20

20

30

30

30

Page 97: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

97

Uso di GROUP BY su colonne multiple

Uso di GROUP BY su colonne multiple

SQL> SELECT deptno, job, sum(sal) 2 FROM emp 3 GROUP BY deptno, job;

DEPTNO JOB SUM(SAL)--------- --------- --------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900...9 rows selected.

Page 98: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

98

Query illegali con funzioni di raggruppamento

Query illegali con funzioni di raggruppamento

Ogni colonna o espressione della SELECT che non e’ argomento di funzioni di deve essere nella GROUP BY.

Ogni colonna o espressione della SELECT che non e’ argomento di funzioni di deve essere nella GROUP BY.

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SQL> SELECT deptno, COUNT(ename) 2 FROM emp;

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: not a single-group group function

SELECT deptno, COUNT(ename) *ERROR at line 1:ORA-00937: not a single-group group function

Page 99: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

99

Non puo’ essere usata la WHERE per restringere I gruppi.

Deve essere usata la HAVING.

Non puo’ essere usata la WHERE per restringere I gruppi.

Deve essere usata la HAVING.

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 2000 4 GROUP BY deptno;

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: group function is not allowed here

WHERE AVG(sal) > 2000 *ERROR at line 3:ORA-00934: group function is not allowed here

Query illegali con funzioni di raggrup.

Query illegali con funzioni di raggrup.

Page 100: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

100

Escludere gruppi di ris.Escludere gruppi di ris.

““salariosalariomassimo massimo

per dipartmentoper dipartmentomaggiore dimaggiore di

$2900”$2900”

IMPIEGATIIMPIEGATI

50005000

30003000

28502850

DEPTNO SAL

--------- ---------

10 2450

10 5000

10 1300

20 800

20 1100

20 3000

20 3000

20 2975

30 1600

30 2850

30 1250

30 950

30 1500

30 1250

DEPTNO MAX(SAL)

--------- ---------

10 5000

20 3000

Page 101: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

101

Clausola HAVINGClausola HAVING

Uso di HAVING per restringere gruppiLe righe sono raggruppate.La funzione di raggruppamento e’

applicata.

Uso di HAVING per restringere gruppiLe righe sono raggruppate.La funzione di raggruppamento e’

applicata.

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

Page 102: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

102

Uso di HAVINGUso di HAVING

SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900;

DEPTNO MAX(SAL)--------- --------- 10 5000 20 3000

Page 103: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

103

Uso di HAVINGUso di HAVING

SQL> SELECT job, SUM(sal) PAYROLL 2 FROM emp 3 WHERE job NOT LIKE 'SALES%' 4 GROUP BY job 6 ORDER BY SUM(sal);

JOB PAYROLL--------- ---------ANALYST 6000MANAGER 8275

5 HAVING SUM(sal)>5000

Page 104: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

104

Funzioni di raggruppamento

annidate

Funzioni di raggruppamento

annidateSQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno;

MAX(AVG(SAL))------------- 2916.6667

Page 105: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

105

Esempio

SELECT Nome, Matricola MIN(Voto),MAX(Voto),AVG(Voto)

FROM Esami, Studenti

WHERE Esami.Matricola = Studenti.Matricola

GROUP BY Nome,Matricola

HAVING COUNT(*) > 8

Page 106: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

106

SommarioSommarioSELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

Ordine di valutazione delle clausole:WHEREGROUP BYHAVING

Ordine di valutazione delle clausole:WHEREGROUP BYHAVING

Page 107: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

107

Visualizzare Dati da piu’ tabelle (||)

Diversi tipi di Joins

Operatori Insiemistici

Page 108: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

108

Tabelle

Tabelle ::= Tabella [Ide] {, Tabella [Ide]}

Tabella::= Ide | Tabella OpInsiem Tabella | Tabella Giunzione Tabella

[USING “(“Attributo{,Attributo}“)”|ON Condizione]

Page 109: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

109

Giunzioni ed Operatori Insiemistici

Giunzione ::= [CROSS|UNION|NATURAL] [LEFT| RIGHT | FULL] JOIN

OpInsiem ::= (UNION | INTERSECT | EXCEPT) [CORRESPONDING [BY “(“ Attributo {,Attributo}”)” ] ]

USING e ON solo con JOIN; LEFT, RIGHT,FULL solo con NATURAL JOIN e JOIN

Page 110: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

110

Ancora su Join ed Operatori Insiemistici

Cross Join e’ il prodotto cartesiano

Union Join e’ l’unione esterna cioe’ si estendono le due tabelle con le colonne dell’altra con valori nulli e si fa l’unione delle due stesse tabelle.

Page 111: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

111

Ancora sulle Join

Natural Join e’ quella classica

Join... Using e’ la natural join sui dati attributi

Join…On su quelli che soddisfano una data condizione

Page 112: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

112

Esempi

Natural Join

SELECT Studenti.Nome,Esami.Corso,Esami.Voto

FROM Esami NATURAL JOIN Studenti

Nome,Corso e Voto degli esami

Page 113: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

113

[LEFT|RIGHT|FULL] usato con Natural Join o Join e’ la giunzione esterna nelle tre modalita’ sinistra,destra o completa.

Page 114: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

114

Right Outer Join

Outer Join Operators

Left Outer Join Join

Le righe che soddisfano la join

Le righe escluse dalla join della tabella a sx

Le righe escluse dalla join della tabella a dx

Full outer join

Page 115: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

115

Altro Esempio

Agenti(CodiceAgente,Nome,Zona Supervisore,Commissione)

Clienti(CodiceCliente,Nome,Citta’,Sconto)

Ordini(CodiceOrdine,CodiceCliente,CodiceAgente,Articolo,Data,Ammontare)

Page 116: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

116

Esempio di Join On

SELECT Agenti.CodiceAgente,Ordini.Ammontare

FROM Agenti JOIN Ordini

ON Agenti.Supervisore = Ordini.CodiceAgente

Codice agente ed ammontare degli ordini dei supervisori

Page 117: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

117

Giunzione Esterna

SELECT Agenti.CodiceAgente,Ordini.Ammontare

FROM Agenti NATURAL LEFT JOIN Ordini

Codice agente ed ammontare degli agenti incluso quelli che non hanno effettuato ordini (avranno ammontare NULL)

Page 118: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

118

Le operazioni Insiemistici

A UNION B

A INTERSECT B

A MINUS B

Page 119: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

119

Le operazioni Insiemistici

OpInsiem ::= (UNION | INTERSECT | EXCEPT) [CORRESPONDING [BY “(“ Attributo {,Attributo}”)” ] ]

Union,Intersect,Except sono ,,-. CORRESPONDING fa proiettare sugli attributi comuni e poi si applica l’operatore insiemistico. Se c’e’ anche BY si specificano su quali comuni attributi proiettare

Page 120: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

120

UNIONESELECT *

FROM Clienti UNION CORRESPONDING AgentiFornisce tutti i nomi dei clienti e degli agenti.

In effetti nei sistemi commerciali sarebbe

SELECT Nome FROM Clienti UNION

SELECT Nome FROM Agenti

Page 121: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

121

Formalizziamo

Page 122: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

122

AttributiAttributi ::= * | Espr [[AS] NuovoNome] {, Espr [[AS] NuovoNome] }

Espr ::= [Ide.]Attributo | Costante | “(“ Espr “)” | [-] Espr [ Espr] | (SUM | COUNT |AVG | MAX | MIN) “(“ [DISTINCT] [Ide.] Attributo “)” | COUNT “(“ * “)”

::= ( + | - | * | / )

Page 123: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

123

Esempio

SELECT AVG(Voto) AS Media Rossi

FROM Esami, Studenti

WHERE Nome = ‘Paolo Rossi’ AND

Esami.Matricola = Studenti.Matricola

Media dei voti di Paolo Rossi

Page 124: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

124

Tabelle

Tabelle ::= Tabella [Ide] {, Tabella [Ide]}

Tabella::= Ide | Tabella OpInsiem Tabella | Tabella Giunzione Tabella

[USING “(“Attributo{,Attributo}“)”|ON Condizione]

Page 125: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

125

Esempi

SELECT Professore

FROM CP,CMV,MNIT

WHERE CP.Corso = CMV.Corso AND CMV.Matricola = NMIT.Matricola AND Nome=‘Paolo Rossi’ AND Voto > 27

Page 126: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

126

Sintassi Completa del SELECT

Select ::= Sottoselect

{(UNION|EXCEPT) Sottoselect}

[ORDER BY Attributo[DESC]

{, Attributo[DESC]} ]

Page 127: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

127

Sottoselect

Sottoselect ::= SELECT [DISTINCT]

(* | Espr[[AS] NewName] {,Espr [[AS] NewName]})

FROM Tabella [Ide]{,Tabella[Ide]}

[WHERE Condizione]

[GROUP BY Attributo {,Attributo}]

[HAVING Condizione]

Page 128: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

128

Condizione

Condizione ::= Predicato |

“(“ Condizione “)” |

NOT Condizione |

Condizione (AND | OR) Condizione

Page 129: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

129

Predicato

Predicato::= Espr [NOT] IN “(“ SottoSelect “)” |

Espr [NOT] IN “(“ Valore {,Valore} “)” |

Espr opc (Espr | “(“ SottoSelect “)” ) |

Espr IS [NOT] NULL |

Espr opc (ANY | ALL) “(“ SottoSelect “)” |

[NOT] EXISTS “(“ SottoSelect “)” |

Espr [NOT] BETWEEN Espr AND Espr |

Espr [NOT] LIKE Stringa

opc ::= | | | | |

Page 130: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

130

Espressioni

Espr ::= [Ide.] Attributo |

Costante |

“(” Espr “)” |

[-] Espr [ opa Espr] |

(SUM | COUNT | AVG | MAX | MIN)

“(” [DISTINCT] [Ide.] Attributo“)” |

COUNT “(” * “)”

opa ::= (+ | - | * | / )

Page 131: SQL Structured Query Language Comandi base di DML Rosalba Giugno giugno@dmi.unict.it giugno/ Rosalba Giugno giugno@dmi.unict.it giugno

131

Tabelle

Tabella ::= Ide |

Tabella opins Tabella |

Tabella giunzione Tabella

[USING “(“ Attributo {, Attributo } “)” | ON Condizione]

giunzione ::= [CROSS|UNION|NATURAL] [LEFT!RIGHT|FULL]JOIN

opins ::= (UNION|INTERSECT|EXCEPT)

[CORRESPONDING [BY”(Attributo {,Attributo} “)”]]