📒
SQL
Created @March 4, 2024 3:57 PM
Reviewed
Database
Creazione
CREATE DATABASE nomeDatabase
Eliminazione
DROP nomeDatabase
Tabelle
Creazione
CREATE TABLE NomeTabella(
nome_colonna1 tipo1 [NOT NULL],
nome_colonna2 tipo2 [NOT NULL],
nome_colonna3 tipo3 [NOT NULL],
nome_colonnaN tipoN [NOT NULL]
);
Eliminazione
DROP TABLE NomeTabella;
Tipi di dati
//numerico:
SMALLINT //2 byte
FLOAT //numero reale in singola precisione
DOUBLE //numero reale in doppia precisione
DECIMAL(p,q) //numero con un masimo di P cifre di cui Q cifre dopo il punto decimale
//logico
BOOLEAN
//testo
CHAR(n) //stringa con N massimo di caratteri fino a 255
VARCHAR(n) //stringa con N massimo di caratteri fino a 2048
MEMO //stringa fino a 65536 caratteri
//data
DATE //data nella forma AAAA/MM/GG
TIME //ora nella forma HH:MM
Primary key e foreign key
SQL 1
CREATE TABLE NomeTabella(
id_nome_colonna1 tipo1 PRIMARY KEY NOT NULL,
nome_colonna2 tipo2 [NOT NULL],
FK_nome_colonna3 tipo3 [NOT NULL],
nome_colonnaN tipoN [NOT NULL]
FOREIGN KEY(FK_nome_colonna3) REFERENCES NomeTabellaDellaFK(id_chiave_primaria)
);
//forma abbreviata per la Foreign Key
CREATE TABLE NomeTabella(
id_nome_colonna1 tipo1 PRIMARY KEY NOT NULL,
nome_colonna2 tipo2 [NOT NULL],
FK_nome_colonna3 tipo3 [NOT NULL] REFERENCES NomeTabellaDellaFK(id_chiave_primaria), //NOTA: il tipo de
nome_colonnaN tipoN [NOT NULL]
);
Clausole
ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
//TODO: inserire cosa fa ogni singola clausola
Creazione di un indice
CREATE UNIQUE INDEX nome_indice
ON nome_tabella(nome_colonna) //anche con più campi quindi: ON nome_tabella(nome_colonna1, nome_col
Modificare la struttura di una tabella
//inserire una nuova colonna
ALTER TABLE nome_tabella
ADD nome_colonna tipo
//cancellare una colonna
ALTER TABLE nome_tabella
DROP nome_colonna
//modificare una colonna cambiandone il tipo
ALTER TABLE nome_tabella
CHANGE nome_colonna nome_colonna nuovoTipo
Dati
Inserimento
INSERT INTO NomeTabella [(nomeColonna1, nomeColonna2, nomeColonnaN)]
VALUES ([valore1, valore2, valoreN]),
([valore1, valore2, valoreN])
Modifica
UPDATE NomeTabella
SET nome_colonna = espressione
[WHERE condizione]
Cancellazione
SQL 2
DELETE
FROM nome_tabella
[WHERE condizione]
Select (DQL, data query language)
SELECT nome_colonna
FROM nome_tabella
[WHERE condizione]
[GROUP BY [nome_colonna]]
[HAVING condizione]
[ORDER BY nome_colonna]
Where
//definisce la condizione a cui devono sottostare le righe da cercare, una condizione
//può essere di confronto semplice (>, <, >=, <=, <>) o di confronto composto (AND, OR, NOT)
//il predicato della condizione WHERE può essere anche:
// LIKE, NOT LIKE, BETWEEN, NOT BETWEEN, IS NULL, IS NOT NULL, IN, NOT IN
LIKE
//confronto tra stringhe che contengono valori speciali detti jolly: % e _
// _ -> per indicare qualsiasi carattere singolo in quella posizione della stringa
// % -> per indicare una sequenza qualsiasi di caratteri in quella posizione della stringa
SELECT Nome_prodotto, Prezzo
FROM Prodotti
WHERE Nome_prodotto LIKE 'P%'
SELECT Nome, Cognome
FROM Giocatori
WHERE Nome LIKE 'Francesc_'
//NOT LIKE funziona al contrario, quindi sostituendo LIKE con NOT LIKE nell'esempio sopra
//ci restituirà i record che NON hanno il nome simile a Francesc_
BETWEEN
//controlla se un valore è compreso all'interno di un intervallo di valori
SELECT Nome_prodotto, Prezzo
FROM Prodotti
WHERE Prezzo BETWEEN 10 AND 15
//NOT BETWEEN funziona al contrario, ci restituisce tutti i valori che NON sono compresi nell'intervallo
Operatori logici
// sono AND, OR, NOT
SELECT Nome_prodotto, Prezzo
FROM Prodotti
WHERE Nome_prodotto LIKE 'C%' AND Prezzo < 15
SELECT Nome_prodotto, Prezzo
FROM Prodotti
WHERE (Nome_prodotto LIKE 'C%' OR Nome_prodotto LIKE 'P%') AND Prezzo < 10
IN
SQL 3
//restituisce i valori che soddisfano la condizione, quindi i fornitori che avranno sede a Londra a Roma
SELECT *
FROM Fornitori
WHERE Città in ('Londra', 'Roma', 'Parigi')
DISTINCT
//non resituisce valori uguali, quindi se ci sono due centro-campisti ne restituisce solo uno
SELECT DISTINCT Ruolo
FROM Giocatori
Altri usi
Generare nuove tabelle
SELECT ListaCampi INTO NuovaTabella
FROM Tabella_di_origine
[WHERE condizione]
Ordinare i risultato di una query
//la clausola ORDER BY ordina i dati visualizzati secondo uno o più campi specificati,
//in ordine crescente o decresente
//ordinamento crescente di default, se lo si vuole decrescente bisogna specificare
// DESC accanto agli attributi di cui si vuole l'ordinamento
SELECT Nome_prodotto, Prezzo
FROM Prodotti
ORDER BY Nome_prodotto
Operazione JOIN
LEFT JOIN
//visualizza tutte le righe della prima tabella (quella a sinistra dell'operatore)
//inoltre congiunge le righe della prima tabella con quelle della seconda tabella, che hanno i valori corri
SELECT *
FROM Tabell1 LEFT JOIN Tabella2
WHERE campoTabella1 = campoTabella2
//esempio
SELECT*
FROM Studenti AS S LEFT JOIN Voti AS V
ON [Link] = [Link]
RIGHT JOIN
//visualizza tutte le righe della seconda tabella congiungendo con le righe della prima
// solo le righe della seconda per quali si trovano i valori corrispondenti
SELECT *
FROM Tabell1 RIGHT JOIN Tabella2
WHERE campoTabella1 = campoTabella2
//esempio
SQL 4
SELECT*
FROM Voti AS V RIGHT JOIN Studenti AS S
ON [Link] = [Link]
WHERE [Link] IS NULL
SELF JOIN
SELECT T1.campo1, T2.campo2
FROM tabella_uno AS T1, tabella_uno AS T2
WHERE T1.campo1 = T2.campo2
//esempio -> così possiamo conoscere i nonni di Anna
SELECT [Link] AS Nonni
FROM Genitori AS G1, Genitori AS G2
WHERE [Link] = [Link] AND [Link] = 'Anna'
Funzioni di aggregazione
//sono COUNT(), SUM(), AVG(), MAX(), MIN()
COUNT()
//conta il numero di righe presenti selezionate
SELECT COUNT(*) //ci da il numero di tutte le righe (record) della tabella
FROM NomeTabella
[WHERE condizione]
SELECT COUNT(Cellulare) //ci da il numero di Dipendenti che hanno associato il cellulare
FROM Dipendenti
SUM()
//restituisce la somma si tutti i valori contenuti in una colonne
SELECT SUM(nomeColonna)
FROM nomeTabella
[WHERE condizione]
//esempio -> restituisce la somma degli stipen
SELECT SUM(stipendio)
FROM Dipendenti
WHERE Dipartimento = 'Vendite'
AVG()
//restituisce la media aritmetica dei valori di una colonna
SELECT AVG(nomeColonna)
FROM nomeTabella
[WHERE condizione]
//esempio
SELECT AVG(stipendio)
FROM Dipendenti
WHERE Dipartimento = 'Vendite'
MIN()
SQL 5
//restituisce il valore più piccolo di una colonna
SELECT MIN(nomeColonna)
FROM nomeTabella
[WHERE condizione]
//esempio
SELECT MIN(stipendio) as 'Stipendio minimo'
FROM Dipendenti
WHERE Dipartimento = 'Vendite'
//può essere usato anche con le stringhe
SELECT MIN(Cognome)
FROM Dipendenti
//restituisce il primo cognome in ordine alfabetico
MAX()
//restituisce il valore più grande di una colonna
SELECT MAX(nomeColonna)
FROM nomeTabella
[WHERE condizione]
//esempio
SELECT MAX(stipendio) as 'Stipendio massimo'
FROM Dipendenti
WHERE Dipartimento = 'Vendite'
//possimao utilizzarli tutti insieme
SELECT MIN(stipendio), MAX(stipendio), AVG(stipendio)
FROM Dipendenti
WHERE Dipartimento = 'Vendite'
Raggruppamenti
GROUP BY
//raggruppa le righe in base ai valori uguali delle colonne specificate
SELECT elencoCampi
FROM nomeTabella
[WHERE condizione]
GROUP BY elencoCampi //raggruppa le righe in base ai valori uguali
[ORDER BY elencoCampi]
//esempio
SELECT codReparto, nomeReparto COUNT(*)
FROM Dipendenti
GROUP BY codReparto
//esempio 2
SELECT codReparto, MAX(stipendio), MIN(stipendio)
FROM Dipendenti
GROUP BY codReparto
SQL 6