Home Insegnanti Contattami Portfolio

SQL: Concetti base

SQL

SQL (Structured Query Language) è un linguaggio di programmazione utilizzato per la gestione dei dati in una base di dati relazionale. SQL permette di eseguire operazioni di inserimento, aggiornamento, eliminazione e selezione dei dati.

Esempi di query in SQL:

SELECT *
FROM clienti;
SELECT *
FROM prodotti
WHERE prezzo < 10;
UPDATE prodotti
SET prezzo = 10
WHERE id = 1234;
DELETE FROM ordini
WHERE data < '2021-01-01';

Clausole

FROM

Clausola iniziale di una query. Inoltre, un'espressione di query può contenere sottoquery che iniziano anch’esse con una clausola FROM.

La clausola FROM specifica:

Esempio di utilizzo della clausola FROM con una sottoquery:

SELECT cliente_id, nome
FROM (
    SELECT cliente_id, nome, regione
    FROM clienti
    WHERE regione = 'Lazio'
) AS clienti_laziali;

JOIN

Clausola che serve per l’associazione di elementi di sequenze di origine diverse che non hanno una relazione diretta nel modello ad oggetti. L’unico requisito è che gli elementi in ogni origine condividano alcuni valori di cui può essere verificata l’uguaglianza.

Esistono diversi tipi di JOIN:

Esempio di INNER JOIN:

SELECT clienti.nome, ordini.data_ordine
FROM clienti
INNER JOIN ordini ON clienti.id = ordini.cliente_id;

WHERE

Clausola che viene usata in un'espressione di query per specificare quali elementi dell’origine dati verranno restituiti nell’espressione di query. Viene applicata una condizione booleana (predicato) ad un elemento di origine e viene restituita quella per cui la condizione specificata è vera.

Esempio di utilizzo della clausola WHERE:

SELECT nome, cognome
FROM clienti
WHERE regione = 'Lazio';

SELECT

Clausola che specifica i tipi di valori che verranno prodotti quando viene eseguita la query. Può essere utilizzata per selezionare colonne specifiche, eseguire calcoli, aggregare dati, ecc.

Esempio di utilizzo della clausola SELECT:

SELECT nome, cognome, CONCAT(nome, ' ', cognome) AS nome_completo
FROM clienti;

INTO

Parola chiave che può essere usata per creare un identificatore temporaneo al fine di archiviare i risultati di una clausola SELECT, JOIN o GROUP BY in un nuovo identificatore.

Esempio di utilizzo della parola chiave INTO:

SELECT nome, cognome
INTO clienti_temporanei
FROM clienti
WHERE regione = 'Lazio';

Funzioni Aggregate

Le funzioni aggregate eseguono calcoli su un insieme di valori e restituiscono un singolo valore. Alcune delle funzioni aggregate più comuni includono:

Esempi di utilizzo delle funzioni aggregate:

SELECT COUNT(*) AS numero_clienti
FROM clienti;

SELECT AVG(prezzo) AS prezzo_medio
FROM prodotti;

SELECT MIN(data_ordine) AS primo_ordine, MAX(data_ordine) AS ultimo_ordine
FROM ordini;

Ordinamento dei Risultati

La clausola ORDER BY viene utilizzata per ordinare i risultati di una query in base a una o più colonne. Può ordinare i risultati in ordine ascendente (ASC) o discendente (DESC).

Esempio di utilizzo della clausola ORDER BY:

SELECT nome, cognome
FROM clienti
ORDER BY cognome ASC, nome DESC;

Raggruppamento dei Dati

La clausola GROUP BY viene utilizzata per raggruppare i dati in base a una o più colonne. È spesso utilizzata insieme alle funzioni aggregate.

Esempio di utilizzo della clausola GROUP BY:

SELECT regione, COUNT(*) AS numero_clienti
FROM clienti
GROUP BY regione;

Filtraggio dei Gruppi

La clausola HAVING viene utilizzata per filtrare i gruppi di risultati creati dalla clausola GROUP BY in base a una condizione.

Esempio di utilizzo della clausola HAVING:

SELECT regione, COUNT(*) AS numero_clienti
FROM clienti
GROUP BY regione
HAVING COUNT(*) > 10;

Creazione e Manipolazione di Tabelle

Creazione di una Tabella

La parola chiave CREATE TABLE viene utilizzata per creare una nuova tabella in un database.

Esempio di creazione di una tabella:

CREATE TABLE clienti (
    id INT PRIMARY KEY,
    nome VARCHAR(50),
    cognome VARCHAR(50),
    regione VARCHAR(50)
);

Inserimento di Dati

La parola chiave INSERT INTO viene utilizzata per inserire nuovi dati in una tabella.

