Ominide 19 punti
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<=30)

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.
Hai bisogno di aiuto in Informatica?
Trova il tuo insegnante su Skuola.net | Ripetizioni
Registrati via email