SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e...

37
Linguaggio SQL, pag. 1 SQL (Structured Query Language) E’ un gestore di data base relazionali, quindi assolve alle funzioni di Data Description Language (DDL) e di Data Management Language (DML). Inoltre può essere utilizzato sia come linguaggio d’interrogazione (QL) a se stante, di tipo non procedurale, che come linguaggio ospite (embedded) di linguaggio procedurale (come dBASE, COBOL, Visual Basic etc.). SQL=DDL + DML+ QL SQL non è un linguaggio procedurale , non possiede istruzioni di controllo condizionale, né istruzioni di salto o strutture iterative. DDL = Data Definition Language È orientato alla definizione e descrizione dei dati e delle tabelle: - nome delle relazioni (tabelle) - nome dei campi (colonne) - tipo e lunghezza dei campi (colonne) - chiavi primarie DML = Data Manipulation Language E’ composto da una serie d’istruzioni che consentono di operare sui dati per: - aprire e chiudere i file - cercare dati - inserire o cancellare dati - aggiornare il contenuto di dati già esistenti - gestire situazioni di errore QL = Query Language

Transcript of SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e...

Page 1: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 1

SQL (Structured Query Language)

E’ un gestore di data base relazionali, quindi assolve alle funzioni di Data Description Language (DDL) e di Data Management Language (DML). Inoltre può essere utilizzato sia come linguaggio d’interrogazione (QL) a se stante, di tipo non procedurale, che come linguaggio ospite (embedded) di linguaggio procedurale (come dBASE, COBOL, Visual Basic etc.).

SQL=DDL + DML+ QL

SQL non è un linguaggio procedurale , non possiede istruzioni di controllo condizionale, né istruzioni di salto o strutture iterative.

DDL = Data Definition LanguageÈ orientato alla definizione e descrizione dei dati e delle tabelle:

- nome delle relazioni (tabelle)- nome dei campi (colonne)- tipo e lunghezza dei campi (colonne)- chiavi primarie

DML = Data Manipulation LanguageE’ composto da una serie d’istruzioni che consentono di operare sui dati per:

- aprire e chiudere i file- cercare dati- inserire o cancellare dati- aggiornare il contenuto di dati già esistenti- gestire situazioni di errore

QL = Query Language

Può essere visto come una parte del DMLCome caratteristica peculiare è orientato alla ricerca interattiva di dati e dovrebbe essere di facile ed intuitivo utilizzo

SQL si basa su una visione tabellare dei dati, ossia i dati vengono organizzati in tabelle, dove le colonne sono i campi e le righe sono i record.

La terminologia SQL è più semplice e immediata rispetto ai termini matematici usati dal modello relazionale. Termini come tabella, riga, colonna, e tipo di dati, corrispondono nel modello relazionale rispettivamente a relazione, n-upla, attributo e dominio

Si definisce chiave primaria la colonna (o combinazione di colonne), che permette di individuare una riga all’interno di una tabella.

Page 2: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 2

Si definisce chiave esterna la colonna, o combinazione di colonne, che può essere usata come chiave primaria pe run’altra tabella.

Le tabelle che appartengono al data base possono essere consultate, modificate, eliminate o correlate tra loro. Cominciamo a vedere come lavorare su una tabella alla volta, con estrazioni, proiezioni, etc.. Affronteremo poi le operazioni dell’algebra relazionale che consentono unioni filtrate di più tabelle. L’istruzione basilare che consente di lavorare sulle tabelle è l’istruzione SELECT. Essa produce sempre una nuova tabella che non è una tabella base ma una tabella derivata.

TABELLA = RELAZIONE STUDENTI

CodStud Nome Cognome Anno Classe Sezione

1 Mario Bianchi 1976 1 A2 Anna Bianco 1973 2 B3 Marta Carli 1974 3 A

… … … … …345 Gianni Rossi 1972 5 A346 Max Zunini 1976 3 B

La visualizzazione può essere di tutte le colonne di tutte le righe in modo selettivo.

Chiave primaria

