fedrizzip
Ominide
7 min. di lettura
Vota 4 / 5

Concetti Chiave

  • Le tabelle in SQL sono definite con il comando CREATE TABLE, specificando nome, tipo di dato e eventuali clausole come PRIMARY KEY e REFERENCES per le chiavi primarie ed esterne.
  • Per modificare la struttura di una tabella esistente, si utilizza ALTER TABLE con le opzioni ADD per aggiungere colonne e DROP per rimuoverle.
  • I comandi INSERT, UPDATE e DELETE permettono rispettivamente di aggiungere, modificare e rimuovere dati dalle tabelle, mantenendo inalterato lo schema della tabella.
  • Il comando SELECT consente di proiettare determinati campi da una tabella; le opzioni ALL e DISTINCT controllano la presenza di righe duplicate nel risultato.
  • SQL supporta diverse tipologie di join, distinguendo tra join espliciti, che specificano il tipo di congiunzione, e join impliciti, che utilizzano la clausola WHERE per la condizione di congiunzione.
Informatica - Linguaggio SQL

Definizione delle tabelle

Le tabelle vengono definite con il comando CREATE TABLE, seguito dal nome della tabella e dall'elenco degli attributi. Per ogni attributo occorre specificare nome e tipo di dato. Gli attributi possono essere qualificati con diverse clausole.

Esempio:

CREATE TABLE nomeTabella (
Attr1 smallint primary key, //chiave primaria
Attr2 char(20) not null, //campo obbligatorio, non può restare vuoto
Attr3 char(20) default 'valore_di_default', //valore di default
Attr4 char(5) references tabella2(codice)); //chiave esterna

Tra le altre clausole va ricordata UNIQUE che vieta la presenza di valori duplicati in una colonna o in un insieme di colonne.

Per esempio, per indicare che non possono esserci due dipendenti con identico nome e cognome nello stesso dipartimento, si può sfruttare la clausola UNIQUE:

UNIQUE(Cognome, Nome, Dipartimento)

Anche le clausole PRIMARY KEY e REFERENCES possono essere inserite in righe isolate; questa caratteristica permette di dichiarare chiavi primarie o esterne formate da più campi. Assieme alla definizione di un chiave esterna è possibile dichiarare il tipo di comportamento (politiche di reazione) da tenere in caso di cancellazione di una riga nella tabella collegata o di variazione del valore.

Esempio:

CREATE TABLE Dipartimenti(
Codice char(5),
Descrizione char(20) not null,
Sede char(20),
Manager smallint,
Primary Key (Codice), //chiave primaria
Unique (Descrizione),
Foreign Key (Manager) references Impiegati (ID) //Manager è chiave esterna
On Delete set null
On Update cascade);

On Delete set null significa che è permessa la cancellazione di una riga di Impiegati e i valori di Manager corrispondenti assumono valore nullo.
On Update cascade significa che l'aggiornamento di un ID associato a Manager si riflette a catena sui valori di Manager.
Le dichiarazioni On Delete no action e On Update no action impediscono di cancellare un record della tabella Impiegati correlato alla chiave esterna di Dipartimenti o di modificare il valore della chiave primaria di un dipendente che è un manager in qualche dipartimento.

La struttura di una tabella può essere modificata in un secondo tempo con il comando ALTER TABLE, per aggiungere una nuova colonna (ADD) a quelle già esistenti, oppure per togliere una colonna (DROP). Per esempio, per inserire un nuovo attributo con la data di nascita del dipendente si usa il comando:

ALTER TABLE Impiegati
ADD Nascita date;

Utilizzando l'opzione DROP si può togliere dalla tabella impiegati l'attributo che si riferisce alla località di residenza:

ALTER TABLE Impiegati
DROP Residenza;

Una tabella può essere eliminata con il comando DROP, seguito dal nome della tabella, cancellando così tutte le istanze della tabella nonché lo schema:

DROP TABLE Impiegati;

Usando il comando DELETE invece, si eliminano le istanze della tabella ma lo schema resta immutato:

DELETE FROM Impiegati;

Comandi per la manipolazione dei dati

Per inserire i valori di una nuova riga della tabella Impiegati, si usa il comando:

INSERT INTO Impiegati
(ID, Nome, Cognome, Residenza, Stipendio, Dipartimento) //nomi dei campi
VALUES (20,'Mario','Rossini','Caserta',31500,'Mag'); //valori

Per assegnare il dipendente con ID=20 al dipartimento Produzione, occorre il comando:

UPDATE Impiegati
SET Dipartimento='Prod'
WHERE Matricola=20;

