Initiation aux bases de données et à la programmation événementielle Cours N°2 : Introduction au langage d’interrogation de données. Support de cours de Souheib BAARIR. Page web : pagesperso-systeme.lip6.fr/Souheib.Baarir/bdvba/support.htm E-mail : souheib.baarir@u-paris10.fr Université Paris Ouest Nanterre la Défense. 2009-2010.
BD relationnelle Relations et Algèbre relationnelle : Représentation symbolique (mathématique) de haut niveau des intentions de l’utilisateur. Sur une machine… : Représentation informatique des Relations ? Les Tables. Langage exprimant les Opérations Relationnelles ? SQL : SELECT att1,…, attn FROM R1,…,Rm WHERE Conditions Requêtes de sélection de base
Relations tables Table B Table C B allumé éteint A B vert allumé A = {vert, jaune, rouge}, B = {allumé, éteint}, C = {(vert, allumé),(vert, éteint), (rouge, allumé)} En-tête de colonne : le nom du champ Table B Table C Les valeurs d’une « colonne » appartiennent à un même domaine B allumé éteint A B vert allumé éteint rouge Chaque « ligne » est un n-uplet de la relation On parle d’ « enregistrement » On parle de « champ »
Tables : rôles des champs Information (intrinsèque) : définit une donnée particulière. Identifiant (Clé primaire) : ensemble de champs dont les valeurs permettent de distinguer les enregistrements les uns aux autres. Il peut être simple (un seul champ) ou composé (plusieurs champs). Référence (Clé étrangère, Clé externe) : champ qui est clé primaire d’une autre relation. N° étudiant nom Prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Gestion 105237 THOMAS Alice Anglais 105239 Bernard 105250 MARIE Philippe nom prénom formation MARTIN Marie MMIA BERNARD Louis Gestion THOMAS Alice Anglais Bernard MARIE Philippe Référence adresse 2 3 4 code adresse ville Dép. 1 Paris 75 2 Versailles 78 3 Nanterre 92 4 Suresnes ville Dép. Paris 75 Versailles 78 Nanterre 92 Suresnes
Structured Query Language (SQL) Plusieurs types de requêtes : d’interrogation. de manipulation : insert, update, delete… de définition : create, alter, drop… SELECT [DISTINCT] liste de champs FROM liste de tables [WHERE prédicats] Une nouvelle Table : mettant en relation plus tables, exhibant de nouvelles données, cachant des données inutiles, … [GROUP BY ordre des groupes] [HAVING condition] [ORDER BY liste de colonnes]
SQL : produit Cartésien TableR1 TableR2 PRODUIT(TableR1,TableR2) ville dept Rouen 76 Lyon 69 dept Région 28 Centre 69 Rhône-Alpes Deux champs portent le même nom dans TableR1 et TableR2 : Différenciés par le nom de la table associé SQL TableR1•TableR2 ville TableR1.dept TableR2.dept région Rouen 76 28 Centre Lyon 69 Rhône-Alpes SELECT * FROM TableR1,TableR2
SQL : Projection le nom et prénom de tous les étudiants ? formation adresse MARTIN Marie MMIA Versailles BERNARD Louis Gestion Nanterre THOMAS Alice Anglais Bernard Suresnes le nom et prénom de tous les étudiants ? étudiant-proj PROJECTION (nom,prénom) (étudiant) nom prénom MARTIN Marie BERNARD Louis THOMAS Alice Bernard SQL SELECT nom, prénom FROM étudiant;
toutes les informations sur les étudiants Nanterrois ? SQL : Restriction étudiant nom prénom formation adresse MARTIN Marie MMIA Versailles BERNARD Louis Gestion Nanterre THOMAS Alice Anglais Bernard Suresnes toutes les informations sur les étudiants Nanterrois ? RESTRICTION (adresse = Nanterre) (étudiant) Étudiant-nanterrois nom prénom formation adresse BERNARD Louis Gestion Nanterre THOMAS Alice Anglais SELECT * FROM étudiant WHERE adresse = "Nanterre"; SQL
SQL : Restriction et projection étudiant nom prénom formation adresse MARTIN Marie MMIA Versailles BERNARD Louis Gestion Nanterre THOMAS Alice Anglais Bernard Suresnes le nom et prénom des étudiants Nanterrois. PROJECTION (Nom,prénom) (RESTRICTION(adresse = Nanterre) (étudiant )) SQL identités étudiants nanterrois nom prénom BERNARD Louis THOMAS Alice SELECT nom, prénom FROM étudiant WHERE résidence = "Nanterre";
SQL : Produit Cartésien, restriction et projection étudiant adresse N° étudiant Nom prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Gestion 105237 THOMAS Alice Anglais 105239 Bernard 105250 MARIE Philippe nom prénom formation MARTIN Marie MMIA BERNARD Louis Gestion THOMAS Alice Anglais Bernard MARIE Philippe Référence adresse 2 3 4 code adresse ville Dép. 1 Paris 75 2 Versailles 78 3 Nanterre 92 4 Suresnes ville Dép. Paris 75 Versailles 78 Nanterre 92 Suresnes le nom, le prénom et la ville des étudiants qui habitent le Haut-de-Seine. PROJECTION (Nom,prénom)(RESTRICTION(référence=code adresse et département= 92) (PRODUIT(étudiant,adresse))) SQL Etudiants Hauts-de-Seine SELECT étudiant.nom, étudiant.prénom, adresse.ville FROM étudiant, adresse WHERE (adresse.[code adresse]=[référence adresse]) AND (adresse.département=92); nom prénom ville BERNARD Louis Nanterre THOMAS Alice MARIE Philippe Suresnes
Produit Cartésien, restriction et projection : détails des opérations (théoriquement) PROJECTION(Nom,prénom,ville) (RESTRICTION(référence=code adresse et département= 92) (PRODUIT(étudiant,adresse))) SELECT étudiant.nom, étudiant.prénom, adresse.ville FROM étudiant, adresse WHERE (adresse.[code adresse]=[référence]) AND (adresse.département=92); N° étudiant nom prénom formation référence code adresse ville département 105230 MARTIN Marie MMIA 2 1 Paris 75 Versailles 78 3 Nanterre 92 4 Suresnes 105234 BERNARD Louis Gestion … N° étudiant Nom prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Gestion 105237 THOMAS Alice Anglais 105239 Bernard 105250 MARIE Philippe Référence 2 3 4 code adresse ville Dép. 1 Paris 75 2 Versailles 78 3 Nanterre 92 4 Suresnes ville Dép. Paris 75 Versailles 78 Nanterre 92 Suresnes étudiant adresse Etudiants Hauts-de-Seine nom prénom ville BERNARD Louis Nanterre THOMAS Alice MARIE Philippe Suresnes
Produit Cartésien, restriction et projection : problèmes le nom, le prénom et le nom du département des étudiants, qui habitent le Haut-de-Seine. PROJECTION(Nom,prénom,ville) (RESTRICTION(référence=code adresse et département= 92) (PRODUIT(étudiant,adresse))) SELECT étudiant.nom, étudiant.prénom, adresse.ville FROM étudiant, adresse WHERE (adresse.[code adresse]=[référence]) AND (adresse.département=92) Relation intermédiaire : Construction d’enregistrements inutiles ! Relation finale : On ne peut pas rajouter d’enregistrements dans la relation finale ! Solution : la jointure.
Ici, le nom de la table est obligatoire SQL : Jointure SELECT étudiant.nom, étudiant.prénom,adresse.ville FROM adresse, étudiant WHERE (adresse.[code adresse]=[référence]) AND (adresse.département=92); Ici, le nom de la table est obligatoire La première clause de restriction est presque équivalente à une jointure SELECT étudiant.nom, étudiant.prénom, adresse.ville FROM étudiant INNER JOIN adresse ON étudiant.référence = adresse.[Code adresse] WHERE adresse.département = 92;
Jointure : détails des opérations SELECT étudiant.nom, étudiant.prénom, adresse.ville FROM étudiant INNER JOIN adresse ON étudiant.référence = adresse.[Code adresse] WHERE adresse.département = 92; N° étudiant nom prénom formation 105230 MARTIN Marie MMIA 105234 BERNARD Louis Gestion 105237 THOMAS Alice Anglais 105239 Bernard 105250 MARIE Philippe nom prénom formation MARTIN Marie MMIA BERNARD Louis Gestion THOMAS Alice Anglais Bernard MARIE Philippe Référence 2 3 4 code adresse ville Dép. 1 Paris 75 2 Versailles 78 3 Nanterre 92 4 Suresnes ville Dép. Paris 75 Versailles 78 Nanterre 92 Suresnes 105230 MARTIN Marie MMIA 2 Versailles 78 105234 BERNARD Louis Gestion 3 Nanterre 92 105237 THOMAS Alice Anglais 3 Nanterre 92 105239 MARTIN Bernard Anglais 2 Versailles 78 105250 MARIE Philippe Gestion 4 Suresnes 92