Appunti su SQL. Query Language. Comando Select

Похожие документы
SQL: le funzioni di aggregazione

SQL DDL. Create database. Alter database. Drop database

Select From Where...

Manuale SQL. Manuale SQL - 1 -

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

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

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

Caratteristiche dei linguaggi per Database

Esercitazione seconda prova Esame di Stato Prova di Informatica Gestionale ITC Programmatori e Mercurio. Note introduttive

QL (Query Language) Alice Pavarani

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

Linguaggio SQL seconda parte

Istruzioni DML di SQL

Structured Query Language

Fondamenti di Informatica e Programmazione

Elena Baralis 2007 Politecnico di Torino 1

SQL (STRUCTURED QUERY LANGUAGE)

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

PROGETTAZIONE DI DATABASE Linguaggio SQL

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

SQL - Structured Query Language

ESERCITAZIONI ACCESS

Interrogazioni nidificate

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

DATABASE PER IL WEB. Programmazione Web 1

CORSO ACCESS 2000 PARTE VI

Basi di Dati: Corso di laboratorio

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

Microsoft Access. Microsoft Access. Maurizio Rebaudengo, Paolo Garza 1. Microsoft Access. Creazione base di dati. Apertura di una base dati

MODULO 2. Query normali e parametriche Query di:

La stampa Unione con MS-Word

Interrogazioni complesse. SQL avanzato 1

SQL e algebra relazionale

<Nome Tabella>.<attributo>

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

Il linguaggio SQL: raggruppamenti

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

SQL: DDL, VI, Aggiornamenti e Viste

Esempi SQL con Access. Orazio Battaglia

Alessandra Raffaetà. Esercizio: Cinema

S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali. Alessandra Raffaetà

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

Транскрипт:

Appunti su SQL Query Language... 1 Comando Select... 1 Select con campi calcolati e order By... 4 campi calcolati Sintassi generale:... 4 order By Sintassi generale:... 4 Select con Join (due tabelle)... 5 Select con Join (3 tabelle)... 7 Select con Join, Where, campi calcolati e order By... 9 Select con funzioni aggregazione (SUM, COUNT, AVG, ) e raggruppamento (GROUP BY)... 10 DML (Data Manipulation Language)... 10 Insert... 10 1) Insert semplice (SCONSIGLIATO vivamente!):... 10 2) Insert :... 10 3) Insert mediante select:... 11 DDL (Data Definition Language)... 12 Create Database... 12 Create Table... 13 Create View... 13 Alter Table... 13 Drop Table... 13 Query Language Comando Select Il comando Select è l'unico comando di interrogazione (QL Query Lanquage) di SQL, ma la sua potenza espressiva è tale da poter realizzare in poche righe interrogazioni che in altri linguaggi richiederebbero molte pagine di codice. Il risultato del comando è una tabella temporanea (un insieme di record che non è salvato su disco). La select prevede molte clausole (particolari componenti del comando come Where ) che la rendono molto flessibile e potente. La sintassi nella forma più semplice è: SELECT <elenco campi> FROM <nome tabella> Dove <elenco campi> è l'elenco dei campi da estrarre (separati tra loro con una virgola) oppure per selezionare tutti i campi SELECT * <nome tabella> è il nome della tabella a cui ci si riferisce La sintassi nella forma più semplice ma con la clausola WHERE è: SELECT <elenco campi> FROM <nome tabella> WHERE <condizione> Quindi l'elenco dei campi dopo il SELECT è quello delle colonne che si vuole ottenere in uscita. In pratica viene qui realizzata la proiezione. La tabella dopo il FROM è quella da cui provengono i dati. 1

