CONCETTO DI ANNIDAMENTO



Похожие документы
ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Il linguaggio SQL: query innestate

Capitolo 7. Esercizio 7.1

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Dispensa di database Access

Dispensa DB Mercato del Lavoro

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

MODULO 5 ACCESS Basi di dati. Lezione 4

Introduzione ai database relazionali

Istruzioni DML di SQL

Capitolo 13. Interrogare una base di dati

SQL - Funzioni di gruppo

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

SQL seconda parte D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2012/13

SQL/OLAP. Estensioni OLAP in SQL

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1

4 SQL : Interrogazioni nidificate

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Volumi di riferimento

Basi di dati II prova intermedia 16 Marzo 2006 Compito 1

Definizione di domini

OSSIF WEB. Manuale query builder

UN PROGRAMMA APPLICATIVO: ACCESS Access è un programma del pacchetto Office che permette di realizzare database

Sistemi per la gestione di database: MySQL ( )

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

DATABASE. A cura di Massimiliano Buschi

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Concetti fondamentali dei database database Cos'è un database Principali database

Interesse, sconto, ratei e risconti

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Dati relazionali e XML

Lezioni di Laboratorio sui Data Base

GERARCHIE RICORSIVE - SQL SERVER 2008

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

Il linguaggio SQL: viste e tabelle derivate

Il linguaggio SQL: viste e tabelle derivate. Versione elettronica: SQLd-viste.pdf

Esercizi su. Funzioni

EXCEL FUNZIONI PRINCIPALI

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

Introduzione alla teoria dei database relazionali. Come progettare un database

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

User Tools: DataBase Manager

Funzioni non documentate Openoffice.org. 3 Base mini-howto

SISTEMI INFORMATIVI AVANZATI -2010/ Introduzione

Utilizzo delle formule in Excel

Tipi MULTISET: accesso

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

(anno accademico )

Interesse, sconto, ratei e risconti

Database 3 affitto veicoli. Testo del quesito

Ricorsione in SQL-99. Introduzione. Idea di base

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

DATABASE.

corso di Access MICROSOFT ACCESS Docente: Andrea Mereu Università degli studi di Cagliari 16 aprile 9 maggio 2012

Access. P a r t e p r i m a

Data management a.a Il linguaggio SQL

Capitolo 2. Operazione di limite

DBMS (Data Base Management System)

a.a. 2012/13 12 Novembre 2012 Preparazione al Test in itinere, Compito A 1. Modellare tramite uno schema entità- relazione la seguente base di dati:

Appello di BD del Corso di laurea in Informatica del 9/1/2007 Compito e soluzioni

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

4 3 4 = 4 x x x 10 0 aaa

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Matematica in laboratorio

Anno 3. Funzioni: dominio, codominio e campo di esistenza

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

IL CODICE UNICO DI PROGETTO (CUP) FAQ PER L AREA RICERCA

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

LA MOLTIPLICAZIONE IN CLASSE SECONDA

Biglietti e Ritardi: schema E/R

Al giorno d oggi, i sistemi per la gestione di database

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Equilibrio bayesiano perfetto. Giochi di segnalazione

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

5.3 TABELLE RECORD Inserire, eliminare record in una tabella Aggiungere record Eliminare record

Introduzione al MATLAB c Parte 2

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

Corso di Laboratorio di Basi di Dati

Interrogazioni nidificate, commenti

Join in SQL (primo modo) Informatica. Tabella Dipartimento. Interrogazione 4a. Interrogazione 4b. Interrogazione 4a

XQuery. è lo standard adottato dal W3C per la XML. - Consente di iterare sugli elementi di un documento - Consente di ristrutturare i contenuti XML

Esercizi su lineare indipendenza e generatori

Data Management Software. Il linguaggio SQL. Raggruppamenti. Paolo Avallone Sr Consulting IT Specialist DB2, Data Management Marzo 2004

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Esercizio sui data base "Gestione conti correnti"

5.2.1 RELAZIONI TRA TABELLE Creare una relazione uno-a-uno, uno-a-molti tra tabelle 9

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

STAMPA UNIONE DI WORD

dall argomento argomento della malloc()

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

Lezione V. Aula Multimediale - sabato 29/03/2008

4. Operazioni elementari per righe e colonne

INFORMATICA PER L IMPRESA (Docente Prof. Alfredo Garro) ESERCIZIO 3

Транскрипт:

