• sql-ddl-dml-dcl-tcl
    SQL

    Classificazioni delle istruzioni SQL: DDL, DML, DQL, DCL e TCL

    In questo articolo verranno illustrati i comandi DDL, DML, DQL, DCL e TCL del linguaggio SQL.

    Il linguaggio SQL

    Il linguaggio SQL (Structured Query Language), a dispetto del nome, non è solo un linguaggio di interrogazione (query) per database basati sul modello relazionale. In base alle funzioni eseguite sui dati, è possibile distinguere i seguenti gruppi di comandi SQL:

    • DDL (Data Definition Language): consente di creare e modificare schemi di database;
    • DML (Data Manipulation Language): consente di inserire, modificare e gestire i dati memorizzati;
    • DQL (Data Query Language): consente di interrogare i dati memorizzati;
    • DCL (Data Control Language): consente di creare e gestire strumenti di controllo ed accesso ai dati;
    • TCL (Transaction Control Language): consente di avviare, concludere e gestire le transazioni.

    Non si tratta di una semplice classificazione puramente teorica. I raggruppamenti sono operati in base alla tipologia dei comandi e ad essi si fa continuamente riferimento nella manualistica e si da per scontato che il programmatore (per non parlare dell’amministratore del database) sappia quali comandi appartengono a quali gruppi e per quale motivo. Ad esempio, in Oracle una transazione non viene avviata con un comando esplicito (come ad esempio START TRANSACTION in MySQL), ma in modo implicito con un comando di tipo DML. Per rimanere in tema transazioni in Oracle, una transazione può essere conclusa in modo implicito con un comando di tipo DDL. Occorre quindi sapere che, ad esempio, il comando DELETE FROM EMPLOYEES è di tipo DML, mentre TRUNCATE TABLE EMPLOYEES è di tipo DDL, quindi, anche se entrambi ottengono l’effetto di cancellare il contenuto della tabella EMPLOYEES, il primo non fa concludere la transazione (è un comando di tipo DML) mentre il secondo si (è di tipo DDL).

    Il confine tra un gruppo e un altro non è condiviso in modo universale e ci può essere qualche differenza tra un DBMS e un altro (ad esempio alcuni inseriscono il comando SELECT tra le operazioni DML e non considerano il gruppo DQL). La classificazione che segue in questo articolo fa riferimento principalmente al mondo Oracle.

    istruzioni-sql-ddl-dml-dcl-tcl

    I comandi di tipo DDL (Data Definition Language)

    I comandi di tipo DDL (Data Definition Language) consentono di creare, modificare o cancellare gli oggetti in un database, intervenendo a livello di struttura degli oggetti stessi dello schema (modificando cioè il dizionario dei dati che contiene le informazioni su come sono fatti gli oggetti del database). I comandi di tipo DDL sono i seguenti:

    • CREATE
    • ALTER
    • DROP
    • RENAME
    • TRUNCATE
    • COMMENT

    I comandi DDL definiscono la struttura degli oggetti del database (come ad esempio il comando CREATE TABLE) e quindi l’organizzazione logica dei dati in essi contenuti. Il comando seguente crea una tabella EMP nello schema HR con le colonne EMPNO, ENAME, HIREDATE, SAL e COMM.

    Il comando seguente modifica la struttura della tabella EMP cancellando la colonna COMM.

    Il comando seguente modifica la struttura della tabella EMP: in particolare, all’interno del dizionario dei dati, resetta (portando a zero il contatore) l’informazione sullo spazio occupati dai dati della tabella. L’effetto è la cancellazione immediata dei record della tabella, ma viene fatto a livello di struttura dei dati e non dei dati stessi.

    I comandi di tipo DDL lavorano sulla struttura degli oggetti del database e quindi sui metadati.

    I comandi di tipo DML (Data Manipulation Language)

    I comandi di tipo DML (Data Manipulation Language) riguardano le operazioni di aggiornamento dei dati; consentono quindi di inserire, modificare o cancellare i dati delle tabelle, senza intervenire a livello di struttura degli oggetti stessi dello schema (non modificando cioè il dizionario dei dati che contiene le informazioni su come sono fatti gli oggetti del database). I comandi di tipo DML sono i seguenti:

    • INSERT
    • UPDATE
    • DELETE
    • MERGE

    I comandi DDL definiscono la struttura degli oggetti del database (come ad esempio il comando CREATE TABLE) e quindi l’organizzazione logica dei dati in essi contenuti. Il comando seguente inserisce un record nella tabella EMP.

    Il comando seguente cancella tutti i record dalla tabella EMP (senza modificare la struttura della tabella nel dizionario dei dati).

    I comandi di tipo DML non lavorano sulla struttura degli oggetti del database, ma sui dati delle tabelle.

    I comandi di tipo DQL (Data Query Language)

    I comandi di tipo DQL (Data Query Language) riguardano le operazioni di interrogazione dei dati; consentono quindi di recuperare i dati delle tabelle. Il comando DQL per eccellenza è SELECT, a cui si aggiungono le clausole JOIN e le subquery.

    Il comando seguente recupera tutti i record memorizzati nella tabella EMP.

    Il comando seguente recupera i record dalla tabella EMP che soddisfano la condizione specificata nella subquery.

    I comandi di tipo DCL (Data Control Language)

    I comandi di tipo DCL (Data Control Language) controllano il livello di accesso che hanno gli utenti sugli oggetti del database. I comandi di tipo DML sono i seguenti:

    • GRANT
    • REVOKE

    In particolare GRANT consente di leggere/scrivere su determinati oggetti all’utente a cui viene concesso il privilegio, mentre REVOKE non consente di leggere/scrivere su determinati oggetti.

    I comandi di tipo TCL (Transaction Control Language)

    I comandi di tipo TCL (Transaction Control Language) agiscono sulle transazioni in modo esplicito. I comandi di tipo DCL sono i seguenti:

    • COMMIT
    • ROLLBACK
    • SAVEPOINT

     

    Giulio Cantali – IT Consultant

    Creatore di Database Master, il primo percorso per diventare esperti di database

Lascia un commento

Se vuoi condividere la tua opinione, lascia un commento

Puoi usare questi tag e attributi: HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">