M2106 : Programmation et administration des bases de données



Documents pareils
Le langage SQL Rappels

Le Langage SQL version Oracle

Langage SQL : créer et interroger une base

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Cours: Les Jointures 1

1 Introduction et installation

Optimisation SQL. Quelques règles de bases

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Bases de Données relationnelles et leurs systèmes de Gestion

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Cours 4 : Agrégats et GROUP BY

Les bases de données

SQL Historique

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

TD n 10 : Ma première Base de Données

16H Cours / 18H TD / 20H TP

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Introduction au Système de Gestion de Base de Données et aux Base de Données

Systèmes de Gestion de Bases de Données

TP Bases de données réparties

Encryptions, compression et partitionnement des données

Auto-évaluation SQL. Document: f0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Bases de données relationnelles

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Bases de données et sites WEB

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

TP 8: LES OPERATEURS ENSEMBLISTES

FileMaker 13. Guide de référence SQL

Session S12 Les bases de l optimisation SQL avec DB2 for i

SQL Server et Active Directory

Cours SQL. Base du langage SQL et des bases de données

Devoir Data WareHouse

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Introduction aux Bases de Données 2004/2005

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Dossier I Découverte de Base d Open Office

Gestion des utilisateurs et de leurs droits

Les bases de l optimisation SQL avec DB2 for i

Comment Définir une Plage de données Pour Utiliser Fonctions de Filtres et de Tris

OLAP : Mondrian + Pentaho. Maguelonne Teisseire Hugo Alatrista Salas hugo.alatrista- salas@teledetec9on.fr Flavien Bouillot

1 Modélisation d une base de données pour une société de bourse

Exercices sur SQL server 2000

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Évaluation et optimisation de requêtes

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : , ISBN 13 :

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Olivier Mondet

INTRODUCTION AU DATA MINING

1 Introduction. 2 Le modèle relationnel. 3 Algèbre relationnelle 4 SQL. 5 Organisation physique des données 1/228

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Le Langage De Description De Données(LDD)

Compétences Business Objects

SOMMAIRE. Travailler avec les requêtes... 3

1. Introduction Création d'une requête...2

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Notes de cours : bases de données distribuées et repliquées

Les BASES de DONNEES dans WampServer

Quelques aspects du Relationnel-Objet du SGBD Oracle

Bases de données Cours 4 : Le langage SQL pour ORACLE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

COURS de BASES de DONNEES

Mysql avec EasyPhp. 1 er mars 2006

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

Modélisation de bases de données : Le modèle relationnel

PHP 5. La base de données MySql. A. Belaïd 1

Créer le schéma relationnel d une base de données ACCESS

Structure fonctionnelle d un SGBD

KPI (Key Performance Indicator) dans MOSS

Groupe 11 TABLE DES MATIERES

M2106 : Programmation et administration des bases de données

Base de données relationnelle et requêtes SQL

EXCEL TUTORIEL 2012/2013

Les Utilisateurs dans SharePoint

RULE 5 - SERVICE OF DOCUMENTS RÈGLE 5 SIGNIFICATION DE DOCUMENTS. Rule 5 / Règle 5

Règlement relatif à l examen fait conformément à la Déclaration canadienne des droits. Canadian Bill of Rights Examination Regulations CODIFICATION

Création de Sous-Formulaires

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Définition des Webservices Ordre de paiement par . Version 1.0

TD3 - Facturation avec archivage automatisé

Performances. Gestion des serveurs (2/2) Clustering. Grid Computing

Bases de données élémentaires Maude Manouvrier

BIRT (Business Intelligence and Reporting Tools)

Utiliser un tableau de données

TP3 : Creation de tables 1 seance

Transcription:

Dernière version http://www.irit.fr/~guillaume.cabanac/enseignement/m2106/cm3.pdf M2106 : Programmation et administration des bases de données Cours 3/6 LID Guillaume Cabanac guillaume.cabanac@univ-tlse3.fr version du 16 décembre 2014

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 2 / 49