Per cancellare dalla tabella Impiegati i dati del dipendente con ID=20, si usa il comando:

DELETE FROM Impiegati
WHERE ID=20;

Comando Select

Il comando SELECT specifica quali campi della tabella considerata si vogliono visualizzare, possiamo dire che è l'equivalente della proiezione nello pseudolinguaggio.

Esempio: visualizzare l'elenco con cognome, nome e residenza dei dipendenti del dipartimento di codice Prod.

SELECT Cognome, Nome, Residenza
FROM Impiegati
WHERE Dipartimento='Prod';

Esempio: visualizzare l'elenco dei dipendenti (con ID, Cognome, Nome) che lavorano alla produzione e risiedono a Torino.

SELECT ID, Nome, Cognome
FROM Impiegati
WHERE Dipartimento='Prod' AND Residenza='Torino';

Il comando Select possiede due predicati ALL e DISTINCT.

Con il predicato ALL si richiede che nel risultato dell'interrogazione siano incluse tutte le righe che soddisfano alle condizioni contenute nel comando.

Scrivere SELECT * equivale a scrivere SELECT ALL*

Se viene specificato il comando DISTINCT le righe duplicate nella tabella risultante sono ridotte a una. Per esempio se si desidera ottenere l'elenco di tutte le città di residenza dei dipendenti, senza duplicati, visto che è possibile che più dipendenti abitino nella stessa città, si deve usare la clausola DISTINCT prima dell'attributo:

SELECT DISTINCT Residenza
FROM Impiegati;

Tramite AS si possono rinominare tabelle e colonne:

SELECT ID AS Matricola, Nome, Cognome
FROM Impiegati;

Con il comando SELECT si può anche richiedere il calcolo di espressioni sugli attributi presenti nella tabella:

SELECT Cognome, Nome, Stipendio AS Attuale, Stipendio*1.05 AS Nuovo
FROM Impiegati
WHERE Dipartimento='Mag'

Per controllare la presenza di valori nulli si deve fare uso del predicato IS NULL, mentre è errato scrivere =NULL.

Domini

I domini sono in sostanza i tipi di dati che le informazioni possono assumere, ne esistono di due tipi:

  • Elementari (predefiniti): tipi di dati "classici" singoli caratteri, stringhe, booleani, interi, ecc.
  • Definiti dall'utente (semplici): si definiscono con CREATE DOMAIN

CREATE DOMAIN voto AS SMALLINT
DEFAULT NULL
CHECK (value>=18 AND value

Durante la definizione di questi domini si possono anche stabilire valori di default e vincoli.

La congiunzione

In SQL le congiunzioni (join) possono essere scritte in forma implicita o esplicita.
Le join esplicite riguardano tutti i tipi di join. La particolarità delle join implicite è che il tipo di congiunzione da costruire e la condizione di congiunzione sono espresse nella clausola FROM:

SELECT Impiegati.*,Dipartimenti.*
FROM Dipartimenti INNER JOIN Impiegati ON Dipartimenti.Codice=Impiegati.Dipartimento;

Le join implicite invece prevedono che la condizione di congiunzione venga scritta nella clausola WHERE:

SELECT *
FROM Impiegati,Dipartimenti
WHERE Impiegati.Dipartimento=Dipartimento.Codice

Questa sintassi è utilizzabile solo per gli INNER JOIN.

Domande da interrogazione

  1. Come si definisce una tabella in SQL?
  2. Le tabelle in SQL vengono definite con il comando CREATE TABLE, seguito dal nome della tabella e dall'elenco degli attributi, specificando nome e tipo di dato per ciascun attributo.

  3. Qual è la differenza tra i comandi DELETE e DROP in SQL?
  4. Il comando DELETE elimina le istanze della tabella mantenendo lo schema, mentre DROP elimina completamente la tabella e il suo schema.

  5. Come si utilizza la clausola UNIQUE in SQL?
  6. La clausola UNIQUE vieta la presenza di valori duplicati in una colonna o in un insieme di colonne, garantendo l'unicità dei dati.

  7. Qual è la funzione del comando SELECT in SQL?
  8. Il comando SELECT specifica quali campi di una tabella si vogliono visualizzare, permettendo di filtrare e proiettare i dati desiderati.

  9. Come si eseguono le join in SQL?
  10. Le join in SQL possono essere eseguite in forma implicita o esplicita, con le join esplicite che riguardano tutti i tipi di join e le join implicite che utilizzano la clausola WHERE per definire la condizione di congiunzione.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community