Riga = Record = n-upla

Colonne = Campi = Attributi

Page 3: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 3

Il comando SELECT

La sintassi generale del comando SELECT è la seguente

SELECT colonna1, colonna2, … (*= tutti)FROM nome_Tabella1, Nome_Tabella2, etc..WHERE condizioneGROUP BY colonna1, colann2, ... HAVING condizioneORDER BY colonna1, colonna2, ...

Il seguente comando

SELECT COGNOME, NOME, ANNOFROM STUDENTIORDER BY COGNOME, NOME

fornisce l’elenco degli studenti in ordine di COGNOME e, a parita’, di NOME.

Cognome Nome Anno

Bianchi Mario 1976Bianco Anna 1973

Carli Marta 1974… …Rossi Gianni 1972… …… …Zunini Max 1976

Page 4: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 4

La clausola WHERE

Introdurre FILTRI per estrarre informazioni in modo non procedurale è una caratteristica dei linguaggi che non gestiscono singoli record, ma piuttosto gruppi di records.

TABELLA DOCENTI

Nome Cognome Materia

Lara Bianco ItalianoLara Bianco StoriaMario Guidi DirittoMario Guidi EconomiaGeremia Randolfi Italiano

SELECT NOME, COGNOMEFROM DOCENTIWHERE MATERIA = “ITALIANO”

estrae dalla tabella i nominativi dei docenti che insegnano Italiano.

Nome CognomeLara BiancoGeremia Randolfi

Il seguente comando

SELECT * FROM STUDENTI WHERE CLASSE = 5AND SEZIONE=”A”

fornisce l’elenco dei maturandi del corso A.

L’operatore AND non è il solo operatore utilizzabile. Troviamo spesso anche gli operatori OR e NOT. Nel caso di combinazioni composte può essere necessario impostare un ordine di priorità lavorando con le parentesi.

Page 5: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 5

Per estrarre l’elenco dei maturandi dei corsi A e B occorre scrivere ad esempio:

SELECT * FROM STUDENTI WHERE CLASSE = 5AND (SEZIONE=”A” OR SEZIONE=”B”)

Page 6: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 6

LA CLAUSOLA DISTINCT

SQL consente che nelle sue tabelle esistano righe duplicate, come accade se ad esempio un docente insegna più di una materia. Volendo evitare la ripetizione di tali nominativi si può impostare la selezione con l’opzione DISTINCT.

Nome Cognome Materia

Lara Bianco ItalianoLara Bianco StoriaMario Guidi DirittoMario Guidi EconomiaAnna Rossi Matematica… … …

Il comando

SELECT NOME, COGNOME FROM DOCENTIproduce la seguente tabella derivata

Nome CognomeLara BiancoLara BiancoMario GuidiMario GuidiAnna Rossi

Il comando

SELECT DISTINCT NOME, COGNOME FROM DOCENTI

produce invece

Nome Cognome

Lara BiancoMario GuidiAnna Rossi… …

Page 7: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 7

Se vogliamo conoscere i nominativi degli studenti che hanno recapito telefonico, possiamo operare con

SELECT COGNOME, NOME, TELEFONO FROM STUDENTI WHERE TELEFONO IS NOT NULL

Mentre per conoscere coloro che non l’hanno:

SELECT COGNOME, NOMEFROM STUDENTI WHERE TELEFONO IS NULL

Tabella STUDENTI

Nome Cognome Indirizzo Telefono

Anita Bisio Via Roma 453559Mario Canepa Via Venezia NullCarla Repetto Via Lodi 606098Marta Ponte Vico Rosso Null

Tabella derivata degli studenti che hanno telefono

Nome Cognome Telefono

Anita Bisio 453559Carla Repetto 606098… … …

Tabella derivata degli studenti che non hanno telefono

Nome Cognome

Mario CanepaMarta Ponte

Page 8: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 8

L’uso della clausola LIKE