LEZIONE14 SQL ANNIDAMENTI PAG. 1 / 5 PROF. ANDREA ZOCCHEDDU LEZIONE14 SQL ANNIDAMENTI CONCETTO DI ANNIDAMENTO LINGUAGGIO SQL QUERY ANNIDATE Per annidamento si intende la possibilità che, all interno di un comando, vi sia posto un ulteriore comando analogo. Per chi avesse studiato la programmazione imperativa, un esempio di annidamento è costituito da un ciclo while dentro il quale è posto un ulteriore ciclo while In SQL è possibile scrivere una SELECT dentro un altra SELECT, purché nei punti previsti dalla sintassi. In teoria è possibile porre delle QUERY nelle tre clausole SELECT, FROM e WHERE. In effetti non tutti gli ambienti SQL ammettono di inerirle nelle due prime clausole e quindi eviteremo di trattarle DB DI RIFERIMENTO Per procedere con le query supponiamo di avere la base di dati implementata con uno strumento adatto (es. Access, mysql, Oracle, ecc ). Per esempio è possibile ipotizzare uno schema relazionale come il seguente: GIOCATORI (IDG, NickName, Età, Sesso); PK IDG; AK NickName NOT NULL NickName, Età ; GIOCHI (IDG, Marca, Nome, EtàMinima); PK IDG; AK Nome NOT NULL Marca, Nome, EtàMinima ; GARE (IDG, Data, Player, Game, Livello, Punti); PK IDG; NOT NULL Data, Player, Game ; ANNIDAMENTO NELLA SELECT (SCONSIGLIATO) L'annidamento prevede che oltre a mostrare campi o funzioni nella clausola SELECT si possa anche inserire una query che calcola dati. La query interna deve restituire una sola colonna ed una sola riga (un solo valore) ogni volta che viene eseguita (per esempio con una funzione di aggregazione).,( SELECT COUNT(*) AS G2 WHERE G1.ID = G2.Game) FROM Giochi AS G1; Per ogni gioco (ogni riga della tabella giochi) si esegue la query interna che calcola quanti sono le gare svolte per quello specifico gioco). In pratica questa query mostra quante partite siano state svolte per ciascun gioco.

LEZIONE14 SQL ANNIDAMENTI PAG. 2 / 5 PROF. ANDREA ZOCCHEDDU ANNIDAMENTO NELLA FROM (SCONSIGLIATO) L'annidamento suppone di poter eseguire una query a partire da una tabella dinamica invece che da una struttura. La query interna deve essere calcolata prima di eseguire quella esterna. SELECT MAX (Partite) FROM ( SELECT Game, COUNT(*) AS Partite GROUP BY Game) AS G1; Prima è eseguita la query interna che restituisce il numero di partite svolte per ogni gioco. Questa tabella ha due colonne (Game e Partite). Su questa query si esegue quella esterna che calcola quale sia il valore massimo delle Partite. In sintesi restituisce il numero di partite del gioco più giocato. FROM ( SELECT MAX(Livello)AS Best ) AS G1 INNER JOIN (Gare) ON (Gare.Livello = G1.Best) ; Prima è eseguita la query interna che restituisce il massimo livello raggiunto tra tutte le partite. Questa tabella dinamica (con una sola colonna) è congiunta alla tabella Gare in base al suo campo Livello. In sintesi si trovano le partite (tutti i campi) in cui è stato raggiunto il massimo livello. ANNIDAMENTO NELLA CLAUSOLA WHERE (AMMESSO) I precedenti tipi di annidamento non sono sempre ammessi dai database esistenti. Invece in generale sono ammesse le query annidate nella clausola WHERE. Nella clausola WHERE è possibile usare operatori di confronto, l operatore IN e l operatore EXISTS. Prima di analizzare questo tipo di query è opportuno fare una considerazione sulle query nidificate. Quando una query è interna ad un altra sono possibili due diverse eventualità: - che la query interna sia indipendente da quella esterna: in questo caso la query interna può essere eseguita per prima mentre quella esterna si elabora in seguito sui risultati della prima. In questo caso si parla di binding interno. - che la query interna sia legata a quella esterna e quindi non sia possibile eseguirla per prima. In questo caso per ogni elemento (riga) della query esterna si analizza il comportamento di quella interna e si valuta il risultato. In questo caso si parla di binding esterno. ANNIDAMENTO E OPERATORI DI CONFRONTO Un primo modo di usare le query nidificate è di confrontare il risultato della query interna con un operatore di confronto (=, <>, >, <, >=, <=) rispetto ad un altro valore. Per queste query si deve fare attenzione se quelle interne sono indipendenti da quelle esterne. Vediamo alcuni esempi.

