L’UE 8 de système d’informations de gestion s’intéresse notamment aux requêtes SQL. Elles font bloquer pas mal d’élèves, non habituées à la gestion de base de données. Voici toutes les requêtes à maitriser pour réussir le DCG.

I Les requêtes SQL sans calcul

A Les impératifs des requêtes SQL

Une requête SQL pour extraire des données d’une base de données relationnelle comprend au minimum les clauses SELECT et FROM. Le résultat est une table contenant un ou plusieurs champs (colonnes). Six clauses peuvent se succéder en respectant obligatoirement l’ordre suivant :

SELECT… FROM… WHERE… GROUP BY… HAVING… ORDER BY…

Les requêtes d’extraction concernent des données structurées par un schéma relationnel.

B La projection avec Select et from

La clause SELECT sélectionne les champs (colonnes) à partir des tables spécifiées par la clause FROM, selon le format général suivant : SELECT champ1, champ2,… FROM Nom_Table;

Un astérisque (*) signifie que la clause porte sur tous les champs de la table.

C Les restrictions

PrédicatActionExemple
Condition simpleSélection à partir d’opérateurs de comparateurs arithmétiques (=, >, <, >=, <=, <>).Sélection des numéros des menus dont le prix est supérieur à 10€ : SELECT Num_Menu FROM MENU WHERE PrixHT_Menu>10;
LIKEComparaison sur une chaîne de caractères en remplaçant certains, non déterminants ou inconnus, par des caractères-joker: ‘?’ (Access) ou ‘_’ (SQL-server) remplace un caractère; ‘*’ (Access) ou ‘%’ (SQL-server) remplace une suite de caractères (éventuellement nulle).Sélection de toutes les données des menus comprenant le terme «été» dans leur nom ou dont la deuxième lettre du nom est un E par: SELECT * FROM MENU WHERE Nom_Menu LIKE « *été* » OR Nom_Menu LIKE « ?E* »;
BETWEEN… ANDVérification qu’une valeur se trouve dans un intervalle.Sélection des numéros des menus de TY Billig dont le prix est compris entre 10 et 15€ : SELECT Num_Menu FROM MENU WHERE PrixHT_Menu BETWEEN 10 AND 15;
IN (ou NOT IN)Vérification qu’une valeur appartient (ou non) à une liste de valeurs.Sélection des numéros des menus dont le prix n’est pas de 10, 11, 12 ou 13€ : SELECT Num_Menu FROM MENU WHERE PrixHT_Menu NOT IN (10,11,12,13);
IS (NOT) NULLRecherche d’une valeur renseignée (champ non vide) ou non (champ vide).Sélection des noms des clients (sans doublon) dont le code postal n’est pas renseigné SELECT DISTINCT désignation_cli FROM CLIENTS WHERE CP_cli IS NULL;
AND ou ORCombinaison de critères, seule la première condition est précédée de la clause WHERE. On utilise ensuite les opérateurs logiques AND ou OR (ET ou OU) en insérant les parenthèses adéquates.Sélection de tous les numéros des menus de TY Billig dont le prix est supérieur ou égal à 10 et inférieur à 15€ : SELECT Num_Menu FROM MENU WHERE PrixHT_Menu>=10 AND PrixHT_Menu<15;
Paramètre [texte]Saisie d’une valeur de sélection (paramètre) par l’utilisateur lors de l’exécution de la requête, le texte donne une indication qui s’affiche.Sélection des numéros des menus d’un prix déterminé lors de l’exécution de la requête : SELECT Num_Menu FROM MENU WHERE PrixHT_Menu =[Quel prix désirez-vous

D. Trier les données : clause ORDER BY

Pour ordonner les données, on utilise la clause ORDER BY. Par défaut, l’ordre est croissant (ASC) mais il peut être inversé en utilisant DESC. Par exemple, pour trier les données de la table MENU par prix décroissant, on utilise :

SELECT * FROM MENU ORDER BY PrixHT_Menu DESC;

E. Joindre des tables : la jointure

Pour relier deux tables dans une requête, on utilise une jointure, qui se fait généralement en utilisant une clé primaire et une clé étrangère. Il y a deux manières de formuler une jointure :

Utiliser la clause FROM…WHERE :

SELECT Champ1, Champ2,… FROM nom_table1, nom_table2 WHERE nom_table1.clé_table1 = nom_table2.clé_table2;

Ou utiliser JOIN :

SELECT Champ1, Champ2,… FROM nom_table1 JOIN nom_table2 ON nom_table1.clé_table1 = nom_table2.clé_table2;

F. Créer un champ calculé

On peut ajouter à la requête un champ calculé, c’est-à-dire le résultat d’un calcul basé sur un ou plusieurs champs. Par exemple, pour calculer le montant total hors taxes pour chaque menu de la commande 25, on utilise :

SELECT M.Num_menu, PrixHT_Menu*Quantité AS [Total HT par menu CDE 25] FROM

LIGNE_COMMANDE LC, MENU M WHERE LC.Num_Menu = M.Num_Menu AND Num_Com =25;

G. Utiliser des fonctions : SUM, COUNT, MAX, MIN, AVG

Ces fonctions peuvent être utilisées sans restriction pour effectuer des calculs sur l’ensemble des valeurs d’un champ. Par exemple, pour afficher la quantité moyenne commandée, on utilise :

SELECT AVG (Quantité) AS [Quantité moyenne commandée] FROM LIGNE_COMMANDE;

H. Regrouper les données : clause GROUP BY

La clause GROUP BY permet de regrouper les valeurs selon un champ particulier. Par exemple, pour afficher la quantité moyenne commandée par menu, on utilise :

SELECT Num_menu, AVG (Quantité) AS [Quantité moyenne commandée par menu] FROM

LIGNE_COMMANDE GROUP BY Num_menu;

I. Restriction sur les regroupements : clause HAVING

La clause HAVING, associée à GROUP BY, permet de limiter les résultats du regroupement selon une condition. Par exemple, pour afficher les menus dont la quantité moyenne commandée est supérieure à 10, on utilise :

SELECT Num_menu FROM LIGNE_COMMANDE GROUP BY Num_menu HAVING AVG(Quantité)>10;

J. Requêtes imbriquées

On peut utiliser une requête à l’intérieur d’une autre requête pour appliquer une restriction basée sur le résultat de la première requête.

Note : La clause WHERE limite l’affichage à certaines lignes, tandis que HAVING limite l’affichage à certaines valeurs calculées par la fonction sur laquelle porte le regroupement. HAVING est toujours précédé d’une clause GROUP BY.

II Les requêtes SQL de mise à jour

A Les principes généraux

Les utilisateurs autorisés peuvent utiliser le langage SQL pour insérer, modifier ou supprimer des données dans les tables. Ces actions sont réalisées par le biais de ce qu’on appelle des requêtes d’action.

B L’ajout de lignes dans une table

La commande INSERT permet d’ajouter de nouvelles données à une table. Voici la structure d’une requête d’insertion :

INSERT INTO Nom_Table (nomchamp1, nomchamp2…) VALUES (val1,val2…);

Il est à noter que la liste des noms de champs peut être omise si les valeurs fournies correspondent exactement au schéma de la table. De plus, les valeurs fournies doivent correspondre en ordre, en nombre et en type à la liste des champs.

C La modification de lignes dans une table

La commande UPDATE est utilisée pour altérer les données existantes dans une table. Le modèle général de la requête de modification est le suivant :

Mise à jour des données : UPDATE Nom_Table SET Colonne = Expression ou valeur WHERE Condition

1. Format général

La commande DELETE est utilisée pour retirer des données d’une table. Le format général de la requête de suppression est le suivant (l’astérisque est optionnel) : DELETE * FROM Nom_Table WHERE Condition

Exemple : Supprimer les données de la table MENU pour les menus dont le prix est supérieur à 50€ : DELETE * FROM MENU WHERE PrixHT_Menu > 50; Si la clause WHERE est oubliée, cela entraîne l’effacement de tout le contenu de la table (ce qui peut être souhaité dans certaines situations).

Exemple : Suppression de tous les menus avant la nouvelle saison : DELETE * FROM MENU

2. La contrainte d’intégrité référentielle

L’intégrité référentielle établit une relation entre deux tables dans la base de données, exigeant que toute valeur assignée à une clé étrangère existe en tant que clé primaire dans la table référencée.

Une contrainte d’intégrité référentielle entre deux tables empêche la suppression des données de la clé primaire sans avoir préalablement supprimé les données correspondantes de la clé étrangère dans la table associée. Ainsi, plusieurs requêtes doivent être rédigées.

Tu galères avec les requêtes SQL ou le DCG en général ?

N’hésites pas à consulter mes fiches qui m’ont permis de passer tout le DCG malgré un triple cursus 🙂

2 thoughts on “DCG UE 8 SIG : Toutes les requêtes SQL à maitriser”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *