Ben tornati! Nella prima parte abbiamo esplorato alcuni comandi fondamentali del linguaggio SQL. Ora, continuiamo il nostro viaggio con ulteriori approfondimenti e nuove informazioni che completeranno il quadro. Pronti a scoprire di più?
Operatori Logici SQL
Gli operatori logici consentono di utilizzare più operatori di confronto in una query. Ogni operatore logico è unico, quindi li esamineremo individualmente nelle lezioni seguenti.
- LIKE consente di confrontare valori simili, invece di valori esatti.
- IN consente di specificare un elenco di valori che si desidera includere.
- BETWEEN consente di selezionare solo le righe all’interno di un certo intervallo.
- IS NULL consente di selezionare le righe che non contengono dati in una determinata colonna.
- AND consente di selezionare solo le righe che soddisfano due condizioni.
- OR consente di selezionare le righe che soddisfano una delle due condizioni.
- NOT consente di selezionare le righe che non corrispondono a una determinata condizione.
Operatore LIKE
SELECT * FROM Sales WHERE group LIKE 'New%';
Operatore IN
SELECT * FROM Songs WHERE artist IN ('Taylor Swift', 'Usher');
Operatore BETWEEN
SELECT * FROM Songs WHERE year_rank BETWEEN 5 AND 10;
Operatore AND
SELECT * FROM Songs WHERE year = 2012 AND year_rank <= 10;
Operatore OR
SELECT * FROM Songs WHERE year_rank = 5 OR artist = "Sonu";
Operatore NOT
SELECT * FROM Sales WHERE NOT Country = "Japan";
Combinare AND, OR e NOT
SELECT * FROM Sales WHERE Country = 'Japan' AND (City = 'Goa' OR City = 'Puri');
ORDER BY
SELECT * FROM Sales ORDER BY Country, CustomerName; SELECT * FROM Sales ORDER BY Country ASC, CustomerName DESC;
Utilizzo dei Commenti (Come Usare i Commenti)
-- Questo è un comando select SELECT * FROM Sales WHERE year = 2020; SELECT * FROM Sales WHERE year = 2015;
Funzioni di Aggregazione SQL
SQL è eccellente nell’aggregare i dati come si potrebbe fare in una tabella pivot in Excel. Utilizzerai le funzioni di aggregazione molto spesso, quindi è importante prenderci confidenza. Le funzioni stesse sono le stesse che troveresti in Excel o in qualsiasi altro programma di analisi.
- COUNT: Conta quante righe ci sono in una particolare colonna.
- SUM: Somma tutti i valori in una particolare colonna.
- MIN e MAX: Restituiscono rispettivamente il valore più basso e più alto in una particolare colonna.
- AVG: Calcola la media di un gruppo di valori selezionati.
Esempi:
SELECT COUNT(*) FROM Sales; SELECT COUNT(column_name) FROM table_name WHERE Condition; SELECT SUM(column_name) FROM table_name WHERE Condition; SELECT MIN(column_name) FROM table_name WHERE Condition; SELECT MAX(column_name) FROM table_name WHERE Condition; SELECT AVG(column_name) FROM table_name WHERE Condition;
Clausola GROUP BY di SQL
GROUP BY consente di separare i dati in gruppi, che possono essere aggregati indipendentemente l’uno dall’altro.
SELECT year, COUNT(*) AS Count FROM Sales GROUP BY year;
Colonne Multiple
SELECT year, month, COUNT(*) AS Count FROM Sales GROUP BY year, month;
GROUP BY con Numeri di Colonne
SELECT year, month, COUNT(*) AS count FROM Sales GROUP BY 1, 2;
Utilizzo di GROUP BY con ORDER BY
SELECT year, month, COUNT(*) AS Count FROM Sales GROUP BY year, month ORDER BY month, year;
Utilizzo di GROUP BY con LIMIT
SELECT column_names FROM table_name WHERE Condition GROUP BY column_name LIMIT number;
Clausola HAVING
La clausola HAVING è stata aggiunta a SQL perché la parola chiave WHERE non può essere utilizzata con funzioni di aggregazione.
SELECT column_name(s) FROM table_name WHERE Condition GROUP BY column_name(s) HAVING condition ORDER BY column_name(s);
Esempio:
SELECT year, month, MAX(high) AS month_high FROM Sales GROUP BY year, month HAVING MAX(high) > 400 ORDER BY year, month;
Istruzione CASE di SQL
L’istruzione CASE è il modo in cui SQL gestisce la logica if/then. L’istruzione CASE è seguita da almeno una coppia di istruzioni WHEN e THEN—l’equivalente di IF/THEN in Excel. A causa di questo accoppiamento, potresti essere tentato di chiamarlo SQL CASE WHEN, ma CASE è il termine accettato.
Ogni istruzione CASE deve terminare con l’istruzione END. L’istruzione ELSE è opzionale e fornisce un modo per catturare i valori non specificati nelle istruzioni WHEN/THEN. CASE è più facile da capire nel contesto di un esempio.
Sintassi:
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 WHEN conditionN THEN resultN ELSE result END;
Esempio:
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN 'La quantità è maggiore di 30' WHEN Quantity = 30 THEN 'La quantità è 30' ELSE 'La quantità è inferiore a 30' END AS QuantityText FROM Sales;
SQL DISTINCT
Occasionalmente potresti voler vedere solo i valori unici in una particolare colonna. Puoi farlo utilizzando la sintassi SELECT DISTINCT.
SELECT DISTINCT month FROM Sales; SELECT DISTINCT year, month FROM Sales;
Utilizzo di DISTINCT nelle Aggregazioni
SELECT COUNT(DISTINCT month) AS Unique_months FROM Sales;
JOIN in MySQL
Una clausola JOIN viene utilizzata per combinare righe da due o più tabelle, basandosi su una colonna correlata tra di esse.
SELECT * FROM benn.college_football_players players JOIN benn.college_football_teams teams ON teams.school_name = players.school;
Tipi di JOIN Supportati in MySQL
- INNER JOIN: Restituisce i record che hanno valori corrispondenti in entrambe le tabelle.
- LEFT JOIN: Restituisce tutti i record dalla tabella di sinistra e i record corrispondenti dalla tabella di destra.
- RIGHT JOIN: Restituisce tutti i record dalla tabella di destra e i record corrispondenti dalla tabella di sinistra.
- CROSS JOIN: Restituisce tutti i record da entrambe le tabelle.
INNER JOIN
La parola chiave INNER JOIN seleziona i record che hanno valori corrispondenti in entrambe le tabelle.
SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
LEFT JOIN
La parola chiave LEFT JOIN restituisce tutti i record dalla tabella di sinistra (table1) e i record corrispondenti (se presenti) dalla tabella di destra (table2).
SELECT column_name(s) FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
RIGHT JOIN
La parola chiave RIGHT JOIN restituisce tutti i record dalla tabella di destra (table2) e i record corrispondenti (se presenti) dalla tabella di sinistra (table1).
SELECT column_name(s) FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
CROSS JOIN
La parola chiave CROSS JOIN restituisce tutti i record da entrambe le tabelle (table1 e table2).
SELECT column_name(s) FROM table1 CROSS JOIN table2;
SELF JOIN
Un self join è un join regolare, ma la tabella viene unita a se stessa.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
UNION
I join SQL consentono di combinare due set di dati affiancati, ma UNION consente di impilare un set di dati sopra l’altro. In altre parole, UNION consente di scrivere due istruzioni SELECT separate e di avere i risultati di una visualizzati nella stessa tabella dei risultati dell’altra.
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
IN
L’operatore IN consente di specificare più valori in una clausola WHERE. L’operatore IN è una scorciatoia per più condizioni OR.
SELECT * FROM Sales WHERE Country IN ('India', 'Nepal', 'UK'); SELECT * FROM Sales WHERE Country NOT IN ('India', 'Nepal', 'UK'); SELECT * FROM Sales WHERE Country IN (SELECT Country FROM Supplier);
Operatore EXISTS
L’operatore EXISTS viene utilizzato per testare l’esistenza di qualsiasi record in una sottoquery. L’operatore EXISTS restituisce TRUE se la sottoquery restituisce uno o più record.
SELECT column_name(s) FROM table_name WHERE EXISTS (SELECT column_name FROM table_name WHERE condition);
Operatori ANY e ALL
Gli operatori ANY e ALL consentono di eseguire confronti tra un singolo valore di colonna e un intervallo di altri valori.
Operatore ANY
- Restituisce un valore booleano come risultato.
- Restituisce TRUE se QUALSIASI dei valori della sottoquery soddisfa la condizione.
- ANY significa che la condizione sarà vera se l’operazione è vera per qualsiasi valore nell’intervallo.
SELECT ProductName FROM Sales WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99);
Operatore ALL
- Restituisce un valore booleano come risultato.
- Restituisce TRUE se TUTTI i valori della sottoquery soddisfano la condizione.
- Viene utilizzato con le istruzioni SELECT, WHERE e HAVING.
- ALL significa che la condizione sarà vera solo se l’operazione è vera per tutti i valori nell’intervallo.
SELECT ALL ProductName FROM Sales WHERE TRUE; SELECT ProductName FROM Sales WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
INSERT INTO SELECT
L’istruzione INSERT INTO SELECT copia i dati da una tabella e li inserisce in un’altra tabella. L’istruzione INSERT INTO SELECT richiede che i tipi di dati nelle tabelle di origine e di destinazione corrispondano. I record esistenti nella tabella di destinazione non vengono influenzati.
INSERT INTO table2 SELECT * FROM table1 WHERE condition; INSERT INTO table2 (column1, column2, column3, ...) SELECT column1, column2, column3, ... FROM table1 WHERE condition;
Istruzione INSERT INTO
L’istruzione INSERT INTO viene utilizzata per inserire nuovi record in una tabella. È possibile scrivere l’istruzione INSERT INTO in due modi:
- Specificare sia i nomi delle colonne che i valori da inserire:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
- Se si stanno aggiungendo valori per tutte le colonne della tabella, non è necessario specificare i nomi delle colonne nella query SQL. Tuttavia, assicurarsi che l’ordine dei valori sia lo stesso dell’ordine delle colonne nella tabella. In questo caso, la sintassi INSERT INTO sarebbe la seguente:
INSERT INTO table_name VALUES (value1, value2, value3, ...);
Funzione IFNULL()
La funzione IFNULL() consente di restituire un valore alternativo se un’espressione è NULL. L’esempio seguente restituisce 0 se il valore è NULL:
SELECT ContactName, IFNULL(bizphone, homephone) AS phone FROM contacts; SELECT name, IFNULL(officephone, mobilephone) AS contact FROM employee;
Grazie per aver letto la nostra guida in due parti! Speriamo che queste informazioni ti siano state utili. Se hai domande o vuoi condividere la tua esperienza, lascia un commento qui sotto. Non dimenticare di esplorare gli altri articoli del blog per ulteriori approfondimenti!