SQL avanzato
Non molto tempo fa ho creato un tutorial per principianti di SQL, puoi leggerlo qui . Oggi è il momento di parlare di argomenti più avanzati, come gli operatori GROUP BY e HAVING, l'istruzione MERGE e le stored procedure.
RAGGRUPPA PER
La clausola GROUP BY in SQL viene utilizzata per raggruppare le righe in un set di risultati basato su una o più colonne. Viene in genere utilizzato insieme a funzioni di aggregazione come COUNT, SUM, AVG, MIN e MAX per calcolare i valori per ciascun gruppo.
SELECT category, SUM(sales)
FROM orders
GROUP BY category;
Un altro esempio:
SELECT department, COUNT(employee_id)
FROM employees
GROUP BY department;
È importante notare che è necessario utilizzare funzioni di aggregazione su tutte le colonne scelte che non sono coperte dalla clausola GROUP BY per evitare di ricevere un errore. Inoltre, è fondamentale ricordare che le colonne nella clausola GROUP BY sono quelle che definiscono i gruppi; l'ordine delle colonne nell'istruzione SELECT non ha alcuna influenza sul set di risultati.
AVENDO
In base alle condizioni per la funzione di aggregazione, i gruppi di righe in un set di risultati possono essere filtrati utilizzando la clausola HAVING in SQL. In genere è combinato con la clausola GROUP BY per eliminare i gruppi che non soddisfano requisiti particolari.
Ad esempio, considera la seguente query SQL che seleziona le vendite totali per ogni categoria di prodotto in una ordertabella di esempio e restituisce solo le categorie con vendite totali superiori a 1000:
SELECT category, SUM(sales)
FROM orders
GROUP BY category
HAVING SUM(sales) > 1000;
Un altro esempio:
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING COUNT(employee_id) > 5;
Analogamente alla clausola WHERE, la clausola HAVING viene utilizzata per filtrare i gruppi dopo che la clausola GROUP BY li ha prodotti e le funzioni di aggregazione sono state applicate.
UNISCI
L'istruzione SQL MERGE viene utilizzata per aggiornare o inserire dati in una tabella di destinazione in base ai dati in una tabella di origine o per combinare i dati di due o più tabelle in un'unica tabella. Viene spesso utilizzato come alternativa alle istruzioni che combinano INSERT, UPDATE e DELETE.
Sintassi:
MERGE INTO target_table
USING source_table
ON (join_condition)
WHEN MATCHED THEN
UPDATE SET target_table.column1 = source_table.column1, ...
WHEN NOT MATCHED THEN
INSERT (column1, column2, ...)
VALUES (source_table.column1, source_table.column2, ...)
MERGE INTO products
USING prices
ON (products.product_id = prices.product_id)
WHEN MATCHED THEN
UPDATE SET products.price = prices.price;
MERGE INTO employees
USING temp_employees
ON (employees.employee_id = temp_employees.employee_id)
WHEN MATCHED THEN
UPDATE SET employees.salary = temp_employees.salary
WHEN NOT MATCHED THEN
INSERT (employee_id, first_name, last_name, department, salary)
VALUES (temp_employees.employee_id, temp_employees.first_name, temp_employees.last_name, temp_employees.department, temp_employees.salary);
Alcuni sistemi di gestione dei database come MySQL e SQLite non supportano l'istruzione MERGE, quindi è necessario utilizzare la combinazione delle istruzioni INSERT, UPDATE e DELETE.
Il comando MERGE deve essere testato su un piccolo sottoinsieme di dati prima di essere utilizzato sull'intera tabella perché potrebbe avere un notevole impatto sulle prestazioni su tabelle di grandi dimensioni.
Procedura di archiviazione
Un gruppo precompilato di istruzioni SQL conservate in un database come stored procedure. Sono spesso impiegati per svolgere un compito specifico o una raccolta di attività, come ottenere informazioni da un database o fare calcoli complicati. Rispetto all'esecuzione di numerose istruzioni SQL separate, le stored procedure sono più versatili ed efficaci poiché possono ricevere parametri di input e restituire valori di output.
Ecco un esempio di una semplice stored procedure che recupera tutte le righe da una tabella employees:
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM employees;
END
EXEC GetAllEmployees;
Sostieni la nostra pubblicazione seguendola
Si vedano anche i seguenti articoli.
Domande e risposte sull'intervista all'API Java 8 Stream
![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































