SQL Structured Query Language Comandi base di DML Rosalba Giugno Rosalba Giugno

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

Numeri a 100 Electronic flashcard. 1 uno ritorno.
Dipartimento di Ingegneria Idraulica e Ambientale - Universita di Pavia 1 Caduta non guidata di un corpo rettangolare in un serbatoio Velocità e rotazione.
Presente e futuro della religiosità nel nord est DIFFERENZE TRA GENERAZIONI figli e padri italo de sandre 1ids.
Valutazione d’Istituto A.S. 2008/2009
MONITORAGGIO MATEMATICA V A Alunni 26 Presenti 23 Quesiti 44 Risposte totali 650 Risultato medio 28,3 media 64,2%
1 MeDeC - Centro Demoscopico Metropolitano Provincia di Bologna - per Valutazione su alcuni servizi erogati nel.
1 Pregnana Milanese Assessorato alle Risorse Economiche Bilancio Preventivo P R O P O S T A.
Microsoft SQL Server 2008 Utilizzo. Creazione DataBase CREATE DATABASE CREATE DATABASE Cinema.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Indagine Congiunturale 2011 Confcooperative Emilia Romagna CONFERENZA STAMPA CONFCOOPERATIVE EMILIA ROMAGNA Bologna, 30 Luglio 2013.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
Frontespizio Economia Monetaria Anno Accademico
Associazione Nazionale Medici Cardiologi Ospedalieri
Un DataBase Management System (DBMS) relazionale client/server.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
XXIV Congresso ACOI 2005 Montecatini Terme Maggio 2005
Varianza campionaria Errore standard della varianza campionaria
ELEZIONI REGIONALI 2010 PRIMI RISULTATI E SCENARI 14 aprile 2010.
Canale A. Prof.Ciapetti AA2003/04
Indagine trimestrale sulla industria manifatturiera in provincia di Ravenna - Imprese con oltre 10 addetti - II trimestre e I semestre 2003 Ravenna, 15.
Ufficio Studi UNIONCAMERE TOSCANA 1 Presentazione di Riccardo Perugi Ufficio Studi UNIONCAMERE TOSCANA Firenze, 19 dicembre 2000.
NCI Cancer Mortality Atlas Electronic version of book Dynamic, accessible graphs Interactive maps Downloadable data Cervix uteri cancer mortality, white.
Già primario f.f. U.O. di neurochirurgia
La partita è molto combattuta perché le due squadre tentano di vincere fino all'ultimo minuto. Era l'ultima giornata del campionato e il risultato era.
MP/RU 1 Dicembre 2011 ALLEGATO TECNICO Evoluzioni organizzative: organico a tendere - ricollocazioni - Orari TSC.
SQL1 Structured Query Language Data Definition Language Data Manipulation Language Evoluzione Sequel IBM (1974) Standardizzazione ANSI/ISO: SQL-89, SQL-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%% % Accrescimento della PECORA IN TASMANIA % % dal 1820 ad oggi % % ( MODELLO LOGISTICO ) % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Cos’è un problema?.
Gli italiani e il marketing di relazione: promozioni, direct marketing, digital marketing UNA RICERCA QUANTITATIVA SVOLTA DA ASTRA RICERCHE PER ASSOCOMUNICAZIONE.
SQL :Structured Query Language: SELECT (II)
Ropol09anci INDAGINE SU PATTO DI STABILITA 2009 IN PIEMONTE ANCI PIEMONTE Torino, 29 giugno 2009.
Sequence. CREARE UNA SEQUENCE CREATE SEQUENCE nome [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE]
Gestione dati DML Statement. DML – Data Manipultion Language Unoperazione DML viene eseguita quando: aggiungendo nuove righe ad una tabella modificando.
PRODOTTO CARTESIANO Otteniamo un prodotto cartesiano quando: viene omessa la condizione di join una condizione di join non è valida tutte le righe della.
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Constraints.
QUESTIONARIO ALUNNI A.S.2008/09. MOTIVAZIONE SI A VOLTE NO I miei insegnanti mi spiegano bene 13957% % 1 0 % I miei insegnanti spiegano all'inizio.
SQL: Structured Query Language
Monitoraggio a.s. 2008/2009Analisi dei dati RETE REGIONALE AU.MI.
Luciano giromini – la misura in psicologia, 2009 database e distribuzioni - misure di sintesi - misure di variabilità descrizione dei dati:
CHARGE PUMP Principio di Funzionamento
Settimana: 3-7 marzo Orariolunedimartedi Mercoledi 5 Giovedi 6 Venerdi lezione intro alla fis mod DR lezione intro alla fis mod DR.
Pregare con i Salmi.
Regolarità nella griglia dei numeri
Q UESTIONI ETICHE E BIOETICHE DELLA DIFESA DELLA VITA NELL AGIRE SANITARIO 1 Casa di Cura Villa San Giuseppe Ascoli Piceno 12 e 13 dicembre 2011.
Q UESTIONI ETICHE E BIOETICHE DELLA DIFESA DELLA VITA NELL AGIRE SANITARIO 1 Casa di Cura Villa San Giuseppe Ascoli Piceno 12 e 13 dicembre 2011.
1 Negozi Nuove idee realizzate per. 2 Negozi 3 4.
ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE ORDINE DI CHIAMATA a 1minuto e 2 minuti PRINCIPALI TEMPI DELLA COMPETIZIONE.
ISTITUTO COMPRENSIVO “G. BATTAGLINI” MARTINA FRANCA (TA)
RESTITUZIONE DATI RELATIVI ALLE PROVE
1)Completa la seguente successione: C4, B7, E10, D13, G16,. A. G19 B
24 aprile 2002 Avvisi: Risultati 1 o Esonero: (entro) lunedi 27 disponibili nella pag. WEB, ma anche esposti nella bacheca fuori dal corridoio 2 o dente,
Liceo classico/scientifico “V. Imbriani”
GEOGRAFIA DEI NUMERI Accademia dei Lincei - Roma 18 Ottobre2011
Un trucchetto di Moltiplicazione per il calcolo mentale
Prima rilevazione sullo stato di attuazione della riforma degli ordinamenti nelle istituzioni scolastiche in LOMBARDIA Attuazione del D.L. 59/2003 a.s.
Realizzato da Roberto Savino
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
Esempi risolti mediante immagini (e con excel)
1 Sky 2 Sky 3 Sky L’Universo Aperto La teoria del Big Bang prevede che, se la densità globale dell’universo non raggiunge un valore di Ωo (Omega Zero)
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
NO WASTE Progetto continuità scuola primaria scuola secondaria Salorno a.s. 2013_
Mercato del lavoro e condizione giovanile: la crisi si acuisce
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
REPORT DI CONTABILITA’ ANALITICA ANNO 2012 UNIVERSITA’ POLITECNICA DELLE MARCHE.
Customer satisfaction anno 2013 Ospedale di Circolo Fondazione Macchi Varese Presentazione risultati (Febbraio 2014)
DIRETTIVI UNITARI SPI-CGI – FNP-CISL - UILP-UIL TERRITORIO LODIGIANO Lunedì 23 marzo 2015 dalle ore 9,00 alle ore 13,00 Presso la sala Conferenze Confartigianato.
1 Ministero dell’Istruzione, dell’Università e della Ricerca Dipartimento per la Programmazione e la Gestione delle risorse umane, finanziarie e strumentali.
Indagine Congiunturale 2011 Confcooperative Emilia Romagna CONFERENZA STAMPA CONFCOOPERATIVE EMILIA ROMAGNA Bologna, 30 Luglio 2013.
Transcript della presentazione:

