SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo’ definire una base di dati di cui diventa l’amministratore potendo stabilire gli accessi di eventuali altri utenti alla sua base di dati. La creazione consiste nel definire incrementalmente uno schema con un certo nome Tutti gli elementi dello schema vengono registrati in un catalogo. Create Schema CREATE SCHEMA Nome AUTHORIZATION Utente Definizioni Dove: Si crea lo schema chiamato Nome Utente e’ l’amministratore dello schema Le Definizioni creano gli elementi dello schema (Tabelle,Viste,Indici,etc…) DROP SCHEMA DROP SCHEMA Nome [RESTRICT | CASCADE] cancella lo schema Nome Restrict: drop non viene eseguito se il database non e’ vuoto. Cascade: Vengono rimossi automaticamente tutti i dati presenti nel database Create Table CREATE TABLE Nome “(“Attributo Tipo[Vincolo {,Vincolo}] {,Attributo Tipo[Vincolo {,Vincolo}]}”)” [VincoloDiTabella {, VincoloDiTabella}] Tipi elementari CHAR(n) stringhe di lunghezza n VARCHAR(n) stringhe di lunghezza variabile con al massimo n caratteri INTEGER interi REAL reali NUMERIC (p,s) p cifre di cui s decimali FLOAT(p) binari con p cifre significative DATE ,TIME per date ed ore. Esempi CREATE TABLE Studenti (Nome CHAR(30), Matricola INTEGER, Indirizzo CHAR(30),Telefono INTEGER) CREATE TABLE FuoriCorso LIKE Studenti Altri modi di definire tabelle CREATE TABLE Nome AS EsprSelect Esempio CREATE TABLE EsamiBuoni LIKE Esami AS SELECT * FROM Esami WHERE Voto > 27 Tabelle Virtuali (View) Oltre alle tabelle di base che fanno parte dello schema si possono creare delle tabelle ausiliarie,virtuali che servono per vari scopi (sicurezza, abbreviazione,etc..) In genere, non possono essere modificate da Insert,Delete,Update Alcuni DBMS comunque danno la possibilita’ di aggiornare le VIEWS (Updatable VIEWS) CREATE VIEW NomeVista [“(” Attributo {,Attributo} “)”] AS Espressione Esempi CREATE VIEW MediaVoti (Matricola,Media) AS SELECT Matricola, AVG(Voto) FROM Esami GROUP BY Matricola Le view possono essere usate come tabelle SELECT Nome,Media FROM Studenti, MediaVoti WHERE Studenti.Matricola = MediaVoti.Matricola DROP (Tabella | Vista) [RESTRICT|CASCADE] con RESTRICT non viene cancellata se e’ utilizzata in altre viste, altrimenti CASCADE rimuovera’ tutte le tabelle e viste che la usano. Uso delle view Semplificare query complesse Esempio: non possiamo scrivere SELECT AVG(COUNT(*)) FROM AGENTI GROUP BY ZONE Perche’ AVG deve agire sui valori di un attributo. Usando le view… CREATE VIEW AgPerZona (Zona,NumAg) AS SELECT Zona,COUNT(*) FROM AGENTI GROUP BY Zona SELECT AVG(NumAg) FROM AgPerZona DROP AgPerZona Uso delle View per Sicurezza CREATE VIEW EsamiPublici AS SELECT Corso,Voto FROM Esami Data la tabella ClientiBanca(Nome,Indirizzo,Saldo) CREATE VIEW ClientiInd AS SELECT Nome,Indirizzo FROM ClientiBanca Nascondere ad utenti l’organizzazione dei dati Se vogliamo assegnare un’intera zona ad un unico supervisore 1) CREATE TABLE Zone (Zona CHAR(8), Supervisore CHAR(3)) AS SELECT DISTINCT Zona,Supervisore FROM Agenti 2) CREATE TABLE NuoviAgenti AS SELECT CodiceAgente,Nome,Zona,Commissione FROM Agenti 3) DROP Agenti 4) CREATE VIEW Agenti AS SELECT * FROM NuoviAgenti NATURAL JOIN Zone