Vous êtes sur la page 1sur 8

LE LANGAGE SQL

Le langage SQL (1)
Le langage SQL (Structured Query Language) peut être considéré comme le langage d’accès normalisé aux bases de données. Il est aujourd’hui supporté par la plupart des SGBD commercialisés (tq Access ou Oracle). Il a fait l’objet de plusieurs normes ANSI/ISO dont la plus répandue aujourd’hui est la norme SQL2 qui a été définie en 1992. Le succès du langage SQL est du essentiellement à sa simplicité et au fait qu’il s’appuie sur le schéma conceptuel pour énoncer des requêtes en laissant le SGBD responsable de la stratégie d’exécution.
Cours MIAD - 3ème Année HEC 2

Le langage SQL (2)
Le langage SQL comporte :
1. Langage de définition des données (LDD) qui permet de définir des relations, des vues externes et des contraintes d’intégrité; 2. Langage de manipulation des données (LMD) qui permet d’interroger une base de données sous forme déclarative sans se préoccuper de l’organisation physique des données; 3. Langage de contrôle des données (LCD) qui permet de contrôler la sécurité et les accès aux données.
NB: Nous présentons ici les principaux aspects du LMD.
3

Exemple de BD (1)
Soit le MLD d’une BD relationnelle suivant:
Client
NoCli Nom Adresse Catégorie Compte

Commande
NoCom #NoCli Date

Produit
NoProd Libelle Prix QteStock

LigneCommande
#NoCom #NoProd QteCommandee 4

Exemple de BD (2)
Soit le détail de la table Client : Client
NoCli 1 2 3 4 5 6 7 8 9 Nom AMEUR BEN SALAH MRABET KRAIEM LABIDI CHAOUACHI GAFSI JELALI ROUISSI Adresse 23, a. Carthage 25, r. du Caire 112, r. d’Athène 5, a. de Madrid 180, r. de Rome 3, a. des Roses 14, r. de l’Eté 72, r. de la Gare 65, r. Lafayette Localité Carthage Tunis Ariana Tunis Tunis La Marsa Carthage Ariana Tunis Catégorie 1 1 1 1 2 2 3 3 3 Compte 125.000 -230.000 0.000 0.000 72.000 -258.000 870.000 320.000 35.000

Requête SQL
Une requête SQL se présente comme suit: SELECT [DISTINCT] {* | expr [AS alias], ... } FROM table [alias], ... [WHERE { conditions | sous conditions} ] [GROUP BY expr, ...] [HAVING conditions] [ORDER BY {expr | num}{ASC | DESC}, ...] ;
Rq: [….] : facultatif.
5 6

<. <=. Précise la (ou les) colonne de regroupement Précise la (ou les) conditions associées à un regroupement Précise l'ordre dans lequel vont apparaître les lignes de la réponse : . ALL. NULL.Interprétation SELECT FROM WHERE Précise les colonnes qui vont apparaître dans la réponse Précise la (ou les) table intervenant dans l'interrogation Précise les conditions à appliquer sur les lignes.des opérateurs logiques : AND. SELECT Nom. EXISTS. Catégorie. Nom. Localité FROM Client. . Adresse.des prédicats : IN. SQL: SELECT Nom. NoCli. Localité FROM 2.<> . Les colonnes sont données après l’instruction SELECT.des comparateurs : =.. NOT . 11 Projection (Exemples) Exemple 1: LA: NR1 = PROJECT (Client . Nom. Nom … Compte 12 Toutes les lignes de la table Client * dénote toutes les colonnes de la relation. liste des attributs) SELECT colonnes (ou attributs) FROM table. GROUP BY HAVING ORDER BY Nom AMEUR BEN SALAH MRABET KRAIEM LABIDI CHAOUACHI GAFSI JELALI ROUISSI Localité Carthage Tunis Ariana Tunis Tunis La Marsa Carthage Ariana Tunis Nom MRABET JELALI Localité Ariana Ariana 7 8 Du Langage Algébrique (LA) à SQL Du Langage Algébrique (LA) à SQL Opérations algébriques Opérateurs relationnels en LA PROJECT SELECT JOIN DIV SQL ? Requêtes SQL 9 10 Projection LA: SQL: Principe: Choisit le nom des colonnes de la (ou des) table(s) que l'on souhaite voir apparaître dans la réponse. >.Localité. La ou les table(s) (ou relations) sont indiquées après la clause FROM. Localité ) NR = PROJECT (DR .. OR. On peut trouver : . SOME. Nom Localité Toutes les lignes de la table Client Exemple 2: LA: NR2 = PROJECT (Client . SELECT Nom. Localité FROM Client WHERE Localité = ‘Ariana’. LIKE. Compte ) SQL: SELECT FROM * Client. >=. ANY.ASC : En ordre ascendant (par défaut) . Client.DESC: En ordre descendant Requête SQL (Exemples) 1.

