TP2

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

120
tp2.md

@@ -1,6 +1,6 @@
# Travaux pratiques n°2 # Travaux pratiques n°2
## Sélections de colonnes ## Sélection de colonnes
- Afficher les titres et identifiants des albums. - Afficher les titres et identifiants des albums.
@@ -8,16 +8,16 @@
select Title, AlbumId from Albums 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 ```sql
SELECT FirstName, LastName, City from customers; 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 ```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. 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' 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 - 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' 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 ```sql
select InvoiceId, InvoiceDate , Total select InvoiceId, InvoiceDate , Total
from invoices from invoices
@@ -163,38 +167,124 @@ select
from invoices 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). - 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 # 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é. - 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). - 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). - Affichez toutes les pistes (Name) avec leur genre (Genre.Name).
## 1. Nombre de clients
## Compter
- Nombre de clients
```sql ```sql
``` ```
### 2. Nombre d'albums - Nombre d'albums
```sql ```sql
``` ```
### 3. Nombre d'artistes - Nombre d'artistes
```sql ```sql
``` ```