Esempio di inserimento di dati:

INSERT INTO clienti (id, nome, cognome, regione)
VALUES (1, 'Mario', 'Rossi', 'Lazio');

Aggiornamento di Dati

La parola chiave UPDATE viene utilizzata per aggiornare i dati esistenti in una tabella.

Esempio di aggiornamento di dati:

UPDATE clienti
SET regione = 'Toscana'
WHERE id = 1;

Eliminazione di Dati

La parola chiave DELETE FROM viene utilizzata per eliminare i dati esistenti in una tabella.

Esempio di eliminazione di dati:

DELETE FROM clienti
WHERE id = 1;

Eliminazione di una Tabella

La parola chiave DROP TABLE viene utilizzata per eliminare una tabella esistente.

Esempio di eliminazione di una tabella:

DROP TABLE clienti;

Vincoli di Integrità

Vincoli di Chiave Primaria

Un vincolo di chiave primaria (PRIMARY KEY) garantisce che ogni valore nella colonna o combinazione di colonne sia unico e non nullo.

Esempio di vincolo di chiave primaria:

CREATE TABLE clienti (
    id INT PRIMARY KEY,
    nome VARCHAR(50),
    cognome VARCHAR(50)
);

Vincoli di Chiave Esterna

Un vincolo di chiave esterna (FOREIGN KEY) garantisce che il valore in una colonna corrisponda ai valori in una colonna di un'altra tabella.

Esempio di vincolo di chiave esterna:

CREATE TABLE ordini (
    id INT PRIMARY KEY,
    cliente_id INT,
    data_ordine DATE,
    FOREIGN KEY (cliente_id) REFERENCES clienti(id)
);

Vincoli di Unicità

Un vincolo di unicità (UNIQUE) garantisce che tutti i valori in una colonna o combinazione di colonne siano unici.

Esempio di vincolo di unicità:

CREATE TABLE utenti (
    id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);

Vincoli di Non Null

Un vincolo di non null (NOT NULL) garantisce che una colonna non possa avere valori nulli.

Esempio di vincolo di non null:

CREATE TABLE prodotti (
    id INT PRIMARY KEY,
    nome VARCHAR(100) NOT NULL,
    prezzo DECIMAL(10, 2) NOT NULL
);

Transazioni

Le transazioni sono un insieme di operazioni SQL che vengono eseguite come un'unità singola. Le proprietà ACID (Atomicità, Coerenza, Isolamento, Durabilità) garantiscono l'affidabilità delle transazioni.

Iniziare una Transazione

Le transazioni vengono iniziate con la parola chiave BEGIN TRANSACTION.

Esempio di inizio di una transazione:

BEGIN TRANSACTION;

Confermare una Transazione

La parola chiave COMMIT viene utilizzata per confermare una transazione, rendendo permanenti tutte le operazioni eseguite durante la transazione.

Esempio di conferma di una transazione:

COMMIT;

Annullare una Transazione

La parola chiave ROLLBACK viene utilizzata per annullare una transazione, revertendo tutte le operazioni eseguite durante la transazione.

Esempio di annullamento di una transazione:

ROLLBACK;

Indici

Gli indici migliorano la velocità delle operazioni di ricerca in una tabella creando una struttura dati che consente un accesso più rapido ai dati.

Cosa sono?

Un indice di una tabella svolge una funzione simile all'indice del libro, ordina i record del database in base al valore di un determinato campo.

Essi vengono usati per migliorare i tempi di ricerca dei dati.

Se una tabella non ha indici, ogni ricerca obbliga il sistema a leggere tutti i dati presenti in essa. L'indice consente invece di ridurre l'insieme dei dati da leggere per completare la ricerca.

Tipi di indici

i tipi principali di indici sono:

  1. Primary key. E' l'indice associato alla chiave primaria della tabella. Non deve contenere dati duplicati, né valori Null. Spesso è usata su campi numerici con la direttiva auto_increment per identificare i record ( es. ID ).
  1. Unique key. E' un indice aggiuntivo. Si applica ai campi strategici della tabella. Non può contenere dati duplicati ma è consentita la presenza dei valori Null.
  1. Index. Questo tipo di indice consente sia i dati duplicati che i valori Null.
  1. Full Text. E' un indice specifico usato nelle ricerche delle parole all'interno dei testi.

Creazione di un Indice

La parola chiave CREATE INDEX viene utilizzata per creare un nuovo indice su una tabella.

Esempio di creazione di un indice:

CREATE INDEX idx_nome_cliente
ON clienti (nome);

Eliminazione di un Indice

La parola chiave DROP INDEX viene utilizzata per eliminare un indice esistente.

Esempio di eliminazione di un indice:

DROP INDEX idx_nome_cliente;