SQL - Sottointerrogazioni

Похожие документы
Il linguaggio SQL: query innestate

Linguaggio SQL seconda parte

Basi di Dati: Corso di laboratorio

Interrogazioni nidificate

Tipi di sottoquery SQL

Caratteristiche dei linguaggi per Database

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Elena Baralis 2007 Politecnico di Torino 1

Interrogazioni nidificate

<Nome Tabella>.<attributo>

Basi di Dati: Corso di laboratorio

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni

SQL - Funzioni di gruppo

Eprogram ITIS V anno Unità 4 - Il linguaggio SQL

Linguaggio SQL. studenti matricola nome cognome citta anno 11 marco bini bologna laura sicuro rimini 1984 esami codice

DATABASE PER IL WEB. Programmazione Web 1

Le interrogazioni annidate

SQL Avanzato. Interrogazioni e il valore NULL. Interrogazioni complesse, trigger, viste e modifiche dello schema. Giorgio Giacinto 2015

Basi di Dati: Corso di laboratorio

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Domande utili alla preparazione dell orale di Informatica all Esame di Stato

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Il linguaggio SQL: query innestate

SELECT s.nome, e.data Studenti s, Esami e WHERE e.materia = 'BD' AND e.voto = 30 AND e.matricola = s.matricola

Capitolo 5. Soluzione: Soluzione in C:

Il linguaggio SQL: viste e tabelle derivate. DB di riferimento per gli esempi

SQL: Structured Query Language. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

ESERCIZI SQL. Esercizio 1

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Query in Access. Criteri, Valori Univoci, Operatori e Colonna Calcolata. Query (Interrogazione)

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

Esercitazione: Interrogazioni SQL

Corso di Basi di Dati A.A. 2015/2016

Oracle Database 10g: Introduction to SQL - LVC

BASI DATI: algebra relazionale

Istruzioni DML di SQL

Domini Numerici Esatti (1) I domini numerici esatti permettono di definire attributi che contenegono valori esatti interi o con parte frazionaria.

SQL e algebra relazionale

SQL: DDL, VI, Aggiornamenti e Viste

Esempio di database relazionale con l utilizzo del prodotto MySQL

Structured Query Language. Informatica Generale - SQL Versione 1.0, aa p.1/172

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

Microsoft Access (parte 5) Query. Query. Query. Query. Creare una query

Basi di dati attive. Paolo Atzeni Stefano Ceri. Basi di dati attive

Il Domino Character Il domino CHARACTER permette di definire attributi che contengono un singolo carattere o stringhe di caratteri di lunghezza

Esercizi di SQL 1- SELEZIONI SEMPLICI 1 2- SELEZIONI CON PROIEZIONI 1 3- FUNZIONI DI INSIEME 2 4- FUNZIONI DI AGGREGAZIONE 2 5- HAVING 3

Il Modello Relazionale

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

Oracle Database 11g: Introduzione a SQL Release 2

ACCESS Esercitazione (query complesse) Ing. Cosimo Orlacchio

Data warehouse in Oracle

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, SQL

Le query di comando e di servizio in Access

Sommario. Introduzione... 13

Viste materializzate in Oracle e SQL esteso. Sistemi di gestione di basi di dati. Tania Cerquitelli e Paolo Garza 1.

Basi di Dati. Esercitazione 3: Interrogazioni in SQL. K. Donno - Interrogazioni in SQL

Structured Query Language parte 1

Esempi SQL con Access. Orazio Battaglia

Silvia Chiusano, Paolo Garza 1