La condizione dopo WHERE è quella che selezionerà le righe o record da inserire nella tabella di uscita. Esempio: data le tabelle Anag CF_PK Nome Cognome NomeCittaFK Indirizzo Num_Civico RSSL Aldo Rossi Treviso c.so Popolo 15 FRLB Biagio Furlan Lollove via Dante 3 BNCC Carlo Bianchi Treviso via C.Battisti 2 VNLD Dario Vianello Venezia S.Marco 4202 BNCN Enrico Bianchi Venezia Cannaregio 4321 Citta NomePK Regione NumAb Lollove Sardegna 900000 Treviso Veneto 750 Venezia Veneto 32 Selezione dei soli residenti a Treviso e limitatamente al nome e all'indirizzo completo; comando SQL: SELECT Nome, Indirizzo, Num_Civico WHERE NomeCittaFK ='Treviso' Nome Indirizzo Num_Civico Aldo c.so Popolo 15 Carlo via C.Battisti 2 Selezione dei cittadini che abbiano cognome Bianchi e di quelli che abitino a Venezia comando SQL SELECT * WHERE (Cognome = Bianchi ) OR (NomeCittaFK = Venezia ) CF_PK Nome Cognome NomeCittaFK Indirizzo Num_Civico BNCC Carlo Bianchi Treviso via C.Battisti 2 VNLD Dario Vianello Venezia S.Marco 4202 BNCN Enrico Bianchi Venezia Cannaregio 4321 Selezione dei cittadini che abitino a Venezia e si chiamino Bianchi comando SQL SELECT * WHERE (Cognome = Bianchi ) AND (NomeCittaFK = Venezia ) CF_PK Nome Cognome Citta Indirizzo Num_Civico BNCN Enrico Bianchi Venezia Cannaregio 4321 2

3

Select con campi calcolati e order By campi calcolati Sintassi generale: (evidenziamo il campo calcolato in celeste) SELECT, <espressione> AS <nome-campo-calcolato> FROM <nome tabella> Evidenziamo nell esempio autoesplicativo (spero) il campo calcolato in celeste SELECT Cognome, Nome, Indirizzo & n & Num_Civico AS IndirizzoCompleto Otterremo Cognome Nome IndirizzoCompleto Bianchi Carlo via C.Battisti n 2 Furlan Biagio via Dante n 3 Rossi Aldo c.so Popolo n 15 Vianello Dario S.Marco n 4202 Bianchi Enrico Cannaregio n 4321 order By Sintassi generale: Evidenziamo l ordinamento in verde a sinistra su un solo campo, a destra su più campi SELECT <elenco campi> FROM <nome tabella> ORDER BY <nome-campo> [DESC ASC] SELECT Cognome, Nome, Indirizzo ORDER BY Cognome Otterremo i record ordinate per cognome: Cognome Nome Indirizzo Bianchi Bianchi Furlan Rossi Vianello Enrico Cannaregio Carlo via C.Battisti Biagio via Dante Aldo c.so Popolo Dario S.Marco Se volessimo ordinare in ordine decrescente: SELECT Cognome, Nome, Indirizzo ORDER BY Cognome DESC Otterremo: Cognome Nome Indirizzo Vianello Rossi Furlan Bianchi Bianchi Dario S.Marco Aldo c.so Popolo Biagio via Dante Enrico Cannaregio Carlo via C.Battisti SELECT <elenco campi> FROM <nome tabella> ORDER BY <elenco campi> [DESC ASC] Se volessimo, a parità di cognome, ordinare per nome scriveremo SELECT Cognome, Nome, Indirizzo ORDER BY Cognome, Nome Ottenendo: Cognome Nome Indirizzo Bianchi Bianchi Furlan Rossi Carlo via C.Battisti Enrico Cannaregio Biagio via Dante Aldo c.so Popolo Vianello Dario S.Marco Dove Bianchi Carlo precede Bianchi Enrico 4

Select con Join (due tabelle) Quando si selezionano i dati da 2 o più tabelle è OBBLIGATORIO, per ottenere dati significativi, specificare il legame fra i record delle tabelle differenti Tale legame si specifica tramite il costrutto JOIN (SQL standard) o INNER JOIN (in MsAccess) attraverso il quale si evidenziano i campi delle due tabelle che devono avere i valori uguali come evidenziato nell esempio. Selezione dei soli residenti in Veneto e limitatamente al cognome, indirizzo, città e numero relativi abitanti; comando SQL: SELECT Anag.Cognome, Anag.Indirizzo, CittaPK.Nome as Città, Citta.NumAb JOIN Citta ON (Anag. NomeCittaFK = Citta.NomePK) WHERE Regione='Veneto' Cognome Indirizzo Città NumAb Rossi c.so Popolo Treviso 750 Bianchi via C.Battisti Treviso 750 Vianello S.Marco Venezia 32 Bianchi Cannaregio Venezia 32 5

