Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Basi Di Dati 03

2,133 views

Published on

  • Be the first to comment

  • Be the first to like this

Basi Di Dati 03

  1. 1. BASI DI DATI ESERCITAZIONI -03- MSSQL - SQL Email: francesco.magagnino@ewave.it Università di Trento Corso di Laurea in Ingegneria dell’Informazione e dell’Organizzazione
  2. 2. Inserire curriculum.. <ul><li>.. In Comunità On Line </li></ul>
  3. 3. SQL: Il linguaggio dei DBMS <ul><li>SQL = Structured Query Language </li></ul><ul><li>Anni ’70 Definizione del modello relazionale. Prima definizione del linguaggio SQL (allora SEQUEL) Prototipi di DBMS relazionali - System R (IBM) - Ingres (Università di Berkeley) </li></ul><ul><li>Anni ’80 Standardizzazione di SQL. Primi DB commerciali - Oracle - IBM DB2 </li></ul><ul><li>Anni ’90 Standard ISO-ANSI-SQL2 (SQL 92) </li></ul><ul><li>Anni ’00 Standard ISO-ANSI-SQL3 (SQL 99) Recepimento non completato. </li></ul>
  4. 4. SQL: Il linguaggio dei DBMS <ul><li>DDL (Data Definition Language) </li></ul><ul><ul><li>Definizione Schemi e autorizzazioni (create database – drop database – alter table – drop table) </li></ul></ul><ul><li>DML (Data Manipulation Language) </li></ul><ul><ul><li>Aggiornamento istanze DB (insert into – update - delete) </li></ul></ul><ul><ul><li>Estrazione informazioni da DB (Select [all|distinct]) </li></ul></ul><ul><li>DCL (Data Control Language) </li></ul><ul><ul><li>Comandi di vario tipo compreso controllo degli accessi </li></ul></ul><ul><li>SQL = DDL + DML + DCL </li></ul>
  5. 5. Principali comandi in SQL (DDL) <ul><li>Crea DB create database “<database>” create database “prova” </li></ul><ul><li>Elimina DB drop database “<database>” drop database “prova” </li></ul>
  6. 6. Principali comandi in SQL (DDL) <ul><li>Crea una tabella create table <nome tabella> (nomecampo | tipo | constaint, ……) create table clienti ( chiave integer not null primary key, nome varchar(30), …..) </li></ul><ul><li>Modifica una tabella esistente alter table <nome tabella> add nomecampo | tipo | constaint, drop nomecampo, …… alter table clienti add indirizzo varchar(30), drop frazione add primary key (codice) </li></ul><ul><li>Elimina una tabella drop table <nome tabella> drop table clienti </li></ul>
  7. 7. Create Database & Table <ul><li>create database PROVA </li></ul><ul><li>go </li></ul><ul><li>use PROVA </li></ul><ul><li>create table TBinPROVA (conta integer ..) </li></ul>
  8. 8. Principali comandi in SQL (DDL) <ul><li>Crea una vista create view <nome vista> <campi> as <select> </li></ul><ul><li>create view UltimaFattura (fornitore,data,importo) as Select fornitore,data,importo from fatture F Where f.Data = ( Select Max(Data) From fatture F1 Where (F1.fornitore = F.fornitore) ) </li></ul><ul><li>Elimina un vista drop view <nome vista> </li></ul><ul><li>drop view Ultimafattura </li></ul>
  9. 9. Principali comandi in SQL (DDL) <ul><li>Crea una dominio In SQL è possibile creare un dominio personalizzato ereditando caratteristiche dai principali data types create domain <nome domain> as <caratteristica domain> create domain VOTO as SMALLINT DEFAULT NULL CHECK (VALUE >= 18 and VALUE <= 30 ) </li></ul>
  10. 10. Principali comandi in SQL (DML) <ul><li>Estrazione dati da Tabella: SELECT </li></ul><ul><li>Le interrogazione in un DB avvengono trammite l’istruzione SELECT </li></ul><ul><ul><ul><li>Select ATTRIBUTO </li></ul></ul></ul><ul><ul><ul><li>From TABELLA </li></ul></ul></ul><ul><ul><ul><li>Where CONDIZIONE </li></ul></ul></ul><ul><li>L’interrogazione SQL restituisce i valori degli attributi all’interno della tabella selezionata che soddisfano alla condizione specificata. </li></ul>
  11. 11. Principali comandi in SQL (DML) <ul><li>Estrazione dati da Tabella select [ all | distinct ] <lista attributi> from <lista tabelle> where <condizione> group by <lista attributi> having <condizione> order by <lista attributi> </li></ul><ul><li>select * from fornitori </li></ul><ul><li>SELECT LastName, FirstName </li></ul><ul><li>FROM dbo.Employees </li></ul><ul><li>WHERE (LastName LIKE %K%) </li></ul><ul><li>ORDER BY FirstName </li></ul>
  12. 12. Principali comandi in SQL (DML) <ul><li>Estrazione dati da Tabella </li></ul>SELECT TOP 10 * FROM Employees WHERE City = London
  13. 13. WHERE <ul><li>L’argomento della clausola where può essere un espressione booleana costruita a partire da predicati semplici combinati con gli operatori logici . </li></ul><ul><li>Predicati semplici: A sinistra il valore dell’attributo specificato, a destra un valore costante </li></ul><ul><li>= …uguale </li></ul><ul><li><> …diverso </li></ul><ul><li>< …minore di </li></ul><ul><li>> …maggiore di </li></ul><ul><li>>= …maggiore e uguale di </li></ul><ul><li><= …minore e uguale di </li></ul><ul><li>Operatori logici: </li></ul><ul><li>AND </li></ul><ul><li>OR </li></ul><ul><li>NOT </li></ul>
  14. 14. LIKE <ul><li>Serve per porre un uguaglianza non completa. </li></ul><ul><li>Viene utilizzato insieme a caratteri speciali. Se questi non esistono nella condizione assume il valore di “=“ </li></ul><ul><li>Caratteri speciali: </li></ul><ul><ul><li>_ (underscore) o ! (punto esclamativo): indicano la presenza di un qualsiasi carattere </li></ul></ul><ul><ul><li>% (percentuale) o * (asterisco): indicano la presenza di una serie di caratteri qualsiasi </li></ul></ul><ul><ul><ul><li>SELECT * </li></ul></ul></ul><ul><ul><ul><li>FROM Employees </li></ul></ul></ul><ul><ul><ul><li>WHERE FirstName </li></ul></ul></ul><ul><ul><ul><li>LIKE R_be* </li></ul></ul></ul><ul><ul><ul><li>ROBERT </li></ul></ul></ul><ul><ul><ul><li>RIBE </li></ul></ul></ul><ul><ul><ul><li>RIBES </li></ul></ul></ul>
  15. 15. BETWEEN <ul><li>Serve per identificare un range in cui applicare la condizione . </li></ul><ul><li>Si specifica un intervallo di valori in cui deve essere compreso il valore affinché sia considerato vero </li></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Products </li></ul></ul><ul><ul><li>WHERE (UnitPrice BETWEEN 18 AND 20) </li></ul></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Employees </li></ul></ul><ul><ul><li>WHERE (LastName BETWEEN 'f*' AND 'l*') </li></ul></ul>Federico Giovanni Laura 18 18,5 19
  16. 16. IN <ul><li>Serve per specificare una serie di valori a cui deve soddisfare la condizione. </li></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Products </li></ul></ul><ul><ul><li>WHERE UnitPrice IN (18, 19) </li></ul></ul><ul><li>Si evita di fare 2 where sullo stesso attributo WHERE UnitPrice = 18 or UnitPrice = 19 </li></ul>18 19 19 18
  17. 17. IS NULL <ul><li>Serve per specificare un estrazione con riferimento al valore NULL IS NULL oppure IS NOT NULL </li></ul><ul><li>Tutti i campi di una colonna che hanno valore NULL </li></ul><ul><li>Importante ricordare che 0 e “” posseggono un valore, quindi non sono NULL </li></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Employees </li></ul></ul><ul><ul><li>WHERE Region IS NULL </li></ul></ul>
  18. 18. DISTINCT <ul><li>Serve per non ottenere righe duplicate </li></ul><ul><li>Se nella select viene applicato a più colonne, adopererà l’univocità su tutte le colonne considerate </li></ul><ul><ul><li>SELECT DISTINCT City </li></ul></ul><ul><ul><li>FROM Employees </li></ul></ul>
  19. 19. ORDER BY <ul><li>La clausola ORDER BY serve per stabilire l’ordine di visualizzazione </li></ul><ul><li>Vi è poi la possibilità di specificare se l’ordinamento avviene per valori ascendenti (ASC) o discendenti (DESC) Di default è impostato ASC </li></ul><ul><ul><li>SELECT * </li></ul></ul><ul><ul><li>FROM Employees </li></ul></ul><ul><ul><li>ORDER BY LastName DESC </li></ul></ul>
  20. 20. Count / sum / max / min / avg <ul><li>Permettono di ottenere un valore singolo elaborando un insieme di righe. Vengono applicati sulle righe che soddisfano la condizione presente nella clausola where e hanno il seguente significato: </li></ul><ul><ul><li>count : conteggia le righe che soddisfano un criterio </li></ul></ul><ul><ul><li>sum : restituisce la somma dei valori posseduti dall'espressione costrutta sui nomi degli attributi </li></ul></ul><ul><ul><li>max : individua il massimo in un insieme di valori </li></ul></ul><ul><ul><li>min : individua il minimo in un insieme di valori </li></ul></ul><ul><ul><li>avg : restituisce la media dei valori dell'espressione </li></ul></ul>
  21. 21. GROUP BY <ul><li>Group by permette di specificare come dividere le tabella in sottoinsiemi. </li></ul><ul><li>La clausola group by ammette come argomento un insieme di attributi e la query raggrupperà le righe che possiedono gli stessi valori per questo insieme di attributi. </li></ul><ul><ul><li>SELECT Dipendente, SUM(Stipendio) </li></ul></ul><ul><ul><li>FROM dbo.tb </li></ul></ul><ul><ul><li>GROUP BY Dipendente </li></ul></ul>
  22. 22. Principali comandi in SQL (DML) <ul><li>Inserimento dati in Tabella </li></ul><ul><li>insert into <nome tabella> (campo1,campo2) values (valore1,valore2) </li></ul><ul><li>INSERT into employees (firstname, lastname) values ('Paolo','Rossi') </li></ul>
  23. 23. Principali comandi in SQL (DML) <ul><li>Aggiornamento dati in Tabella (prevalentemente su condizione where) </li></ul><ul><li>update <nome tabella> set campo = valore where <condizione> </li></ul><ul><li>update employees set firstname='Verdi' where lastname='Paolo' </li></ul>
  24. 24. Principali comandi in SQL (DML) <ul><li>Eliminazione dati in Tabella </li></ul><ul><li>(prevalentemente su condizione where) </li></ul><ul><ul><li>delete <nome tabella> where <condizione> </li></ul></ul><ul><ul><li>delete employees where firstname='Verdi' </li></ul></ul>
  25. 25. Links SQL Injection <ul><li>Tecniche: SQL Injection ( http://sicurezza.html.it/articoli/leggi/973/tecniche-sql-injection/4/ ) </li></ul><ul><li>SQL injection Basic Tutorial ( http://www.governmentsecurity.org/articles/SQLinjectionBasicTutorial.php ) </li></ul><ul><li>SQL Injection: Modes of Attack, Defence, and Why It Matters ( http://www.governmentsecurity.org/articles/SQLInjectionModesofAttackDefenceandWhyItMatters.php ) </li></ul><ul><li>Advanced SQL Injection in SQL Server Applications ( http://www.di.unito.it/~matteo/DIDATTICA/aa06/RdE/advanced_sql_injection.pdf ) </li></ul><ul><li>Steve Friedl's Unixwiz.net Tech Tips: SQL Injection Attacks by Example ( http://www.unixwiz.net/ techtips / sql-injection.html ) </li></ul>
  26. 26. Lavorando su SQL <ul><li>Importare il db “CDs” </li></ul><ul><li>Ordinare in modo discendente rispetto al nome tabella tCantante selezionando tutte le colonne </li></ul><ul><li>Ordinare in modo ascendente rispetto al titolo la tabella tCD selezionando tutte le colonne </li></ul><ul><li>Ordinare in modo ascendente rispetto al titolo la tabella tCD selezionando le colonne cd_id, cd_titolo, cd_prezzo, cd_anno </li></ul><ul><li>Ordinare in modo ascendente rispetto al titolo la tabella tCD selezionando le colonne cd_id, cd_titolo, cd_prezzo, cd_anno Filtrare rispetto ai cd prodotti prima del 2000 </li></ul><ul><li>Ordinare in modo ascendente rispetto al titolo la tabella tCD selezionando le colonne cd_id, cd_titolo, cd_prezzo, cd_anno Filtrare rispetto ai cd prodotti nel 1990 e nel 2003 </li></ul><ul><li>Ordinare in modo ascendente rispetto al titolo la tabella tCD selezionando le colonne cd_id, cd_titolo, cd_prezzo, cd_anno Filtrare rispetto ai cd prodotti tra il 1990 e il 2003 </li></ul>
  27. 27. Lavorando su SQL <ul><li>Visualizza il prezzo più alto tra tutti i cd </li></ul><ul><li>Ordinare rispetto al titolo la tabella tCanzone selezionando le colonne canzone_id, canzone_titolo Filtrare rispetto alle canzoni il cui titolo inizia per &quot;b&quot; oppure &quot;u&quot; </li></ul><ul><li>Dalla tabella tRelCdCanzone visualizzare il numero di canzoni per ogni cd (id del cd) Dare il nome &quot;Numero Canzoni&quot; alla colonna con le quantità </li></ul><ul><li>Nella tabella tCantante inserire un nuovo record (un nuovo cantante) cantante_nome=Sting, cantante_descrizione=Sting è un cantante famoso, cantante_sitointernet=www.sting.com, cantante_genere_id=1 (rok, lo sappiamo dalla tabella genere) </li></ul><ul><li>Nella tabella tCantante aggiornare alcuni campi del record riferito a Sting cantante_descrizione=Sting è un cantante molto famoso, cantante_sitointernet=www.sting.it </li></ul><ul><li>Cancellare dalla tabella tCantante il record riferito a Sting </li></ul>

×