SQL Structured Query Language Comandi base di DML Rosalba Giugno Rosalba 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.

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

4 Direct ed Embedded SQL Direct SQL : per luso interattivo. Embedded SQL : per luso allinterno 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.

5 Capacità del comando SQL SELECT Selezione Proiezione Tabella 1 Tabella 2 Tabella 1 Join

6 SELECT SELECT [DISTINCT] Attributi FROM Tabelle [WHERE Condizione]

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

8 QUERY SU UNA TABELLA

9 Esempi SELECT Indirizzo, Telefono FROM Studenti WHERE Nome=Teo Verdi

10 QUERY SU DUE TABELLE

11 Esempi SELECT Corso FROM Esami,Studenti WHERE Esami.Matricola = Studenti.Matricola AND Nome=Mario Rossi;

12 QUERY SU PIU TABELLE

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

14 Scrittura 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.

15 Selezionare tutte le colonne DEPTNO DNAME LOC ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> SELECT * 2 FROM dept;

16 Selezionare una particolare colonna DEPTNO LOC NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON SQL> SELECT deptno, loc 2 FROM dept; DEPTNO DNAME LOC ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON

17 Espressioni Aritmetiche Creare espressioni attraverso luso di operatori aritmetici. Operatore + - * / Descrizione Somma Sottrazione Moltiplicazione Divisione