consideriamo (nei prossimi esempi) il DB di ACCESS IndagineMercato.mdb. Prodotti CodiceProdotto Descrizione CP-01 Prodotto X CP-02 Prodotto Y Nazioni CodiceNazione NomeNazione Abitanti CN-01 Nazione A 56000000 CN-02 Nazione B 78000000 CN-03 Nazione C 1600000 CN-04 Nazione D 16000000 Quantita CodiceProdotto CodiceNazione QuantitaProdotta QuantitaConsumata CP-01 CN-01 140400000 145850000 CP-01 CN-02 259090000 350670000 CP-01 CN-03 51340000 55000 CP-01 CN-04 211134000 314488000 CP-02 CN-01 310040000 419750000 CP-02 CN-02 416870000 517951000 CP-02 CN-03 2790000 11130000 CP-02 CN-04 81002000 91852000 Altro esempio: si vuole ottenere Codice della nazione, descrizione e codice del prodotto e quantità prodotta di tutte le nazioni SELECT CodiceNazione, Descrizione, Quantita.CodiceProdotto, QuantitaProdotta FROM Prodotti INNER JOIN Quantita ON Prodotti.CodiceProdotto = Quantita.CodiceProdotto Otterremo: CodiceNazione Descrizione CodiceProdotto QuantitaProdotta CN-01 Prodotto X CP-01 140400000 CN-02 Prodotto X CP-01 259090000 CN-03 Prodotto X CP-01 51340000 CN-04 Prodotto X CP-01 211134000 CN-01 Prodotto Y CP-02 310040000 CN-02 Prodotto Y CP-02 416870000 CN-03 Prodotto Y CP-02 2790000 CN-04 Prodotto Y CP-02 81002000 6

Dove ogni riga della tabella quantità viene associata alla riga della tabella prodotti con il codice prodotto corrispondente. Vediamo la stessa query senza JOIN, SELECT CodiceNazione, Descrizione, Quantita.CodiceProdotto AS CodProdQTA, QuantitaProdotta FROM Prodotti, Quantita otterremo: CodiceNazione Descrizione CodProdQTA QuantitaProdotta CN-01 Prodotto X CP-01 140400000 CN-01 Prodotto Y CP-01 140400000 CN-02 Prodotto X CP-01 259090000 CN-02 Prodotto Y CP-01 259090000 CN-03 Prodotto X CP-01 51340000 CN-03 Prodotto Y CP-01 51340000 CN-04 Prodotto X CP-01 211134000 CN-04 Prodotto Y CP-01 211134000 CN-01 Prodotto X CP-02 310040000 CN-01 Prodotto Y CP-02 310040000 CN-02 Prodotto X CP-02 416870000 CN-02 Prodotto Y CP-02 416870000 CN-03 Prodotto X CP-02 2790000 CN-03 Prodotto Y CP-02 2790000 CN-04 Prodotto X CP-02 81002000 CN-04 Prodotto Y CP-02 81002000 Il codice di un prodotto corrisponde a DUE descrizioni!!! Dove ogni riga della tabella quantità viene associata a tutte le righe della tabella prodotti. Select con Join (3 tabelle) Notiamo, nell esempio precedente, che sarebbe utile avere il nome della nazione (dalla tabella Nazioni) al posto del codice. Se si hanno tre tabelle bisogna creare il primo JOIN fra 2 tabelle e farne il Join con la terza es: Nella query che segue è evidenziato il primo JOIN e si vede come, grazie ai join, ogni quantità è relativa a un dato prodotto e una nazione (senza il join sarebbe tutto mischiato e moltiplicato ) SELECT Nazioni.NomeNazione, Prodotti.Descrizione, Quantita.QuantitaProdotta FROM (Nazioni INNER JOIN Quantita ON Nazioni.CodiceNazione = Quantita.CodiceNazione) INNER JOIN Prodotti ON Prodotti.CodiceProdotto = Quantita.CodiceProdotto NomeNazione Descrizione QuantitaProdotta Nazione A Prodotto X 140.400.000,00 Nazione B Prodotto X 259.090.000,00 Nazione C Prodotto X 51.340.000,00 Nazione D Prodotto X 211.134.000,00 Nazione A Prodotto Y 310.040.000,00 Nazione B Prodotto Y 416.870.000,00 Nazione C Prodotto Y 2.790.000,00 7