Basi di dati (3) Docente: Andrea Bulgarelli. Università di Modena e Reggio Emilia. Argomento: DML (1.

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

Basi di Dati. Esercitazione SQL. Paolo Papotti. 19 maggio 2005

Interrogazioni complesse. SQL avanzato 1

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

Create la tabella Dipendenti:

Il linguaggio SQL: viste e tabelle derivate

Esercitazione su SQL

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

3 SQL : Interrogazioni

Elena Baralis 2007 Politecnico di Torino 1

Basi di Dati Corso di Laura in Informatica Umanistica

Indice Introduzione Elementi di base dei database Il linguaggio SQL (Structured Query Language)

LABORATORIO di INFORMATICA

Corso di Laboratorio di Basi di Dati

LEFT JOIN - RIGHT JOIN - SELF JOIN - CROSS JOIN

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

ALGEBRA RELAZIONALE. L algebra relazionale

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

Транскрипт:

una delle ragioni che rendono SQL un linguaggio potente è la possibilità di esprimere interrogazioni più complesse in termini di interrogazioni più semplici, tramite il meccanismo delle subqueries (sottointerrogazioni) la clausola WHERE di una query (detta query esterna) può infatti contenere un'altra query (detta subquery) la subquery viene usata per determinare uno o più valori da usare come valori di confronto in un predicato della query esterna 121

esempio: si vuole elencare tutti gli impiegati che hanno la stessa mansione dell'impiegato di nome Gianni SELECT Nome, Mansione FROM Impiegati WHERE Mansione = (SELECT Mansione FROM Impiegati WHERE Nome = 'Gianni'); 122 HP: Nome deve essere chiave la subquery restituisce come valore 'ingegnere la query esterna determina quindi tutti gli impiegati che sono ingegneri il risultato è {Rossi, Neri, Dare, Adami, Gianni, Milli}

tramite il meccanismo delle subqueries è possibile esprimere queries anche più complesse esempio: si vuole elencare tutti gli impiegati che hanno uno stipendio superiore alla media degli stipendi di tutti gli impiegati SELECT Nome, Stipendio FROM Impiegati WHERE Stipendio > (SELECT AVG(Stipendio) FROM Impiegati); 123

124 risultato Nome Stipendio Rosi 2975,00 Blacchi 2850,00 Neri 2450,00 Dare 2000,00 Gianni 1950,00 Verdi 3000,00 è possibile per una subquery avere al suo interno un'altra subquery, predicati di join, e tutti i predicati visti le subqueries possono essere usate anche all'interno dei comandi di manipolazione dei dati (Insert, Delete, Update) li vedremo più avanti

125 negli esempi visti, le subqueries restituiscono un solo valore tali subqueries sono note come subqueries scalari se una subquery scalare restituisce più di una tupla si genera un errore a run-time una particolarità delle subqueries scalari è che se nessuna tupla verifica la subquery, viene restituito il valore NULL se si vuole invece utilizzare una subquery che restituisce più valori (table subquery) è necessario specificare come i valori restituiti devono essere usati nella clausola WHERE

a tale scopo vengono usati i quantificatori ANY ed ALL, che sono inseriti tra l'operatore di confronto e la subquery (esiste anche SOME, sinonimo di ANY) esempio: determinare lo stipendio, la mansione, il nome e il numero di dipartimento degli impiegati che guadagnano più di almeno un impiegato del dipartimento 30 SELECT Stipendio, Mansione, Nome, Dip# FROM Impiegati WHERE Stipendio > ANY (SELECT Stipendio FROM Impiegati WHERE Dip#=30); 126

risultato Stipendio Mansione Nome Dip# 3000,00 dirigente Verdi 10 2975,00 dirigente Rosi 20 2850,00 dirigente Blacchi 30 2450,00 ingegnere Neri 10 2000,00 ingegnere Dare 10 1950,00 ingegnere Gianni 30 1600,00 ingegnere Rossi 20 1500,00 tecnico Turni 30 1300,00 ingegnere Milli 10 1100,00 ingegnere Adami 10 se si usa il quantificatore ALL, la query restituisce gli impiegati il cui stipendio è maggiore di tutti i valori restituiti dalla subquery 127

esempio: determinare lo stipendio, la mansione, il nome e il numero di dipartimento degli impiegati che guadagnano più di tutti gli impiegati del dipartimento 30 SELECT Stipendio, Mansione, Nome, Dip# FROM Impiegati WHERE Stipendio > ALL (SELECT Stipendio FROM Impiegati WHERE Dip#=30); risultato Stipendio Mansione Nome Dip# 3000,00 dirigente Verdi 10 2975,00 dirigente Rosi 20 128

sono definite le seguenti abbreviazioni per ANY ed ALL IN equivalente ad = ANY NOT IN equivalente a ALL esempio: elencare il nome e la mansione degli impiegati del dipartimento 10 che hanno la stessa mansione di un qualche impiegato del dipartimento 30 SELECT Nome, Mansione FROM Impiegati WHERE Dip#=10 AND Mansione IN (SELECT Mansione FROM Impiegati WHERE Dip#=30); 129

esempio (2): elencare il nome e la mansione degli impiegati del dipartimento 10 che hanno una qualche mansione non presente nel dipartimento 30 SELECT Nome, Mansione FROM Impiegati WHERE Dip#=10 AND Mansione NOT IN (SELECT Mansione FROM Impiegati WHERE Dip#=30); risultato risultato (2) Mansione Nome Mansione Nome dirigente Verdi tecnico Andrei ingegnere Dare tecnico Bianchi ingegnere Milli tecnico Turni segretaria Martini 130

è inoltre possibile selezionare più di una colonna tramite una sottointerrogazione; in tal caso è necessario apporre delle parentesi alla lista delle colonne a sinistra dell'operatore di confronto esempio: si vuole elencare gli impiegati con la stessa mansione e stipendio di Martini SELECT Nome FROM Impiegati WHERE (Mansione,Stipendio) = (SELECT Mansione, Stipendio FROM Impiegati WHERE Nome = 'Martini'); 131

la clausola di WHERE di una query può contenere una qualsiasi combinazione di condizioni normali e condizioni con subqueries 132 esempio: si vuole elencare gli impiegati con la stessa mansione di Gianni o con uno stipendio maggiore o uguale a quello di Fordi, ordinando il risultato in base alla mansione e allo stipendio SELECT Nome, Mansione, Stipendio FROM Impiegati WHERE Mansione = (SELECT Mansione FROM Impiegati WHERE Nome ='Gianni') OR Stipendio > (SELECT Stipendio FROM Impiegati ORDER BY Mansione, Stipendio; WHERE Nome = 'Fordi')

una subquery può contenere a sua volta un'altra subquery esempio: elencare il nome e la mansione degli impiegati del dipartimento 10 con la stessa mansione di un qualche impiegato del dipartimento Ricerche SELECT Nome, Mansione FROM Impiegati WHERE Dip#=10 AND Mansione IN (SELECT Mansione FROM Impiegati WHERE Dip# = (SELECT Dip# FROM Dipartimenti WHERE Nome_Dip = 'Ricerche )); 133