Cours Bases de Données І Groupe IGE 02 Chapitre 3: Le Langage SQL Zendaoui Fairouz 2021-2022 Chapitre 3: Le Langage SQL Introduction Structured Query Language Un langage d'accès normalisé aux bases de données. Langage simple s’appuyant sur le schéma relationnel pour énoncer des requêtes. Il est basé sur le langage algébrique. Il requiert un système de gestion des bases de données responsable de la stratégie d'exécution. Il manipule des tables par l'intermédiaire de requêtes qui produisent également des tables. Supporté par la plupart des produits commerciaux et open source. Chapitre 3: Le Langage SQL Langage de Définition des Données Data Definition Language ou DDL La partie de SQL qui permet de créer, modifier ou supprimer des bases de données, des tables, des index, des contraintes, … etc. Elle traite de la création des schémas de bases de données. Chapitre 3: Le Langage SQL Langage de Manipulation des Données Data Manipulation Language ou DML La partie de SQL qui traite les données (ajout, suppression, modification, extraction) dans les tables. Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT La commande SELECT permet d’interroger la base de données. Recherche de base Recherche avec jointure Recherche avec tri du résultat Groupement de lignes Les requêtes imbriqués Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT Notations Tout ce qui est entre crochets est facultatifs […]. La barre verticale | représente un choix ‘ou’. Les trois points … représentent une suite d’éléments. Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base La recherche de base permet d’effectuer des opérations de projections et de restriction et la combinaison des deux. SELECT champ1, champ2, …, champN FROM nom_table SELECT champ1, champ2, …, champN FROM nom_table [WHERE condition] Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base La recherche de base permet d’effectuer des opérations de projections et de restriction et la combinaison des deux. SELECT [ALL|DISTINCT] champ1 [AS new_name1], champ2, …, champN FROM nom_table [AS Alias] [WHERE condition] Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base SELECT [ALL|DISTINCT] champ1 AS new_name, champ2 FROM nom_table [AS Alias] [WHERE condition] L’opérateur AS est utilisé pour renommer une table ou un champ. Pour sélectionner toutes les colonnes à la fois on utilise le caractère astérisque *. Pour différentier les colonnes des tables on utilise nom_table.nom_colonne. ALL est utilisé par défaut. DISTINCT est utilisé pour éliminer les doublons. Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Select * from Client; Select Nom, Prénom from Client; Select distinct Wilaya from Client; Select all Wilaya from Client; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Au niveau de la condition WHERE, les conditions suivantes sont possibles: [NOT] condition de base Condition between Condition in Condition like Condition null Condition and | condition OR Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Condition de base: Colonne = | <> | < | <= | > | >= Constante Select * from Facture where DateFact='2022‐04‐06'; Select NoCde from Commande where DateCde ≥ '2022‐04‐06'; Select Quantité from LigneCommande Where NoCde=100 and RefPdt='P3'; Select NoCde as Num from Commande where NoClient=2500; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Condition Between: L’opérateur between permet de tester l’appartenance à une plage de valeurs. Colonne BETWEEN X and Y Select * from Facture where DateFact between '2022‐04‐06' and '2022‐05‐06'; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Condition IN: L’opérateur IN permet de tester l’appartenance à un ensemble de valeurs. L’ensemble peut être spécifié explicitement comme il peut être le résultat d’une autre requête imbriquée. Colonne IN (v1, V2, …, Vn) Select * from Client where Wilaya in ('16', '09', '25'); Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Condition LIKE: L’opérateur LIKE permet de comparer des chaînes de caractères. La chaîne peut contenir n’importe quel caractère plus deux caractères spéciaux: ‘_’: remplace un caractère ‘%’: remplace plusieurs caractères Colonne [NOT] LIKE (Chaîne) Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Condition LIKE: Select * from Client where Nom Like 'A%'; Select * from Client where Nom Not Like 'A%'; Select * from Client where Nom Like '%e'; Select * from Client where Nom Like 'A_A%'; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche de base Condition NULL: L’opérateur NULL permet de vérifier si une colonne est nulle ou non. Colonne IS [NOT] NULL Select NoCde from Commande where DateCde is Null; Select NoCde from Commande where DateCde is not Null; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Il existe plusieurs manières d’exprimer des jointures entre plusieurs tables avec SQL. Les jointures vues dans l’algèbre relationnelle sont toutes implémentées dans pratiquement tous les SGBD. Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Produit cartésien • Exprimé par une simple requête entre deux tables sans la clause WHERE. Select * from Client, Commande; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Produit cartésien • Exprimé avec la clause CROSS IN Select * from Client Cross Join Commande; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Thêta jointure • Exprimée avec une requête simple avec une condition sur les colonnes des deux tables dans la clause WHERE. Select NoCde from Commande, Client where Client.NoClient=Commande. NoClient and Wilaya='16'; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Thêta jointure • Exprimée en utilisant la clause INNER JOIN Select NoCde from Commande Inner Join Client on Client.NoClient=Commande.NoClient where Wilaya='16'; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Thêta jointure • Exprimée en utilisant la clause INNER JOIN • On peut utiliser USING(liste de colonnes communes) à la place de ON dans le cas d’une équijointure. Select NoCde from Commande Inner Join Client using (NoClient) where Wilaya='16'; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec jointure Jointure naturelle • • Peut être exprimée en utilisant la clause NATURAL JOIN Peut aussi être exprimée avec un produit cartésien et une clause where ou avec une thêta-jointure Select NoCde from Commande Natural Join Client where Wilaya='16'; Select NoCde from Commande, Client where Client.NoClient=Commande. NoClient and Wilaya='16'; Chapitre 3: Le Langage SQL Langage de Manipulation des Données SELECT: Recherche avec Tri du résultat • Pour trier le résultat d’une recherche on utilise la clause ORDER BY juste après la clause WHERE. • DESC est spécifié dans le cas d’un tri décroissant. ASC est l’option par défaut. ORDER BY Colonne [DESC] Select * from Client order by Nom; Select * from Client order by Nom asc; Select * from Client where Wilaya='16' order by Nom desc; Chapitre 3: Le Langage SQL Langage de Manipulation des Données Le groupement de lignes • La clause GROUP BY permet d’effectuer des calculs sur des groupes de lignes. • La clause HAVING permet d’exprimer des conditions sur le groupe de lignes généré. Chapitre 3: Le Langage SQL Langage de Manipulation des Données Le groupement de lignes Select count(*) from Client; Select Wilaya, count(NoClient) from Client Group by Wilaya; Select Wilaya, count(NoClient) as NB from Client Group by Wilaya having NB≥200000; Chapitre 3: Le Langage SQL Langage de Manipulation des Données La clause LIMIT • Elle est à utiliser dans une requête SQL pour spécifier le nombre maximum de résultats que l’ont souhaite obtenir. Select Wilaya, count(NoClient) as NB from Client group by Wilaya having NB≥200000 limit 100; Chapitre 3: Le Langage SQL Langage de Manipulation des Données Les requêtes imbriquées • Une sélection imbriquée est un bloc de qualification SELECT/FROM/WHERE encapsulé à l’intérieur d’un autre bloc de qualification. Select Nom, Prénom from Client where age≥ (select avg(age) from Client); Chapitre 3: Le Langage SQL Langage de Manipulation des Données Les requêtes imbriquées • Une sélection imbriquée est un bloc de qualification SELECT/FROM/WHERE encapsulé à l’intérieur d’un autre bloc de qualification. • On peut utiliser l’opérateur IN. Select * from Produit where RefPdt in (select RefPdt from LigneCommande where Quantité≥500); Chapitre 3: Le Langage SQL Langage de Manipulation des Données Les requêtes imbriquées Condition ALL | ANY • Les opérateurs ANY et ALL sont utilisés avec une clause WHERE ou HAVING. • L'opérateur ANY renvoie Vrai si l'une des valeurs de sous-requête remplit la condition. • L'opérateur ALL renvoie Vrai si toutes les valeurs de sous-requête remplissent la condition. Chapitre 3: Le Langage SQL Langage de Manipulation des Données Les requêtes imbriquées Condition ALL | ANY Select Nom, Prénom from Client where age≥ all (select age from Client); Select Nom, Prénom from Client where age> any (select age from Client); Chapitre 3: Le Langage SQL Langage de Manipulation des Données Les requêtes imbriquées Condition EXISTS • L’opérateur EXISTS est utilisé pour tester l’existence de tout tuple dans une sous-requête. • Il revoie vrai quand l’évaluation de la sous requête n’est pas vide. Select Nom, Prénom from Client where exists (select Commande.NoClient from Commande where Commande.NoClient=Client.NoClient); Chapitre 3: Le Langage SQL Langage de Manipulation des Données Ordre de priorité