Aller au contenu principal

Jointures simples

  1. Affichez le titre des albums de l’artiste AC/DC.

Utilisation d'une sous-requête. Une requête utilise le résultat d'une autre.

Utilisation d'une jointure entre 2 tables

select b.title
from album b
join artist a on b.artist_id = a.artist_id
where a.name = 'AC/DC';
  1. Affichez le nom des pistes (Track.Name) et le nom de l’album (Album.Title) associé.
select t.name, a.title
from track t
join album a on a.album_id = t.album_id;

La liaison ON sur ce qui est commun entre les 2 tables

  1. Listez les factures (InvoiceId, Total) avec le nom du client (Firstname, LastName).
select i.invoice_id, i.total, c.first_name, c.last_name
from invoice i
join customer c on c.customer_id = i.customer_id
  1. Listez tous les clients (prénom, nom) avec le pays et l’employé commercial (prénom, nom) qui leur est assigné.
remarque

FirstName et LastName sont présents dans les 2 tables. Il est OBLIGATOIRE d'utiliser l'alias de table pour savoir quelle colonne est affichée

  1. Affichez toutes les pistes (Name) avec leur genre (Genre.Name).
  1. Affichez toutes les pistes (Track.Name) avec leur artiste (Artist.Name).

Compter​

  1. Nombre de clients
select count(*) from customer;
  1. Nombre d'albums
select count(*) from album;
  1. Nombre d'artistes
select count(*) from artist;
  1. Combien y a-t-il de pays différents parmi les clients ?
select count(distinct country)
from customer;

Utilisation de distinct pour supprimer les doublons.

  1. Liste des pays uniques
select distinct country
from customer;

Agrégations​

  1. Nombre de clients par pays
select country, count(*)
from customer
group by country;
  1. Nombre de pistes par genre
select g.name,count(t.*)
from track t
join genre g on g.genre_id=t.genre_id
group by g.genre_id;
  1. Nombre d'albums par artiste.
select a.name,count(m.*)
from artist a
join album m on a.artist_id = m.artist_id
group by a.artist_id;
  1. Nombre de piste par artiste
select a.name,count(t.*)
from artist a
join album m on a.artist_id = m.artist_id
join track t on t.album_id = m.album_id
group by a.artist_id;
  1. Durée total des albums au format heure/minutes/secondes
select a.title, (sum(t.milliseconds/1000) || 'minutes')::INTERVAL
from track t
join album a on t.album_id = a.album_id
group by a.album_id;
  1. Chiffre d'affaire par piste
select t.track_id, t.name AS track_name,
SUM(il.unit_price * il.quantity) AS total_revenue
from track t
join invoice_line il on t.track_id = il.track_id
group by t.track_id, t.name;
  1. Chiffre d'affaire par album
select m.title,
SUM(l.unit_price * l.quantity) as recette
from track t
join invoice_line l ON t.track_id = l.track_id
join album m on m.album_id = t.album_id
group by m.album_id;
  1. Les 3 meilleurs clients.

Combinaison d'un tri descendant (du plus grand au plus petit) et limiter le nombre de lignes.

select c.first_name, c.last_name,
sum(i.total) as revenu
from invoice i
join customer c on c.customer_id = i.customer_id
group by c.customer_id
order by revenu desc
limit 3;
  1. Les genres écoutés par Isabelle Mercier

Attention l'égalité est stricte sur FirstName et LastName (respect des majuscules / minuscules)