SQL query - 1 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement
SQL query - 2 / D. Berrabah Requêtes d'interrogation SQL Structure de base d’une requête SQL simples : SELECTvar i.A ik, … attributs FROM R i1 var 1, R i2 var 2 … variables n-uplet WHEREP prédicat/condition où: La variable n-uplet var i « appartient » à la table R ij : R i1 (var 1 ) Les variables dans la projection (clause SELECT) et dans la condition (clause WHERE) doivent être liées dans la clause FROM. Simplifications : Si var j n’est pas spécifiée, alors la variable s’appelle par défaut R ij. Si une seule variable n-uplet possède l’attribut A, on peut écrire plus simplement A (non-ambiguïté).
SQL query - 3 / D. Berrabah Prédicats Prédicats simples : Expression1 Expression2 où Expression1 peut être un attribut ou une expression arithmétique impliquant des attributs, = {, =, =, <>} et Expression2 une expression ou une valeur de domaine Exemples : R.Name = ‘J. Doe’ (S.Age + 30) >= 65 R.A = S.B Prédicats composés : prédicats simples combinés avec les connecteurs logiques AND, OR, NOT
SQL query - 4 / D. Berrabah
SQL query - 5 / D. Berrabah
SQL query - 6 / D. Berrabah
SQL query - 7 / D. Berrabah
SQL query - 8 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement
SQL query - 9 / D. Berrabah Trois opérations ensemblistes : union UNION différence − EXCEPT intersection INTERSECT Par défaut, les opérations ensemblistes éliminent les doublons (ensemble). Pour garder les doublons (multi-ensemble), il faut ajouter ALL après l’opérateur : UNION ALL, EXCEPT ALL, INTERSECT ALL Les types des deux tables doivent être “compatibles” : même nombre d'arguments du même type. Exceptions Oracle : EXCEPT est remplacé par MINUS; uniquement UNION ALL est implanté. SQL : Opérateurs ensemblistes
SQL query - 10 / D. Berrabah
SQL query - 11 / D. Berrabah
SQL query - 12 / D. Berrabah Requête imbriquée dans la clause WHERE d'une requête externe: SELECT … FROM … WHERE [Opérande] Opérateur (SELECT … FROM … WHERE …) Opérateurs ensemblistes : (A 1,…A n ) IN : appartenance ensembliste EXISTS : test d’existence (réponse non-vide) (A 1,…A n ) [ALL|ANY] : comparaison avec quantificateur (ANY par défaut) SQL : Requêtes imbriquées
SQL query - 13 / D. Berrabah SELECT … FROM … WHERE (A 1,…,A n )[NOT] IN (SELECT B 1,…,B n FROM … WHERE …) Sémantique : la condition est vraie si le n-uplet désigné par ( A 1,…, A n ) de la requête externe appartient (n’appartient pas) au résultat de la requête imbriquée. Expression « IN »
SQL query - 14 / D. Berrabah ALL/ANY SELECT … FROM … WHERE (A 1,…,A n ) ALL/ANY (SELECT B 1,…,B n FROM … WHERE …) On peut utiliser une comparaison {, >=, <>} et ALL ( ) ou ANY ( ) La condition est alors vraie si la comparaison est vraie pour tous les n-uplets (ALL) ou au moins un n-uplet (ANY) de la requête imbriquée. Comment peut-on exprimer « IN » avec ALL/ANY?
SQL query - 15 / D. Berrabah
SQL query - 16 / D. Berrabah SELECT … FROM … WHERE (NOT) EXISTS (SELECT * FROM … WHERE P) Sémantique : pour chaque n-uplet x de la requête externe Q, exécuter la requête interne Q’; s'il existe au moins un n-uplet y dans le résultat de la requête interne, alors sélectionner x. Les deux requêtes sont généralement corrélées (x est une variable dans Q') : P dans la requête interne Q’ exprime une jointure entre les tables de Q’ et les tables de la requête externe Q. Expression “EXISTS” Q Q’
SQL query - 17 / D. Berrabah
SQL query - 18 / D. Berrabah SQL : interrogation de BD Requêtes d'interrogation simples Requêtes complexes Agrégats et groupement
SQL query - 19 / D. Berrabah Fonction d'agrégation : calculer une seule valeur numérique à partir d'un ensemble de n-uplets : COUNT : nombre de valeurs / n-uplets SUM : somme des valeurs MAX : valeur maximale MIN : valeur minimale AVG : moyenne des valeurs SELECTAggFunc(A i ), …, AggFunc(A j ) FROMR 1,..., R m WHEREP SQL : Fonctions d'agrégation
SQL query - 20 / D. Berrabah
SQL query - 21 / D. Berrabah
SQL query - 22 / D. Berrabah Requêtes de groupement : GROUP BY Pour partitionner les n-uplets résultats en fonction des valeurs de certains attributs : SELECTA i, …, A n, aggr1, aggr2, … FROMR 1, …, R m WHEREP GROUP BY A j …, A k Règle: tous les attributs projetés ( A i, …, A n ) dans la clause SELECT qui ne sont pas impliqués dans une opération d'agrégation doivent être inclus dans l'ensemble des attributs ( A j …, A k ) de la clause GROUP BY (qui peut avoir d’autres attributs en plus)
SQL query - 23 / D. Berrabah GROUP BY SELECTA1, B1, sum(A2) FROMR 1, R 2 WHEREA1 < 3 GROUP BY A1, B1 R1 A1 A2 R2 B1 A1 A2 B1 A1 A2 B1 group by from where A1 B1 sum(A2) select A1 B1 A2* a a a a a a a a a a a a a a a
SQL query - 24 / D. Berrabah
SQL query - 25 / D. Berrabah Predicats sur des groupes Pour garder les groupes (partitions) qui satisfont une certaine condition : SELECTA i, …, A n FROMR 1, …, R m WHEREP GROUP BY A j …, A k HAVINGQ Règle : La condition Q porte généralement sur des valeurs atomiques retournées par un opérateur d'agrégation sur les attributs qui n’apparaissent pas dans le GROUP BY
SQL query - 26 / D. Berrabah