r.att.Commande .000 320. le nom des tables intervenant dans la jointure. a.NoCli. les conditions permettant de réaliser la jointure. 2 par 2.000 108 105 107 106 102 103 101 100 104 Date 12/04/02 15/02/01 16/04/01 09/07/01 03/01/00 05/04/00 07/12/99 09/09/99 12/12/00 18 . Client. condition) Sélection (Exemple) LA: NR = SELECT (Client .att = table2. table2 WHERE table1. de Rome 72.000 870. Nom Localité Ariana Ariana MRABET JELALI Les deux opérations algébriques sont utilisées dans la même requête SQL 15 16 Jointure LA: NR = JOIN (R1. d’Athène 72. Après la clause FROM. Localité = ‘Ariana’ ) NR = PROJECT (R1. * Principe: Sélectionne des lignes (n-uplets.Commande WHERE Client. Jointure (Exemple) LA: R1 = JOIN (Client.000 320. r.NoCli) SQL: SELECT FROM Client.000 72.Sélection LA: SQL: NR = SELECT (DR .NoCli = Commande. Projection & Sélection (Exemple) LA: R1 = SELECT (Client . Localité) SQL: SQL: SELECT Nom. Carthage 25. r. r. Lafayette Localité Carthage Tunis Ariana Tunis Tunis La Marsa Carthage Ariana Tunis Catégorie 1 1 1 1 2 2 3 3 3 Compte NoCom 125. SQL: SELECT FROM Client WHERE Localité = ‘Ariana’.R2. du Caire 112. r. 13 NoCli 3 8 Nom MRABET JELALI Adresse 112.000 14 Projection & Sélection LA: R1 = SELECT (DR . La ou les conditions sont indiquées après la clause WHERE. r. des tables. r. Réunit. tuples) d'une (ou plusieurs) table(s) qui satisfont certaines conditions. Localité FROM Client WHERE Localité = ‘Ariana’. 17 NoCli 1 2 2 3 4 5 8 9 9 Nom AMEUR BEN SALAH BEN SALAH MRABET KRAIEM LABIDI JELALI ROUISSII ROUISSII Adresse 23. de Madrid 180. * Principe: Permet l’extraction de données à partir de 2 ou plusieurs tables. de la Gare Localité Ariana Ariana Catégorie 1 3 Compte 0. Localité = ‘Ariana’ ) SELECT * FROM table WHERE conditions. condition) NR = PROJECT (R1. de la Gare 65. d’Athène 5. a.000 -258.000 0. r. r. Nom. condition d’égalité entre attributs) SQL: SELECT colonnes (ou attributs) FROM table1.000 35. du Caire 25. Après la clause WHERE.000 -230. liste des attributs) SELECT colonnes (ou attributs) FROM table WHERE conditions.000 0.NoCli = Commande. Lafayette 65.

R3 même structure que R1 et R2 ensemble des tuples appartenant à la fois à R1 et R2.R2) SQL: (SELECT * FROM R1) INTERSECT (SELECT Principe: L'intersection est appliquée sur deux relations de même structure R1 et R2 pour obtenir une relation R3. R3 .Division Il n'existe pas en SQL d'équivalent direct à la division.R2) (SELECT …) INTERSECT (SELECT …) Intersection (Exemple) R1 NoCli 1 2 3 8 Nom AMEUR BEN SALAH MRABET JELALI LA: R3 = INTER (R1. Cependant il est toujours possible de trouver une autre solution. Nom AMEUR BEN SALAH MRABET JELALI ROUISSII 22 Principe: L'union est appliquée sur deux relations de même structure R1 et R2 pour obtenir une relation R3.R2) (SELECT …) UNION (SELECT …) Union (Exemple) R1 NoCli 1 2 3 8 LA: Nom AMEUR BEN SALAH MRABET JELALI R3 = UNION (R1.même structure que R1 et R2 .ensemble des tuples de R1 et R2 . 23 R2 NoCli 1 9 * FROM R2).les duplications sont éliminées R2 NoCli 1 9 Nom AMEUR ROUISSII NoCli 1 2 3 8 9 21 Intersection LA: SQL: R3 = INTER (R1.R2) SQL: (SELECT * FROM R1) UNION (SELECT * FROM R2). Nom AMEUR Nom AMEUR ROUISSII NoCli 1 24 . notamment par l'intermédiaire des opérations de calcul et de regroupement. Du Langage Algébrique (LA) à SQL Opérateurs ensemblistes en LA UNION INTER DIFFER PRODUIT SQL ? 19 20 Union LA: SQL: R3 = UNION (R1.

<. R3 même structure que R1 et R2 ensemble des tuples appartenant à R1 et n'appartenant pas à R2.R2) SQL: (SELECT * FROM R1) EXCEPT (ou MINUS) (SELECT …) Principe: La différence est appliquée sur deux relations de même structure R1 et R2 pour obtenir une relation R3.. >=.' contrairement aux nombres. NoCli Date 12/04/02 15/02/01 16/04/01 1 1 1 2 2 2 Nom AMEUR AMEUR AMEUR BEN SALAH BEN SALAH BEN SALAH NoCom 108 105 107 108 105 107 Date 12/04/02 15/02/01 16/04/01 12/04/02 15/02/01 16/04/01 28 NoCom 108 105 107 27 La clause DISTINCT La clause DISTINCT permet d'éliminer les doublons.R2) (SELECT …) EXCEPT (ou MINUS) Différence (Exemple) R1 NoCli 1 2 3 8 Nom AMEUR BEN SALAH MRABET JELALI LA: R3 = DIFFER (R1. Exemple 2 : SELECT DISTINCT Localité FROM Client WHERE Catégorie= 1.R2) LA: R3 = PRODUIT (R1. aux chaînes de caractères. >.EXISTS… Ces opérateurs s’appliquent aux valeurs numériques.R2) SELECT * FROM table1. table2. NOT des prédicats: IN.. ALL. et aux dates. ANY. Localité Carthage Tunis Ariana Tunis Requêtes avec comparaisons (1) La clause WHERE peut utiliser : des comparateurs: =. LIKE.Différence LA: SQL: R3 = DIFFER (R1. Les chaînes de caractères et les dates doivent être encadrées par '.<> des opérateurs logiques: AND. R3 structure égale à la juxtaposition des structures de R1 et R2.R2. R2 SQL: SELECT * FROM R1. 25 (SELECT R2 NoCli 1 9 * FROM R2). Exemple 1 : SELECT Localité FROM Client WHERE Catégorie= 1. composée de l'ensemble des tuples obtenus suite à toutes les combinaisons des tuples de R1. SOME. <=. Localité Carthage Tunis Ariana 29 30 . R2 Produit Cartésien (Exemple) R1 NoCli Nom AMEUR BEN SALAH 1 2 R3 = PRODUIT (R1. Nom Nom AMEUR ROUISSII NoCli 2 3 8 BEN SALAH MRABET JELALI 26 Produit Cartésien LA: SQL: Principe: Le produit cartésien est appliqué sur deux relations R1 et R2 n'ayant pas nécessairement la même structure pour obtenir une relation R3. OR. NULL.

r. Adresse. de la Gare 65.000 Exemple 3 : SELECT Nom. 33 La clause ORDER BY La clause ORDER BY permet de trier le résultat affiché. r. Exemple 2: SELECT FROM GROUP BY HAVING 34 La clause ORDER BY (Exemples) Exemple 1: NoCli 3 5 4 8 7 6 2 1 Nom MRABET LABIDI KRAIEM JELALI GAFSI CHAOUACHI BEN SALAH AMEUR SELECT … FROM … ORDER BY attribut1 [ASC].2) 3.000 320. SELECT … FROM … GROUP BY expr. Lafayette Compte -230. La clause GROUP BY est obligatoire dès lors qu'il y a à la fois des attributs et des fonctions de calcul derrière la clause SELECT.%' commence par …. r.000 125.000 GAFSI 14. de la Gare 23. 3. d’Athène Compte 0. r. . '%….000 72. NoCom QteCommandée Requêtes avec regroupement (1) La clause GROUP BY permet de créer des sous-ensembles (regroupements) de lignes pour lesquels la valeur d'une (ou plusieurs) colonne est identique.. attribut2 DESC. r. Ordre décroissant selon l’attribut1 35 ⇒ ⇒ 31 Champ non renseigné 32 Requêtes avec regroupement (2) Exemple 1: SELECT Catégorie FROM Client GROUP BY Catégorie.'Tunis'). de Madrid 180. .. . r.000 0. de Rome 72. a. Compte FROM Client WHERE Compte between 100 AND 500. Compte FROM Client WHERE Localité IN ('Ariana'. QteCommandée FROM LigneCommande WHERE QteCommandée IS NULL... Nom. Tous les attributs placés derrière la clause GROUP BY doivent être présents derrière la clause SELECT.Requêtes avec comparaisons (2) Exemple 1 : SELECT Nom.000 35. du Caire 112.000 SELECT Nom.%' contient …. La proposition inverse n'est pas vraie. 2. Adresse. Compte Nom Adresse Compte FROM Client AMEUR 23.'Tunis'). [HAVING conditions]. L’ordre croissant (ASC) étant celui par défaut. Nom JELALI AMEUR Exemple 5 : Adresse 72.. Nom MRABET Requêtes avec comparaisons (3) Exemple 4 : Nom BEN SALAH MRABET KRAIEM LABIDI JELALI ROUISSI Adresse 25. a. Nom BEN SALAH Adresse 25. Catégorie Client Catégorie Catégorie = 1. CHAOUACHI 3.000 Exemple 6 : SELECT NoCom. de l’Eté 870. Adresse. Adresse. Regroupement par catégorie des clients de catégorie 1. Pour afficher un ordre décroissant il suffit de préciser DESC derrière la colonne citée dans le tri . Carthage Compte 320. Exemple 2: SELECT FROM WHERE ORDER BY NoCli. Compte FROM Client WHERE Localité = 'Ariana' AND Compte <= 0.. r. r.000 Adresse 112. SELECT NoCli.000 0. Localité Client Catégorie IN (1. La sélection sur les regroupements se fait en utilisant la clause HAVING.000 WHERE Localité NOT IN ('Ariana'. Nom FROM Client ORDER BY Nom DESC.. a. Compte FROM CLIENT WHERE Nom LIKE 'BEN%'.. SELECT attribut1. du Caire Compte -230. Adresse. Exemple 2 : SELECT Nom.000 SELECT Nom. r. NoCli 3 1 6 2 4 5 Nom MRABET AMEUR CHAOUACHI BEN SALAH KRAIEM LABIDI Localité Ariana Carthage La Marsa Tunis Tunis Tunis 36 . Le nom de colonne peut être remplacé par la position de la colonne derrière la clause SELECT. d’Athène 5. Rq: '…. Carthage 125. a. des Roses -258. Cette requête va créer autant de sousensembles que de valeurs possibles de l'attribut Catégorie: 3 sous-ensembles : 1. attribut2 FROM table ORDER BY 1 DESC.

Exemple 2: Nombre de produits différents commandés. Exemple 3: Quantité moyenne commandée pour les produits faisant l’objet de plus de 3 commandes. FROM Les fonctions statistiques (1) Exemple 1: SUM SELECT FROM GROUP BY NoProd. Exemple 2: SELECT NoCom AS N° Cde. Exemple 4: MAX SELECT FROM NoProd. 42 .000 38 37 Les fonctions d'agrégation Elles sont utilisées avec les opérateurs de calcul et de regroupement. NoProd.000 19. l’alias correspond aux titres des colonnes affichées dans le résultat de la requête. * Les clients dont la valeur des comptes est minimale. . Quantité totale commandée pour chaque produit.500. QteCommandée*Prix AS Total-DNT FROM LigneCommande LC.000 7.000 10. Nom. La fonction de comptage Exemple 1: Nombre total de commandes.. Numéro_Client 1 2 3 4 5 6 Nom AMEUR BEN SALAH MRABET KRAIEM LABIDI CHAOUACH Désormais le nom de la table n’est plus reconnu que par l’alias dans la totalité de la requête. AVG(QteCommandée) AS Qte-Moyenne LigneCommande NoProd. 40 Les fonctions statistiques (2) Exemple 3: MIN SELECT FROM NoCli.300.625.2). Count(DISTINCT NoProd) AS Nbre-Produits LigneCommande NoCom. SELECT FROM GROUP BY NoCom.NoProd = P.125. Quantité moyenne commandée pour chaque produit. table. COUNT(DISTINCT attribut) : nombre de valeurs différentes de l'attribut. SUM(QteCommandée) AS Qte-Totale LigneCommande NoProd.000 5. Produit P WHERE LC.Notion d’ALIAS Permet de renommer des attributs ou des tables.750. AVG(QteCommandée) LigneCommande NoProd Count(*) > 3. SELECT attribut1 AS alias1..NoProd. Rq : les valeurs NULL sont ignorées.100. Exemple 2: AVG SELECT FROM GROUP BY NoProd.640. MAX(attribut) : plus grande valeur d'un attribut. MIN(attribut) : plus petite valeur d'un attribut.000 2. Nom FROM Client C WHERE C.. Notion d’ALIAS (Exemples) Exemple 1: SELECT NoCli AS Numéro_Client. MAX(QteStock) AS Stock-Max Produit ..Catégorie IN (1. SELECT FROM GROUP BY HAVING 41 Les produits dont la quantité en stock est maximale. .000 15... 39 La fonction de comptage COUNT(*) : nombre de n-uplets. attribut2 AS alias2. SELECT fonction1(att1). La notion d’alias pour les attributs est souvent utilisée lorsqu’il s’agit d’attributs calculés. .625.. MIN(Compte) AS Compte-Min Client.000 5. AVG(attribut) : moyenne des valeurs d'un attribut.000 5.625. NoProd. FROM table alias.250.000 23. SELECT FROM Count( ) AS Nbre-Total-Cdes Commande. N° Cde NoProd Total-DNT 100 100 101 102 102 103 104 104 104 104 10 17 12 12 17 11 14 15 16 17 5. Pour les attributs. fonction2(att2). Les fonctions statistiques de base SUM(attribut) : total des valeurs d'un attribut.

SELECT NoCom.NoCli = Cd. SELECT Nom FROM Client C WHERE EXIST (SELECT FROM Commande Cd WHERE C.EXISTS…) Requêtes imbriquées (Exemples) Exemple 1: Numéros et dates des commandes des clients de l’Ariana. Le lien entre la requête principale et la sous requête peut se faire en comparant une colonne avec le résultat de la sous requête .NoCli AND Date > '01/04/01' AND Date < '30/04/01‘. <. Exemple 3: Nom des clients qui n’ont passé aucune commande. >.NoCli ).NoCli AND Localité = ‘Ariana’. Jointure équivalente NoCom 101 106 Date 07/12/99 09/07/01 SELECT NoCom. Les vues sous SQL La commande SQL CREATE VIEW permet de créer des vues: * CREATE VIEW Nom-Vue AS commande SELECT. Une vue permet de réutiliser le résultat d’une requête dans d’autres requêtes comme s'il s'agissait d'une nouvelle table (bien qu'elle soit régénérée dynamiquement lors de son utilisation). >=. SOME. Ceci se fait en utilisant les comparateurs (=. Date FROM Commande Cd. ALL. CREATE VIEW Client-Tunis AS SELECT FROM Client WHERE Localité = ‘Tunis'. Client C WHERE C.NoCli = Cd. * 45 46 Les vues sous SQL (Exemple) Exemple : Noms des clients de Tunis qui ont passé des commandes le mois d’avril. Commande Cd WHERE CT.NoCli ).Requêtes imbriquées SQL offre la possibilité d’imbriquer des requêtes. On parle de requête principale et de sous requête. 47 .NoCli = Cd. SELECT Nom FROM Client C WHERE NOT EXIST (SELECT FROM Commande Cd WHERE C. 43 44 Requêtes imbriquées (Exemples) Exemple 2: Nom des clients qui ont passé au moins une commande.<>) ou les prédicats (IN. * SELECT Nom FROM Client-Tunis CT. Date FROM Commande WHERE NoCli IN (SELECT NoCli FROM Client WHERE Localité = ‘Ariana’). ANY. <=.NoCli = Cd. NULL. LIKE.