Spesso si cercano dei dati con informazioni approssimative. Ad esempio si cercano gli studenti nati nel 1972, mentre il campo DATA contiene, oltre all’anno, anche il giorno e il mese; oppure si cerca un docente di cui si conoscono solo le iniziali. SQL consente di impostare nella SELECT un opportuno operatore che si poggia su un simbolo, detto maschera, in quanto permette di nascondere caratteri non noti. Supponendo che il campo DATA contenga GGMMAA, si può impostare la seguente interrogazione:

SELECT NOME, COGNOMEFROM STUDENTIWHERE DATA LIKE “*72”

Per la ricerca attraverso le iniziali (M, B):

SELECT NOME, COGNOMEFROM STUDENTIWHERE NOME LIKE ”M*” AND COGNOME LIKE ”B*”

Il simbolo * indica che si ignorano i caratteri precedenti o successivi, se esso è posto rispettivamente, prima o dopo la stringa nota. Qualoro il carattere non noto sia esattamente uno, si usa come maschera il simbolo ?.

Page 9: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 9

L’uso della clausola BETWEEN

Per selezionare tutti gli studenti del triennio, si può operare in due modi:

SELECT NOME, COGNOMEFROM STUDENTIWHERE CLASSE >=3AND CLASSE <=5

Oppure in modo più sintetico:

SELECT NOME, COGNOMEFROM STUDENTIWHERE CLASSE BETWEEN 3 AND 5

Page 10: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 10

La clausola GROUP BY

L’istruzione SELECT può essere arricchita di utili opzioni che permettono di raggruppare le righe secondo determinati criteri. Una tipica applicazione gestionale è la rottura di codice, ossia il riepilogo dei dati raggruppati per codice. SQL consente all’utente di ottenere direttamente prospetti riepilogativi senza dover affrontare tutti i dettagli della gestione tradizionale. Supponiamo di voler conteggiare il numero totale di alunni per ogni classe e sezione della scuola. Si procede con:

SELECT CLASSE, SEZIONE, COUNT (*)FROM STUDENTIGROUP BY SEZIONE, CLASSE ORDER BY SEZIONE, CLASSE

La funzione COUNT(*) conteggia, per ogni gruppo specificato, il numero totale di righe della tabella. Il risultato viene allora a contenere, per ogni sezione e classe, il numero degli studenti

Il seguente comando

SELECT NOME, COGNOME, CLASSE, SEZIONEFROM STUDENTIORDER BY SEZIONE, CLASSE

poroduce la seguente tabella

Nome Cognome Sezione Classe

Orlando Russo A 1Luca Franceschinelli A 1Fabrizio Gottardo A 1Simona Mingardi A 1Francesco Furlan A 2Marta Robertelli A 2Alfredo Girardelli A 2Miriam Antonetti A 2Giulia Filangeri A 2Nicoletta Borrelli A 3… … … …Rosario Matera B 5Rosalia Disassonia B 5

Page 11: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 11

Utilizzando la clausola ORDER BY

SELECT CLASSE, SEZIONE, COUNT (*)FROM STUDENTIGROUP BY SEZIONE, CLASSE ORDER BY SEZIONE, CLASSE

viene restituita la seguente tabella derivata

Sezione Classe CountA 1 4A 2 5A 3 10… … …B 5 21

Oltre alla funzione Count(*) esisto altre funzioni che consentono di effettuare semplici calcoli senza ricorrere ad istruzioni del linguaggio ospite, spesso più complicate.Ad esempio troviamo le seguenti funzioni di aggregazione:

- SUM per calcolare la somma dei valori- AVG per calcolare la media dei valori- MAX per determinare il valore massimo- MIN per determinare il valore minimo

La sintassi prevede FUNZ(colonna). Se non si mette la clausola GROUP, allora la funzione si applica a tutti i valori della colonna, considerando la tabella come un unico gruppo.

Supponiamo di disporre della seguente tabella VOTI

Nome Cognome Materia Voto

Bianca Marano Italiano 4Luciano Verdi Sistemi 5Bianca Marano Sistemi 7Alfredo Lucarelli Inglese 3Salvatore Esposito Inglese 8Salvatore Esposito Matematica 6Bianca Marano Informatica 7

