Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni

sql

Questo documento è una cheat sheet per SQL che riassume le principali istruzioni e sintassi per interrogazioni, aggregazioni, manipolazione dei dati e definizione di tabelle. Include anche informazioni su join, subquery, vincoli, trigger e gestione dei privilegi. È una risorsa utile per chi desidera avere un riferimento rapido sulle operazioni SQL più comuni.

Caricato da

pickphoto28
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
2 visualizzazioni

sql

Questo documento è una cheat sheet per SQL che riassume le principali istruzioni e sintassi per interrogazioni, aggregazioni, manipolazione dei dati e definizione di tabelle. Include anche informazioni su join, subquery, vincoli, trigger e gestione dei privilegi. È una risorsa utile per chi desidera avere un riferimento rapido sulle operazioni SQL più comuni.

Caricato da

pickphoto28
Copyright
© © All Rights Reserved
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 3

Cheat sheet SQL

Interrogazione SELECT * FROM A, B, C | cond ( AND | OR | NOT ) cond


WHERE A.x = B.y AND B.y = C.z | atom IS [NOT] NULL
query ::= | atom BETWEEN atom AND atom
| SELECT [DISTINCT] attr-expr [[AS] id], ... | [NOT] EXISTS subquery
Aggregazione
from [WHERE cond] [order-by] | attr cmp ( ANY | ALL ) subquery-or-list
| SELECT [attr | agfun([DISTINCT] attr)], ... SELECT x, MAX(x) | atom [NOT] IN subquery-or-list
from [WHERE cond] FROM A | atom LIKE pat [ ESCAPE char ]
[ GROUP BY attr, ... [HAVING cond] ] GROUP BY x, y HAVING MIN(y) > 10
[order-by] EXISTS vero se la subquery restituisce almeno una riga
| query setop [ALL] query SELECT solo attributi anche nel GROUP BY
ANY / ALL confronto vero per uno/tutti i valori restitu-
COUNT attributi distinti, o # righe con COUNT(*) iti dalla subquery di colonna
attr-expr ::=
| attr-expr [AS] id HAVING condizione con funzioni di aggregazione, alcuni IN ANY dove cmp è l’uguaglianza
| [ table "." ] "*" DBMS non consentono subquery
| attr | const LIKE pattern matching, pat è una stringa in cui % cor-
| [uop] attr-expr [ bop attr-expr ] risponde alla regex .*, _ a . e il carattere indicato
Ordinamento
con ESCAPE a \
table-as ::= table [[AS] id] Se non specificato altrimenti, l’ordine è crescente.
theta-join ::= [ LEFT | RIGHT | FULL ] JOIN Subquery
from ::= Operazioni insiemistiche
| FROM table-as, ... Si distinguono subquery scalari (restituiscono un solo val-
| FROM table-as theta-join table-as SELECT x from A ore), di colonna e di tabella.
( ON cond | USING attr, ... ) UNION Possono utilizzare variabili legate dalla query principale:
| FROM table-as NATURAL JOIN table-as SELECT y AS x from B
SELECT * FROM A
agfun ::= SUM | COUNT | AVG | MAX | MIN • UNION, INTERSECT ed EXCEPT (differenza) WHERE EXISTS (SELECT * FROM B WHERE A.x = B.y)

• 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.

| UPDATE table table-constr ::= view-def ::=


SET attr = expr | ( NOT NULL | UNIQUE | PRIMARY KEY ) "(" attr ")" CREATE VIEW view [ "(" attr, ... ")" ] AS query
[ WHERE cond ] | CHECK "(" expr ")" [ WITH [ LOCAL | CASCADED ] CHECK OPTION ]
| FOREIGN KEY "(" attr, ... ")"
REFERENCES table "(" attr, ... ")" • la lista di attributi permette di rinominare le colonne
Inserimento risultanti dalla query
[ ON ( DELETE | UPDATE )
INSERT INTO A (x, z) INSERT INTO A ( NO ACTION | CASCADE • la query non può contenere INTERSECT, EXCEPT (im-
VALUES (’foo’, 42) SELECT x, y, z | SET NULL | SET DEFAULT ) ] plementabili con SELECT), UNION, GROUP BY (che però
FROM B si può usare nelle interrogazioni sulla view)
type ::=
• i campi non specificati prendono NULL o un valore di | INTEGER | CHAR(len) | VARCHAR(maxlen) | DATE • le viste sono dinamiche sui risultati della subquery,
default | REAL | NUMBER(digits, decimals) | FLOAT(mantissa) ma non sulla struttura delle tabelle: data la vista
• errore se non vengono specificati valori che non pos- CREATE VIEW V AS SELECT * FROM T
sono essere nulli (in particolare la chiave primaria) Vincoli
CREATE TABLE T ( se a T viene aggiunta una colonna, questa non sarà
Cancellazione pk CHAR(10) PRIMARY KEY visibile in V
fk1 INTEGER
• se non è specificata la condizione cancella tutte le righe
fk2 INTEGER Viste di gruppo
della tabella (lo schema rimane)
n INTEGER DEFAULT 0 CHECK (n >= 0)
Sono quelle che contengono GROUP BY o sono fanno riferi-
• spesso la condizione è sulla chiave primaria
FOREIGN KEY (fk1, fk2) mento ad una vista di gruppo.

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, ... ")"

Procedure e trigger Controllo degli accessi


Procedure Ciascuna risorsa (tabella, attributo, vista. . . ) ha un propri- Transazioni
etario, che può assegnare privilegi su quella risorsa ad altri
proc-def ::= CREATE FUNCTION proc IS utenti. BEGIN TRANSACTION, COMMIT, ROLLBACK

Potrebbero piacerti anche