Syntaxe simplifiée des requêtes SQL -- Un résultat est une table, un select, une vue -- ou l' application d'un opé rateur ensembliste à deux ré sultats Res := { Tab Sel Vue Res1 { union [all] intersect minus } Res2 } -- Dé finition d'un ré sultat de type select ( notion d'algèbre ferm ée) Sel := select col1 [[ as] aliascol1 ],..., fonc1 [[ as] aliascoln ],... from Res1 [[ as] aliasres1 ],..., ResN [[ as] aliasresn ] [ where Cond1 {and or}... {and or} CondN ] [ group by colx,..., coly [ having cond1 {and or}... {and or} condn ] ] [ order by colz [{[ asc] desc } [ nulls { first last }]],... -- Dé finition d'une condition bool é enne Cond := { Oper1 [(+) ] {= <> {^! < >}=} Oper2 [(+) ] Oper {= < >} { all any some } Res Oper is [ not] null Oper between bornemin and bornemax Oper [ not] like 'motif ' Oper [ not] in Res -- Opé rateur ' ' en thé orie des ensembles [not] exists Res -- Opé rateur ' ' en logique [not] Cond -- Opé rateur ' ' en logique ( Cond ) -- Parenth é sage } Lé gende : [X] l élé ment X est optionnel {A B C} un des élé ments A, B ou C est obligatoire M2106 Cours 3/6 LID 3 / 49

Base de données exemple select * from adherent order by ida ; IDA NOM PRENOM VILLE MAIL -- -------- ----------------- --------------- ------------- -------------------- 1 Eastwood Clint Troyes clint@eastwood. com 45 Vladuboudin Tintin Bruxelles 69 Morgane Clara Marseille clara@hotmail.fr 999 Satan Michel Las Vegas select * from chien order by tatouage ; TATOUAGE NOM DDN SEXE IDA IDR -- -------- ---------- --------- ---- ---------- --- 3 Lassie 04-MAY -10 F 999 CO 42 Rantanplan 01-MAY -09 M 45 51 Milou 15-FEB -99 M 45 CA 666 Cerbère 08-MAR -11 M 999 CA 1664 Iench 12-DEC -12 F 69 M2106 Cours 3/6 LID 4 / 49

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 5 / 49

Projection d une relation : π att1,...,att N R π Projection La projection d une relation R permet de n afficher qu un sous-ensemble des attributs de la relation. -- Les colonnes projet ées sont ' prenom ' et 'nom ' select prenom, nom from adherent ; PRENOM NOM -- ------------------ -------------------- Clint Eastwood Clara Morgane Michel Satan Tintin Vladuboudin M2106 Cours 3/6 LID 6 / 49

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 7 / 49

Sélection dans une relation : σ cond1,...,cond N R σ Sélection La sélection d une relation R permet de n afficher que les tuples de la relation correspondant aux conditions booléennes spécifiées. -- Les lignes sé lectionn ées contiennent toutes les colonnes -- de la table adherent ('*' = toutes les colonnes ). select * from adherent where ida = 69 or ida = 999 ; IDA NOM PRENOM VILLE MAIL ---- ---------- ----------- ------------- ---------------- 69 Morgane Clara Marseille clara@hotmail. fr 999 Satan Michel Las Vegas M2106 Cours 3/6 LID 8 / 49

Sélection dans une relation : σ cond1,...,cond N R Chaînes, nombres et dates Les opérateurs de sélection (σ) : a = b Égalité entre a et b. a <> b Différence entre a et b. a!= b a ˆ= b a > b Supériorité de a par rapport à b. a >= b Supériorité ou égalité de a par rapport à b. a < b Infériorité de a par rapport à b. a <= b Infériorité ou égalité de a par rapport à b. M2106 Cours 3/6 LID 9 / 49

Sélection dans une relation : σ cond1,...,cond N R Ensemble de valeurs Les opérateurs de sélection (σ) sur opérande ensembliste : a in (X) Présence de la valeur a dans l ensemble X. a = any (X) a = some (X) a not in (X) Absence de la valeur a dans l ensemble X. a <> all (X) a > all (X) La valeur a est supérieure aux valeurs de X. a >= all (X) La valeur a est supérieure ou égale aux valeurs de X.......... De nombreuses autres combinaisons sont possibles... NB : avec X = x1,..., xn M2106 Cours 3/6 LID 10 / 49

Sélection dans une relation : σ cond1,...,cond N R Cas particulier des valeurs null Les opérateurs de sélection (σ) : a is null Nullité de a (autrement dit : a n est pas renseigné). a is not null Non-nullité de a (autrement dit : a est renseigné). L expression «X = null» est toujours évaluée à faux! select * from adherent where mail = null ;... where mail is null -- no rows selected (KO) 2 rows selected (OK : TV & MS) L expression «X <> null» est toujours évaluée à faux! select * from adherent where mail <> null ;... where mail is not null -- no rows selected (KO) 2 rows selected (OK : CE & CM) À retenir : toujours utiliser is null et is not null. M2106 Cours 3/6 LID 11 / 49

------------------------- ------------------------------ Projection π Sélection σ AHUNOLD Opérateurs ensemblistes,, IT, \ et Groupement Produit Jointures, θ,, et SKING Executive Projection et sélection dans une relation Figure 7 1 graphically represents the operations of projection and selection in the join shown in Example 7 2. Figure 7 1 Projection and Selection Table DEPARTMENTS DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID 60 90 IT Executive 103 100 1400 1700 Projection Selection SELECT email,department_name FROM employees JOIN departments ON employees.department_id = departments.department_id WHERE employee_id IN (100,103) ORDER BY email Table EMPLOYEES EMPLOYEE_ID LAST_NAME EMAIL HIRE_DATE JOB_ID MANAGER_ID DEPARTMENT_ID 100 101 102 103 King Kochhar De Hann Hunold SKING NKOCHHAR LDEHANN AHUNOLD 17-JUN-87 21-SEP-89 13-JAN-93 03-JAN-90 AD_PRES AD_VP AD_VP IT_PROG 100 100 102 90 90 90 60 Most joins have at least one join condition, either in the FROM clause or in the WHERE Illustration de la projection (π) et de la sélection (σ) en SQL clause, that compares two columns, each from a different table. The database combines pairs of rows, each containing one row from each table, for which the join condition M2106 Cours 3/6 LID 12 / 49

Tri des résultats Clause order by Les résultats peuvent être ordonnés selon plusieurs clés de tri : nom ou position des colonnes. Deux sens de tri sont offerts : croissant (par défaut) ou décroissant. La position des valeurs nulles est également spécifiable. -- Affichage des caractéristiques des chiens, ces derniers étant ordonnés par : -- 1. idr croissant en affichant les valeurs nulles en haut de la liste, -- 2. les lignes ex æ quo sont dé partag ées sur le champ nom ( croissant ), -- 3. les lignes ex æ quo sont dé partag ées sur le champ ddn (dé croissant ). select idr race, sexe, nom, tatouage, ddn " date de naissance " from chien order by idr nulls first, nom, ddn desc ; -- Requ ête é quivalent avec une notation positionn ée (numéro de colonne ) select idr race, sexe, nom, tatouage, ddn " date de naissance " from chien order by 1 nulls first, 3, 5 desc ; M2106 Cours 3/6 LID 13 / 49

Élimination des doublons Opérateur distinct L opérateur distinct «dédoublonne» le résultat : il élimine les lignes en double dans le résultat. select idr select distinct idr from chien from chien order by idr nulls first ; order by idr nulls first ; IDR IDR --- --- CA CA CO CA --- CO --- M2106 Cours 3/6 LID 14 / 49

Composition de requêtes : π att1,...,att N (σ cond1,...,cond N R) π(σ) Sélection et projection Le résultat de toute requête peut être à l entrée d une autre requête. On parle d algèbre fermée : toute opération sur un résultat produit un nouveau résultat, qui est manipulable à son tour. ( ) ( Parallèle avec les mathématiques : cos 3π4 15 ) + 42 51! -- Cette requ ête SQL spé cifie une projection et une sé lection exé cution 4. select prenom, nom 1. from adherent 2. where ida = 69 3. or ida = 999 ; NOM PRENOM -- -------- ----------- Morgane Clara Satan Michel M2106 Cours 3/6 LID 15 / 49

Composition de requêtes : les sous-requêtes Généralisation de la composition de requêtes Le résultat d une sous-requête peut être à l entrée d un opérateur dans la requête englobante. -- Speed dating pour chiens : -- Adhérents disposant d'un mail, possédant une chienne et habitant -- dans la même ville que les adhérents poss é dant un chien. select nom, prenom from adherent where ida in ( select ida --> possesseurs de chiennes from chien where sexe = 'F') and ville in ( select ville --> ville des possesseurs de chiens from adherent where ida in ( select ida --> possesseurs de chiens from chien where sexe = 'M')) and mail is not null --> possesseurs de chiennes avec email order by nom, prenom ; M2106 Cours 3/6 LID 16 / 49

Composition de requêtes : les sous-requêtes Exemples de sous-requêtes non-synchronisées -- Chien le plus âgé? select * from chien where ddn >= all(select ddn from chien ) ; -- TATOUAGE NOM DDN SEXE IDA IDR -- ---------- ---------- --------- ---- ---------- --- -- 51 Milou 15-FEB -99 M 45 CA -- Prime la plus faible? select prime from participation where prime <= all(select prime from participation ) ; -- PRIME -- -------- -- 1.00 -- Chiens de même sexe que Milou ( tatouage 51) select * from chien where sexe = ( select sexe from chien where tatouage = 51) and tatouage ^= 51 ; -- ^= est é quivalent à <> et!= -- TATOUAGE NOM DDN SEXE IDA IDR -- ---------- ---------- --------- ---- ---------- --- -- 666 Cerbère 08-MAR -11 M 999 CA -- 42 Rantanplan 01-MAY -09 M 45 M2106 Cours 3/6 LID 17 / 49

Composition de requêtes : les sous-requêtes Exemples de sous-requêtes synchronisées Synchronisation de requêtes Pour chaque ligne d une requête, une sous-requête est déclenchée. La synchronisation entre les deux requêtes est réalisée par le passage de valeurs de la requête englobante à la sous-requête. -- Pour chaque ligne de 'concours c', la valeur 'c.ville ' est passée en entrée -- de la sous - requête qui est exécutée. -- Le résultat obtenu 'max(datec )' est ensuite comparé au 'datec ' courant pour -- conserver la ligne courante (cas de l'é galit é entre les valeurs ) ou pas. select ville, datec dernierconcours from concours c where datec = ( select max ( datec ) from concours where ville = c. ville ) -- c.-à-d. where concours. ville = c. ville order by datec desc, ville ; -- VILLE DERNIERCONCOURS -- --------------- --------------- -- Rodez 28-SEP -12 -- Toulouse 05-MAY -13 M2106 Cours 3/6 LID 18 / 49

Composition de requêtes : les vues Vue L expression ( pas le résultat!) d une requête peut être nommée afin de : 1 décomposer des requêtes complexes, 2 réduire la visibilité de certaines données. -- Dé finition de la vue create view chientoulousain as select * from chien where ida in ( select ida from adherent where ville = 'Toulouse ') ; M2106 Cours 3/6 LID 19 / 49

Composition de requêtes : les vues Vue L expression ( pas le résultat!) d une requête peut être nommée afin de : 1 décomposer des requêtes complexes, 2 réduire la visibilité de certaines données. -- Dé finition de la vue create view chientoulousain as select * from chien where ida in ( select ida from adherent where ville = 'Toulouse ') ; -- Utilisation de la vue : prime et classement des chiens Toulousains select tatouage, prime, classement from participation where tatouage in ( select tatouage from chientoulousain ) order by prime desc ; M2106 Cours 3/6 LID 19 / 49

Composition de requêtes : les vues Vue L expression ( pas le résultat!) d une requête peut être nommée afin de : 1 décomposer des requêtes complexes, 2 réduire la visibilité de certaines données. -- Dé finition de la vue create view chientoulousain as select * from chien where ida in ( select ida from adherent where ville = 'Toulouse ') ; -- Utilisation de la vue : prime et classement des chiens Toulousains select tatouage, prime, classement from participation where tatouage in ( select tatouage from chientoulousain ) order by prime desc ; -- Cette requ ête est **réé crite ** avant d'être exécutée select tatouage, prime, classement from participation where tatouage in ( select tatouage -- vue chientoulousain réé crite ci - dessous from ( select * from chien where ida in ( select ida from adherent where ville = ' Toulouse '))) order by prime desc ; M2106 Cours 3/6 LID 19 / 49

Composition de requêtes : les vues Illustration Overview of issue Views de la documentation Oracle Figure 5 5 An Example of a View Base Table employees employee_id last_name job_id manager_id hire_date salary department_id 203 204 205 206 marvis baer higgins gietz hr_rep pr_rep ac_rep ac_account 101 101 101 205 07 Jun 94 07 Jun 94 07 Jun 94 07 Jun 94 6500 10000 12000 8300 40 70 110 110 View staff employee_id last_name job_id manager_id department_id 203 204 205 206 marvis baer higgins gietz hr_rep pr_rep ac_rep ac_account 101 101 101 205 40 70 110 110 Réduction de la visibilité des données par masquage de hire_date et salary. M2106 Cours 3/6 LID 20 / 49

Composition de requêtes : les vues «internes» Vue «interne» Une vue «interne» crée une vue temporaire le temps d exécuter la requête. Cette syntaxe permet d éviter la création de vues dont l utilité se réduit à une seule requête. -- Prime et classement des chiens Toulousains? -- utilisation d'une vue interne qui n'a pas d' existence propre with chientoulousain as ( select * from chien where ida in ( select ida from adherent where ville = 'Toulouse ') ) select tatouage, prime, classement from participation where tatouage in ( select tatouage from chientoulousain ) order by prime desc ; M2106 Cours 3/6 LID 21 / 49

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 22 / 49

Théorie des ensembles de Cantor (XIX e siècle) Quelques rappels sur les concepts et les notations... http://www.maths- informatique- jeux.com/maths/cours/images/operations_ensembles.png A se lit «l ensemble A» A B se lit «A union B» A B se lit «A inter B» A \ B se lit «A moins B» E A se lit «le complément de A dans E» x A se lit «l élément x appartient à l ensemble A» M2106 Cours 3/6 LID 23 / 49

Opérateurs ensemblistes Union de deux résultats : R 1 R 2 Union Les résultats des deux opérandes sont concaténés verticalement. Les deux relations doivent être compatibles : même nombre d attributs de mêmes types. Commutativité : A B = B A Parallèle avec les maths : {1,6,4} {6,4,7} = {1,4,6,7} {5,1} = {5,1} -- Avec l'opérateur 'union ' : élimination autom. des doublons dans le résultat select * from adherent where ville = 'Las Vegas ' union select * from adherent where ville = 'Troyes ' ; -- Requ ête é quivalente avec l'opé rateur 'or ' select distinct * from adherent where ville = 'Las Vegas ' or ville = 'Troyes ' ; -- Requ ête é quivalente avec l'opé rateur 'in ' ( en logique ) select distinct * from adherent where ville in ('Las Vegas ', 'Troyes ') ; M2106 Cours 3/6 LID 24 / 49

Opérateurs ensemblistes Union de deux résultats avec conservation des doublons : R 1 R 2 Union all Les résultats des deux opérandes sont concaténés verticalement en conservant lignes identiques (doublons). Les deux relations doivent être compatibles : même nombre d attributs de mêmes types. Commutativité : A B = B A Parallèle avec les maths : {1,6,4} {6,4,7} = {1,6,4,6,4,7} {5,1} = {5,1} -- Avec l'opérateur 'union all ' : doublons conservés dans le résultat select idr from chien where ida = 999 union all select idr from chien where ida = 45 ; -- IDR -- --- -- CA -- CO -- CA -- -- Avec l'opérateur 'union ' : doublons éliminés dans le résultat : -- {CA, CO, null } M2106 Cours 3/6 LID 25 / 49

Opérateurs ensemblistes Intersection de deux résultats : R 1 R 2 Intersection Le résultat contient les tuples en commun dans les deux opérandes. Les deux relations doivent être compatibles : même nombre d attributs de mêmes types. Commutativité : A B = B A Parallèle avec les maths : {1,6,4} {6,4,7} = {4,6} = {6,4} {5,1} = -- Concours pour lesquels les chiens 1664 et 666 ont pu se croiser? -- Avec l'opérateur 'intersect ' select idc from participation where tatouage = 1664 intersect select idc from participation where tatouage = 666 ; -- Requ ête é quivalente avec l'opé rateur 'group by ' -- ( plus de dé tail dans quelques diapos...) select idc from participation where tatouage in (1664, 666) group by idc having count (*) = 2 ; M2106 Cours 3/6 LID 26 / 49

Opérateurs ensemblistes Différence entre deux résultats : R 1 \R 2 \ Différence Le résultat contient les tuples d une opérande R 1 qui ne sont pas dans une autre opérande R 2. Les deux relations doivent être compatibles : même nombre d attributs de mêmes types. Non commutativité : A \B B \A Parallèle avec les maths : {1,6,4} \ {6,4,7} = {1} {5,1} \ = {5,1} -- Participants au concours 12 qui n'ont pas particip é au concours 13? -- Avec l'opérateur 'minus ' : élimination des doublons dans le résultat select tatouage from participation where idc = 12 minus select tatouage from participation where idc = 13 ; -- Requête équivalente avec l'opérateur 'not in ' ( ) et une sous - requête select tatouage from participation where idc = 12 and tatouage not in ( select tatouage from participation where idc = 13) ; M2106 Cours 3/6 LID 27 / 49

Opérateurs ensemblistes Existence de tuples Existence L opérateur exists renvoie vrai si la sous-requête contient des lignes, faux sinon. -- Propri é taires de chiens : ces deux requ êtes donnent le même ré sultat select * select * from adherent from adherent where exists ( select * where ida in ( select ida from chien from chien where ida = adherent.ida) ; where ida is not null ) ; -- IDA NOM PRENOM VILLE MAIL -- --- ----------- ---------- --------- ---------------- -- 45 Vladuboudin Tintin Bruxelles -- 69 Morgane Clara Marseille clara@hotmail.fr -- 999 Satan Michel Las Vegas -- NB : la version avec 'exists ' est synchronisée M2106 Cours 3/6 LID 28 / 49

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 29 / 49

Fonctions d agrégation Appliquées à un résultat dans son intégralité Définition Une fonction d agrégation synthétise les valeurs d une colonne (en entrée) en une seule valeur (en sortie). Parallèle avec les maths : 3 +6 = 9 min(3,4,5) = 3 Fonction count(*) count(col) count(distinct col) Description Nombre total de lignes Nombre de lignes dont la valeur de col n est pas vide Nombre de valeurs non nulles distinctes dans col M2106 Cours 3/6 LID 30 / 49

Fonctions d agrégation Appliquées à un résultat dans son intégralité Définition Une fonction d agrégation synthétise les valeurs d une colonne (en entrée) en une seule valeur (en sortie). Parallèle avec les maths : 3 +6 = 9 min(3,4,5) = 3 Fonction count(*) count(col) count(distinct col) min(col) max(col) Description Nombre total de lignes Nombre de lignes dont la valeur de col n est pas vide Nombre de valeurs non nulles distinctes dans col Valeur minimale dans col Valeur maximale dans col M2106 Cours 3/6 LID 30 / 49

Fonctions d agrégation Appliquées à un résultat dans son intégralité Définition Une fonction d agrégation synthétise les valeurs d une colonne (en entrée) en une seule valeur (en sortie). Parallèle avec les maths : 3 +6 = 9 min(3,4,5) = 3 Fonction count(*) count(col) count(distinct col) min(col) max(col) sum(col) avg(col) stddev(col) median(col) Description Nombre total de lignes Nombre de lignes dont la valeur de col n est pas vide Nombre de valeurs non nulles distinctes dans col Valeur minimale dans col Valeur maximale dans col Somme des valeurs de col Moyenne des valeurs de col Écart-type des valeurs de col Valeur médiane de col M2106 Cours 3/6 LID 30 / 49

Fonctions d agrégation Appliquées à un résultat dans son intégralité. Quelques exemples... select count (*) nbtot, count (idr) as nbracés, count (*) - count ( idp ) nbbâtards, count ( distinct idr) nbracesdist from chien ; -- NBTOT NBRAC ÉS NBBÂTARDS NBRACESDIST -- ---------- ---------- ---------- ----------- -- 5 3 2 2 -- Nombre de chiens qui ont une race ( requ êtes é quivalentes ) select count ( idr ) select count (*) from chien ; from chien where idr is not null ; -- COUNT ( IDR ) COUNT (*) -- ---------- -------- -- 3 3 -- Statistiques sur les gains du chien 1664 select count ( prime ) nbprimes, sum(prime ) argentgagné, avg(prime ) primemoyenne, min ( classement ) meilleureplace from participation where tatouage = 1664 ; -- NBPRIMES ARGENTGAGN É PRIMEMOYENNE MEILLEUREPLACE -- ---------- ----------- ------------ -------------- -- 4 1563.35 564.45 1 M2106 Cours 3/6 LID 31 / 49

Fonctions d agrégation Appliquées à des regroupements Opérateur group by... having L opérateur group by définit comment grouper des lignes. L opérateur having définit comment filtrer les groupes. Les fonctions d agrégation projetées sont calculées pour chaque groupe. select idr, count (*) select idr, count (*) from chien from chien where idr is not null where idr is not null group by idr group by idr order by 2 desc, 1 ; having count (*) > 1 order by 2 desc, 1 ; -- IDR NBCHIENS NBPROPRIOS IDR NBCHIENS NBPROPRIOS -- --- ---------- ---------- --- ---------- ---------- -- CA 2 2 CA 2 2 -- CO 1 1 M2106 Cours 3/6 LID 32 / 49

Fonctions d agrégation Appliquées à des regroupements Opérateur group by... having Règle absolue : {S1,...,Sn} {G1,...,Gk } {count,min,max,...} select S1,..., Sn from R1,..., Rm... group by G1,..., Gk ; -- Nombre de chiens par race et propri é taire? -- KO OK -- {idr,ida, count } {idr, count...} {idr,ida, count } {idr,ida,count,...} select idr, ida, count (*) nbch select idr, ida, count (*) nbch from chien from chien group by idr ; group by idr, ida ; -- # fail SQL Error : ORA -00979: -- not a GROUP BY expression -- Mauvaise utilisation : utiliser un 'group by ' au lieu d'un 'distinct ' -- KO -- OK select idr select distinct idr from chien from chien ; group by idr ; M2106 Cours 3/6 LID 33 / 49

Fonctions d agrégation Appliquées à des regroupements. Exemples... -- Chiens qui ont particip é aux concours sans jamais avoir de prime ( loosers ) select tatouage from participation group by tatouage having count ( prime ) = 0 ; -- Chiens qui, lorsqu ' ils sont classés, ont toujours eu -- le même classement ( mais pas 2e) select tatouage from participation where classement is not null group by tatouage having count ( distinct classement ) = 1 and max ( classement )!= 2 ; M2106 Cours 3/6 LID 34 / 49

Fonctions d agrégation Équivalence de requêtes : admirez la concision de la construction group by... having! -- Requête avec 'group by '... 'having ' select idr, count (*) nbch from chien where idr is not null group by idr having count (*) > 1 order by 2 desc, 1 ; M2106 Cours 3/6 LID 35 / 49

Fonctions d agrégation Équivalence de requêtes : admirez la concision de la construction group by... having! -- Requête avec 'group by '... 'having ' select idr, count (*) nbch from chien where idr is not null group by idr having count (*) > 1 order by 2 desc, 1 ; -- Requête décomposée et réécrite sans 'group by '... 'having ' -- Elle donne strictement le même ré sultat select idr, nbch from ( -- calcul du nombre de de chiens d'une race donn ée -- synchronisation sur t select idr, ( select count (*) from chien where idr = t.idr) nbch from ( -- Calcul des idr distincts ( clause du 'group by ') select distinct idr from chien where idr is not null ) as t ) -- traduction de la clause 'having ' where nbch > 1 order by 2 desc, 1 ; M2106 Cours 3/6 LID 35 / 49

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 36 / 49

Produit cartésien : R 1 R 2 Produit cartésien Le résultat d un produit cartésien entre deux relations R 1 et R 2 contient R 1 R 2 lignes : ce sont tous les couples de lignes possibles, issues de R 1 et R 2 (concaténation horizontale). -- Taille du ré sultat : adherent * chien = 4 * 5 = 20 lignes select * from adherent, chien ; select * from adherent cross join chien ; -- Syntaxe ANSI pour info ( non utilis ée en TD/TP) IDA NOM PRENOM VILLE MAIL TATOUAGE NOM DDN SEXE IDA IDR --- ----------- ------ --------- ------------- ----- ---------- --------- ---- --- --- 45 Vladuboudin Tintin Bruxelles 1664 Iench 12-DEC -12 F 69 45 Vladuboudin Tintin Bruxelles 666 Cerb ère 08-MAR -11 M 999 CA 45 Vladuboudin Tintin Bruxelles 51 Milou 15-FEB -99 M 45 CA 45 Vladuboudin Tintin Bruxelles 42 Rantanplan 01-MAY -09 M 45 45 Vladuboudin Tintin Bruxelles 3 Lassie 04-MAY -10 F 999 CO 69 Morgane Clara Marseille clara@hotmail.fr 1664 Iench 12-DEC -12 F 69 69 Morgane Clara Marseille clara@hotmail.fr 666 Cerb ère 08-MAR -11 M 999 CA 69 Morgane Clara Marseille clara@hotmail.fr 51 Milou 15-FEB -99 M 45 CA 69 Morgane Clara Marseille clara@hotmail.fr 42 Rantanplan 01-MAY -09 M 45 69 Morgane Clara Marseille clara@hotmail.fr 3 Lassie 04-MAY -10 F 999 CO 999 Satan Michel Las Vegas 1664 Iench 12-DEC -12 F 69 999 Satan Michel Las Vegas 666 Cerb ère 08-MAR -11 M 999 CA 999 Satan Michel Las Vegas 51 Milou 15-FEB -99 M 45 CA 999 Satan Michel Las Vegas 42 Rantanplan 01-MAY -09 M 45 999 Satan Michel Las Vegas 3 Lassie 04-MAY -10 F 999 CO 1 Eastwood Clint Troyes clint@eastwood.com 1664 Iench 12-DEC -12 F 69 1 Eastwood Clint Troyes clint@eastwood.com 666 Cerb ère 08-MAR -11 M 999 CA 1 Eastwood Clint Troyes clint@eastwood.com 51 Milou 15-FEB -99 M 45 CA 1 Eastwood Clint Troyes clint@eastwood.com 42 Rantanplan 01-MAY -09 M 45 1 Eastwood Clint Troyes clint@eastwood.com 3 Lassie 04-MAY -10 F 999 CO M2106 Cours 3/6 LID 37 / 49

Erreur de débutant... A Confusion fatale entre produit cartésien et jointure L oubli de clauses de jointures conserve des données invalides! -- Les propri é taires et leurs chiens? -- KO : oubli de la clause de jointure ( adherent.ida = chien.ida) select * from adherent, chien ; -- ------------------- Il faudrait qu ' ils soient é gaux!!! -------------------------- V V IDA NOM PRENOM VILLE MAIL TATOUAGE NOM DDN SEXE IDA IDR --- ----------- ------ --------- ------------- ----- ---------- --------- ---- --- --- [...] 69 Morgane Clara Marseille clara@hotmail.fr 666 Cerb ère 08-MAR -11 M 999 CA [...] 999 Satan Michel Las Vegas 51 Milou 15-FEB -99 M 45 CA [...] 1 Eastwood Clint Troyes clint@eastwood.com 666 Cerb ère 08-MAR -11 M 999 CA -- Clara NE poss ède PAS Cerb ère! -- Satan NE poss ède PAS Milou! -- Clint NE poss ède PAS Cerb ère! M2106 Cours 3/6 LID 38 / 49

LID : Langage d interrogation des données 1 Projection π 2 Sélection σ 3 Opérateurs ensemblistes,,, \ et 4 Groupement 5 Produit 6 Jointures, θ,, et M2106 Cours 3/6 LID 39 / 49

Jointure naturelle : R 1 R 2 Jointure naturelle Une jointure naturelle est un produit cartésien suivi d une sélection portant sur les attributs en commun dans les deux relations : R 1 R 2 = σ R1.att=R 2.att (R 1 R 2 ) Propriété : R 1 R 2 R 1 R 2 select * from chien, race where chien. idr = race. idr ; -- Avec syntaxe ANSI (à titre informatif : non utilis ée en TD/TP) select * from chien natural join race ; = V V TATOUAGE NOM DDN SEXE IDA IDR IDR LIBELLE DESCRIPTION -- -------- ---------- --------- ---- ---------- --- --- --------------- ----------- 666 Cerb ère 08-MAR -11 M 999 CA CA Caniche Petit et fris é 51 Milou 15-FEB -99 M 45 CA CA Caniche Petit et fris é 3 Lassie 04-MAY -10 F 999 CO CO Colley Poilu et doré -- NB : Seuls les chiens poss é dant une race sont list és -- ==> Inutile de spé cifier 'where race.idr is not null ' dans cet exemple M2106 Cours 3/6 LID 40 / 49

Semi-jointures gauche R 1 R 2 et droite R 1 R 2 Semi-jointure Une semi-jointure gauche (resp. droite ) est une jointure naturelle dont on ne projette que les attributs provenant de la relation de gauche (resp. droite). R 1 R 2 = π R1. (R 1 R 2 ) R 1 R 2 = π R2. (R 1 R 2 ) -- Semi - jointure gauche ( pour la droite : select race.*) select chien.* from chien, race where chien. idr = race. idr ; -- Le ré sultat ne contient que les colonnes de chien TATOUAGE NOM DDN SEXE IDA IDR -- -------- ---------- --------- ---- ---------- --- 666 Cerb ère 08-MAR -11 M 999 CA 51 Milou 15-FEB -99 M 45 CA 3 Lassie 04-MAY -10 F 999 CO M2106 Cours 3/6 LID 41 / 49

θ-jointure : R 1 θ R 2 θ-jointure Une θ-jointure exprime une condition booléenne de sélection avec les opérateurs binaires,<,=,,>,. -- Couples mâle et femelles avec un mâle plus âgé que la femelle? select male. tatouage m, femelle. tatouage f from chien male, chien femelle where male. ddn > femelle.ddn and male. sexe = 'M' and femelle. sexe = 'F' ; -- M F -- ---------- ---------- -- 666 3 -- NB : cette requête illustre le cas particulier de l'auto - jointure sur chien. M2106 Cours 3/6 LID 42 / 49

Équi-jointure : R 1 R1.att i =R 2.att j R 2 R1.att i =R 2.att j équi-jointure L équi-jointure est une forme particulière de θ-jointure, où θ est l opérateur d égalité. -- Propri é taires et leurs chiens? select * from adherent, chien where adherent. ida = chien.ida ; -- NB1 : Ce n'est pas une jointure naturelle car les tables adherent et chien -- ont 2 colonnes en commun ~: nom et ida. -- Or, ici on ne joint que sur la colonne ida! -- Avec syntaxe ANSI : attention, à manipuler avec précaution... select * from adherent natural join chien ; -- naturelle : KO select * from adherent join chien using (ida) ; -- theta : OK -- -----------------------------------(=) -------------------------------------------- V V IDA NOM PRENOM VILLE MAIL TATOUAGE NOM DDN SEXE IDA IDR --- ----------- ------ --------- ------------------ ---- ---------- --------- ---- --- --- 45 Vladuboudin Tintin Bruxelles 51 Milou 15-FEB -99 M 45 CA 45 Vladuboudin Tintin Bruxelles 42 Rantanplan 01-MAY -09 M 45 69 Morgane Clara Marseille clara@hotmail.fr 1664 Iench 12-DEC -12 F 69 999 Satan Michel Las Vegas 3 Lassie 04-MAY -10 F 999 CO 999 Satan Michel Las Vegas 666 Cerb ère 08-MAR -11 M 999 CA -- NB2 : Client Eastwood n'est pas pré sent dans le ré sultat car il ne poss ède aucun chien. M2106 Cours 3/6 LID 43 / 49

Expressivité de l équi-jointure Reprise de l exemple de la diapositive 16 : «Speed dating pour chiens» -- Speed dating pour chiens : -- Adhérents disposant d'un mail, possédant une chienne et habitant -- dans la même ville que les adhérents poss é dant un chien. -- Version imbriqu ée select nom, prenom from adherent where ida in ( select ida --> possesseurs de chiennes from chien where sexe = 'F') and ville in ( select ville --> ville des possesseurs de chiens from adherent where ida in ( select ida --> possesseurs de chiens from chien where sexe = 'M')) and mail is not null --> possesseurs de chiennes avec email order by nom, prenom ; -- Version relationnelle ( avec jointures ) select a1.nom, a1. prenom from adherent a1, chien c1, adherent a2, chien c2 where a1.ida = c1.ida -- jointure 1/2 : a1 poss ède c1 and a2.ida = c2.ida -- jointure 2/2 : a2 poss ède c2 and c1. sexe = 'F' -- c1 est une chienne and c2. sexe = 'M' -- c2 est un chien and a1. ville = a2. ville -- a1 et a2 habitent dans la même ville and a1. mail is not null -- a1 poss ède une adresse mail order by a1.nom, a1. prenom ; M2106 Cours 3/6 LID 44 / 49

Auto-jointure R R.atti θ R.att j R R.atti θ R.att j auto-jointure L auto-jointure est une forme particulière de θ-jointure portant sur une seule relation. L utilisation d alias est nécessaire pour distinguer les relations. -- Couples de chiens (mâle et femelle ) de même race? select male. tatouage lui, femelle. tatouage elle from chien male, chien femelle -- auto - jointure avec emploi des alias where male. idr = femelle.idr -- mâle et femelle sont de même race and male. sexe = 'M' -- relation de gauche : mâles and femelle. sexe = 'F' ; -- relation de droite : femelles -- La condition ci - dessous est inutile car partition disjointe sur sexe -- and male. tatouage <> femelle. tatouage -- É criture de la même requ ête avec le mot clé optionnel 'as ' select male. tatouage as lui, femelle. tatouage as elle -- 'as ' : alias de colonne from chien as male, chien as femelle -- 'as ' : alias de table where male. idr = femelle.idr and male. sexe = 'M' and femelle. sexe = 'F' ; M2106 Cours 3/6 LID 45 / 49

Jointure externe gauche R 1 R 2 Jointure externe gauche R 1 R 2 Résultat de R 1 R 2 auquel on ajoute les lignes de R 1 qui n ont pas été appariées avec R 2. -- Les propriétaires, avec leurs chiens éventuels? select * from adherent, chien where adherent. ida = chien.ida (+) ; -- Avec syntaxe ANSI select * from adherent left outer join chien on adherent.ida = chien.ida ; IDA NOM PRENOM VILLE MAIL TATOUAGE NOM DDN SEXE IDA IDR --- ----------- ------ --------- ------------------ ---- ---------- --------- ---- --- --- 1 Eastwood Clint Troyes clint@eastwood.com 45 Vladuboudin Tintin Bruxelles 51 Milou 15-FEB -99 M 45 CA 45 Vladuboudin Tintin Bruxelles 42 Rantanplan 01-MAY -09 M 45 69 Morgane Clara Marseille clara@hotmail.fr 1664 Iench 12-DEC -12 F 69 999 Satan Michel Las Vegas 3 Lassie 04-MAY -10 F 999 CO 999 Satan Michel Las Vegas 666 Cerb ère 08-MAR -11 M 999 CA -- Autre utilit é : les propri é taires qui n'ont pas de chien? select * from adherent, chien where adherent. ida = chien.ida (+) and chien. ida is null ; M2106 Cours 3/6 LID 46 / 49

Jointure externe droite R 1 R 2 Jointure externe droite R 1 R 2 Résultat de R 1 R 2 auquel on ajoute les lignes de R 2 qui n ont pas été appariées avec R 1. -- Les propriétaires, avec leurs chiens éventuels? select * from chien, adherent where chien. ida (+) = adherent.ida ; -- Avec syntaxe ANSI select * from chien right outer join adherent on chien.ida = adherent. ida ; TATOUAGE NOM DDN SEXE IDA IDR IDA NOM PRENOM VILLE MAIL -- -------- ---------- --------- ---- --- --- --- ---------- ------ --------- ------------------ 1 Eastwood Clint Troyes clint@eastwood.com 51 Milou 15-FEB -99 M 45 CA 45 Vladuboudin Tintin Bruxelles 42 Rantanplan 01-MAY -09 M 45 45 Vladuboudin Tintin Bruxelles 1664 Iench 12-DEC -12 F 69 69 Morgane Clara Marseille clara@hotmail.fr 3 Lassie 04-MAY -10 F 999 CO 999 Satan Michel Las Vegas 666 Cerb ère 08-MAR -11 M 999 CA 999 Satan Michel Las Vegas -- Autre utilit é : les propri é taires qui n'ont pas de chien? select * from chien, adherent where chien. ida (+) = adherent.ida and chien. ida is null ; M2106 Cours 3/6 LID 47 / 49

Jointure externe complète R 1 R 2 Jointure externe complète R 1 R 2 R 1 R 2 = (R 1 R 2 ) (R 1 R 2 ) select * from chien, race where chien. idr (+) = race.idr union select * from chien, race where chien. idr = race. idr (+) -- Avec syntaxe ANSI select * from chien full outer join race on chien.idr = race.idr ; -- TATOUAGE NOM DDN SEXE IDA IDR IDR LIBELLE DESCRIPTION -- ---------- ---------- --------- ---- ---------- --- --- --------------- -------------- -- 3 Lassie 04-MAY -10 F 999 CO CO Colley Poilu et doré -- 42 Rantanplan 01-MAY -09 M 45 -- 51 Milou 15-FEB -99 M 45 CA CA Caniche Petit et fris é -- 666 Cerb ère 08-MAR -11 M 999 CA CA Caniche Petit et fris é -- 1664 Iench 12-DEC -12 F 69 -- BA Berger Allemand cf. Rintintin M2106 Cours 3/6 LID 48 / 49

Sources Les illustrations sont reproduites à partir des documents suivants : Oracle Database Documentation Library 11.1 (http://www.oracle.com/pls/db111/homepage) Oracle Database : Concepts 11g Release 1 (11.1) B28318-06 Oracle Database Documentation Library 11.2 (http://www.oracle.com/pls/db112/homepage) Oracle Database : Concepts 11g Release 2 (11.2) E40540-01 M2106 Cours 3/6 LID 49 / 49