Interrogazioni complesse. SQL avanzato 1
|
|
|
- Carmela Moroni
- 7 anni fa
- Просмотров:
Транскрипт
1 Interrogazioni complesse SQL avanzato
2 Classificazione delle interrogazioni complesse Query con ordinamento Query con aggregazione Query con raggruppamento Query binarie Query annidate SQL avanzato 2
3 Esempio : gestione ordini cliente COD-CLI NOME INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO dettaglio COD-ORD COD-PROD QTA prodotto COD-PROD NOME PREZZO SQL avanzato
4 Istanza di ordine ordine COD-ORD COD-CLI DATA IMPORTO SQL avanzato 4
5 Query con ordinamento SELECT * FROM ORDINE WHERE IMPORTO > 00 ORDER BY DATA COD-ORD COD-CLI DATA IMPORTO SQL avanzato 5
6 Order by SELECT * FROM ORDINE WHERE IMPORTO > 00 ORDER BY COD-CLI COD-ORD COD-CLI DATA IMPORTO SQL avanzato 6
7 Order by Nel caso si voglia ordinare sui valori di una colonna risultato di una espressione si usa una notazione posizionale SELECT COD-CLI, IMPORTO/.000 FROM ORDINE WHERE IMPORTO > ORDER BY 2 (ordina sulla SECONDA colonna) SQL avanzato 7
8 Order by... ORDER BY COD-CLI ASC, DATA DESC COD-ORD COD-CLI DATA IMPORTO SQL avanzato 8
9 Query aggregate Utilizzano le funzioni aggregate: SUM sommatoria AVG media MIN minimo MAX massimo COUNT cardinalità (I NULL sono esclusi) SQL avanzato 9
10 Query con massimo Selezionare l importo massimo degli ordini. SELECT MAX(IMPORTO) AS MAX-IMP FROM ORDINE MAX-IMP SQL avanzato 0
11 Query con sommatoria Selezionare la somma degli importi degli ordini relativi al cliente numero. SELECT SUM(IMPORTO) AS SOMMA-IMP FROM ORDINE WHERE COD-CLIENTE = SOMMA-IMP.500 SQL avanzato
12 Query con raggruppamento si aggiungono le clausole GROUP-BY (raggruppamento) HAVING (selezione dei gruppi) SELECT.. FROM.. WHERE.. GROUP BY.. HAVING.. SQL avanzato 2
13 Query con raggruppamento Selezionare la somma degli importi degli ordini successivi al per quei clienti che hanno emesso almeno 2 ordini. SELECT COD-CLI, SUM (IMPORTO) FROM ORDINE WHERE DATA > ' ' GROUP BY COD-CLI HAVING COUNT (IMPORTO) >= 2 SQL avanzato
14 Passo : Valutazione WHERE COD-ORD COD-CLI DATA IMPORTO ( WHERE DATA > ' ) SQL avanzato 4
15 Passo 2 : Raggruppamento si valuta la clausola GROUP-BY COD-ORD COD-CLI 4 DATA IMPORTO (GROUP BY COD-CLI) SQL avanzato 5
16 Passo : Calcolo degli aggregati per ciascun gruppo si calcolano SUM (IMPORTO) e COUNT (IMPORTO) COD-CLI 4 SUM (IMPORTO) COUNT (IMPORTO) 2 2 SQL avanzato 6
17 Passo 4 : Selezione dei gruppi si valuta il predicato COUNT (IMPORTO) >=2 COD-CLI 4 SUM (IMPORTO) COUNT (IMPORTO) 2 2 SQL avanzato 7
18 Passo 5 : Produzione del risultato COD-CLI SUM (IMPORTO) SQL avanzato 8
19 Doppio raggruppamento Selezionare la somma delle quantità dei dettagli degli ordini emessi da ciascun cliente per ciascun prodotto, purché la somma superi 50. SELECT COD-CLI, COD-PROD, SUM(QTA) FROM ORDINE AS O, DETTAGLIO AS D WHERE O.COD-ORD = D.COD-ORD GROUP BY COD-CLI, COD-PROD HAVING SUM(QTA) > 50 SQL avanzato 9
20 Situazione dopo il join e il raggruppamento ordine dettaglio COD-CLI ORDINE. COD-ORD DETTAGLIO. COD-ORD COD-PROD QTA gruppo, gruppo, gruppo 2, gruppo, SQL avanzato 20
21 Estrazione del risultato si valuta la funzione aggregata SUM(QTA) e il predicato HAVING COD-CLI COD-PROD SUM(QTA) SQL avanzato 2
22 Query con raggruppamento e ordinamento E possibile ordinare il risultato anche delle query con raggruppamento SELECT.. FROM.. [ WHERE.. ] GROUP BY.. [ HAVING.. ] ORDER BY. SQL avanzato 22
23 Raggruppamento e ordinamento Selezionare la somma degli importi degli ordini successivi al 0/6/97 per quei clienti che hanno emesso almeno 2 ordini dopo quella data, in ordine di cliente. SELECT COD-CLI, SUM (IMPORTO) FROM ORDINE WHERE DATA > ' ' GROUP BY COD-CLI HAVING COUNT (IMPORTO) >= 2 ORDER BY COD-CLI SQL avanzato 2
24 ESERCIZI SUL GROUP BY SELECT SUM(NUM) FROM SPEDIZIONI GROUP BY ART-NO OPPURE 2 SELECT SUM(NUM) FROM SPEDIZIONI GROUP BY ART-NO, SPED-NO SQL avanzato 24
25 ESERCIZI SUL GROUP BY SU: ART-NO SPED-NO NUM (SPEDIZIONI) SQL avanzato 25
26 ESERCIZI SUL GROUP BY.GROUP BY ART-NO ART-NO SPED-NO NUM 2,2,,4 00,25,75,25 2 2,4,4 00,00,75.GROUP BY ART-NO, SPED-NO ART-NO SPED-NO NUM 2 00, ,75 SQL avanzato 26
27 ESERCIZI SUL GROUP BY SELECT ARTICOLO FROM VENDITE GROUP BY ARTICOLO HAVING COUNT(DISTINCT DATA) > SU ARTICOLO DATA NUM PENNA MATITA GOMMA MATITA PENNA SQL avanzato 27
28 ESERCIZI SUL GROUP BY GROUP BY ARTICOLO SU ARTICOLO DATA PENNA , MATITA , GOMMA HAVING COUNT(DISTINCT DATA) > ARTICOLO PENNA SQL avanzato 28
29 Query binarie Costruite concatenando due query SQL tramite operatori insiemistici: UNION unione INTERSECT intersezione EXCEPT (MINUS) differenza (si eliminano i duplicati) SQL avanzato 29
30 Unione Selezionare i codici degli ordini i cui importi superano oppure presenti in qualche dettaglio con quantità superiore a 000. SELECT COD-ORD FROM ORDINE WHERE IMPORTO > UNION SELECT COD-ORD FROM DETTAGLIO WHERE QTA > 000 SQL avanzato 0
31 Differenza Selezionare i codici degli ordini i cui importi superano ma non presenti in nessun dettaglio con quantità superiore a 000. SELECT COD-ORD FROM ORDINE WHERE IMPORTO > EXCEPT SELECT COD-ORD FROM DETTAGLIO WHERE QTA > 000 SQL avanzato
32 Intersezione Selezionare i codici degli ordini i cui importi superano e che sono presenti in qualche dettaglio con quantità superiore a 000. SELECT COD-ORD FROM ORDINE WHERE IMPORTO > INTERSECT SELECT COD-ORD FROM DETTAGLIO WHERE QTA > 000 SQL avanzato 2
33 Query annidate Costruite concatenando due query SQL nel predicato where: [NOT] IN [DOES NOT] EXISTS ANY, ALL appartenenza esistenza quantificatori comparatore: =,!=, <, <=, >, >= SQL avanzato
34 Query annidate (nested) Selezionare nome e indirizzo dei clienti che hanno emesso qualche ordine di importo superiore a SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI IN ( SELECT COD-CLI FROM ORDINE WHERE IMPORTO > ) SQL avanzato 4
35 Equivalenza fra IN e query semplici SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI IN ( SELECT COD-CLI FROM ORDINE WHERE IMPORTO > ) equivale (a meno di duplicati) a: SELECT NOME, INDIRIZZO FROM CLIENTE JOIN ORDINE ON CLIENTE.COD-CLI = ORDINE.COD-CLI WHERE IMPORTO > SQL avanzato 5
36 Nested Query complesse (fino a 8 livelli) Selezionare nome e indirizzo dei clienti che hanno emesso qualche ordine i cui dettagli comprendono il prodotto Pneumatico. SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI IN ( SELECT COD-CLI FROM ORDINE WHERE COD-ORD IN ( SELECT COD-ORD FROM DETTAGLIO WHERE COD-PROD IN ( SELECT COD-PROD FROM PRODOTTO WHERE NOME = 'Pneumatico' ) ) ) SQL avanzato 6
37 La query equivalente equivale (a meno di duplicati) a: SELECT NOME, INDIRIZZO FROM CLIENTE AS C, ORDINE AS O, DETTAGLIO AS D, PRODOTTO AS P WHERE C.COD-CLI = O.COD-CLI AND O.COD-ORD = D.COD-ORD AND D.COD-PROD = P.COD-PROD AND NOME= 'Pneumatico' SQL avanzato 7
38 Nested query correlate (con variabile) SELECT NOME FROM IMPIEGATI AS X, WHERE SALARIO> ( SELECT SALARIO FROM IMPIEGATI WHERE MATRICOLA= X.MANAGER ) sulla relazione IMPIEGATI (matricola, nome, manager ) equivale al JOIN SELECT X.NOME FROM IMPIEGATI AS X, IMPIEGATI AS Y WHERE X.SALARIO > Y.SALARIO AND Y.MATRICOLA= X.MANAGER SQL avanzato 8
39 Uso di IN nelle modifiche aumentare di 50 l importo di tutti gli ordini che comprendono il prodotto 456 UPDATE ORDINE SET IMPORTO = IMPORTO + 50 WHERE COD-ORD IN ( SELECT COD-ORD FROM DETTAGLIO WHERE COD-PROD = '456 ) SQL avanzato 9
40 Query con NOT IN Selezionare nome e indirizzo dei clienti che non hanno emesso nessun ordine di importo superiore a SELECT NOME, INDIRIZZO FROM CLIENTE WHERE COD-CLI NOT IN ( SELECT COD-CLI FROM ORDINE WHERE IMPORTO > ) SQL avanzato 40
41 La query con ANY e ALL SELECT COD-ORD FROM ORDINE WHERE IMPORTO > ANY ( SELECT IMPORTO FROM ORDINE ) SELECT COD-ORD FROM ORDINE WHERE IMPORTO >= ALL ( SELECT IMPORTO FROM ORDINE ) COD-ORD 2 IMPORTO ANY F V V ALL F V F SQL avanzato 4
42 Esercizi Riprendere le basi di dati per la gestione del personale e degli ordini ed esprimere in SQL le interrogazioni : - quale impiegati lavorano in un progetto in cui non lavora il loro manager? - quanti ordini ha emesso Paolo? - quante candele sono state ordinate il 5/7/97? - calcolare per ciascun cliente la somma degli importi di tutti gli ordini - estrarre l'ordine di importo più alto SQL avanzato 42
43 Esercizi (lezione precedente) in quali tipi di progetti lavora Giovanni? SELECT TIPO FROM PROGETTO WHERE NUM-PROG IN ( SELECT NUM-PROG FROM ASSEGNAMENTO WHERE MATR IN ( SELECT MATR FROM IMPIEGATO WHERE NOME='Giovanni ) ) chi è il manager di Piero? SELECT NOME FROM IMPIEGATO WHERE MATR IN ( SELECT MATR-MGR FROM IMPIEGATO WHERE NOME='Piero ) SQL avanzato 4
44 Query annidate (nested) Selezionare nome e indirizzo dei clienti che hanno emesso qualche [o non hanno emesso nessun] ordine di importo superiore a SELECT NOME, INDIRIZZO FROM CLIENTE C WHERE [NOT] EXISTS ( SELECT * FROM ORDINE WHERE IMPORTO > AND COD_CLI=C.COD_CLI ) SQL avanzato 44
45 Query universali Esempio: Trovare gli ordini che contengono tutti i prodotti In Algebra relazionale queste interrogazioni si possono esprimere tramite l operatore di divisione Ma in SQL?? Non c è un quantificatore universale (per ogni) ma solo un quantificatore esistenziale (EXISTS) SQL avanzato 45
46 Query universali In generale va ribaltata la logica della query, per esprimere la quantificazione universale per mezzo dell operatore EXISTS e una doppia negazione Anche in logica solo uno dei due quantificatori è in realtà necessario e l altro può essere espresso per mezzo del primo: x P(x) x P(x) Per ogni x vale la proprietà P equivale a dire: Non esiste alcun x per cui non vale la proprietà P SQL avanzato 46
47 Query universali Selezionare gli ordini che contengono tutti i prodotti (= Selezionare gli ordini per cui non esiste alcun prodotto che non sia compreso nelle loro righe di dettaglio) SELECT * FROM ORDINE ORD WHERE NOT EXISTS (SELECT * FROM PRODOTTO WHERE COD-PROD NOT IN (SELECT COD-PROD FROM DETTAGLIO DET WHERE DET.COD-ORD=ORD.COD-ORD ) ) SQL avanzato 47
48 Query universali Selezionare gli ordini che contengono tutti i prodotti (= Selezionare gli ordini per cui non esiste alcun prodotto per cui non esiste alcuna loro riga di dettaglio che lo contiene) SELECT * FROM ORDINE ORD WHERE NOT EXISTS (SELECT * FROM PRODOTTO PRO WHERE NOT EXISTS (SELECT * FROM DETTAGLIO DET WHERE DET.COD-ORD=ORD.COD-ORD AND DET.COD-PROD=PRO.COD-PROD ) ) SQL avanzato 48
Interrogazioni complesse. SQL avanzato 1
Interrogazioni complesse SQL avanzato Classificazione delle interrogazioni complesse Query con ordinamento Query con aggregazione Query con raggruppamento Query binarie Query annidate SQL avanzato 2 Esempio
Linguaggio SQL seconda parte
Linguaggio SQL seconda parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright Istituto Italiano Edizioni Atlas Le condizioni di ricerca 2 Le condizioni di ricerca Usate nelle
Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento
Operatori aggregati In algebra relazionale le espressioni vengono valutate sulle singole tuple in successione. Talvolta però possono essere necessarie informazioni derivabili dall esame di tutte le tuple
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1996-2002 : SQL Operatori aggregati Nelle espressioni della target list possiamo avere anche espressioni che calcolano valori a partire da insiemi
Operatori aggregati: COUNT
Operatori aggregati: COUNT Il numero di figli di select count(*) as NumFigliDi where Padre = '' Paternità Padre Sergio Figlio Olga Filippo Andrea Aldo l operatore aggregato (count) viene applicato al risultato
SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola
SQL SELECT s.nome, e.data FROM Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola SELECT s.nome As Nome, 2002 - s.annonascita As Eta, 0 As NumeroEsami FROM Studenti
QL (Query Language) Alice Pavarani
QL (Query Language) Alice Pavarani QL Query Language Linguaggio di interrogazione dei dati, permette di: Interrogare la base di dati per estrarre informazioni Elaborare i dati Il risultato di un interrogazione
Il linguaggio SQL: raggruppamenti
Il linguaggio SQL: raggruppamenti Sistemi Informativi T Versione elettronica: 04.3.SQL.gruppi.pdf Informazioni di sintesi Quanto sinora visto permette di estrarre dal DB informazioni che si riferiscono
SQL: le funzioni di aggregazione
SQL: le funzioni di aggregazione funzioni predefinite che agiscono sui valori contenuti in insiemi di righe della tabella: Conteggi Somme Medie Massimi, minimi Funzione Count La funzione COUNT conta il
Structured Query Language
IL LINGUAGGIO SQL Structured Query Language Contiene sia il DDL sia il DML, quindi consente di: Definire e creare il database Effettuare l inserimento, la cancellazione, l aggiornamento dei record di un
Esempi SQL con Access. Orazio Battaglia
con Access Orazio Battaglia Consideriamo la base di dati in figura. 2 Interrogazione 1: Selezioniamo tutti gli impiegati, vogliamo Cognome, Nome e Posizione SELECT Impiegati.Cognome, Impiegati.Nome, Impiegati.Posizione
Basi di Dati: Corso di laboratorio
Basi di Dati: Corso di laboratorio Lezione 4 Raffaella Gentilini 1 / 46 Sommario 1 Join di Tabelle Join Naturale Theta Join Join Esterno 2 3 Funzioni d aggregazione La Clausola GROUP BY La Clausola HAVING
Data Management Software. Il linguaggio SQL. Query Innestate. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003
DB2 Data Management Software Il linguaggio SQL Query Innestate Paolo Avallone Sr Consulting IT Specialist DB2, Data Management 10 Settembre 2003 LEGGERE LE SEGUENTI ATTENZIONI Le informazioni contenute
Alessandra Raffaetà. Esercizio: Cinema
Lezione 8 S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali Alessandra Raffaetà Dipartimento di Informatica Università Ca Foscari Venezia Esercizio: Cinema
S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali. Alessandra Raffaetà
Lezione 8 S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali Alessandra Raffaetà Dipartimento di Informatica Università Ca Foscari Venezia Esercizio: Cinema
Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf
Il linguaggio SQL: raggruppamenti Versione elettronica: SQLb-gruppi.pdf Informazioni di sintesi Quanto sinora visto permette di estrarre dal DB informazioni che si riferiscono a singole tuple (eventualmente
Select From Where...
Select From Where... SELECT Le colonne che saranno mostrate e in che ordine. Calcoli su colonne FROM La tabella o le tabelle usate dall interrogazione WHERE Condizione che deve essere soddisfatta dalle
Basi di Dati: Corso di laboratorio
Basi di Dati: Corso di laboratorio Lezioni 6 7 Raffaella Gentilini 1 / 46 Sommario 1 Subquery (o Interrogazioni Nidificate) Interrogazioni Annidate con Predicati di Confronto Interrogazioni Annidate con
SQL - Structured Query Language
SQL - Structured Query Language Lab 05 Alessandro Lori Università di Pisa 27 Aprile 2012 Riepilogo esercitazione precedente Operatori insiemistici (UNION, INTERSECT, EXCEPT) Riepilogo esercitazione precedente
Il linguaggio SQL: query innestate
Il linguaggio SQL: query innestate Sistemi Informativi L-A Home Page del corso: http://www-db.deis.unibo.it/courses/sil-a/ Versione elettronica: SQLc-subquery.pdf Sistemi Informativi L-A DB di riferimento
Linguaggio SQL: fondamenti D B M G
Linguaggio SQL: fondamenti Istruzione SELECT: fondamenti Struttura di base Clausola WHERE Ordinamento del risultato Join Funzioni aggregate Operatore GROUP BY 2 Istruzione SELECT: esempio Trovare il codice
SQL - Sottointerrogazioni correlate
SQL - Sottointerrogazioni correlate negli esempi visti ogni subquery viene eseguita una volta per tutte ed il valore (o insieme di valori) è usato nella clausola WHERE della query esterna è possibile definire
SQL come linguaggio di interrogazione. Basi di dati. Interrogazioni SQL. Interpretazione algebrica delle query SQL
SQL come linguaggio di interrogazione Basi di dati Linguaggi di Interrogazione: SQL Prof.Angela Bonifati Le interrogazioni SQL sono dichiarative l utente specifica quale informazione è di suo interesse,
Interrogazioni nidificate
Interrogazioni nidificate Nella clausola where si possono utilizzare valori prodotti da altre istruzioni select utilizzando any (qualsiasi) o all (tutti) insieme agli operatori di confronto Trovare nome,
Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati
Basi di Dati Matteo Longhi Structured Query Language Introduzione Standard creato nel 1976 da IBM Aggiornato (versione 2 nel 1992 (ANSI X3.135 e ISO 9075 Consente di: DDL: definire la struttura del DB
Caratteristiche dei linguaggi per Database
IL LINGUAGGIO Caratteristiche dei linguaggi per Database I linguaggi per basi di dati relazionali possiedono i comandi per: definizione del data base; manipolazione dei dati; associazione tra tabelle diverse;
SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma
SQL: Structured Query Language 1 SQL:Componenti Principali Data Manipulation Language (DML): interrogazioni, inserimenti, cancellazioni, modifiche Data Definition Language (DDL): creazione, cancellazione
Basi di Dati: Corso di laboratorio
Basi di Dati: Corso di laboratorio Lezione 3 Raffaella Gentilini 1 / 52 Sommario 1 Il DML di SQL: Interrogazione di una BD 2 / 52 Data Manipulation Language (DML) Istruzioni del DML Le istruzioni del DML
<Nome Tabella>.<attributo>
Informatica Generale (AA 07/08) Corso di laurea in Scienze della Comunicazione Facoltà di Lettere e Filosofia Università degli Studi di Salerno : SQL (2) Tabelle mult., variabili, aggreg, group Prof. Alberto
SQL e algebra relazionale
SQL e algebra relazionale Il linguaggio SQL consente una maggiore espressività dell algebra relazionale grazie a costrutti che permettono: di definire join più sofisticati di ordinare le righe dei risultati
SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)
SQL quick reference piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013) I tipi dei dati di SQL sono: delimitatori delle costanti: TEXT(n) stringa di caratteri
Il linguaggio SQL: query innestate
Il linguaggio SQL: query innestate Sistemi Informativi T Versione elettronica: 04.4.SQL.subquery.pdf DB di riferimento per gli esempi Imp CodImp Nome Sede Ruolo Stipendio E001 Rossi S01 Analista 2000 E002
Basi di Dati. Esercitazione SQL. Paolo Papotti. 19 maggio 2005
Basi di Dati Esercitazione SQL 19 maggio 2005 Paolo Papotti Considerando la seguente base di dati: Fornitori (CodiceFornitore, Nome, Indirizzo, Città) Prodotti (CodiceProdotto, Nome, Marca, Modello) Catalogo