Page 12: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 12

Per ottenere l’elenco degli studenti con la relativa media dei voti si imposta:

SELECT NOME, COGNOME, AVG(VOTO)FROM VOTIGROUP BY NOME, COGNOMEORDER BY COGNOME, NOME

Cognome Nome Avg(Voto)

Esposito Salvatore 7Lucarelli Alfredo 3Marano Bianca 6Verdi Luciano 5

Con la clausola ORDER BY AVG(Voto) si ottiene una lista in ordine di voto medio

Per ottenere la media complessiva si può ricorrere al seguente comando SQL:

SELECT AVG(Voto)FROM VOTI

In assenza della clausola GROUP BY, le funzioni di aggregazione COUNT, SUM, etc restituiscono un valore unico per l’intera colonna cui sono apllicate.

Page 13: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 13

La clausola HAVING

La clausola Having consente di selezionare nei gruppi specificati i record che soddisfano ulteriori condizioni. E’ simile alla condizione WHERE ma agisce sul risultato della GROUP BY.

SELECT MATERIA, COUNT(*)FROM DOCENTIGROUP BY MATERIA HAVING MATERIA=”STORIA”

Tabella di partenza DOCENTINome Cognome Materia

Lara Bianco ItalianoLara Bianco StoriaMario Guidi DirittoMario Guidi EconomiaLucia Zucconi StoriaAlfio Righetti StoriaAnna Rossignuolo DirittoGiuseppina Merlino Italiano

L’applicazione del seguente comando

SELECT MATERIA, COUNT(*)FROM DOCENTIGROUP BY MATERIA

produce la seguente tabella derivata

Materia Count(*)

Italiano 2Storia 3Diritto 2Economia 1

Applicando poi la clausola Having MATERIA=”STORIA” si ottiene

Materia Count(*)Storia 3

Page 14: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 14

ESERCIZI

Sulla tabella docenti:1) Estrarre l’elenco degli insegnanti (solo nome e cognome)2) Ordinare per materia, cognome e nome3) Cercare quelli che hanno in comune la materia insegnata (ad esempio Italiano)4) Calcolare il totale degli insegnanti5) Contare gli insegnanti per materia6) Mostrare tugli insegnanti il cui nome inizia per “R”

Sulla tabella Alunni1) Estrarre l’elenco degli allievi della 5 A2) Estrarre l’elenco degli allievi del corso A ordinato per Classe, Cognome, Nome3) Estrarre l’elenco degli allievi il cui cognome comincia per “RO”4) Contare il numero degli allievi della 5a

Page 15: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 15

La clausola UNION

Spesso è utile ottenere il risultato di più selezioni in modo combinato per rendere meglio certe idee e favorire così l’estrapolazione d’informazioni. Si possono impostare più operazioni SELECT, una di seguito all’altra, purché si ponga un’opzione UNION tra loro. Tale funzione consente di accedere ai dati di due o più tabelle contemporaneamente in questo modo: vengono prima selezionate le righe della prima tabella, a questa vengono accodate le righe selezionate dalla seconda e così via. Le righe duplicate di norma vengono soppresse. Le colonne da porre nella lista finale devono essere dello stesso numero e dello stesso tipo, ma non necessariamente devono avere lo stesso nome. Inoltre si possono porre tutte le opzioni viste per la selezione (filtri, raggruppamenti, etc.). Tuttavia solo l’ultima SELECT può contenere la clausola ORDER BY in quanto tale clausola riguarda la visualizzazione finale del risultato e non l’impostazione dell’elaborazione che lo genera. Supponiamo di disporre di tre tabelle contenenti rispettivamente i dati anagrafici degli studenti delle tre classi di una scuola media. Vogliamo ottenere un elenco generale di nominativi.

Tabella PRIMANome Cognome Indirizzo CittàOrlando Russo Via Giglio, 7 CanosaLuca Franceschinelli Via Rose Rosse, 2 LavelloMario Massa Via Crisantemo, 9 CandelaSimona Mingardi Via Garofano, 9 Canosa

Tabella SECONDANome Cognome Indirizzo CittàFrancesco Furlan Viale dei Papaveri, 1 LavelloMarta Robertelli Piazza Ciclamino, 9 CanosaAlfredo Girardelli Via Fiordaliso, 9 CerignolaMiriam Antonetti Viale delle Rose, 12 Cerignola

Tabella TERZANome Cognome Indirizzo CittàGiulia Filangeri Via Geranio, 15 CerignolaNicoletta Borrelli Corso Orchidea, 3 CanosaPaola Mandrisi Via Fiori d’Arancio, 1 CerignolaRosario Matera Vico Margherita, 12 LavelloRosalia Disassonia Viale Lilium, 44 Canosa

Page 16: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 16

Per ottenere un elenco generale di nominativi è sufficiente impostare:

SELECT COGNOME, NOMEFROM PRIMAUNIONSELECT COGNOME, NOMEFROM SECONDAUNIONSELECT COGNOME, NOMEFROM TERZA

In questo modo si ottiene:

Nome CognomeOrlando RussoLuca FranceschinelliMario MassaSimona MingardiFrancesco FurlanMarta RobertelliAlfredo GirardelliMiriam AntonettiGiulia FilangeriNicoletta BorrelliPaola MandrisiRosario MateraRosalia Disassonia

Volendo ottenere l’elenco solo degli studenti residenti nella città di CANOSA, si può impostare una condizione sul campo CITTA:

SELECT COGNOME, NOMEFROM PRIMA WHERE CITTA=”CANOSA”UNIONSELECT COGNOME, NOMEFROM SECONDAWHERE CITTA=”CANOSA”UNIONSELECT COGNOME, NOMEFROM TERZAWHERE CITTA=”CANOSA”

Page 17: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 17

che produce la seguente tabella derivata

Nome CognomeOrlando RussoSimona MingardiMarta RobertelliNicoletta BorrelliRosalia Disassonia

Page 18: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 18

L’operatore IN

Il Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione interna) per effettuarne un’altra (selezione esterna), che è vista come sottorichiesta della precedente. Vediamo come legare fra loro le richieste attraverso l’operatore IN.

Supponiamo di disporre di due tabelle, una relativa ai FORNITORI e una relativa ai PRODOTTI forniti.

Tabella FornitoriCodFor Nome Cognome Indirizzo

A10 Mario Bianchi Via Pisa, 3 - GenovaA73 Carlo Rossi Via Cavour, 8 – SavonaA15 Giulio Verdi Via Pescara, 6 – Bari… … … …

Tabella ProdottiDescrizione CodForFloppy A10Nastro A73Cartuccia Ink-Jet A15Floppy A15

… Per selezionare i dati del fornitore che ha fornito un certo prodotto (ad esempio dei floppy), possiamo impostare la richiesta come segue:

SELECT COGNOME, NOMEFROM FORNITORIWHERE CODFOR IN (SELECT CODFOR FROM PRODOTTI WHERE DESCRIZIONE=’FLOPPY’)

Page 19: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 19

La SELECT interna (SELECT codfor FROM prodotti WHERE descrizione=’floppy’) produce il seguente risultato intermedio:

CodForA10A15…

Questa tabella rappresenta l’insieme all’interno del quale agisce l’operatore della SELECT esterna (SELECT cognome, nome FROM fornitori WHERE codfor IN …).Il risultato della ricerca è quindi:

Tabella derivataNome CognomeMario BianchiGiulio Verdi… …

Se poi vogliamo conoscere l’elenco dei fornitori che non hanno fornito alcun materiale, dobbiamo scrivere:

SELECT COGNOME, NOMEFROM FORNITORIWHERE CODFOR NOT IN (SELECT CODFOR FROM PRODOTTI)

Page 20: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 20

La fusione di tabelle (JOIN)

