Aller au contenu

Récupérer des données

Commande de base

SQL
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 :

SQL
SELECT `id`, `email`, `code`, `created_at` FROM `Users`;

Voici les données que vous devriez avoir :

id email 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 :

SQL
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 :

SQL
SELECT `id`, `email`, `code`, `created_at` FROM `Users` WHERE `created_at` < '2025-11-01';

Voici les données récupérés :

id email 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 :

SQL
SELECT `id`, `email`, `code`, `created_at` FROM `Users` WHERE `code` IS NOT NULL;

Voici les données récupérés

id email 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 :

SQL
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 :

SQL
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 :

SQL
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 :

SQL
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 :

SQL
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 :

SQL
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 email 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 :

SQL
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 email 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.