Récupérer des données¶
Commande de base¶
SELECT * FROM `Charts`
Cette commande permet de récupérer toutes les données d'une table, en l'occurence, Charts ici.
Voici le résultat que vous devriez obtenir avec les données de test :
| id | title | content | created_at | id_user |
|---|---|---|---|---|
| 1 | test | content-test | 2025-10-09 | 1 |
| 2 | mermaid_db | content-mermaid_db | 2025-10-09 | 1 |
| 3 | mermaid_api | content-mermaid_api | 2025-10-09 | 1 |
| 4 | mermaid_infra | content-mermaid_infra | 2025-10-09 | 1 |
| 5 | mermaid_call | content-mermaid_call | 2025-10-09 | 1 |
| 6 | reseau maison | content-reseau_maison | 2025-10-13 | 2 |
| 7 | nas-infra | content-nas-infra | 2025-10-13 | 2 |
| 8 | planif-travaux | content-planif-travaux | 2025-10-13 | 2 |
| 9 | projet-git-commit | content-projet-git-commit | 2025-10-26 | 4 |
| 10 | projet-gantt | content-projet-gantt | 2025-10-26 | 4 |
| 11 | projet-diagram-classe | content-projet-diagram-classe | 2025-10-26 | 4 |
| 12 | projet-mcd | content-projet-mcd | 2025-10-26 | 4 |
| 13 | infra_projet | content-infra_projet | 2025-10-30 | 5 |
| 14 | merge | content-merge | 2025-11-01 | 7 |
Récupérer une partie de la table¶
On veut récupérer tout de la table Users faut le mot de passe pour des raisons de sécurité. Pour se faire, on va éxecuter la commande suivante :
SELECT `id`, `email`, `code`, `created_at` FROM `Users`;
Voici les données que vous devriez avoir :
| id | code | created_at | |
|---|---|---|---|
| 1 | james@benone.ch | 2025-10-01 15:04:56.000 | |
| 2 | martin.lavalais@ikmail.com | 2025-10-03 19:45:12.000 | |
| 3 | michel@example.com | 194012 | 2025-10-06 11:50:03.000 |
| 4 | elton-john@yahoo.dev | 2025-10-17 09:03:12.000 | |
| 5 | sasukedu92@gmail.com | 2025-10-23 19:45:54.000 | |
| 6 | johnwick@gmail.com | 847102 | 2025-10-30 05:23:23.000 |
| 7 | sogo.sogot@gmail.com | 2025-11-02 17:30:34.000 |
Récupérer une donnée spécifique¶
Supposons qu'on veut récupérer la liste des charts de l'utilisateur 1.
On va faire la commande suivante :
SELECT * FROM `Charts` WHERE `id_user` = 1;
Voici les données que vous devriez avoir :
| id | title | content | created_at | id_user |
|---|---|---|---|---|
| 1 | test | content-test | 2025-10-09 | 1 |
| 2 | mermaid_db | content-mermaid_db | 2025-10-09 | 1 |
| 3 | mermaid_api | content-mermaid_api | 2025-10-09 | 1 |
| 4 | mermaid_infra | content-mermaid_infra | 2025-10-09 | 1 |
| 5 | mermaid_call | content-mermaid_call | 2025-10-09 | 1 |
Récupérer avant une date¶
Supposons que l'on veut récupérer tous les utilisateurs qui ont créer un compte avant novembre.
On peut récupérer cette donnée via la commande suivante :
SELECT `id`, `email`, `code`, `created_at` FROM `Users` WHERE `created_at` < '2025-11-01';
Voici les données récupérés :
| id | code | created_at | |
|---|---|---|---|
| 1 | james@benone.ch | 2025-10-01 15:04:56.000 | |
| 2 | martin.lavalais@ikmail.com | 2025-10-03 19:45:12.000 | |
| 3 | michel@example.com | 194012 | 2025-10-06 11:50:03.000 |
| 4 | elton-john@yahoo.dev | 2025-10-17 09:03:12.000 | |
| 5 | sasukedu92@gmail.com | 2025-10-23 19:45:54.000 | |
| 6 | johnwick@gmail.com | 847102 | 2025-10-30 05:23:23.000 |
Récupérer des champs vides¶
On veut récupérer tous les utilisateurs qui on un code.
La commande est la suivante :
SELECT `id`, `email`, `code`, `created_at` FROM `Users` WHERE `code` IS NOT NULL;
Voici les données récupérés
| id | code | created_at | |
|---|---|---|---|
| 3 | michel@example.com | 194012 | 2025-10-06 11:50:03.000 |
| 6 | johnwick@gmail.com | 847102 | 2025-10-30 05:23:23.000 |
Récuperer le nombre de colonne¶
On veut récupérer le nombre de Charts par Users. Pour cela, on va utiliser la fonction count().
Voici un exemple :
SELECT `id_user`, count(`id`) FROM `Charts`;
Voici les données que vous devriez avoir :
| id_user | count("id") |
|---|---|
| 1 | 14 |
On a eu le nombre de Charts, mais pas comme on voulait.
Ici il y a 2 problèmes.
Dans un premier temps, on n'a pas le nombre PAR utilisateur et c'est marqué count("id").
Mais je vous rassure, il y a moyen d'y remédier !
Récupérer des données groupés¶
Reprenons la commande d'avant mais rajoutons un petit truc et regardons ce que cela donne :
SELECT `id_user`, count(`id`) FROM `Charts` GROUP BY `id_user`;
Voici les données récupérés :
| id_user | count("id") |
|---|---|
| 1 | 5 |
| 2 | 3 |
| 4 | 4 |
| 5 | 1 |
| 7 | 1 |
On a déjà rêgler un problème, mais il en reste un...
Mettre des alias¶
Il est possible de mettre des alias pour les colonnes mais aussi pour les tables.
Voici un exemple avec les 2 :
SELECT c.id_user, count(c.id) AS nb_charts FROM `Charts` AS c GROUP BY c.id_user;
Voici les données récupérés :
| id_user | nb_charts |
|---|---|
| 1 | 5 |
| 2 | 3 |
| 4 | 4 |
| 5 | 1 |
| 7 | 1 |
Trier les données¶
Supposons que maintenant, on veut trier en fonction de celui qui a créé le plus de Charts
À savoir : Il y a 2 types de tri, DESC et ASC. Si vous ne mettez rien, par défaut, c'est ASC. ASC tri par ordre croissant alors que DESC tri en décroissant.
On peut via la commande suivante :
SELECT c.id_user, count(c.id) AS "nb_charts" FROM `Charts` AS c GROUP BY c.id_user ORDER BY nb_charts DESC;
Voici les données récupérés :
| id_user | nb_charts |
|---|---|
| 1 | 5 |
| 4 | 4 |
| 2 | 3 |
| 5 | 1 |
| 7 | 1 |
Limiter¶
On garde la même requête qu'avant mais on veut limiter le nombre de retour à, par exemple, 3.
On peut via la commande suivante :
SELECT c.id_user, count(c.id) AS "nb_charts" FROM `Charts` AS c GROUP BY c.id_user ORDER BY nb_charts DESC LIMIT 3;
Voici les données récupérés :
| id_user | nb_charts |
|---|---|
| 1 | 5 |
| 4 | 4 |
| 2 | 3 |
Récupérer 2 tables¶
On veut récupérer les 2 tables liés avec les champs suivants : id, email created_at, nb_charts,
Pour se faire, on peut le faire via la commande suivante :
SELECT u.id, u.email, u.created_at, count(c.id) AS "nb_charts" FROM `Users` AS u
JOIN `Charts` AS c ON c.id_user = u.id
GROUP BY u.id
ORDER BY nb_charts DESC;
Voici les données récupérés :
| id | created_at | nb_charts | |
|---|---|---|---|
| 1 | james@benone.ch | 2025-10-01 15:04:56.000 | 5 |
| 4 | elton-john@yahoo.dev | 2025-10-17 09:03:12.000 | 4 |
| 2 | martin.lavalais@ikmail.com | 2025-10-03 19:45:12.000 | 3 |
| 5 | sasukedu92@gmail.com | 2025-10-23 19:45:54.000 | 1 |
| 7 | sogo.sogot@gmail.com | 2025-11-02 17:30:34.000 | 1 |
Mais il y a un problème, on n'a pas tous les utilisateurs.
Il est tout de même possible de les afficher avec la commande suivante :
SELECT u.id, u.email, u.created_at, count(c.id) AS "nb_charts" FROM `Users` AS u
LEFT JOIN `Charts` AS c ON c.id_user = u.id
GROUP BY u.id
ORDER BY nb_charts DESC;
Voici les données récupérés :
| id | created_at | nb_charts | |
|---|---|---|---|
| 1 | james@benone.ch | 2025-10-01 15:04:56.000 | 5 |
| 4 | elton-john@yahoo.dev | 2025-10-17 09:03:12.000 | 4 |
| 2 | martin.lavalais@ikmail.com | 2025-10-03 19:45:12.000 | 3 |
| 5 | sasukedu92@gmail.com | 2025-10-23 19:45:54.000 | 1 |
| 7 | sogo.sogot@gmail.com | 2025-11-02 17:30:34.000 | 1 |
| 3 | michel@example.com | 2025-10-06 11:50:03.000 | 0 |
| 6 | johnwick@gmail.com | 2025-10-30 05:23:23.000 | 0 |
Il faut savoir qu'il existe plusieurs types de JOIN. LEFT, RIGHT, INNER, etc...
Par défaut, si vous ne mettez que JOIN, il l'exécutera comme un INNER JOIN.