> For the complete documentation index, see [llms.txt](https://learn.ziomark.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.ziomark.xyz/sql/parte-2-query-di-selezione.md).

# Parte 2: Query di Selezione

Ecco la seconda lezione del corso di SQL su ZioMark's HUB, completa di un esercizio pratico finale per la selezione avanzata.

Benvenuti alla seconda lezione del nostro corso di SQL su ZioMark's HUB! Dopo aver introdotto i fondamenti di SQL nella prima lezione, ora approfondiremo le query di selezione, esplorando come recuperare dati specifici da un database in modo più efficiente e potente.

### Filtrare i Risultati con `WHERE`

La clausola `WHERE` è fondamentale in SQL per filtrare i record in base a una condizione specifica. Questo permette di visualizzare solo i dati che rispondono a determinati criteri.

#### Sintassi

```sql
SELECT column1, column2, ...
FROM table_name
WHERE condition;
```

#### Esempio

Supponiamo di avere una tabella `Employees` con i seguenti dati:

| ID | Name    | Age | Department |
| -- | ------- | --- | ---------- |
| 1  | Alice   | 23  | HR         |
| 2  | Bob     | 30  | IT         |
| 3  | Charlie | 34  | IT         |
| 4  | David   | 29  | HR         |

Per selezionare solo gli impiegati del dipartimento IT, useremmo:

```sql
SELECT * FROM Employees
WHERE Department = 'IT';
```

### Ordinare i Risultati con `ORDER BY`

La clausola `ORDER BY` permette di ordinare i risultati di una query SQL. Puoi ordinare i dati in ordine ascendente (ASC) o discendente (DESC).

#### Sintassi

```sql
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
```

#### Esempio

Per ordinare gli impiegati per età in ordine crescente:

```sql
SELECT Name, Age FROM Employees
ORDER BY Age ASC;
```

### Utilizzo di Funzioni Aggregato

Le funzioni aggregato come `COUNT`, `MAX`, `MIN`, `SUM`, e `AVG` sono usate per eseguire calcoli sui valori di una colonna e restituire un singolo valore.

#### Esempio

Calcolare l'età media degli impiegati:

```sql
SELECT AVG(Age) AS AverageAge FROM Employees;
```

### Esercizio Pratico

Ora che hai appreso come filtrare e ordinare i dati, nonché utilizzare funzioni aggregato, applichiamo queste conoscenze in un esercizio pratico.

#### Scenario

Hai una tabella `Products` con le seguenti colonne: `ProductID`, `ProductName`, `Price`, e `Category`.

| ProductID | ProductName | Price | Category  |
| --------- | ----------- | ----- | --------- |
| 1         | Table       | 85    | Furniture |
| 2         | Chair       | 45    | Furniture |
| 3         | Lamp        | 22    | Lighting  |
| 4         | Desk        | 120   | Furniture |

#### Compito

1. Scrivi una query per trovare tutti i prodotti della categoria "Furniture".
2. Ordina questi prodotti per prezzo in ordine decrescente.
3. Calcola il prezzo medio dei prodotti nella categoria "Furniture".

#### Soluzioni

1. Selezionare prodotti della categoria Furniture:

   ```sql
   SELECT * FROM Products
   WHERE Category = 'Furniture';
   ```
2. Ordinarli per prezzo decrescente:

   ```sql
   SELECT * FROM Products
   WHERE Category = 'Furniture'
   ORDER BY Price DESC;
   ```
3. Calcolare il prezzo medio:

   ```sql
   SELECT AVG(Price) AS AveragePrice FROM Products
   WHERE Category = 'Furniture';
   ```

### Conclusione

Con queste competenze, sei ora in grado di eseguire query complesse e ottenere esattamente i dati di cui hai bisogno dal tuo database.

Nella prossima lezione, esploreremo come unire le tabelle per ottenere informazioni ancora più dettagliate. Continua a praticare con questi esempi per consolidare le tue abilità in SQL!