NomeNazione Descrizione QuantitaProdotta Nazione D Prodotto Y 81.002.000,00 Vediamo la stessa query SENZA join SELECT Prodotti.Descrizione, Nazioni.NomeNazione, Quantita.QuantitaProdotta FROM Nazioni, Prodotti, Quantita Descrizione NomeNazione QuantitaProdotta Prodotto X Nazione A 140.400.000,00 Prodotto Y Nazione A 140.400.000,00 Prodotto X Nazione B 140.400.000,00 Prodotto Y Nazione B 140.400.000,00 Prodotto X Nazione C 140.400.000,00 Prodotto Y Nazione C 140.400.000,00 Prodotto X Nazione D 140.400.000,00 Prodotto Y Nazione D 140.400.000,00 Prodotto X Nazione A 259.090.000,00 Prodotto Y Nazione A 259.090.000,00 Prodotto X Nazione B 259.090.000,00 Prodotto Y Nazione B 259.090.000,00 Prodotto X Nazione C 259.090.000,00 Prodotto Y Nazione C 259.090.000,00 Prodotto X Nazione D 259.090.000,00 Prodotto Y Nazione D 259.090.000,00 Prodotto X Nazione A 51.340.000,00 Prodotto Y Nazione A 51.340.000,00 Prodotto X Nazione B 51.340.000,00 Prodotto Y Nazione B 51.340.000,00 Prodotto X Nazione C 51.340.000,00 Prodotto Y Nazione C 51.340.000,00 Prodotto X Nazione D 51.340.000,00 Prodotto Y Nazione D 51.340.000,00 Prodotto X Nazione A 211.134.000,00 Prodotto Y Nazione A 211.134.000,00 Prodotto X Nazione B 211.134.000,00 Prodotto Y Nazione B 211.134.000,00 Prodotto X Nazione C 211.134.000,00 Prodotto Y Nazione C 211.134.000,00 Prodotto X Nazione D 211.134.000,00 Prodotto Y Nazione D 211.134.000,00 Prodotto X Nazione A 310.040.000,00 Prodotto Y Nazione A 310.040.000,00 Prodotto X Nazione B 310.040.000,00 Prodotto Y Nazione B 310.040.000,00 Prodotto X Nazione C 310.040.000,00 Prodotto Y Nazione C 310.040.000,00 Prodotto X Nazione D 310.040.000,00 Prodotto Y Nazione D 310.040.000,00 Prodotto X Nazione A 416.870.000,00 Prodotto Y Nazione A 416.870.000,00 Prodotto X Nazione B 416.870.000,00 8

Descrizione NomeNazione QuantitaProdotta Prodotto Y Nazione B 416.870.000,00 Prodotto X Nazione C 416.870.000,00 Prodotto Y Nazione C 416.870.000,00 Prodotto X Nazione D 416.870.000,00 Prodotto Y Nazione D 416.870.000,00 Prodotto X Nazione A 2.790.000,00 Prodotto Y Nazione A 2.790.000,00 Prodotto X Nazione B 2.790.000,00 Prodotto Y Nazione B 2.790.000,00 Prodotto X Nazione C 2.790.000,00 Prodotto Y Nazione C 2.790.000,00 Prodotto X Nazione D 2.790.000,00 Prodotto Y Nazione D 2.790.000,00 Prodotto X Nazione A 81.002.000,00 Prodotto Y Nazione A 81.002.000,00 Prodotto X Nazione B 81.002.000,00 Prodotto Y Nazione B 81.002.000,00 Prodotto X Nazione C 81.002.000,00 Prodotto Y Nazione C 81.002.000,00 Prodotto X Nazione D 81.002.000,00 Prodotto Y Nazione D 81.002.000,00 Select con Join, Where, campi calcolati e order By Evidenziamo nell esempio autoesplicativo (spero) il campo calcolato in celeste e l ordinamento in verde SELECT CodiceNazione, Descrizione, QuantitaProdotta - QuantitaConsumata AS SaldoQuantita FROM Prodotti INNER JOIN Quantita ON Prodotti.CodiceProdotto = Quantita.CodiceProdotto WHERE Quantita.CodiceNazione ="CN-03" ORDER BY Descrizione CodiceNazione Descrizione SaldoQuantita CN-03 Prodotto X 51285000 CN-03 Prodotto Y -8340000 9

Select con funzioni aggregazione (SUM, COUNT, AVG, ) e raggruppamento (GROUP BY) Nel primo esempio utilizziamo solo 2 funzioni di Aggregazione (senza raggruppare ovvero si crea un unico gruppo per tutti i record) SELECT Count(*) AS NumNazioni, Sum(Nazioni.Abitanti) AS NumAB FROM Nazioni; NumNazioni NumAB 4 151600000 Nel secondo esempio utilizziamo la funzioni di Aggregazione SUM raggruppando per nazione ovvero si crea un unico gruppo per ogni nazione SELECT NomeNazione, Sum(Quantita.QuantitaProdotta) AS TotProduzione FROM Nazioni INNER JOIN Quantita ON Nazioni.CodiceNazione = Quantita.CodiceNazione GROUP BY Nazioni.NomeNazione NomeNazione TotProduzione Nazione A 450440000 Nazione B 675960000 Nazione C 54130000 Nazione D 292136000 DML (Data Manipulation Language) Insert Il comando ha la funzione di inserire i dati nelle tabelle. Sintassi del comando insert 1) Insert semplice (SCONSIGLIATO vivamente!): INSERT INTO <nome_tabella> VALUES (<elenco valori, nello stesso ordine dei campi della tabella>); in questo caso è necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l'ordine (dato in fase di creazione della tabella) delle colonne stesse. 2) Insert : INSERT INTO <nome_tabella> (<elenco dei campi>) VALUES (<elenco valori>); 10

In questo caso, invece, le colonne di destinazione vengono dichiarate, è possibile indicare solo le colonne per le quali vengono passati dei valori in qualsiasi ordine, purché vengano inseriti i valori nello stesso ordine. Es. consideriamo la Tabella T_Alunni Matricola Classe NumOrdine Nome Cognome 100 3_PC 1 Lillo Lollo 101 3_PC 2 Sara Bianchi 102 3_PC 3 Letizia Buona Dopo il comando INSERT INTO T_Alunni (Nome, Cognome, Matricola) VALUES ( Giuseppe, Rossi,339); otterremo Matricola Classe NumOrdine Nome Cognome 100 3_PC 1 Lillo Lollo 101 3_PC 2 Sara Bianchi 102 3_PC 3 Letizia Buona 339 Giuseppe Rossi 3) Insert mediante select: INSERT INTO nome_tabella (<elenco campi>) AS SELECT...; Di per sé il comando insert opera inserendo in tabella una sola riga per volta. Con questa sintassi è possibile, però, inserire più di una riga passando all'insert una serie di righe (o tuple) risultanti da un comando di select, purché tali righe siano compatibili (stesso numero di campi e tipi corrispondenti) con le colonne della tabella su cui si inseriscono i dati. Update Il comando update ha la funzione di modificare i dati delle tabelle. Sintassi del comando update UPDATE <nome_tabella> SET <nome_campo1> = <valore1>, <nome_campo2> = <valore2>,... ; WHERE <condizione>; 11

Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET e deve essere seguito dal simbolo " = " (uguale) e dal nuovo valore che deve assumere a seguire gli altri campi separati da, (virgola). Quindi vengono modificati più campi della stessa riga in un unico comando update. Se si omette la condizione il comando aggiorna tutte le righe della tabella. È possibile restringerne il numero applicando la parola chiave aggiuntiva WHERE, che permette di effettuare una selezione delle righe: Es consideriamo l solita T_Alunni Matricola Classe NumOrdine Nome Cognome 100 3_PC 1 Lillo Lollo 101 3_PC 2 Sara Bianchi 102 3_PC 3 Letizia Buona 103 3_PC 4 Giuseppe Rossi Con il comando UPDATE T_Alunni SET Nome = Peppe, Classe = 5_Sirio, WHERE Cognome = Rossi ; otterremo: Matricola Classe NumOrdine Nome Cognome 100 3_PC 1 Lillo Lollo 101 3_PC 2 Sara Bianchi 102 3_PC 3 Letizia Buona 103 5_Sirio 4 Peppe Rossi Delete Il comando delete ha la funzione di cancellare i dati dalle tabelle. Sintassi del comando delete DELETE FROM <nome_tabella> WHERE <condizione>; Come il comando update anche delete, se si omette la condizione cancella tutte le righe della tabella. Per identificare le righe da cancellare si usa la clausola aggiuntiva WHERE e la condizione (o le condizioni) ad essa associata. Es DELETE FROM T_Alunni WHERE Matricola < 102 Otterremo Matricola Classe NumOrdine Nome Cognome 100 3_PC 1 Lillo Lollo 101 3_PC 2 Sara Bianchi DDL (Data Definition Language) Create Database Crea un nuovo database 12

Create Table Crea una nuova tabella Create View Crea una nuova vista (in MS-Access sono le query salvate ) Alter Table Modifica la struttura di una Tabella (aggiunta- eliminazione di campi, cambio tipo campi ) Drop Table Elimina la tabella dal DataBase 13