sql
sql
• le due tabelle devono essere omogenee Utile in particolare per EXISTS, che altrimenti è sempre vero
order-by ::= ORDER BY attr [ ASC | DESC ], ... o falso. Tuttavia, in questo modo la subquery viene ese-
• se non è specificato ALL, i duplicati vengono eliminati guita per ogni ennupla della query principale; a volte si può
setop ::= UNION | INTERSECT | EXCEPT dal risultato migliorare l’efficienza passando da EXISTS a IN con sub-
Se non è specificato DISTINCT, il risultato è una tabella che query eseguita una sola volta.
ammette duplicati — operazioni su multiinsiemi. Condizioni
subquery ::= "(" query ")" Manipolazione dei dati
Join subquery-or-list ::= subquery | "(" val, ... ")"
atom ::= attr | val manipulation ::=
SELECT * FROM A JOIN B ON A.x > B.y
cmp ::= < | = | > | <> | <= | >= | INSERT INTO table [ "(" attr, ... ")" ]
SELECT * FROM A JOIN B USING x
cond ::= ( VALUES "(" val, ... ")" | query )
Join su più tabelle si possono implementare manualmente: | atom cmp atom
| DELETE FROM table | CHECK "(" expr ")" di visualizzazione/modifica, conversione unità/formati, in-
[WHERE cond] | REFERENCES table "(" attr ")" dipendenza logica.
Aggiornamento
REFERERNCES S(a, b) • richiedono nomi di colonna espliciti
)
UPDATE A • non consentono la modifica di attributi corrispondenti
SET x = x * 2 UNIQUE definisce una chiave, su più attributi la combi- a funzioni di aggregazione
WHERE y < 4 nazione deve essere unica (non i singoli)
CREATE VIEW V (a, s) AS
PRIMARY KEY una sola, implica UNIQUE e NOT NULL SELECT a, SUM(b)
Definizione FOREIGN KEY ON DELETE / ON UPDATE specifi-
FROM T
GROUP BY a
cano cosa fare se l’ennupla riferita viene cancel-
definition ::=
lata/modificata, NO ACTION (default) impedisce
CREATE TABLE table "(" Modificabilità
l’operazione
attr-spec, ...
Con alcune eccezioni (e.g. subquery su più tabelle, fun-
[constr-name] table-constr, ... CHECK espressione booleana, se indicato come vincolo di
zioni di aggregazione), le viste sono modificabili. Si possono
")" attributo può riguardare solo quello
specificare i seguenti vincoli:
attr-spec ::= Se il vincolo riguarda solo una colonna viene specificato WITH [CASCADED] CHECK OPTION
attr type [ DEFAULT const ] insieme alla definizione dell’attributo corrispondente, altri- l’inserimento fallisce se la nuova ennupla non fa parte
[ [constr-name] attr-constr ] menti è inserito come vincolo di tabella. della vista
constr-name ::= CONSTRAINT constr-name WITH LOCAL CHECK OPTION se la vista è
Viste
definita in termini di altre viste, verifica solo le con-
attr-constr ::= Tabelle virtuali che riorganizzano i dati di quelle fisiche. dizioni di quelle che specificano WITH CHECK OPTION,
| NOT NULL | UNIQUE | PRIMARY KEY Scopi: presentazione semplificata, gestione dei permessi aziché di tutte come con CASCADE
Manipolazione dello schema decls body privilege ::=
proc-decls ::= DECLARE ( var type ) ... | SELECT | DELETE
drop ::= DROP TABLE table ( RESTRICT | CASCADE ) proc-body ::= BEGIN proc-op ... END | ( INSERT | UPDATE | REFERENCES )
alter ::= ALTER TABLE table alter-cmd [ "(" attr, ... ")" ]
proc-op ::=
alter-cmd ::= | SELECT query-attrs INTO var query-rest privileges ::= ( privilege, ... ) | ALL PRIVILEGES
| ADD [COLUMN] attr-spec | RETURN "(" var ")"
[ FIRST | AFTER attr ] | manipulation grant ::=
| DROP [COLUMN] attr ( RESTRICT | CASCADE ) GRANT privileges ON resource
Trigger TO user, ... [ WITH GRANT OPTION ]
| MODIFY [COLUMN] attr-spec
| ALTER [COLUMN] attr Azione eseguita automaticamente al verificarsi di un deter- revoke ::=
( SET DEFAULT const | DROP DEFAULT ) minato evento. Consentono di esprimere vincoli di integrità REVOKE privileges ON resource
complessi, gestire copie ridondanti o ricavabili dei dati, e FROM user, ... [ RESTRICT | CASCADE ]
| ADD CONSTRAINT constr-name table-constr limitare le operazioni ammissibili.
| DROP CONSTRAINT constr-name INSERT gli attributi non specificati prendono NULL
( RESTRICT | CASCADE ) trigger-def ::=
CREATE TRIGGER trigger
| DROP VIEW view ( RESTRICT | CASCADE ) ( BEFORE | AFTER ) REFERENCES creare una chiave esterna riferita agli at-
( INSERT | DELETE | UPDATE ), ... tributi
ADD come ultima colonna se non specificato altrimenti ON table
DROP RESTRICT / CASCADE specificano la gestione di vin- [ FOR EACH ROW ] WITH GRANT OPTION l’utente può propagare il
coli di integrità referenziale invalidati [ WHEN cond ] privilegio ad altri
proc-decls proc-body
ADD CONSTRAINT nome obbligatorio
RESTRICT/CASCADE significativi se l’utente ha
DROP CONSTRAINT RESTRICT / CASCADE usati in FOR EACH ROW determina se il trigger viene eseguito una propagato il privilegio
caso di rimozione di un vincolo di unicità o chiave volta per operazione o per record modificato.
primaria se ci sono chiavi esterne riferite alla colonna Categorie di trigger:
DROP VIEW RESTRICT / CASCADE cosa fare se una vista attivi modificano lo stato della base di dati Indici
dipende da quella da cancellare
passivi fanno fallire l’operazione
L’aggiuna di una colonna NOT NULL si fa in 3 passaggi crean- index-def ::=
dola senza vincolo, inserendo i dati e aggiungendo il vincolo. INSTEAD OF sostituiscono l’operazione CREATE INDEX index
ON table "(" attr, ... ")"