18 Uso degli operatori Aritmetici SQL> SELECT ename, sal, sal FROMemp; ENAME SAL exp KING BLAKE CLARK JONES MARTIN ALLEN rows selected.

19 Precedenza Operatori SQL> SELECT ename, sal, 12*sal FROM emp; ENAME SAL exp KING BLAKE CLARK JONES MARTIN ALLEN rows selected.

20 Uso delle parentesi SQL> SELECT ename, sal, 12*(sal+100) 2 FROM emp; ENAME SAL exp KING BLAKE CLARK JONES MARTIN rows selected.

21 Alias delle colonne Rinominare il nome di una colonna Utile con dei calcoli Deve seguire immediatamente il nome di una colonna (SENZA VIRGOLA); può essere usata opzionalmente la parola chiave AS tra il nome della colonna e lalias. Richiede doppio apice se lalias ha degli spazi Rinominare il nome di una colonna Utile con dei calcoli Deve seguire immediatamente il nome di una colonna (SENZA VIRGOLA); può essere usata opzionalmente la parola chiave AS tra il nome della colonna e lalias. Richiede doppio apice se lalias ha degli spazi

22 Uso dellAlias 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

23 Alias o Correlation Names SELECT Professore FROM CP p, CMV e WHERE p.Corso = e.Corso AND Matricola = Per evitare ambiguita, quando si usano piu tabelle con lo stesso nome-attributo, si mette il punto.

24 Alias o Correlation Names SELECT c1.Matricola, c2.Matricola FROM CMV c1, CMV c2 WHERE c1.voto < c2.voto

25 Righe duplicate Le righe duplicate sono restituite per default SQL> SELECT deptno 2 FROM emp; SQL> SELECT deptno 2 FROM emp; DEPTNO rows selected.

26 Eliminazione delle righe duplicate E consentito dalluso della parola chiave DISTINCT nella clausola SELECT SQL> SELECT DISTINCT deptno 2 FROM emp; DEPTNO

Restrizioni ed ordinamento Dati

28 Obiettivi Al completamento della lezione, dovreste essere in grado di: Limitare il numero di righe ottenute da una query Riordinare le righe ottenute da una query Al completamento della lezione, dovreste essere in grado di: Limitare il numero di righe ottenute da una query Riordinare le righe ottenute da una query

29 Esempio "…selezionare tutti gli impiegati del dipartimeto 10" IMPIEGATI EMPNO ENAME JOB... DEPTNO 7839KINGPRESIDENT BLAKEMANAGER CLARKMANAGER JONESMANAGER IMPIEGATI EMPNO ENAME JOB... DEPTNO 7839KINGPRESIDENT CLARKMANAGER MILLERCLERK 10

30 Limitare le righe selezionate Limitare le righe tramite luso della clausola WHERE. La clausola WHERE segue la clausola FROM. Limitare le righe tramite luso della clausola WHERE. La clausola WHERE segue la clausola FROM. SELECT[DISTINCT] {*| colonna [alias],...} FROM tabella [WHEREcondizione(i)];

31 Uso della clausola WHERE SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK'; ENAME JOB DEPTNO JAMES CLERK 30 SMITH CLERK 20 ADAMS CLERK 20 MILLER CLERK 10

32 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> SELECTename, job, deptno 2 FROM emp 3 WHEREename = 'JAMES'; SQL> SELECTename, job, deptno 2 FROM emp 3 WHEREename = 'JAMES';

33 CONDIZIONE Condizione : := Predicato | (Condizione) | NOT Condizione | Condizione (AND | OR) Condizione Il risultato puo essere TRUE(T),FALSE(F) o UNKOWN(U).

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.