Un’istruzione di selezione si dice di JOIN se nella clausola FROM intervengono due o più tabelle e nella clausola WHERE si confrontano colonne di tabelle diverse. La clausola WHERE opzionale. Se viene omessa, il risultato è un’esplosione data dalla combinazione di tutte le righe di tutte le tabelle. Di solito tale clausola sarà presente per ottenere, non tutte le combinazioni, ma solo quelle che soddisfano una certa condizione. L’attributo, o la combinazione d’attributi, di una tabella che serve per individuare le righe dell’altra tabella gioca, nei confronti di quest’ultima, il ruolo di chiave esterna. Per specificare di quale tabella una colonna fa parte, si usa il segno di punteggiatura < . >. Quindi DOCENTI.NOME e STUDENTI.NOME, indicano la colonna NOME rispettivamente della tabella DOCENTI e di quella STUDENTI.

Esempio sul JOIN fra due tabelle

Tabella STUDENTIMatricola Nome Cognome CorsoLaurea AnnoDiCorsoS-560 Luigi Collovati L21 2S-420 Pietro Zenga L23 1S-301 Fulvio Conti L21 3

Tabella CORSICodiceCorso NomeCorsoL21 Ingegneria InformaticaL23 Scienze delle Tecnologie Alimentari

Chiave primaria Chiave esterna

Chiave Primaria

Page 21: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 21

Se applichiamo la seguente SELECT

SELECT STUDENTI.NOME, STUDENTI.COGNOME, STUDENTI.CORSOLAUREA, CORSI.CODICECORSO CORSI.NOMECORSOFROM STUDENTI, CORSI

otteniamo una tabella derivata come prodotto cartesiano delle righe della prima tabella (STUDENTI) con le righe della seconda tabella (CORSI).

Tabella derivataNome Cognome CorsoLaurea CodiceCorso NomeCorsoLuigi Collovati L21 L21 Ingegneria InformaticaLuigi Collovati L21 L23 Scienze delle Tecnologie

AlimentariPietro Zenga L23 L21 Ingegneria InformaticaPietro Zenga L23 L23 Scienze delle Tecnologie

AlimentariFulvio Conti L21 L21 Ingegneria InformaticaFulvio Conti L21 L23 Scienze delle Tecnologie

Alimentari

Le informazioni in essa contenute sono inutili ma se applichiamo la clausola WHERE STUDENTI.CORSOLAUREA=CORSI.CODICECORSO, SQL estrae dalla tabella precedente solo le righe che hanno senso.

SELECT STUDENTI.NOME, STUDENTI.COGNOME, STUDENTI.CORSOLAUREA, CORSI.CODICECORSO CORSI.NOMECORSOFROM STUDENTI, CORSI WHERE STUDENTI.CORSOLAUREA=CORSI.CODICECORSO

SELECT STUDENTI.NOME, STUDENTI.COGNOME, STUDENTI.CORSOLAUREA, CORSI.CODICECORSO CORSI.NOMECORSOFROM STUDENTI INNER JOIN CORSI ON STUDENTI.CORSOLAUREA=CORSI.CODICECORSO

Page 22: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 22

Tabella derivataNome Cognome CorsoLaurea CodiceCorso NomeCorsoLuigi Collovati L21 L21 Ingegneria InformaticaPietro Zenga L23 L23 Scienze delle Tecnologie

AlimentariFulvio Conti L21 L21 Ingegneria Informatica

Quando non serve avere i rispettivi codici si può invece scrivere la seguente:

SELECT STUDENTI.NOME, STUDENTI.COGNOME, CORSI.NOMECORSOFROM STUDENTI, CORSI WHERE STUDENTI.CORSOLAUREA=CORSI.CODICECORSO

che permette di ottenere questa tabella derivata:

Tabella derivataNome Cognome NomeCorsoLuigi Collovati Ingegneria InformaticaPietro Zenga Scienze delle Tecnologie AlimentariFulvio Conti Ingegneria Informatica

Page 23: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 23

Il comando UPDATE

E’ possibile operare sui dati sia in modo complessivo sia in modo selettivo. In ogni caso gli operatori di modifica, come tutti gli altri, operano sempre su gruppi di dati. La sintassi generale è:

