Session BRE05 Help

Exercice : Des requêtes, encore des requêtes correction

title: Exercice : Des requêtes, encore des requêtes

Requête 13

Le nom, la description et le prix de chacun des produits.

SELECT products.name, products.description, products.price FROM products;

Requête 14

Le nom, la description et le prix de chacun des produits des produits de moins de 42€ du plus cher au moins cher.

SELECT products.name, products.description, products.price FROM products WHERE products.price < 42 ORDER BY products.price DESC;

Requête 15

Le nom de la ville, le code postal, le numéro de rue et l'intitulé de la rue des adresses.

SELECT addresses.city, addresses.postal_code, addresses.number, addresses.street FROM addresses;

Requête 16

Le nom de la ville, le code postal, le numéro de rue et l'intitulé de la rue des adresses dont le nom de la ville commence par A.

SELECT addresses.city, addresses.postal_code, addresses.number, addresses.street FROM addresses WHERE addresses.city LIKE 'A%';

Requête 17

La liste de tous les utilisateurs

SELECT * FROM users;

Requête 18

La liste de tous les utilisateurs rangée par date de naissance

SELECT * FROM users ORDER BY users.birthdate;

Requête 19

La liste de tous les utilisateurs rangée par date de naissance de plus de 5O ans

SELECT * FROM users WHERE users.birthdate < NOW() - INTERVAL 50 YEAR ORDER BY users.birthdate; # ou SELECT * FROM users WHERE TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) > 50; ORDER BY users.birthdate;

Requête 20

La liste de tous les utilisateurs rangée par date de naissance, de plus de 5O ans et en ajoutant une colonne nommé "Age" pour afficher leur âge calculé actuel

SELECT *, TIMESTAMPDIFF(YEAR, users.birthdate, NOW()) AS Age FROM users WHERE users.birthdate <= NOW() - INTERVAL 50 YEAR ORDER BY users.birthdate ASC; # ou SELECT *, TIMESTAMPDIFF(YEAR, users.birthdate, CURDATE()) AS Age FROM users WHERE TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) > 50 ORDER BY birthdate ASC;
  1. Affichez le prix du produit le moins cher, le plus cher, et le prix moyen de tout le catalogue.

SELECT MIN(price) AS min, MAX(price) AS max, AVG(price) AS moy FROM products;
  1. Affichez la référence et la date des 5 dernières commandes passées sur le site, de la plus récente à la plus ancienne.

SELECT reference, date FROM orders ORDER BY date DESC LIMIT 5;
  1. Affichez le nom des produits commandés par les utilisateurs habitant à "Laporte".

SELECT DISTINCT p.name FROM products p JOIN products_orders po ON p.id = po.product_id JOIN orders o ON po.order_id = o.id JOIN users u ON o.user_id = u.id JOIN addresses a ON u.address_id = a.id WHERE a.city = 'Laporte';
  1. Calculez la valeur totale du stock (somme des prix de tous les produits).

SELECT SUM(price) FROM products;
  1. Affichez le nom de chaque catégorie et le nombre de produits qu'elle contient.

SELECT c.title, COUNT(pc.product_id) FROM categories c LEFT JOIN products_categories pc ON c.id = pc.category_id GROUP BY c.id;
  1. Affichez une colonne unique nommée "Identité" regroupant le Nom (en majuscules) et le Prénom, ainsi que l'email de chaque utilisateur.

SELECT CONCAT(UPPER(last_name), ' ', first_name) AS Identité, email FROM users;
  1. Affichez la référence de la commande et le nom de l'utilisateur pour toutes les commandes passées avant le 15 juin 2018.

SELECT o.reference, u.last_name FROM orders o JOIN users u ON o.user_id = u.id WHERE o.date < '2018-06-15';
  1. Affichez les produits qui appartiennent à plus d'une catégorie.

SELECT p.name FROM products p JOIN products_categories pc ON p.id = pc.product_id GROUP BY p.id HAVING COUNT(pc.category_id) > 1;
  1. Listez le nom, le prénom et l'âge des utilisateurs qui ont moins de 35 ans.

SELECT last_name, first_name, TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) AS age FROM users WHERE TIMESTAMPDIFF(YEAR, birthdate, CURDATE()) < 35;
  1. Affichez les 3 produits les plus présents dans les commandes (nom du produit et nombre d'apparitions).

SELECT p.name, COUNT(po.order_id) AS ventes FROM products p JOIN products_orders po ON p.id = po.product_id GROUP BY p.id ORDER BY ventes DESC LIMIT 3;
13 February 2026