150 likes | 316 Views
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
E N D
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
En-tête de colonne : le nom du champ On parle d’ « enregistrement » Chaque « ligne » est un n-uplet de la relation On parle de « champ » Les valeurs d’une « colonne » appartiennent à un même domaine Relations tables A = {vert, jaune, rouge}, B = {allumé, éteint}, C = {(vert, allumé),(vert, éteint), (rouge, allumé)} Table B Table C
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.
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) TableR1•TableR2 Deux champs portent le même nom dans TableR1 et TableR2 : Différenciés par le nom de la table associé SQL SELECT * FROM TableR1,TableR2
SQL : Projection étudiant le nom et prénom de tous les étudiants ? étudiant-proj PROJECTION (nom,prénom)(étudiant) SQL SELECT nom, prénom FROM étudiant;
SQL : Restriction étudiant toutes les informations sur les étudiants Nanterrois ? RESTRICTION (adresse = Nanterre)(étudiant) Étudiant-nanterrois SQL SELECT * FROM étudiant WHERE adresse = "Nanterre";
SQL : Restriction et projection étudiant le nom et prénom des étudiants Nanterrois. PROJECTION (Nom,prénom)(RESTRICTION(adresse = Nanterre)(étudiant )) SQL identités étudiants nanterrois SELECT nom, prénom FROM étudiant WHERE résidence = "Nanterre";
SQL : Produit Cartésien, restriction et projection étudiant adresse 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);
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); étudiant adresse Etudiants Hauts-de-Seine
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.
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 à unejointure 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;