LEZIONE14 SQL ANNIDAMENTI PAG. 3 / 5 PROF. ANDREA ZOCCHEDDU =, <>, >, <, >=, <= WHERE Età = ( SELECT MAX(Età) ); La query interna è indipendente da quella esterna e viene eseguita per prima. La query interna restituisce la massima età tra i giocatori. A questo punto è possibile eseguire la query esterna che confronta l età di ciascun giocatore con il valore ottenuto in precedenza. Se coincidono la query esterna lo restituisce. In sintesi si mostrano tutti i giocatori con la più elevata età. WHERE 20 < ( SELECT COUNT(*) WHERE Gare.Player = Giocatori.ID) ; La query interna è dipendente da quella esterna e non può essere eseguita per prima. Si esegue allora la query esterna e per ciascun giocatore si esegue quella interna. La query nidificata verifica il numero di gare svolte per ciascun giocatore. La query esterna verifica se questo numero è superiore a 20. In sintesi si mostrano tutti i giocatori che hanno compiuto più di 20 partite. IN (E NOT IN) L operatore IN verifica se un dato valore è presente in un elenco. Se è presente rende Vero altrimenti rende Falso. WHERE ID IN ( SELECT Player ); La query interna è indipendente da quella esterna e viene eseguita per prima. La query interna restituisce gli identificativi dei giocatori che hanno compiuto delle gare. A questo punto è possibile eseguire la query esterna che cerca per ciascun giocatore se il proprio ID è presente nell elenco. Se lo trova allora la query esterna lo restituisce. In sintesi si mostrano tutti i giocatori che hanno svolto gare. WHERE ID NOT IN ( SELECT Player ); La query mostra tutti i giocatori che NON hanno svolto gare.

LEZIONE14 SQL ANNIDAMENTI PAG. 4 / 5 PROF. ANDREA ZOCCHEDDU OPERATORE EXISTS L operatore EXISTS verifica se una query interna è vuota oppure restituisca dei dati. Se ci sono dei dati allora rende Vero altrimenti (è vuota) rende Falso. WHERE EXISTS ( ); La query interna è indipendente da quella esterna e viene eseguita per prima. Poniamo che la query interna restituisca qualcosa (non ci interessa cosa ). A questo punto è possibile eseguire la query esterna che poiché trova sempre Vero nella clausola WHERE rende tutti i giocatori, senza alcun criterio. Questa query è inutile, o almeno lo è l annidamento. WHERE EXISTS ( WHERE Giocatori.ID = Gare.Player); Occorre eseguire la query esterna che per ogni giocatore prova ad eseguire quella interna che cerca le gare svolte dal giocatore. Se ce ne sono allora la query interna è non vuota e EXISTS rende Vero altrimenti (se la query interna è vuota) rende Falso. La query mostra tutti i giocatori che hanno svolto gare. WHERE NOT EXISTS ( WHERE Giocatori.ID = Gare.Player); La query mostra tutti i giocatori che NON hanno svolto gare. AS G1 WHERE NOT EXISTS ( AS G2 WHERE G1.Gioco = G2.Gioco AND G2.Livello > G1.Livello); La query mostra le gare coi livelli migliori per ciascun Gioco. ANNIDARE IN PIÙ LIVELLI Se necessario è possibile nidificare le query in più livelli, ovvero inserire in una query interna un altra query ancora più interna.

LEZIONE14 SQL ANNIDAMENTI PAG. 5 / 5 PROF. ANDREA ZOCCHEDDU ESEMPIO 1. AS G1 WHERE ID IN ( SELECT Player WHERE Gioco IN ( SELECT Gioco WHERE Player <> G1.ID ) ); La query mostra tutti i giocatori che hanno fatto giochi a cui ha giocato anche qualcun altro. ESEMPIO 2. AS G1 WHERE NOT EXISTS( as G2 WHERE NOT EXISTS( AS G3 WHERE G3.Game = G2.Game AND G3.Player <> G1.ID ) ); Non ho idea di cosa faccia questa query Chi mi può aiutare? INDICE DELLA LEZIONE DB di riferimento... 1 annidamento nella select (sconsigliato)... 1 annidamento nella from (sconsigliato)... 2 Annidamento nella clausola where (ammesso)... 2 Annidamento e Operatori di Confronto... 2 =, <>, >, <, >=, <=... 3 in (e not in)... 3 Operatore Exists... 4 Annidare in più livelli... 4 Esempio 1.... 5 Esempio 2.... 5