SQL - Subquery

Ciao, appassionati di SQL! Sono entusiasta di essere il tuo guida in questo viaggio emozionante nel mondo delle subquery SQL. Come qualcuno che ha insegnato scienze informatiche per molti anni, posso dirti che le subquery sono come la salsa segreta che può portare le tue competenze SQL dal buono al grande. Allora, immergiamoci e scopriamo insieme i misteri delle subquery!

SQL - Sub Queries

Subquery SQL

Cos'è una Subquery?

Immagina di fare un sandwich. Il pane è la tua query principale, ma ciò che lo rende veramente delizioso sono i ripieni all'interno - quella è la tua subquery! In termini SQL, una subquery è una query annidata all'interno di un'altra query. È come fare una domanda dentro un'altra domanda, permettendoti di eseguire operazioni complesse che potrebbero non essere possibili con una singola query.

Ecco un esempio semplice:

SELECT employee_name
FROM employees
WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Marketing');

In questa query, la parte dentro le parentesi è la nostra subquery. Sta trovando il department_id del dipartimento Marketing, che viene poi utilizzato dalla query esterna per trovare tutti i dipendenti di quel dipartimento.

Regole da seguire

Prima di addentrarci di più, esaminiamo alcune regole importanti per l'uso delle subquery:

  1. Le subquery devono essere racchiuse tra parentesi.
  2. Una subquery può avere solo una colonna nella clausola SELECT, a meno che non ci siano più colonne nella query principale per il confronto.
  3. Un comando ORDER BY non può essere utilizzato in una subquery, anche se la query principale può utilizzare un ORDER BY.
  4. Le subquery che restituiscono più di una riga possono essere utilizzate solo con operatori di valore multipli come l'operatore IN.

Ecco una tabella utile che riassume queste regole:

Regola Descrizione
Parentesi Le subquery devono essere racchiuse tra parentesi
singola Colonna La subquery SELECT di solito restituisce solo una colonna
Nessun ORDER BY ORDER BY non può essere utilizzato in una subquery
Righe Multiple Utilizzare operatori di valore multipli per subquery che restituiscono più righe

Subquery con la Dichiarazione SELECT

Le subquery sono più comunemente utilizzate con la dichiarazione SELECT. Possono essere estremamente potenti per recuperare dati basati su condizioni dinamiche. Ecco un esempio più complesso:

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

Questa query seleziona tutti i prodotti con un prezzo superiore alla media di tutti i prodotti. La subquery calcola il prezzo medio, e la query principale utilizza questo risultato per filtrare i prodotti.

Ecco un altro esempio che utilizza una subquery nella clausola SELECT:

SELECT
employee_name,
salary,
(SELECT AVG(salary) FROM employees) as avg_salary
FROM employees;

Questa query non solo recupera il nome e lo stipendio di ciascun dipendente, ma include anche lo stipendio medio di tutti i dipendenti in ogni riga. È come avere una mini-relazione per ciascun dipendente!

Subquery con la Dichiarazione INSERT

Le subquery possono anche essere utilizzate con le dichiarazioni INSERT per popolare una tabella con dati da un'altra tabella. Ecco un esempio:

INSERT INTO high_salary_employees (employee_id, employee_name, salary)
SELECT employee_id, employee_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) * 1.5 FROM employees);

Questa query inserisce nella tabella high_salary_employees tutti i dipendenti il cui stipendio è superiore a 1,5 volte la media degli stipendi. È come creare una lista VIP dei tuoi top earner!

Subquery con la Dichiarazione UPDATE

Le subquery possono rendere le tue dichiarazioni UPDATE molto più potenti. Ecco un esempio:

UPDATE products
SET price = price * 1.1
WHERE category_id = (SELECT category_id FROM categories WHERE category_name = 'Electronics');

Questa query aumenta il prezzo di tutti i prodotti nella categoria 'Electronics' del 10%. La subquery trova il category_id per 'Electronics', che viene poi utilizzato dalla query principale per aggiornare i prodotti corretti.

Subquery con la Dichiarazione DELETE

Infine, vediamo come le subquery possono essere utilizzate con le dichiarazioni DELETE:

DELETE FROM orders
WHERE customer_id IN (
SELECT customer_id
FROM customers
WHERE last_order_date < DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
);

Questa query elimina tutti gli ordini dei clienti che non hanno effettuato un ordine negli ultimi 12 mesi. La subquery trova tutti i clienti che non hanno effettuato un ordine negli ultimi 12 mesi, e la query principale elimina i loro ordini.

E вот и все,朋友们! Abbiamo viaggiato attraverso il paese delle subquery SQL, dai concetti di base alle applicazioni più avanzate. Ricorda, la pratica rende perfetti, quindi non aver paura di sperimentare queste query con i tuoi database.

Come sempre dico ai miei studenti, SQL è come un coltello svizzero - e le subquery sono quella lama nascosta che può tirarti fuori da situazioni difficili. Quindi continua a esplorare, continua a fare query e, soprattutto, continua a imparare!

Credits: Image by storyset