TP2

2025-09-27 13:25:09 +02:00
parent 827d318e52
commit 039f34dc2b

120
tp2.md

@@ -1,6 +1,6 @@
# Travaux pratiques n°2
## Sélections de colonnes
## Sélection de colonnes
- Afficher les titres et identifiants des albums.
@@ -8,16 +8,16 @@
select Title, AlbumId from Albums
```
Afficher les colonnes prénom, nom et ville de la table clients.
- Afficher les colonnes prénom, nom et ville de la table clients.
```sql
SELECT FirstName, LastName, City from customers;
```
- Afficher le nom complet de tous les clients. Le nom complet est la concaténation dans <ins>une seule colonne</ins> du prénom et du nom. Donner le titre NomComplet à cette colonne.
- Afficher le nom complet des clients. Le nom complet est la concaténation dans <ins>une seule colonne</ins> du prénom et du nom. Donner le titre _NomComplet_ à cette colonne.
```sql
select firstName || ' ' || lastName as nomComplet, City from customers;
select FirstName || ' ' || LastName as nomComplet, City from customers;
```
L'opérateur `||` est l'opérateur de concaténation de chaine équivalent à + mais pour le texte.
@@ -57,8 +57,9 @@ select firstName || ' ' || lastName as nomComplet
where Country = 'Brazil'
```
[!WARNING]
Le respect des majuscules n'est pas obligatoire pour le nom des tables et colonnes mais cela l'est pour les valeurs *brazil* est différent de *Brazil*.
> [!WARNING]
> Le respect des majuscules n'est pas obligatoire pour le nom des tables et colonnes mais cela l'est pour les valeurs *brazil* est différent de *Brazil*.
- Filtrer les clients dont l'age est inférerieur à 25 ans et qui vivent aux USA
@@ -120,6 +121,9 @@ from invoices
where InvoiceDate between '2010-01-01' and '2010-12-31'
```
L'opérateur `between` combine supérieur ou égal >= ET inférieur ou égal <= dans une seule commande
```sql
select InvoiceId, InvoiceDate , Total
from invoices
@@ -163,38 +167,124 @@ select
from invoices
```
## Filtrage et tri avancés
## Top
- Affichez le titre des albums de lartiste AC/DC.
Pour afficher un top il suffit de trier par ordre décroissant `DESC` et de limiter le nombre de lignes.
- Listez les 10 pistes les plus longues (Name, Milliseconds) par durée décroissante.
- Afficher les 10 pistes les plus longues en durée.
- Montrez les 5 premières factures triées par montant total (Total) décroissant.
```sql
SELECT Name, Milliseconds FROM tracks
order by Milliseconds DESC
LIMIT 10;
```
- Afficher les 5 factures les plus importantes par montant total.
```sql
select Total from invoices
order by Total desc
limit 5
```
## Null
> [!WARNING]
> Null est égal à rien même pas à lui même. Il faut utiliser les opérateurs `IS NULL` ou `IS NOT NULL`
- Listez les employés (FirstName, LastName) qui reportent à un manager (ReportsTo non nul).
```sql
-- NE FONCTIONNE PAS !!
SELECT * FROM employees WHERE ReportsTo <> NULL;
SELECT * FROM employees WHERE ReportsTo IS NOT NULL;
```
- Le client qui n'a pas de numéro de téléphone
```sql
SELECT * FROM customers WHERE Phone IS NULL;
```
# Jointures simples
- Affichez le titre des albums de lartiste AC/DC.
```sql
-- Étape 1. Récupère artistId pour AC/DC
select ArtistId from artists where Name = 'AC/DC'
-- Étape 2. Sélectionne les albums pour ArtistId = 1
select Title from albums WHERE ArtistId = 1
```
Utilisation d'une sous-requête. Une requête utilise le résultat d'une autre.
```sql
SELECT Title FROM albums WHERE ArtistId = (
SELECT artistId FROM artists WHERE Name = 'AC/DC'
)
```
Utilisation d'une jointure entre 2 tables
```sql
SELECT Title
FROM albums
JOIN artists ON albums.ArtistId = artists.ArtistId
WHERE Name = 'AC/DC'
```
- Affichez le nom des pistes (Track.Name) et le nom de lalbum (Album.Title) associé.
- Listez tous les clients (FirstName, LastName) avec le pays (Country) et lemployé commercial (FirstName, LastName) qui leur est assigné.
- Affichez toutes les pistes (Track.Name) avec leur artiste (Artist.Name).
```sql
```
- Listez les factures (InvoiceId, Total) avec le nom du client (Customer.FirstName, Customer.LastName).
```sql
```
- Listez tous les clients (FirstName, LastName) avec le pays (Country) et lemployé commercial (FirstName, LastName) qui leur est assigné.
```sql
```
- Affichez toutes les pistes (Track.Name) avec leur artiste (Artist.Name).
```sql
```
- Affichez toutes les pistes (Name) avec leur genre (Genre.Name).
## 1. Nombre de clients
## Compter
- Nombre de clients
```sql
```
### 2. Nombre d'albums
- Nombre d'albums
```sql
```
### 3. Nombre d'artistes
- Nombre d'artistes
```sql
```