Skip to content

Instantly share code, notes, and snippets.

@jhroy
Last active November 9, 2016 17:55
Show Gist options
  • Save jhroy/21acbdf067adc6721b20fbb8aabe020a to your computer and use it in GitHub Desktop.
Save jhroy/21acbdf067adc6721b20fbb8aabe020a to your computer and use it in GitHub Desktop.
-- requêtes sur une base de données que vous pouvez intégrer dans MySQL à partir d'ici:
-- http://bit.ly/sqlsaq2
select *
from inv;
select *
from inv
where Quantité > 4000;
select *
from inv
where Quantité >999 and Quantité <1999;
select *
from prod
where pays = "France";
select *
from prod
where pays = "France" or pays = "Canada";
select *
from prod
where pays in ("France","Italie"); -- Équivalent de la commande précédente
select *
from prod
where pays <> "France" and pays <> "Canada";
select *
from prod
where type = "vin";
select *
from prod
where type like "vin%";
select *
from prod
where type like "%vin";
select *
from prod
where type like "%vin%";
select *
from prod
where année = 1995;
-- Jusqu'ici, les commandes pouvaient toutes être faites dans l'onglet «Contenu» de Sequel Pro
select *, sum(quantité)
from inv
group by numprod;
select numprod, sum(quantité)
from inv
group by numprod;
select ville, sum(ville)
from succ
group by ville; -- Ne marche pas!
select ville, count(ville)
from succ
group by ville;
select pays, count(pays) as nb
from prod
group by pays
order by nb desc;
select prod.pays, count(prod.pays) as nb
from prod
group by prod.pays
order by nb desc;
-- La plus puissante commande: JOIN
select *
from inv
join succ
on inv.numsucc=succ.numéro;
select *
from inv
join prod
on inv.numprod=prod.numéro;
select succ.nom, succ.adresse, succ.ville, succ.bannière, sum(inv.quantité) as total
from inv
join succ
on inv.numsucc=succ.numéro
group by succ.nom
order by total desc;
select prod.nom, prod.type, prod.pays, sum(inv.quantité) as total
from inv
join prod
on inv.numprod=prod.numéro
group by prod.nom
order by total desc;
-- Ne marche pas:
select prod.Nom, prod.Type, prod.Pays, sum(inv.quantité) as Total, sum(prod.volume) as "Volume total", round(sum(prod.prix),2) as Valeur
from inv
join prod
on inv.numprod=prod.numéro
group by prod.nom
order by Valeur desc;
select prod.Nom, prod.Type, prod.Pays, sum(inv.quantité) as Total, (sum(inv.quantité)*prod.Volume) as "Volume total", round((sum(inv.quantité)*prod.prix),2) as Valeur
from inv
join prod
on inv.numprod=prod.numéro
group by prod.Nom -- ou prod.Type ou prod.Pays
order by Valeur desc;
-- Ne marche pas, pourquoi (pcq produits ont tous même prix, ce qui n'est pas le cas des types ou des pays):
select prod.Nom, prod.Type, prod.Pays, sum(inv.quantité) as Total, (sum(inv.quantité)*prod.Volume) as "Volume total", round((sum(inv.quantité)*prod.prix),2) as Valeur
from inv
join prod
on inv.numprod=prod.numéro
group by prod.Type -- ou prod.Pays
order by Valeur desc;
-- Regrouper les 3 tables
select *
from inv
join prod
on inv.numprod=prod.numéro
join succ
on inv.numsucc=succ.numéro;
select *, round((inv.quantité*prod.prix),2) as Inventaire
from inv
join prod
on inv.numprod=prod.numéro
join succ
on inv.numsucc=succ.numéro
order by Inventaire desc;
select *, round((inv.quantité*prod.prix),2) as Inventaire, round((inv.quantité*prod.volume),0) as VolumeTotal
from inv
join prod
on inv.numprod=prod.numéro
join succ
on inv.numsucc=succ.numéro
order by VolumeTotal desc;
-- Sous-requête pour trouver l'inventaire total par succursale
select numsucc, sum(Inventaire) as InvTotal, succ.nom, succ.adresse from
(
select *, round((inv.quantité*prod.prix),2) as Inventaire
from inv
join prod
on inv.numprod=prod.numéro
) as trumpenormement -- il faut donner un alias à une sous-requête et on peut choisir n'importe quoi comme nom de variable
join succ
on succ.numéro=numsucc
group by numsucc
order by InvTotal desc;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment