Comprendre comment interroger la base de données du projet afin de :
Les requêtes présentées ici sont celles qui seront réellement utilisées dans le projet.
Les exemples s’appuient sur les tables suivantes :
itemcategorythemetagitem_tagRelations principales :
item.category_id → category.iditem.theme_id → theme.iditem et tag via item_tagSELECT permet de choisir quelles colonnes lire dans une table.
SELECT label
FROM item;
ou
SELECT label FROM item;
Cette requête lit la colonne label de la table item.
AS permet de renommer une colonne dans le résultat, sans modifier la base.
SELECT label AS item_label
FROM item;
Le champ s’appelle toujours label dans la table, mais apparaît sous le nom item_label dans le résultat.
WHERE permet de restreindre les résultats selon une condition.
SELECT label
FROM item
WHERE status = 'published';
Seuls les items dont le statut est published sont retournés.
IN permet de tester une valeur dans une liste.
SELECT label
FROM item
WHERE status IN ('draft', 'published');
Cette requête retourne les items dont le statut est soit draft, soit published.
LIKE permet d’effectuer une recherche par motif sur une colonne textuelle.
SELECT label
FROM item
WHERE label LIKE '%guide%';
Cette requête retourne les items dont le titre contient le mot guide.
% — suite de caractèresSELECT label
FROM item
WHERE label LIKE 'Guide%';
Titres qui commencent par Guide.
SELECT label
FROM item
WHERE label LIKE '%Guide';
Titres qui se terminent par Guide.
_ — un seul caractèreSELECT label
FROM item
WHERE label LIKE 'Chapitre _';
Correspond à Chapitre 1, Chapitre A, mais pas Chapitre 10.
Si le texte contient réellement % ou _, on peut utiliser ESCAPE.
SELECT label
FROM item
WHERE label LIKE '%\_%' ESCAPE '\';
Recherche les titres contenant réellement le caractère _.
INNER JOIN retourne uniquement les lignes présentes dans les deux tables.
SELECT item.label, category.name
FROM item
INNER JOIN category
ON item.category_id = category.id;
Un item sans catégorie n’apparaît pas dans le résultat.
Les relations N..N passent par une table associative.
SELECT item.label, tag.name
FROM item
INNER JOIN item_tag
ON item.id = item_tag.item_id
INNER JOIN tag
ON item_tag.tag_id = tag.id;
Cette requête relie item à tag via item_tag.
LEFT JOIN conserve toutes les lignes de la table de gauche, même sans correspondance.
SELECT item.label, tag.name
FROM item
LEFT JOIN item_tag
ON item.id = item_tag.item_id
LEFT JOIN tag
ON item_tag.tag_id = tag.id;
Les items sans tag apparaissent avec des valeurs NULL.
ORDER BY permet de trier les résultats.
SELECT label
FROM item
ORDER BY label ASC;
Trie les items par titre, par ordre alphabétique croissant.
SELECT label
FROM item
ORDER BY label DESC;
Trie les items par titre, par ordre décroissant.
LIMIT permet de restreindre le nombre de lignes retournées.
SELECT label
FROM item
ORDER BY label
LIMIT 5;
Retourne uniquement les 5 premiers résultats.
SELECT label
FROM item
ORDER BY label
LIMIT 5 OFFSET 5;
Retourne 5 résultats à partir du sixième.
| Élément | Rôle |
|---|---|
| SELECT | Lire des données |
| AS | Clarifier l’affichage |
| WHERE | Filtrer les résultats |
| IN | Tester plusieurs valeurs |
| LIKE | Recherche partielle |
| INNER JOIN | Relations existantes |
| LEFT JOIN | Relations absentes |
| ORDER BY | Trier les résultats |
| LIMIT | Limiter l’affichage |