1 Chapitre VI Le langage SQL: Langage d’Interrogation des Données ENSIT 2 Langa

1 Chapitre VI Le langage SQL: Langage d’Interrogation des Données ENSIT 2 Langage d’Interrogation des Données • SELECT est la commande de base du SQL destinée à extraire des données d’une BD ou calculer de nouvelles données à partir d’existantes. • La syntaxe générale d'une commande SELECT : SELECT [DISTINCT ou ALL] * ou liste de colonnes FROM nom(s) de table(s) [WHERE prédicats] [GROUP BY ordre des groupes] [HAVING condition] [ORDER BY ] liste de colonnes 3 Langage d’Interrogation des Données 1. La clause SELECT • SELECT permet de spécifier les attributs que l’on désire voir apparaître dans le résultat de la requête. • L’opérateur * permet de récupérer automatiquement tous les attributs de la table générée par la clause FROM de la requête. Exemple SELECT * FROM EMP ; Cette commande permet d’afficher la table EMP. • L’opérateur DISTINCT permet d’éliminer les doublons dans la réponse. Exemple SELECT DISTINCT POSTE FROM EMP; 4 Langage d’Interrogation des Données • Il est possible d’utiliser les opérateurs mathématiques de base (i.e. +, -, * et /) pour générer de nouvelles colonnes à partir d’une ou plusieurs colonnes existantes. Exemple Pour afficher le salaire annuel des employés, on peut utiliser la requête suivante: SELECT nome, sal*12 FROM EMP; • L’opérateur AS permet de renommer une colonne ou de nommer une colonne créée dans la requête. Exemple SELECT nome, sal*12 AS SalaireAnnuel FROM EMP; 5 Langage d’Interrogation des Données 2. La clause FROM • Cette clause spécifie les tables sur lesquelles porte la requête. Exemples SELECT Nemp, Nome FROM EMP; SELECT * FROM EMP, DEPT; Produit Cartésien entre les relations EMP et DEPT. • L’opérateur AS permet de renommer une table ou de nommer une table créée dans la requête. Exemple SELECT * from employe as emp; OU SELECT * from employe emp; • Les tables mentionnées dans la clause FROM peuvent très bien correspondre à des tables résultantes d’une requête, spécifiée entre parenthèses, plutôt qu’à des tables existantes dans la base de données. 6 Langage d’Interrogation des Données • Il faut toujours nommer les tables correspondant à des sous-requêtes en utilisant l’opérateur AS. Exemple SELECT * FROM (SELECT * FROM table_1) AS t1, table_2 3. La clause WHERE • La clause WHERE permet de spécifier quelles sont les lignes à sélectionner dans une table ou dans le produit cartésien de plusieurs tables. • Elle est suivie d'un prédicat (expression logique ayant la valeur vrai ou faux) qui sera évalué pour chaque ligne. Les lignes pour lesquelles le prédicat est vrai seront sélectionnées. 7 Langage d’Interrogation des Données Les prédicats simples • Un prédicat simple est la comparaison de deux expressions ou plus au moyen d'un opérateur logique : WHERE exp1 = exp2 WHERE exp1 != exp2 WHERE exp1 < exp2 WHERE exp1 > exp2 WHERE exp1 <= exp2 WHERE exp1 >= exp2 WHERE exp1 BETWEEN exp2 AND exp3 WHERE exp1 LIKE exp2 WHERE exp1 NOT LIKE exp2 WHERE exp1 IN (exp2, exp3,...) WHERE exp1 NOT IN (exp2, exp3,...) WHERE exp IS NULL WHERE exp IS NOT NULL 8 Langage d’Interrogation des Données • Les trois types d'expressions (arithmétiques, caractères, ou dates) peuvent être comparées au moyen des opérateurs d'égalité ou d'ordre (=, !=, <, >, <=, >=). • Pour les types date, la relation d'ordre est l'ordre chronologique; pour les types caractères, la relation d'ordre est l'ordre lexicographique. • exp1 BETWEEN exp2 AND exp3 est vrai si exp1 est compris entre exp2 et exp3, bornes incluses SELECT NOME,SAL FROM EMP WHERE SAL BETWEEN 300 AND 500; • exp1 IN (exp2 , exp3...) est vrai si exp1 est égale à l'une des expressions de la liste entre parenthèses. SELECT * FROM DEPT WHERE LIEU IN (‘TUNIS’, ‘GABES’, ‘SOUSSE’); • exp1 LIKE exp2 teste l'égalité de deux chaînes en tenant compte des caractères jokers dans la 2ème chaîne : _ remplace un seul caractère. % remplace une chaîne de caractères de longueur quelconque. SELECT * FROM EMP WHERE NOME LIKE ‘M%’; 9 Langage d’Interrogation des Données • exp IS [NOT] NULL est vrai si l'expression a la valeur NULL (ou l'inverse avec NOT). Les opérateurs logiques • Les opérateurs logiques AND et OR peuvent être utilisés pour combiner plusieurs prédicats. Exemples SELECT NOME FROM EMP WHERE NDEPT = 30 AND SAL > 500; SELECT * FROM EMP WHERE (POSTE = 'DIRECTEUR' OR POSTE = 'SECRETAIRE') AND DEPT = 10; SELECT * FROM DEPT WHERE LIEU IS NOT NULL; 10 Langage d’Interrogation des Données La jointure naturelle • La jointure naturelle de R1 et R2 permet de rapprocher les tuples de R1 et R2 afin de former une troisième relation qui contient l’ensemble de tous les tuples obtenus en concaténant un tuple de R1 et un tuple de R2 ayant mêmes valeurs pour les attributs en commun. Exemple Nemp Nome Prene Sal Poste Ndept 100 Bjaoui Ali 450 Secrétaire 1 101 Bjaoui Mohamed 560 Ingénieur 2 102 Gharbi Salwa 700 Secrétaire 2 La relation Emp 11 Langage d’Interrogation des Données Ndept Nomd 1 Finance 2 Marketing 3 Comptabilité La relation Dept Nemp Nome Prene Sal Poste Ndept Nomd 100 Bjaoui Ali 450 Secrétaire 1 Finance 101 Bjaoui Mohamed 560 Ingénieur 2 Marketing 102 Gharbi Salwa 700 Secrétaire 2 Marketing La jointure naturelle entre la relation Dept et la relation Emp Jointure de la table sur elle même • Lister les noms des employés qui ont un supérieur, en indiquant pour chacun le nom de son supérieur : EMP(MATR, NOME, PRENOME, #SUP) 12 SELECT EMP.NOME EMPLOYE, SUPE.NOME SUPERIEUR FROM EMP, EMP SUPE WHERE EMP.SUP = SUPE.MATR; 13 Langage d’Interrogation des Données Généralement, la jointure naturelle est exprimée comme suit: SELECT NOME, NOMD FROM EMP, DEPT WHERE EMP.NDEPT = DEPT.NDEPT; • La version SQL2 peut exprimer la jointure par JOIN ON SELECT NOME, NOMD FROM EMP JOIN DEPT ON EMP.NDEPT = DEPT.NDEPT; On peut aussi utiliser le mot-clé NATURAL JOIN pour exprimer une jointure naturelle. Exemple SELECT NOME, NOMD FROM EMP NATURAL JOIN DEPT; 14 Langage d’Interrogation des Données La théta-jointure • La thêta-jointure de R1 et R2 permet de rapprocher les tuples de deux relations afin de former une troisième relation qui contient l’ensemble de tous les tuples obtenus en concaténant un tuple de R1 et un tuple de R2 vérifiant la condition Ai  Bi avec : -   {=, <, >, ,   }. - Ai est un attribut de R1 et Bi est un attribut de R2 Exemple 1 A B 1 a 1 b 3 a C D E 1 b a 2 b c 4 a a La relation R1 La relation R2 15 A B C D E 1 a 1 b a 1 a 2 b c 1 a 4 a a 1 b 1 b a 1 b 2 b c 1 b 4 a a 3 a 4 a a La théta-jointure de R1 et R2 vérifiant la condition A ≤ C Langage d’Interrogation des Données 16 Langage d’Interrogation des Données EN SQL, la théta-jointure de R1 et R2 est exprimée comme suit: SELECT * FROM R1, R2 WHERE R1.A <= R2.C; • La version SQL2 peut exprimer la théta-jointure par JOIN ON SELECT * FROM R1 JOIN R2 ON R1.A <=R2.C; Exemple 2 Nom et salaire des employés gagnant plus que l’employé numéro12546 SELECT E1.NOME, E1.SAL FROM EMPLOYE E1 JOIN EMPLOYE E2 ON E1.SAL > E2.SAL WHERE E2.NEMP = 12546; 17 Autres types de jointures Langage d’Interrogation des Données 18 INNER JOIN Comme il s'agit de la plus commune des jointures c'est celle qui s'exerce par défaut si on ne précise pas le type de jointure. Après le mot clef ON, on doit préciser le critère de jointure. Exemple Imaginons une application qui possède une table Client ainsi qu’une table Commande qui contient toutes les commandes effectuées par les clients. Langage d’Interrogation des Données 19 INNER JOIN Id_client Nom Prenom 1 Bjaoui Ali 2 Bjaoui Mohamed 3 Gharbi Salwa 4 Amari Meriem La table Client Id_client NumFacture Date_achat Prix_total 1 100 10/11/2016 500 1 101 20/12/2016 200.5 2 103 11/02/2017 300 2 104 25/03/2017 150 La table Commande Langage d’Interrogation des Données 20 INNER JOIN Le résultat de cette requête est: Pour afficher toutes les commandes associées aux utilisateurs, il est possible d’utiliser la requête suivante : SELECT client.id_client, nom, prenom, numFacture, date_achat, prix_total FROM client INNER JOIN commande ON client.id_client = commande.id_client; Id_client Nom prenom NumFacture Date_achat Prix_total 1 Bjaoui Ali 100 10/11/2016 500 1 Bjaoui Ali 101 20/12/2016 200.5 2 Bjaoui Mohamed 103 11/02/2017 300 2 Bjaoui Mohamed 104 25/03/2017 150 Langage d’Interrogation des Données 21 LEFT JOIN aussi appelée LEFT OUTER JOIN Cette commande permet de lister tous les résultats de la table de gauche même si il n’ya pas de correspondance dans la deuxième table. Dans le cas de non correspondance de la table A avec la table B, les colonnes de la table B vaudront NULL. Langage d’Interrogation des Données 22 LEFT JOIN Le résultat de cette requête est: Pour lister tous les clients avec leurs commandes et afficher également uploads/Geographie/cours-6-bd-info-2019.pdf

  • 84
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager