SQL Language Introduction Main features Standard Datatypes CREATE TABLE command INSERT, UPDATE and DELETE commands BETWEEN, LIKE, IN, IS NULL operators.

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

TIPI STANDARD DI SQL BOOLEAN Valori: vero, falso CHAR(n)
Structured Query Language
SQL applicato a SQL Server
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
1 Comandi per la manipolazione dei dati. 2 Tipi di comandi INSERT UPDATE DELETE COMANDI COMANDI 2.
DML – Data Manipulation Language
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
SCUOLA INTERUNIVERSITARIA SICILIANA DI SPECIALIZZAZIONE PER LINSEGNAMENTO SECONDARIO Classe di Concorso: 42A Massimo Mancino MODULO DIDATTICO - Ambienti.
SQL.
SQL Structured Query Language
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Corso di Informatica (Basi di Dati)
1 Corso di Laurea in Biotecnologie Informatica (Basi di Dati) SQL: Data Manipulation Language (DML) Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi,
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Basi di dati Università Degli Studi Parthenope di Napoli
SQL: Lezione 7 Nataliya Rassadko
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Equivalenza di espressioni
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
SQL SQL (pronunciato anche come l’inglese sequel) è l’acronimo di Structured Query Language (linguaggio di interrogazione strutturato) E’ un linguaggio.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
SQL basato su ANSI (American National Standards Institute) – standard SQL SQL – Structured Query Language è un linguaggio dichiarativo e permette di comunicare.
Basi di dati Claudia Raibulet
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
sql: esempi di linguaggio sql nell'implementazione mysql
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
DATABASE Introduzione
Sistemi Informativi Insieme di “strutture” in grado di acquisire, elaborare, trasmettere ed archiviare informazioni in genere ad uso di un’organizzazione.
Informatica II – Basi di Dati (07/08) – Parte 2 Gianluca Torta Dipartimento di Informatica dell’Università di Torino
Microsoft Access (parte 5) Introduzione alle basi di dati Scienze e tecniche psicologiche dello sviluppo e dell'educazione, laurea magistrale Anno accademico:
SEFOC – SETTORE FORMAZIONE CONTINUA DEL PERSONALE CORSO MYSQL AVANZATO ROBERTO PENNOLINO – CARMELO MASSIMO PRIOLO PALERMO – 07 | 06 | 2011.
Microsoft Access Query (II), filtri.
SQL (IV) Data Definition Language/ Data Manipulation Language.
Pagine ASP parte 3 I data base Stefano Schacherl.
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
1 Basi di Dati S tructured Q uery L anguage Appunti Matteo Longhi.
SQL (III) Data Definition Language/ Data Manipulation Language.
MySQL Database Management System
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Lezione 6 - SQL. Linguaggi per DB Per interagire con le basi di dati occorre un linguaggio Linguaggio SQL (Structured Query Language), linguaggio standardizzato.
© 2015 Giorgio Porcu - Aggiornamennto 28/03/2015 UdA 1A Database Progettazione Fisica G IORGIO P ORCU
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Microsoft Access Filtri, query. Filtri Un filtro è una funzione che provoca la visualizzazione dei soli record contenenti dati che rispondono a un certo.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
SQL Linguaggio per l’interrogazione di una base dati.
Access Breve introduzione. Componenti E’ possibile utilizzare Access per gestire tutte le informazioni in un unico file. In un file di database di Access.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
SQL Language Introduction Main features Standard Datatypes CREATE TABLE command INSERT, UPDATE and DELETE commands BETWEEN, LIKE, IN, IS NULL operators.
Esercizi SQL Group by. CREATE TABLE dipendente (codDip CHAR(8) NOT NULL UNIQUE PRIMARY KEY, cognome CHAR(60) NOT NULL, nome CHAR(60) NOT NULL, stipendio.
Transcript della presentazione:

SQL Language Introduction Main features Standard Datatypes CREATE TABLE command INSERT, UPDATE and DELETE commands BETWEEN, LIKE, IN, IS NULL operators and NOT connective SELECT command

2 Introduction to SQL SQL (Structured Query Language) is a language for relational databases management (RDBMS) created in the early 1970s by two IBM researchers: Donald D. Chamberlin and Raymond F. Boyce Donald. RDBMS as Relational Database Management System

3 SQL=DDL+DML+QL SQL contains all commands belonging to RDBMS languages: DDL (Data Definition Language) to create new databases and to create/modify relationships schemas. DML (Data Manipulation Language) to manipulate (to insert, update and delete) data contained into relationships QL (Query Language) to search for data into databases.

4 SQL=DDL+DML+QL DDL QL DML SQL

5 SQL Identifiers SQL identifiers (table names e table fields) consist of a sequence of maximum 18 characters starting with a letter containing (and not starting with) ‘_’ (underscore) symbol. A field identifier format is the following: TableName.FieldName For example: STUDENTS.StudentID indicates that StudentID belongs to STUDENTS relationship.

6 Standard SQL DataTypes SQL StandardDescriptionSQL MS ACCESSMS ACCESS BOOLEANBoolean valueBITSì/No CHAR(n)N chars maximum textCHAR(n)Testo (max 255 chars) DATEDate GG/MM/AAAADATEData/Ora TIMETime with format HH:MM:ssTIMEData/Ora INTEGER(p)p-precision ItegerINT or INTEGERIntero lungo (da a byte) SMALLINTSmall IntegerSMALLINTIntero (da a byte) DECIMAL / NUMERIC Long Decimal NumberREALSingle (single precision – 4 byte) FLOATNumero floating pointFLOATDouble (double precision – 8 byte) --CounterCOUNTER o AUTOINCREMENT Numerazione automatica --Monetary amountCURRENCYValuta

7 CREATE TABLE command This command creates a new table. The syntax is: CREATE TABLE (, …, PRIMARY KEY ( ) ); NOT NULL= mandatory (In MS Access, Richiesto=Sì) NULL = not mandatory (In MS Access, Richiesto=No)

8 CREATE TABLE command For example, the following command creates a new table named PHONES containing the following fields: PhoneID (PK), Brand (mandatory) e Model (mandatory): CREATE TABLE PHONES ( PhoneID INTEGER, Brand CHAR(20) NOT NULL, Model CHAR(20) NOT NULL, PRIMARY KEY (PhoneID) ); NOT NULL= mandatory (In MS Access, Richiesto=Sì) NULL = not mandatory (In MS Access, Richiesto=No)

9 CREATE TABLE command The Foreign key is declared as shown: CREATE TABLE (, …, PRIMARY KEY ( ), FOREIGN KEY ( ) REFERENCES ( ) ); NOT NULL= mandatory (In MS Access, Richiesto=Sì) NULL = not mandatory (In MS Access, Richiesto=No)

10 CREATE TABLE command The following example creates a new table named PHONES where ProducerID field is foreign key towards la tabella PRODUCERS table which has ID as primary key: CREATE TABLE PHONES ( PhoneID INTEGER, Model CHAR(20) NOT NULL, ProducerID INTEGER, PRIMARY KEY (PhoneID), FOREIGN KEY (ProducerID) REFERENCES PRODUCERS(ID) );

11 CREATE TABLE command CREATE TABLE is a DDL command because it creates a new table.

12 Il comando INSERT INTO Il comando INSERT INTO serve a inserire nuove righe nelle tabelle: INSERT INTO (nomecampo1, nomecampo2,…., nomecampoN) VALUES (valorecampo1,valorecampo2,valorecampoN); Ad esempio: INSERT INTO Impiegati (CodiceImpiegato,Cognome,Nome) VALUES (17,’Rossi’,’Mario’) Inserisce una nuova riga nella tabella ‘Impiegati’ dove il campo CodiceImpiegato è 17, Cognome è ‘Rossi’ e Nome è ‘Mario’

13 Il comando INSERT INTO I testi e le date devono essere delimitati dall’apice (ad es: ‘Rossi’ ) I numeri ed i valori logici (Sì e No) non devono essere delimitati dall’apice Ad esempio: INSERT INTO ANAGRAFICA (CodicePersona,Cognome,Nome,DataNascita,Sposato,Reddito) VALUES (24,’Verdi’,’Giuseppe’,’ ’,False, ) La INSERT INTO è un comando di manipolazione di dati quindi è un comando DML.

14 Il comando UPDATE Il comando UPDATE permette di modificare una o più righe presenti in una tabella: UPDATE NomeTabella SET nomecampo1=NuovoValoreCampo1, Nomecampo2=NuovoValoreCampo2, … NomecampoN=NuovoValoreCampoN WHERE ElencoCondizioni

15 Il comando UPDATE: esempio 1/4 Ad es.: UPDATE ANAGRAFICA SET Reddito= , DataNascita=' ' WHERE ANAGRAFICA.CodicePersona=24; Modifica la tabella ANAGRAFICA mettendo nel campo Reddito il valore e nel campo DataNascita il valore ' ‘ (31/12/1980) in tutte le righe che contengono CodicePersona uguale a 24.

16 Il comando UPDATE: esempio 2/4 Ad es.: UPDATE ANAGRAFICA SET DataNascita=' ' WHERE ANAGRAFICA.Reddito >= 1000; Modifica la tabella ANAGRAFICA mettendo nel campo DataNascita il valore ' ‘ (01/12/1980) in tutte le righe che contengono nel campo Reddito un valore maggiore uguale (>=) di 1000.

17 Il comando UPDATE: esempio 3/4 Ad es.: UPDATE ANAGRAFICA SET Sposato=True WHERE Cognome='Verdi' AND Nome='Giuseppe‘; Modifica la tabella ANAGRAFICA mettendo nel campo Sposato il valore True in tutte le righe che contengono contemporaneamente (AND) Cognome uguale a 'Verdi' e Nome uguale a 'Giuseppe'.

18 Il comando UPDATE: esempio 4/4 Ad es,: UPDATE ANAGRAFICA SET Sposato=True WHERE Cognome='Verdi' OR Nome='Giuseppe‘; Modifica la tabella ANAGRAFICA mettendo nel campo Sposato il valore True in tutte le righe che contengono Cognome uguale a 'Verdi' oppure (OR) Nome uguale a 'Giuseppe'.

19 Esercizio sulla UPDATE Esercizio: “Metti a 0,77 il prezzo dell’articolo con codice uguale a 55” CodiceArticoloDescrizionePrezzoCategoria 55Molletta mod Mollette 771Tappo mod. Jessica0.23Tappi 13Chiodo a testa larga0.11Chiodi 61Chiodo a testa stretta0.09Chiodi ARTICOLO UPDATE ARTICOLO SET Prezzo=0.77 WHERE CodiceArticolo=55

20 Esercizio sulla UPDATE CodiceArticoloDescrizionePrezzoCategoria 55Molletta mod Mollette 771Tappo mod. Jessica0.23Tappi 13Chiodo a testa larga0.11Chiodi 61Chiodo a testa stretta0.09Chiodi ARTICOLO CodiceArticoloDescrizionePrezzoCategoria 55Molletta mod Mollette 771Tappo mod. Jessica0.23Tappi 13Chiodo a testa larga0.11Chiodi 61Chiodo a testa stretta0.09Chiodi UPDATE ARTICOLO SET Prezzo=0.77 WHERE CodiceArticolo=55

21 Il comando DELETE 1/2 Come cancellare una o più righe da una tabella? DELETE FROM WHERE ; Esempio: Cancella le righe in STUDENTI in cui COGNOME è uguale a ‘Williams’ DELETE FROM STUDENTI WHERE COGNOME=‘Williams’

22 Il comando DELETE 2/2 Esempio n.1: Cancella i clienti che risiedono a Bari Supponiamo di aver creato le seguente relazione: CLIENTI(CodiceCliente,RagioneSociale,Indirizzo,Cap,Città,Fatturato ) Esempio n.2: Cancella i clienti che risiedono a Bari e che hanno fatturato maggiore di euro DELETE FROM CLIENTI WHERE CITTA’=‘BARI’ DELETE FROM CLIENTI WHERE CITTA’=‘BARI’ AND FATTURATO > 10000

23 L’operatore BETWEEN Esempio: Cancella i clienti che hanno fatturato compreso tra e euro Senza operatore BETWEEN DELETE FROM CLIENTI WHERE FATTURATO>=10000 AND FATTURATO<=40000 Con operatore BETWEEN DELETE FROM CLIENTI WHERE FATTURATO BETWEEN AND La clausola BETWEEN traduce il ‘compreso tra’ e sostituisce la condizione più complessa ‘ valore1<=x<=valore2 ’. L’operatore si può usare con la UPDATE, DELETE ed i comandi QL.

24 L’operatore LIKE 1/3 Esempi di uso del simbolo jolly Se ho tre parole, ad esempio: CAVALLO, CAVALIERE e STALLIERE 1.L’espressione ‘CAV*’ estrae CAVALLO e CAVALLIERE 2.L’espressione ‘*LIERE’ estrae CAVALIERE E STALLIERE e non CAVALLO 3.L’esperessione ‘C*LIERE’ estrae solo CAVALIERE La clausola LIKE è usata nelle condizioni per indicare come inizia e come finisce un testo. L’operatore si può usare con la UPDATE, la DELETE ed i comandi QL. Il simbolo che viene usato (detto simbolo jolly) è l’asterisco ‘*’.

25 L’operatore LIKE 2/3 Esempio n.1: Cancella i clienti con ragione sociale che inizia con ‘LOS’ DELETE FROM CLIENTI WHERE RagioneSociale LIKE ‘LOS*’ Esempio n.2: Cancella i clienti con ragione sociale che finisce con ‘s.r.l.’ DELETE FROM CLIENTI WHERE RagioneSociale LIKE ‘*s.r.l.’

26 L’operatore LIKE 3/3 Esempio n.3: Cancella i clienti con ragione sociale che inizia con ‘LOS’ e finisce con ‘s.p.a.’ DELETE FROM CLIENTI WHERE RagioneSociale LIKE ‘LOS*s.p.a.’

27 L’operatore IN L’operatore IN serve a rendere più sintetico un enunciato composto da più OR su uno stesso campo. L’operatore si può usare nella clausola WHERE (UPDATE, DELETE e QL). Ad esempio: Cancella i clienti che risiedono a Bari oppure a Torino oppure a Trieste Con operatore IN DELETE FROM CLIENTI WHERE Città IN (‘Bari’,’Torino’,’Trieste’) Senza operatore IN DELETE FROM CLIENTI WHERE Città=‘Bari’ or Città=‘Torino’ or Città=‘Trieste’

28 L’operatore IS NULL L’operatore IS NULL indica che si vuole considerare il valore nullo in un certo campo. L’operatore si può usare nella clausola WHERE (UPDATE, DELETE e QL). Esempio 1 Cancella i clienti per i quali non è indicata la città di residenza DELETE FROM CLIENTI WHERE Città IS NULL Esempio 2 Cancella i clienti per i quali è indicata la città di residenza DELETE FROM CLIENTI WHERE Città IS NOT NULL

29 Il connettivo NOT Il connettivo NOT corrisponde al connettivo booleano della negazione e lo si può usare nella clausola WHERE (UPDATE, DELETE e QL). Esempio 1...WHERE NOT Fatturato>10000 Considera tutte le righe in cui il fatturato NON è maggiore di Esempio 2...WHERE NOT (FATTURATO<10000 AND RAGIONESOCIALE LIKE 'Cart*') Considera le righe nelle quali NON è verificata la condizione FATTURATO<10000 AND RAGIONESOCIALE LIKE 'Cart*'

30 Il comando SELECT Il comando SQL rappresenta il comando di interrogazione (QL). Implementa sia l’operatore di proiezione che di selezione. SELECT,,..., FROM WHERE Esempio 1: Elenca tutti i clienti SELECT * FROM CLIENTI * = estrae tutti i campi della tabella CLIENTI Se la clausola WHERE non è presente significa che vengono selezionate tutte le righe della tabella

31 Il comando SELECT Esempio 2: Elenca la ragione sociale, l’indirizzo, il cap e la città di tutti i clienti SELECT RagioneSociale,Indirizzo,Cap,Città FROM CLIENTI Esempio 3: Elenca la ragione sociale e la città dei clienti che risiedono a Bari ed il fatturato è maggiore di euro SELECT RagioneSociale,Indirizzo,Cap,Città FROM CLIENTI WHERE città=‘Bari’ and fatturato>10000

32 Il comando SELECT: ordinamento L’ordinamento crescente (ASC) nella SELECT Esempio 4: Elenca la ragione sociale ed il fatturato dei clienti ordinati in modo crescente per ragione sociale SELECT RagioneSociale,fatturato FROM CLIENTI ORDER BY RagioneSociale asc L’ordinamento decrescente (DESC) nella SELECT Esempio 5: Elenca la ragione sociale ed il fatturato dei clienti ordinati per fatturato in modo decrescente SELECT RagioneSociale,fatturato FROM CLIENTI ORDER BY fatturato desc

33 Le join interne Le join interne (equi-join e natural-join) si traducono facendo il prodotto cartesiano tra le due tabelle ed imponendo la condizione di join sugli attributi comuni. SELECT FROM, WHERE

34 Le join interne Es. 1: elenca la ragione sociale, il fatturato, la ragione sociale e la zona del rappresentante di tutti i clienti SELECT CLIENTI.RagioneSociale,CLIENTI.Fatturato, RAPPRESENTANTI.RagioneSociale FROM CLIENTI, RAPPRESENTANTI WHERE CLIENTI.CodRap=RAPPRESENTANTI.CodRappr CLIENTI.RagioneSocialeCLIENTI.FatturatoRAPPRESENTANTI.RagioneSociale Autostar srl ,10F. Gancia s.a.s. Inchingolo snc45.300,00AutoRap s.n.c.

35 Le join interne Es. 2: elenca la ragione sociale, il fatturato, la ragione sociale del rappresentante dei clienti che hanno fatturato maggiore di euro ordinati per la ragione sociale del cliente in modo crescente SELECT CLIENTI.RagioneSociale, CLIENTI.Fatturato, RAPPRESENTANTI.RagioneSociale FROM CLIENTI, RAPPRESENTANTI WHERE (CLIENTI.CodRap=RAPPRESENTANTI.CodRappr) AND (CLIENTI.Fatturato>100000) ORDER BY CLIENTI.RagioneSociale ASC; CLIENTI.RagioneSocialeCLIENTI.FatturatoRAPPRESENTANTI.RagioneSociale Autostar srl ,10F. Gancia s.a.s.

36 Le join interne Es. 3: elenca la ragione sociale, il fatturato, la ragione sociale del rappresentante dei clienti che hanno ragione sociale che inizia con ‘Inc’ oppure fatturato compreso tra e euro ordinati per la ragione sociale del cliente in modo crescente SELECT CLIENTI.RagioneSociale, CLIENTI.Fatturato, RAPPRESENTANTI.RagioneSociale FROM CLIENTI, RAPPRESENTANTI WHERE (CLIENTI.CodRap=RAPPRESENTANTI.CodRappr) AND (CLIENTI.Fatturato BETWEEN AND 50000) AND CLIENTI.RagioneSociale LIKE ‘Inc*’ ORDER BY CLIENTI.RagioneSociale ASC; CLIENTI.RagioneSocialeCLIENTI.FatturatoRAPPRESENTANTI.RagioneSociale Inchingolo snc45.300,00AutoRap s.n.c.

37 Le join multiple Ci possono essere casi in cui i dati richiesti sono presenti in tabelle che non sono direttamente associate. Ad es. A partire dalle relazioni FATTURE(codfattura,datafattura,cliente) VOCIFATTURE(codfattura,codprodotto,quantità,prezzo) PRODOTTI(codprodotto,nomeprodotto) si vuole ottenere per ogni nome del prodotto, i corrispondenti codici e date delle fatture.

38 Le join multiple1/3 Supponiamo di avere le seguenti relazioni: FATTURE(codfattura,datafattura,cliente) VOCIFATTURE(codfattura,codprodotto,quantità,prezzo) PRODOTTI(codprodotto,nomeprodotto) e di voler associare ad ogni ad ogni prodotto i corrispondenti codice della fattura ed data della fattura.

39 Π ( ( PRODOTTI > < FATTURE ) codprodotto codfattura PRODOTTI.Nomeprodotto, VOCIFATTURE.Codfattura, FATTURE.DataFattura In SQL: SELECT PRODOTTI.nomeprodotto, VOCIFATTURE.codfattura, FATTURE.datafattura FROM ( (PRODOTTI INNER JOIN VOCIFATTURE ON PRODOTTI.codprodotto = VOCIFATTURE.codprodotto) INNER JOIN FATTURE ON VOCIFATTURE.codfattura = FATTURE.codfattura) In pseudocodifica: Le join multiple2/3

40 Oppure nel modo seguente (usando il prodotto cartesiano, solo per inner-join): SELECT PRODOTTI.nomeprodotto, VOCIFATTURE.codfattura, FATTURE.datafattura FROM PRODOTTI,VOCIFATTURE,FATTURE WHERE PRODOTTI.codprodotto = VOCIFATTURE.codprodotto AND (VOCIFATTURE.codfattura = FATTURE.codfattura) Π ( ( PRODOTTI > < FATTURE ) codprodotto codfattura PRODOTTI.Nomeprodotto, VOCIFATTURE.Codfattura, FATTURE.DataFattura Le join multiple3/3

41 Esempio di query con join Esempio 1: elencare il nome,la quantità acquistata, il prezzo di acquisto dei prodotti, la data della fattura ed il nome del cliente, in cui l’acquisto è stato effettuato nel secondo semestre del In SQL: SELECT PRODOTTI.nomeprodotto,VOCIFATTURE.quantità, VOCIFATTURE.prezzo, FATTURE.datafattura,FATTURE.cliente FROM ( (PRODOTTI INNER JOIN VOCIFATTURE ON PRODOTTI.codprodotto = VOCIFATTURE.codprodotto) INNER JOIN FATTURE ON VOCIFATTURE.codfattura = FATTURE.codfattura ) WHERE FATTURE.datafattura BETWEEN # # AND # #

42 Esempi di query con join...Oppure, usando il prodotto cartesiano: SELECT PRODOTTI.nomeprodotto,VOCIFATTURE.quantità, VOCIFATTURE.prezzo, FATTURE.datafattura,FATTURE.cliente FROM PRODOTTI,VOCIFATTURE,FATTURE WHERE PRODOTTI.codprodotto = VOCIFATTURE.codprodotto AND VOCIFATTURE.codfattura = FATTURE.codfattura AND FATTURE.datafattura BETWEEN # # AND # #

43 Esempi di query con join multiple ed ordinamento composto Esempio 2: elencare il nome,la quantità acquistata, il prezzo di acquisto dei prodotti, la data della fattura, in cui l’acquisto è stato effettuato dal cliente ‘Mario Rossi’ dopo il 01/01/2009. Ordinare tale elenco per data fattura (in modo crescente), per nome prodotto (in modo crescente) e per quantità (in modo decrescente). In SQL: SELECT FATTURE.datafattura, PRODOTTI.nomeprodotto, VOCIFATTURE.quantità,VOCIFATTURE.prezzo FROM ( (PRODOTTI INNER JOIN VOCIFATTURE ON PRODOTTI.codprodotto = VOCIFATTURE.codprodotto) INNER JOIN FATTURE ON VOCIFATTURE.codfattura = FATTURE.codfattura ) WHERE FATTURE.cliente=‘Mario Rossi’ AND FATTURE.datafattura > # # ORDER BY FATTURE.datafattura asc,PRODOTTI.nomeprodotto ASC, VOCIFATTURE.quantità desc

44 Esempi di query con join multiple ed ordinamento composto....Oppure usando il prodotto cartesiano: SELECT FATTURE.datafattura, PRODOTTI.nomeprodotto, VOCIFATTURE.quantità,VOCIFATTURE.prezzo FROM PRODOTTI,VOCIFATTURE,FATTURE WHERE PRODOTTI.codprodotto = VOCIFATTURE.codprodotto AND VOCIFATTURE.codfattura = FATTURE.codfattura AND FATTURE.cliente=‘Mario Rossi’ AND FATTURE.datafattura > # # ORDER BY FATTURE.datafattura asc,PRODOTTI.nomeprodotto ASC, VOCIFATTURE.quantità desc

45 Quando una query viene eseguita all’interno di un’altra si parla di query nidificata. Esempio 1: elencare i prodotti che sono stati fatturati Le query nidificate

46 Quando una query viene eseguita all’interno di un’altra si parla di query nidificata. Esempio 1: elencare i prodotti che sono stati fatturati SELECT codprodotto, nomeprodotto FROM PRODOTTI WHERE codprodotto IN (SELECT codprodotto FROM VOCIFATTURE) 1.La query SELECT codprodotto FROM VOCIFATTURE è la query che viene eseguita per prima (quindi detta sottoquery) e fornisce l’elenco dei codici dei prodotti che sono stati fatturati 2.l’operatore IN verifica per ogni prodotto che il codice sia presente nel precedente elenco Le query nidificate

47 Esempio 2: elencare i prodotti che non sono stati ancora fatturati SELECT codprodotto, nomeprodotto FROM PRODOTTI WHERE codprodotto NOT IN (SELECT codprodotto FROM VOCIFATTURE) Le query nidificate

48 L’operatore di Aliasing permette di rinominare un campo oppure assegnare un nome ad un campo calcolato o ad una sottoquery. SELECT CLIENTI.RagioneSociale,CLIENTI.Fatturato, RAPPRESENTANTI.RagioneSociale AS RsRappresentante FROM CLIENTI INNER JOIN RAPPRESENTANTI ON CLIENTI.CodRap=RAPPRESENTANTI.CodRappr Rinomina il campo ragionesociale di RAPPRESENTANTI con RsRappresentante L’aliasing

49 Con join multiple non omogenee si intendono quelle query composte da più join di tipo diverso (left-join, inner-join, right-join). Ad esempio la seguente pseudo-query Le join multiple non omogenee si può tradurre nel modo seguente usando una sottoquery con aliasing SELECT PRODOTTI.Nomeprodotto,VOCIFATTURE.Codfattura, FATTURE.DataFattura FROM ( (SELECT * FROM PRODOTTI LEFT JOIN VOCIFATTURE ON PRODOTTI.CodProdotto = VOCIFATTURE.CodProdotto) AS V LEFT JOIN FATTURE ON V.CodFattura = FATTURE.CodFattura) Π ( ( PRODOTTI > < FATTURE ) codprodotto codfattura PRODOTTI.Nomeprodotto, VOCIFATTURE.Codfattura, FATTURE.DataFattura LEFT

50 Esempio 1: Elencare il codice del prodotto, la quantità, il prezzo dei prodotti della fattura di codice ‘189/99’ e calcolare per ognuno di essi il totale parziale. SELECT CodiceFattura,Quantità,Prezzo, (Quantità*Prezzo) as TotaleParziale FROM VOCIFATTURE WHERE CodiceFattura=‘189/99’ I campi calcolati1/2

51 Esempio 2: Elencare il codice del prodotto, il nome del prodotto,la quantità, il prezzo dei prodotti della fattura di codice ‘189/99’. Calcolare per ognuno di essi il totale parziale con IVA al 20% ed ordinarli per nome prodotto in modo descrescente. SELECT VOCIFATTURE.CodiceFattura,PRODOTTI.NomeProdotto, VOCIFATTURE.Quantità, VOCIFATTURE.Prezzo, ((Quantità*Prezzo)*120/100) as TotaleParziale FROM VOCIFATTURE INNER JOIN PRODOTTI ON VOCIFATTURE.CodiceProdotto=PRODOTTI.CodiceProdotto WHERE CodiceFattura=‘189/99’ ORDER BY PRODOTTI.NomeProdotto desc I campi calcolati 2/2

52 Le query parametriche sono quelle query in cui alcuni dati di ricerca sono richiesti all’utente al momento dell’esecuzione delle query stesse. Il parametro viene indicato con una frase delimitata da parentesi quadre nel punto in cui è necessario. Esempio 1: Elencare il codice, la data ed il cliente delle fatture emesse dopo una certa data. La data non è specificata nell’esempio, ma deve essere decisa dall’utente SELECT CodiceFattura,Datafattura,Cliente FROM FATTURE WHERE DataFattura > [Inserire la data] Le query parametriche

53 1.Il tipo di dato Contatore (AutoNumber) in SQL di Access si traduce con COUNTER o AUTOINCREMENT CODSTUDENTE COUNTER oppure CODSTUDENTE AUTOINCREMENT 2.Il tipo di dato Importo (Currency) in SQL di Access si traduce con MONEY o CURRENCY Importo MONEY oppure Importo CURRENCY 3.Una data nella clausola WHERE deve essere delimitata dai cancelletti (‘#’) DataFattura > # # SQL standard e SQL di Access a confronto

54 Le join interne CodClienteRagioneSocialeFatturatoCodRap 34 Autostar srl , Inchingolo snc45.300, LaRapida sas30.160,59 CodRapprRagioneSocialeZonaDataInizio 2F. Gancia s.a.s.SUD12/10/ Detersivi M2 sncEST08/07/ AutoRap s.n.c.NORD11/04/1995 CLIENTI RAPPRESENTANTI Esempio 6: Elenca la ragione sociale ed il fatturato dei clienti ed i relativi nomi dei rappresentanti SELECT CLIENTI.RagioneSociale,CLIENTI.Fatturato, RAPPRESENTANTI.RagioneSociale FROM CLIENTI INNER JOIN RAPPRESENTANTI ON CLIENTI.CodRap=RAPPRESENTANTI.CodRappr CLIENTI.RagioneSocialeCLIENTI.FatturatoRAPPRESENTANTI.RagioneSociale Autostar srl ,10F. Gancia s.a.s. Inchingolo snc45.300,00AutoRap s.n.c.

55 La left-join La left-join si traduce nel modo seguente: SELECT FROM LEFT JOIN ON

56 La left-join CodClienteRagioneSocialeFatturatoCodRap 34 Autostar srl , Inchingolo snc45.300, LaRapida sas30.160,59 CodRapprRagioneSocialeZonaDataInizio 2F. Gancia s.a.s.SUD12/10/ Detersivi M2 sncEST08/07/ AutoRap s.n.c.NORD11/04/1995 CLIENTI RAPPRESENTANTI Esempio 7: Elenca la ragione sociale ed il fatturato dei clienti ed i relativi nomi dei rappresentanti SELECT CLIENTI.RagioneSociale,CLIENTI.Fatturato, RAPPRESENTANTI.RagioneSociale FROM CLIENTI LEFT JOIN RAPPRESENTANTI ON CLIENTI.CodRap=RAPPRESENTANTI.CodRappr CLIENTI.RagioneSocialeCLIENTI.FatturatoRAPPRESENTANTI.RagioneSociale Autostar srl ,10F. Gancia s.a.s. Inchingolo snc45.300,00AutoRap s.n.c. LaRapida sas30.160,59

57 La right-join La right-join si traduce nel modo seguente: SELECT FROM RIGHT JOIN ON

58 La right-join CodClienteRagioneSocialeFatturatoCodRap 34 Autostar srl , Inchingolo snc45.300, LaRapida sas30.160,59 CodRapprRagioneSocialeZonaDataInizio 2F. Gancia s.a.s.SUD12/10/ Detersivi M2 sncEST08/07/ AutoRap s.n.c.NORD11/04/1995 CLIENTI RAPPRESENTANTI Esempio 7: Elenca la ragione sociale e la zona dei rappresentanti e le ragioni sociali dei relativi clienti SELECT CLIENTI.RagioneSociale,RAPPRESENTANTI.RagioneSociale, RAPPRESENTANTI.Zona FROM CLIENTI RIGHT JOIN RAPPRESENTANTI ON CLIENTI.CodRap=RAPPRESENTANTI.CodRappr CLIENTI.RagioneSocialeRAPPRESENTANTI.RagioneSocialeRAPPRESENTANTI.Zona Autostar srlF. Gancia s.a.s.SUD Detersivi M2 sncEST Inchingolo sncAutoRap s.n.c.NORD

59 La full-join La right-join si traduce nel modo seguente: SELECT FROM FULL JOIN ON La full join non è realizzabile con il comando SQL ma attraverso l’unione insiemistica tra la left-join e la right-join