35 Operatori di confronto Operatore = > >= < <= <> Significato Uguale a più grande di maggiore o uguale di minore di minore o uguale a diverso

36 Uso degli Operatori di Confronto SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm; ENAME SAL COMM MARTIN

37 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

38 Uso delloperatore BETWEEN ENAME SAL MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300 SQL> SELECTename, sal 2 FROM emp 3 WHEREsal BETWEEN 1000 AND 1500; Limite inferiore Limite superiore BETWEEN consente la selezione di righe con attributi in un particolare range.

39 Predicato Between AND Espr1 [NOT] BETWEEN Espr2 AND Espr3. Equivale a [NOT] Espr2 Espr1 AND Espr1 Espr3

40 Uso delloperatore IN E usato per selezionare righe che hanno un attributo che assume valori contenuti in una lista. SQL> SELECTempno, ename, sal, mgr 2 FROM emp 3 WHEREmgr IN (7902, 7566, 7788); EMPNO ENAME SAL MGR FORD SMITH SCOTT ADAMS

41 Uso delloperatore 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> SELECTename 2 FROM emp 3 WHEREename LIKE 'S%';

42 Uso delloperatore LIKE Il pattern-matching di caratteri può essere combinato. Iidentificatore ESCAPE (\) deve essere usato per cercare "%" o "_". Il pattern-matching di caratteri può essere combinato. Iidentificatore ESCAPE (\) deve essere usato per cercare "%" o "_". SQL> SELECTename 2 FROMemp 3 WHEREename LIKE '_A%'; ENAME MARTIN JAMES WARD

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 lattributo e NULL

44 Esempio SELECT Nome FROM Studenti WHERE Indirizzo LIKE Via Etnea % Fornisce tutti gli studenti che abitano in Via Etnea

45 Predicati Espr IS [NOT] NULL esempio: SELECT Nome FROM Studenti WHERE Telefono IS NOT NULL

46 Operatori 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

47 LOGICA A 3 VALORI U=Unknown;

48 Uso delloperatore AND AND richiede entrambe le condizioni TRUE. SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>= AND job='CLERK'; EMPNO ENAME JOB SAL ADAMS CLERK MILLER CLERK 1300

49 Uso delloperatore OR OR richiede almeno una condizione TRUE. SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>= OR job='CLERK'; EMPNO ENAME JOB SAL KING PRESIDENT BLAKE MANAGER CLARK MANAGER JONES MANAGER MARTIN SALESMAN JAMES CLERK rows selected.

50 Uso delloperatore NOT SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST'); ENAME JOB KING PRESIDENT MARTIN SALESMAN ALLEN SALESMAN TURNER SALESMAN WARD SALESMAN

51 Regole di precedenza Loverride delle regole di precedenza è ottenuto con luso delle parentesi. Ordine di val. Operatore 1Tutti gli operatori di confronto 2NOT 3AND 4OR

52 Regole di precedenza ENAME JOB SAL KING PRESIDENT 5000 MARTIN SALESMAN 1250 ALLEN SALESMAN 1600 TURNER SALESMAN 1500 WARD SALESMAN 1250 ENAME JOB SAL KING PRESIDENT 5000 MARTIN SALESMAN 1250 ALLEN SALESMAN 1600 TURNER SALESMAN 1500 WARD SALESMAN 1250 SQL> SELECT ename, job, sal 2 FROM emp 3 WHERE job='SALESMAN' 4 OR job='PRESIDENT' 5 AND sal>1500;

53 Regole di precedenza ENAME JOB SAL KING PRESIDENT 5000 ALLEN SALESMAN 1600 ENAME JOB SAL KING PRESIDENT 5000 ALLEN SALESMAN 1600 Luso 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;

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

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

Visualizzare Dati da più Tabelle

57 Obiettivi 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 luso 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 luso delle outer join Fare la Join di una tabella con se stessa

58 EMPNO DEPTNO LOC NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO rows selected. EMPNO DEPTNO LOC NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO rows selected. Ottenere dati da più Tabelle IMPIEGATI DIPARTIMENTI EMPNOENAME...DEPTNO KING BLAKE MILLER DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON

59 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. SELECTtabella1.colonna, tabella2.colonna FROMtabella, tabella2 WHEREtabella1.colonna1 = tabella2.colonna2; SELECTtabella1.colonna, tabella2.colonna FROMtabella, tabella2 WHEREtabella1.colonna1 = tabella2.colonna2;

60 Prodotto Cartesiano Il prodotto cartesiano e ottenuto quando: Una condizione join e omessa Una condizione join e non valida Tutte le righe della prima tabella ammettono join con tutte le righe della seconda Per evitare il prodotto cartesiano, includere sempre condizioni join valida nella clausola WHERE. Il prodotto cartesiano e ottenuto quando: Una condizione join e omessa Una condizione join e non valida Tutte le righe della prima tabella ammettono join con tutte le righe della seconda Per evitare il prodotto cartesiano, includere sempre condizioni join valida nella clausola WHERE.

61 Generare un Prodotto Cartesiano ENAME DNAME KINGACCOUNTING BLAKE ACCOUNTING... KINGRESEARCH BLAKE RESEARCH rows selected. ENAME DNAME KINGACCOUNTING BLAKE ACCOUNTING... KINGRESEARCH BLAKE RESEARCH rows selected. IMPIEGATI (14 righe) DIPARTIMENTI (4 righe) EMPNOENAME...DEPTNO KING BLAKE MILLER EMPNOENAME...DEPTNO KING BLAKE MILLER DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTON DEPTNO DNAME LOC ACCOUNTINGNEW YORK 20RESEARCHDALLAS 30SALESCHICAGO 40OPERATIONSBOSTONProdotto Cartesiano: 14*4=56 rows

62 Cosa e una Equijoin? IMPIEGATI DIPARTIMENTI EMPNO ENAME DEPTNO KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH rows selected. DEPTNO DNAME LOC ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTINGNEW YORK 20 RESEARCHDALLAS 30 SALES CHICAGO 20 RESEARCHDALLAS rows selected. Chiave Straniera Chiave Primaria Chiave Primaria

63 Estrarre Record con Equijoin SQL> SELECT emp.empno, emp.ename, emp.deptno, 2dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; EMPNO ENAME DEPTNO DEPTNO LOC KING NEW YORK 7698 BLAKE CHICAGO 7782 CLARK NEW YORK 7566 JONES DALLAS rows selected.

64 Condizioni di Ricerca addizioli Uso delloperatore AND EMPDEPT EMPNO ENAME DEPTNO KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES WARD FORD SMITH rows selected. DEPTNO DNAME LOC ACCOUNTINGNEW YORK 30SALES CHICAGO 10 ACCOUNTINGNEW YORK 20 RESEARCHDALLAS 30 SALES CHICAGO 20 RESEARCHDALLAS rows selected.

65 Condizioni di Ricerca Uso delloperatore AND SQL> SELECT emp.empno, emp.ename, emp.deptno, 2dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno AND ENAME=KING;

66 Join di piu di due Tabelle NAMECUSTID JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS rows selected. NAMECUSTID JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS rows selected. CLIENTI CUSTID ORDID rows selected. CUSTID ORDID rows selected.ORDINI ORDID ITEMID rows selected. ORDID ITEMID rows selected.PROD.

67 Join di piu di due Tabelle SQL> SELECT * 2 FROM clienti, ordini, prod 3 WHERE clineti.custid=ordini.custid AND prod.ordid=prod.ordid;

68 Predicati Di Appartenenza e Quantificatori

69 CONDIZIONE Condizione : := Predicato | (Condizione) | NOT Condizione | Condizione (AND | OR) Condizione Il risultato puo essere TRUE(T),FALSE(F) o UNKOWN(U).

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 )

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)

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 ce un ottimizzatore che velocizza le join rispetto alle SottoSelect

73 Predicati Esistenziali [NOT] EXISTS ( SottoSelect ) E Vero se la SottoSelect non ritorna linsieme 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

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)

75 Usando lOttimizzatore di Join SELECT e.Matricola FROM Esami e, Corsi c WHERE c.Corso = e.Corso AND c.Professore=Ferro E piu efficiente.

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)

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

