Torna all'elenco degli articoli Articoli
Tempo di lettura: 8 minuti

Come creare una tabella in SQL

La creazione di tabelle nei database è un'abilità molto utile, e non solo per gli ingegneri informatici o gli amministratori di database. Permette di progettare o modificare la struttura di un database e di memorizzare dati correlati tra loro. In questo articolo scoprirete cos'è una tabella di database, chi la crea e come utilizzare la sintassi del comando CREATE TABLE.

Che cos'è una tabella di database?

Un database relazionale è costituito da varie strutture come tabelle, viste, procedure e trigger. L'elemento principale di un database è la tabella. Si tratta di una struttura che memorizza i dati. Nella maggior parte dei casi, un database contiene più di una tabella e le tabelle sono correlate tra loro (ad esempio, le tabelle memorizzano informazioni correlate, come il nome, il colore degli occhi e l'altezza di una persona).

L'immagine seguente mostra un esempio di database per un negozio online di strumenti musicali. (L'immagine proviene dal blog Vertabelo; Vertabelo è uno strumento di modellazione di database online). Si noti che questo database ha diverse tabelle. Le linee indicano le relazioni tra le tabelle:

Database

Come si vede, ci sono molte tabelle: category, instrument, manufacturer, e altre ancora. In un database SQL, ogni tabella ha un nome e memorizza i dati in righe e colonne. Ogni riga memorizza i dettagli di un oggetto specifico.

Ad esempio, la tabella instrument memorizza informazioni sugli strumenti. Ogni riga rappresenta uno strumento specifico: una riga può contenere informazioni su una chitarra bianca acquistata da "Music Shop in Chicago"; un'altra riga può contenere informazioni su un tamburo d'argento acquistato da "In Tom's shop".

I dati di ogni riga devono essere atomici (cioè non possono essere più piccoli o più specifici), quindi dobbiamo dividerli in colonne. Ogni colonna contiene un tipo di dati, come un colore, un nome, un tipo di strumento o il negozio in cui è stato acquistato. Di seguito è riportata una tabella di esempio con queste colonne e righe:

namecolortypestore
guitarwhitechordophoneMusic Shop in Chicago
trumpetgoldwindMusic Shop in Chicago
drumssilverpercussionIn Tom’s shop

