# Parte 2: Query di Selezione

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!
