Basi Di Dati 03

1,984 views
1,916 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,984
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
144
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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>

×