Il nome della tabella deve descrivere i dati in essa memorizzati. Al momento della creazione della tabella, è necessario definire anche il tipo o i tipi di dati utilizzati nelle colonne della tabella. (Per fare tutto questo è necessario avere l'autorizzazione CREATE TABLE, ma questo è un altro articolo).

Se siete interessati a imparare come creare tabelle in un database, vi consiglio la traccia Creazione di strutture di database su LearnSQL.it. Si tratta di una serie di cinque corsi interattivi che vi insegneranno i dettagli della creazione di tabelle in SQL.

Chi crea le tabelle?

Sapete cos'è una tabella, ma questo solleva un'altra domanda: chi crea le tabelle in un database? Diversi gruppi di persone possono creare tabelle di database.

Il primo gruppo è quello dei progettisti di database. Definiscono la struttura del database: cosa contengono le tabelle, le relazioni tra le tabelle, come le tabelle memorizzano le informazioni. Progettano nuovi database per applicazioni o servizi specifici.

Gli amministratori di database (DBA) si occupano dei server di database. Si occupano della manutenzione, della creazione e della modifica dei database. La creazione di nuove tabelle fa parte del loro lavoro.

Anche gli ingegneri del software e gli sviluppatori di applicazioni creano tabelle di database. Quando creano una nuova applicazione, spesso devono progettare un database per essa.

Gli analisti di dati sono un altro gruppo che a volte crea tabelle. Usano i database per memorizzare i dati che analizzano e possono usare le tabelle per conservare i risultati delle loro analisi.

Naturalmente, la progettazione di database e la creazione di tabelle possono essere utili a chiunque lavori con i dati o utilizzi i database.

Come creare una tabella

Creare una tabella in un database è molto semplice. È sufficiente utilizzare la sintassi SQL standard per il comando CREATE TABLE:

CREATE TABLE table_name
( 
column1 data_type, 
column2 data_type,
 … 
);

Vediamo cosa succede qui. Per prima cosa si inserisce la parola chiave CREATE TABLE, seguita dal nome della tabella. Questo nome non deve essere una parola chiave SQL (come CREATE, LIKE o NULL). Deve essere unico all'interno del database: se una tabella si chiama person, altre tabelle dello stesso database non possono avere questo nome - e descrivere i dati memorizzati nella tabella. Per saperne di più sulla denominazione delle tabelle, leggete Naming Conventions in Database Modeling e An Unemotional Logical Look at SQL Server Naming Conventions.

Dopo il nome, si aggiunge una coppia di parentesi. All'interno delle parentesi, si elencano i nomi delle colonne con i relativi tipi di dati. Un tipo di dati definisce il tipo di valori (numeri, testo, date, orari, ecc.) che si possono memorizzare in una colonna. I tipi di dati più diffusi sono:

  • INTEGER/INT memorizza numeri interi come -2567, 0 , 1 e 67.
  • VARCHAR memorizza dati di testo. È possibile specificare il numero massimo di caratteri in questo modo: VARCHAR(n). Ad esempio, varchar(4) può memorizzare i testi 'Lisa', 'Os' o 'Gary'.
  • CHAR è simile, ma invece di impostare la lunghezza massima, si imposta la lunghezza assoluta. Ad esempio, CHAR(4) memorizzerà 'Os' come 'Os'. Si notino i due spazi in più, che rendono la lunghezza massima pari a 4.
  • FLOAT memorizza numeri in virgola mobile, come -23,789, 23,5 e 78,0.
  • DECIMAL è simile a float in quanto memorizza numeri in virgola mobile. Tuttavia, è possibile indicare il numero totale massimo di cifre(p) e il numero di cifre dopo il decimale(s) in questo modo: DECIMAL(p,s). In altre parole, decimal(4,2) può memorizzare 12,56, 1,56, 70. A differenza di FLOAT, DECIMAL offre calcoli precisi. Utilizzatelo per memorizzare valori monetari.
  • TIME memorizza i dati relativi all'ora, ad esempio '12:34:50'.
  • DATE memorizza i dati relativi alla data, ad esempio '2020-09-09'.
  • DATETIME memorizza i dati relativi alla data e all'ora in un unico campo, ad esempio '2020-03-30 12:34:50'.

La sintassi di base di CREATE TABLE è la stessa per la maggior parte dei motori SQL; è possibile utilizzarla in Oracle, SQL Server, MySQL o PostgreSQL.

Creare una semplice tabella di database

Creiamo una tabella chiamata customer che contiene i dettagli sui clienti di un'azienda. Ogni riga conterrà i dati di un cliente specifico. La tabella deve avere le colonne ID, last_name, first_name e registration_date. Le colonne definite nella tabella memorizzano i dati atomici di ogni cliente: il numero di identificazione, il cognome, il nome e la data di registrazione come cliente.

Ecco il comando da utilizzare:

CREATE TABLE  customer
( 
ID int, 
last_name varchar(80),
first_name varchar(80),
registration_date date
);

Si inizia con la parola chiave CREATE TABLE, dopo la quale si dà il nome alla nuova tabella: customer. Poi, tra le parentesi, si indicano i nomi delle colonne e i tipi di dati. La prima colonna è ID, che memorizza valori interi come 1,2,3. La seconda e la terza colonna, last_name e first_name, sono valori stringa; useremo varchar(80) per loro. Ricordate che il valore tra parentesi indica il numero massimo di caratteri della stringa. Infine, la colonna registration_date memorizza la data di registrazione della persona.

I tipi di dati controllano il tipo di informazioni che possono essere inserite in una colonna; non è possibile inserire lettere o simboli in una colonna INT come ID. Per ulteriori informazioni sui tipi di dati, consultare i corsi Le basi della creazione di tabelle in SQL e Tipi di dati in SQL.

Definizione di colonne senza valori vuoti/ripetuti

L'istruzione CREATE TABLE illustrata nell'ultima sezione consente di inserire in un campo valori non univoci o valori vuoti (NULL). Ad esempio, è possibile avere lo stesso valore ID per più di un cliente. Possiamo modificare questo comportamento creando una tabella con dei vincoli: aggiungeremo dei vincoli a ID per impedire i NULL e i valori non univoci; aggiungeremo anche dei vincoli nelle colonne first_name e last_name per impedire i NULL in queste colonne. Date un'occhiata:

CREATE TABLE customer 
( 
ID int NOT NULL UNIQUE, 
last_name varchar(80) NOT NULL,
first_name varchar(80) NOT NULL,
registration_date date
);

SQL offre la parola chiave NOT NULL, che aggiunta alla definizione della colonna non consente di inserire o modificare una riga con valori vuoti (NULL). Nel nostro esempio, non possiamo omettere (o inserire un NULL) nelle colonne first_name, last_name o ID. Esse devono avere un valore.

Un'altra parola chiave importante è UNIQUE. Aggiungendo questa parola chiave, è possibile assicurarsi che tutti i valori di questa colonna siano diversi in ogni riga. Nel nostro esempio, la colonna ID contiene valori unici che identificano ogni cliente. Per saperne di più sui diversi tipi di vincoli, consultare il corso Vincoli SQL.

Creare una tabella a partire da dati memorizzati in un'altra tabella

È possibile creare una nuova tabella senza definire colonne: il processo si basa su dati e colonne presenti in altre tabelle.

Utilizzate questo metodo se volete creare tabelle e inserire dati memorizzati in colonne specifiche di un'altra tabella. Ecco la sintassi:

CREATE TABLE new_table_name
  SELECT col1, col2, … 
  FROM existing_table_name ;

Per prima cosa si fornisce la parola chiave CREATE TABLE e il nome della nuova tabella. Poi si utilizza il comando SELECT. Questo comando consente di specificare le colonne e le tabelle da cui copiare i dati nella nuova tabella. I nomi e i tipi di dati di queste colonne saranno automaticamente definiti nella nuova tabella.

Di seguito, creiamo la tabella history_instrument utilizzando le colonne ID, name, color e type dalla tabella instrument dalla tabella:

CREATE TABLE history_instrument   
  SELECT ID, name, type  
  FROM instrument ;

Si noti che la nuova tabella non memorizza tutte le colonne della tabella instrument.

Per saperne di più sulle strutture di database

Se siete interessati a costruire strutture di database come le tabelle, c'è molto materiale online che potete utilizzare. Su LearnSQL.it troverete articoli come Capire i tipi di dati numerici in SQL e TRUNCATE TABLE vs. DELETE vs. DROP TABLE: Rimuovere tabelle e dati in SQL per migliorare le vostre conoscenze di SQL. È inoltre possibile completare la traccia Creazione della struttura del database su LearnSQL.it per ottenere una panoramica completa e interattiva.