78 Ricordiamo lesempio Agenti(CodiceAgente,Nome,Zona Supervisore,Commissione) Clienti(CodiceCliente,Nome,Citta,Scont o) Ordini(CodiceOrdine,CodiceCliente,Cod iceAgente,Articolo,Data,Ammontare)

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. z y y(n,x,z,p,d,a) sse z y y(n,x,z,p,d,a)

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) )

Aggregazione dati

82 Obiettivi Al completamento della lezione, dovreste essere in grado di: Identificare le funzioni di raggruppamento Descriverne luso Raggruppare dati usando GROUP BY Includere ed escludere righe tramite luso di HAVING Al completamento della lezione, dovreste essere in grado di: Identificare le funzioni di raggruppamento Descriverne luso Raggruppare dati usando GROUP BY Includere ed escludere righe tramite luso di HAVING

83 Cosa sono? Operano su insiemi di righe per dare un risultato per gruppo. IMPIEGATI SalarioMassimo DEPTNO SAL MAX(SAL)

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

85 Esempi SELECT MIN(Voto),MAX(Voto),AVG(Voto) FROM Esami WHERE Matricola = SELECT COUNT(*) FROM Esami WHERE Corso = Database 1

86 Quali sono AVG COUNT MAX MIN STDDEV SUM VARIANCE AVG COUNT MAX MIN STDDEV SUM VARIANCE

87 Uso SELECT[column,] group_function(column) FROMtable [WHEREcondition] [GROUP BYcolumn] [ORDER BYcolumn];

88 Uso di AVG e SUM AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) Possono essere usati su dati numerici. SQL> SELECTAVG(sal), MAX(sal), 2MIN(sal), SUM(sal) 3FROMemp 4WHEREjob LIKE 'SALES%';

89 Uso di MIN e MAX Possono essere usati su qualsiasi tipo. SQL> SELECTMIN(hiredate), MAX(hiredate) 2 FROMemp; MIN(HIRED MAX(HIRED DEC JAN-83

90 Uso di COUNT COUNT(*) SQL> SELECTCOUNT(*) 2 FROMemp 3 WHEREdeptno = 30; COUNT(*) ritorna il numero di righe di una tabella.

91 Creare gruppi di dati IMPIEGATI salariomedio in IMPIEGATI per ogni dipartimento DEPTNO SAL DEPTNO AVG(SAL)

92 Creare gruppi tramite: GROUP BY SELECTcolumn, group_function(column) FROMtable [WHEREcondition] [GROUP BYgroup_by_expression] [ORDER BYcolumn]; Divide le righe di una tabella in gruppi piu piccoli.

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

94 Uso di 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)

95 Uso GROUP BY La colonna di GROUP BY non deve essere necessariamente nella SELECT. SQL> SELECT AVG(sal) 2 FROM emp 3 GROUP BY deptno; AVG(SAL)

96 Raggruppare piu di una colonna IMPIEGATI sommare I salari in IMPIEGATI per ongi lavoro, Ragruppati per dipartimeno DEPTNO JOB SAL MANAGER PRESIDENT CLERK CLERK CLERK ANALYST MANAGER SALESMAN MANAGER SALESMAN CLERK SALESMAN SALESMAN 1250 JOB SUM(SAL) CLERK 1300 MANAGER 2450 PRESIDENT 5000 ANALYST 6000 CLERK 1900 MANAGER 2975 CLERK 950 MANAGER 2850 SALESMAN 5600 DEPTNO

97 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) CLERK MANAGER PRESIDENT ANALYST CLERK rows selected.

98 Query illegali con funzioni di raggruppamento Ogni colonna o espressione della SELECT che non e argomento di funzioni di deve essere nella GROUP BY. SQL> SELECTdeptno, COUNT(ename) 2 FROMemp; SQL> SELECTdeptno, COUNT(ename) 2 FROMemp; 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

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) > GROUP BY deptno; SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 WHERE AVG(sal) > 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.

100 Escludere gruppi di ris. salario massimo per dipartmento maggiore di $2900 IMPIEGATI DEPTNO SAL DEPTNO MAX(SAL)