UPDATE tabellaSET colonna=nuovo_valore[WHERE condizione]

La clausola WHERE consente di selezionare le righe da trattare.

Supponiamo che cambi la descrizione di una materia, ad esempio da STORIA si passi a STORIA E EDUCAZIONE CIVICA. A partire dalla tabella:

Tabella DOCENTINome Cognome Materia

Lara Bianco ItalianoLara Bianco StoriaMario Guidi DirittoMario Guidi EconomiaLucia Zucconi StoriaAlfio Righetti StoriaAnna Rossignuolo DirittoGiuseppina Merlino Italiano

si può procedere con:

UPDATE DOCENTISET MATERIA=” STORIA E EDUCAZIONE CIVICA ”WHERE MATERIA=”STORIA”

Supponiamo di disporre di una tabella LISTINO con i prezzi dei testi in adozione e supponiamo che ci sia stato, per tutti, un aumento del 2%. Si può operare come segue:

UPDATE LISTINOSET PREZZO=PREZZO * 1.02

Page 24: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 24

Il comando INSERT

L’inserimento successivo di dati può avvenire con un’apposita istruzione che opera direttamente prendendo i dati immessi:

INSERT INTO tabellaVALUES (dato1, dato2, ….)

Per aggiungere una nuova riga alla tabella docenti si può scrivere da esempio:

INSERT INTO DocentiVALUES (“Mario”, “Rossi”, “Italiano”)

Nome Cognome Materia

Lara Bianco ItalianoLara Bianco StoriaMario Guidi DirittoMario Guidi EconomiaLucia Zucconi StoriaAlfio Righetti StoriaAnna Rossignuolo DirittoGiuseppina Merlino ItalianoMario Rossi Italiano

Page 25: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 25

Il comando DELETE

Si possono cancellare definitivamente intere righe di una tabella, con l’istruzione

DELETE FROM tabellaWHERE condizione.

Con la seguente istruzione

DELETE FROM DOCENTIWHERE Materia=”Italiano”

Si cancellano dalla tabella DOCENTI gli insegnanti d’Italiano

Tabella derivataNome Cognome Materia

Lara Bianco StoriaMario Guidi DirittoMario Guidi EconomiaLucia Zucconi StoriaAlfio Righetti StoriaAnna Rossignuolo Diritto

Si possono anche cancellare tutte le righe con:

DELETE FROM tabella

Page 26: SQL (Structured Query Language) · Web viewIl Query Language contenuto in SQL è piuttosto ricco e consente di annidare le richieste, utilizzando il risultato di una selezione (selezione

Linguaggio SQL, pag. 26

Date le seguenti tabelle

Tabella BIBLIO1CodiceISBN Titolo CodAutore CodEditore88-214 Basic e Applicazioni 3 273-767 Probabilità e Statistica 1 266-878 Sistemi e Automazione 2 177-700 Analisi Matematica 4 1

Tabella BIBLIO2CodiceISBN Titolo CodAutore CodEditore45-320 Esercizi di Elettronica 1 388-761 Informatica 4 577-700 Analisi Matematica 4 143-563 Automazione 2 5

Tabella AUTORICodAutore Nome1 Petracchi Aldo2 Longo Luca3 Manzone Ernesto4 Pasini Pietro

Tabella EDITORICodAutore Nome1 Calderini2 Etas Libri3 Tramontana

1) Visualizzare l’elenco dei libri della tabella BIBLIO1 e dei relativi autori2) Visualizzare l’elenco di tutti i libri presenti nelle due biblioteche, ordinato per

autore3) Eliminare la riga con CodiceISBN=77-700 dalla tabella BIBLIO2.4) Aggiungere l’autore GARAVAGLIA ANTONIO in fondo alla tabella AUTORI 5) Modificare la colonna CodEditore della tabella BIBLIO2 sostituendo il valore 5

con il valore 16) Visualizzare l’elenco completo dei libri di Biblio1 con relativi autori e Casa

editrice.