101 Clausola HAVING Uso di HAVING per restringere gruppi Le righe sono raggruppate. La funzione di raggruppamento e applicata. Uso di HAVING per restringere gruppi Le righe sono raggruppate. La funzione di raggruppamento e applicata. SELECTcolumn, group_function FROMtable [WHEREcondition] [GROUP BYgroup_by_expression] [HAVINGgroup_condition] [ORDER BYcolumn];

102 Uso di HAVING SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900; DEPTNO MAX(SAL)

103 Uso 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 6000 MANAGER HAVING SUM(sal)>5000

104 Funzioni di raggruppamento annidate SQL> SELECT max(avg(sal)) 2 FROM emp 3 GROUP BY deptno; MAX(AVG(SAL))

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

106 Sommario SELECTcolumn, group_function(column) FROMtable [WHEREcondition] [GROUP BYgroup_by_expression] [HAVINGgroup_condition] [ORDER BYcolumn]; Ordine di valutazione delle clausole: WHERE GROUP BY HAVING Ordine di valutazione delle clausole: WHERE GROUP BY HAVING

107 Visualizzare Dati da piu tabelle (||) Diversi tipi di Joins Operatori Insiemistici

108 Tabelle Tabelle ::= Tabella [Ide] {, Tabella [Ide]} Tabella::= Ide | Tabella OpInsiem Tabella | Tabella Giunzione Tabella [USING (Attributo{,Attributo})|ON Condizione]

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

110 Ancora su Join ed Operatori Insiemistici Cross Join e il prodotto cartesiano Union Join e lunione esterna cioe si estendono le due tabelle con le colonne dellaltra con valori nulli e si fa lunione delle due stesse tabelle.

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

112 Esempi Natural Join SELECT Studenti.Nome,Esami.Corso,Esami.Voto FROM Esami NATURAL JOIN Studenti Nome,Corso e Voto degli esami

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

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

115 Altro Esempio Agenti(CodiceAgente,Nome,Zona Supervisore,Commissione) Clienti(CodiceCliente,Nome,Citta,Sconto) Ordini(CodiceOrdine,CodiceCliente,Codic eAgente,Articolo,Data,Ammontare)

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

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)

118 Le operazioni Insiemistici A UNION B A INTERSECT B A MINUS B

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 loperatore insiemistico. Se ce anche BY si specificano su quali comuni attributi proiettare

120 UNIONE SELECT * FROM Clienti UNION CORRESPONDING Agenti Fornisce tutti i nomi dei clienti e degli agenti. In effetti nei sistemi commerciali sarebbe SELECT Nome FROM Clienti UNION SELECT Nome FROM Agenti

121 Formalizziamo

122 Attributi Attributi ::= * | Espr [[AS] NuovoNome] {, Espr [[AS] NuovoNome] } Espr ::= [Ide.]Attributo | Costante | ( Espr ) | [-] Espr [ Espr] | (SUM | COUNT |AVG | MAX | MIN) ( [DISTINCT] [Ide.] Attributo ) | COUNT ( * ) ::= ( + | - | * | / )

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

124 Tabelle Tabelle ::= Tabella [Ide] {, Tabella [Ide]} Tabella::= Ide | Tabella OpInsiem Tabella | Tabella Giunzione Tabella [USING (Attributo{,Attributo})|ON Condizione]

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

126 Sintassi Completa del SELECT Select ::= Sottoselect {(UNION|EXCEPT) Sottoselect} [ORDER BY Attributo[DESC] {, Attributo[DESC]} ]

127 Sottoselect Sottoselect ::= SELECT [DISTINCT] (* | Espr[[AS] NewName] {,Espr [[AS] NewName]}) FROM Tabella [Ide]{,Tabella[Ide]} [WHERE Condizione] [GROUP BY Attributo {,Attributo}] [HAVING Condizione]

128 Condizione Condizione ::= Predicato | ( Condizione ) | NOT Condizione | Condizione (AND | OR) Condizione

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 ::= | | | | |

130 Espressioni Espr ::= [Ide.] Attributo | Costante | ( Espr ) | [-] Espr [ opa Espr] | (SUM | COUNT | AVG | MAX | MIN) ( [DISTINCT] [Ide.] Attributo) | COUNT ( * ) opa ::= (+ | - | * | / )

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} )]]