Introduction aux bases de données et au langage SQL

Documents pareils
Le langage SQL Rappels

1 Introduction et installation

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Bases de Données. Plan

Langage SQL : créer et interroger une base

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

Bases de données élémentaires Maude Manouvrier

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

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

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

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

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

Le Langage SQL version Oracle

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

MODE OPERATOIRE OPENOFFICE BASE

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

I4 : Bases de Données

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

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

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

Systèmes de Gestion de Bases de Données

MySQL / SQL EXEMPLES

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

Année Universitaire 2009/2010 Session 2 de Printemps

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

Création de Sous-Formulaires

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

Bases de données relationnelles

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

16H Cours / 18H TD / 20H TP

CONCEPTION Support de cours n 3 DE BASES DE DONNEES

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

INTRODUCTION : Données structurées et accès simplifié

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

Utiliser Access ou Excel pour gérer vos données

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

Les bases de données

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 Relationnelles. Le Modèle Relationnel

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

SQL Historique

Base de données relationnelle et requêtes SQL

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

PROGRAMME ESTIVAL DE REVISIONS ET DE LECTURE

TP Bases de données réparties

AGRÉGATION «ÉCONOMIE ET GESTION»

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

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

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

Le Langage De Description De Données(LDD)

Chapitre 1 : Introduction aux bases de données

Cours Base de données relationnelles. M. Boughanem, IUP STRI

Introduction aux bases de données. Généralités sur les bases de données. Fonctions d'un SGBD. Définitions. Indépendance par rapport aux traitements

Créer une base de données

Bases de données. PTSI Lycée Eiffel. 28 février 2014

I. MySQL : Serveur et SGBD

Les bases de données Page 1 / 8

Cours 4 : Agrégats et GROUP BY

Compte-rendu de projet de Système de gestion de base de données

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

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

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

Introduction aux Bases de Données 2004/2005

Modèle conceptuel : diagramme entité-association

XML par la pratique Bases indispensables, concepts et cas pratiques (3ième édition)

Optimisation SQL. Quelques règles de bases

Auguria_PCM Product & Combination Manager

Le stockage local de données en HTML5

Chapitre 07 Le modèle relationnel des données

FileMaker 13. Guide de référence SQL

Cours Modélisation et Programmation avec tableur

Olivier Mondet

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Introduction aux Bases de Données

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

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

MEGA Database Builder. Guide d utilisation

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Conception des bases de données : Modèle Entité-Association

Comment faire des étiquettes

INTRODUCTION AU DATA MINING

Entrepôt de données 1. Introduction

Réaliser une recherche avec le logiciel documentaire PMB

Éditeur Koninklijke Brill Langue(s) Multilingue

Historisation des données

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

Ecole Polytechnique de Louvain INGI Fichiers et bases de données

Proposer de nouveaux services aux Levalloisiens. Des ressources numériques, accessibles à distance.

Guide d'utilisation. OpenOffice Calc. AUTEUR INITIAL : VINCENT MEUNIER Publié sous licence Creative Commons

Interpréteur d algèbre relationnelle

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

Initiation à html et à la création d'un site web

1. Installation du Module

A QUOI SERVENT LES BASES DE DONNÉES?

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Cours: Les Jointures 1

Transcription:

et au langage SQL Ce document ne prétend en aucun cas remplacer les ouvrages ou manuels de référence disponibles en librairie ou sur Internet. Il s'agit simplement d'un aide-mémoire permettant une prise en main rapide et présentant les concepts généraux utiles. Le manuel de référence de MySQL est disponible en ligne à cette adresse : http://dev.mysql.com/doc/refman/5.5/en/index.html De très nombreux cours sur les bases de données relationnelles, en français, se trouvent très facilement sur la toile. Introduction Le responsable d'une bibliothèque peut être tenté de gérer les emprunts par un simple fichier sur un tableur. Les premières lignes de ce fichier peuvent ressembler à ce qui suit. index titre genre auteurn auteurp nom prénom tél date retour 1 Salambo Roman Flaubert Gustave Castel Claude 0612345112 12-août-10 23-août-10 2 93 Roman Hugo Victor Le Dray Camille 0422113827 17-sept.-10 03-oct.-10 3 Mme Bovary Littérature Flaubert Gustave Loutard Annie 064331282 01-nov.-10 02-déc.-10 1 Salambô Roman Flaubert Gustave Filatre Jean 0432168719 02-sept.-10 14-sept.-10 4 Aphorismes Littérature Wilde Oscar Castel Marie 0412324494 5 L immoraliste Roman Gide André Biraud Michèle 0434578612 05-févr.-11 3 2 Madame Bovary Quatrevingt-treize Roman Flaubert Gustave Castel Claude 0412324494 06-janv.-10 Roman Hugo Victor Filâtre Jean 0432168719 20-oct.-10 03-nov.-10 1 Salambo Littérature Flaubert gustave Ledray Camille 0422113627 16-sept.-10 27-sept.-10 Toutefois, de nombreuses difficultés se font très vite jour : l'orthographe des différents noms de famille peut manquer de cohérence (Le Dray ou Ledray), l'écriture des titres des ouvrages présente des problèmes analogues (Mme ou Madame Bovary), la recopie des numéros de téléphone peut être fastidieuse et donc erronée, et même l'entrée de la date peut poser problème (le deuxième emprunt de Mme Bovary date certainement du 6 janvier 2011 et non 2010). L'exemple ci-dessus est évidemment volontairement de taille très réduite. Mais on imagine facilement que, dans une situation réelle, le fichier produit puisse contenir des milliers de lignes. Il devient alors très coûteux (en temps de calcul) de retrouver les prêts de M. Castel, ou encore de http://creativecommons.org/licenses/by-sa/3.0/fr/ 1/16

chercher quels sont les ouvrages qui ont été prêtés depuis plus de 2 semaines. La conception «plate» du fichier de gestion de la bibliothèque impose une lecture séquentielle complète du tableau pour chaque interrogation. L'invention du modèle relationnel, fondé sur la définition de ce qu'on appelle aujourd'hui l'algèbre relationnelle, a permis de résoudre ces problèmes d'intégrité et de cohérence des données tout en assurant l'efficacité des recherches et interrogations des bases de données. C'est ainsi que les systèmes de gestion de bases de données (SGBD) actuels permettent l'utilisation de quantités considérables de données dans des bases partagées par de multiples utilisateurs et souvent disponibles en ligne. C'est ce modèle relationnel que nous allons présenter ici. 5 tables au lieu d'un fichier tableur Nous créons dans cet exemple 5 tables, qui contiennent l'ensemble de l'information utile, mais sous une forme beaucoup plus utilisable, comme nous allons le voir. Livres id auteur titre genre 1 1 Salambô 1 2 2 Quatre-vingt-treize 1 3 3 L immoraliste 1 4 4 Aphorismes 2 5 1 Madame Bovary 1 La table des Livres comporte une colonne identifiant le livre, puis une autre identifiant l'auteur par son numéro, et de même pour le genre. Les titres ne sont pas répétés, ce qui garantit la cohérence des données. Auteurs id nom prénom 1 Flaubert Gustave 2 Hugo Victor 3 Gide André 4 Wilde Oscar Les mêmes remarques s'appliquent à la table des Auteurs. http://creativecommons.org/licenses/by-sa/3.0/fr/ 2/16

Emprunts qui quoi date rendu 1 1 12-août-10 23-août-10 6 1 02-sept.-10 14-sept.-10 2 1 16-sept.-10 27-sept.-10 2 2 17-sept.-10 03-oct.-10 6 2 20-oct.-10 03-nov.-10 3 5 01-nov.-10 03-déc.-10 1 5 06-janv.-11 NULL 5 3 05-févr.-11 NULL La table des Emprunts permet de trouver le numéro de l'emprunteur et celui de l'ouvrage emprunté. La date de rendu est éventuellement NULL si l'ouvrage est encore dehors. Emprunteurs id nom prénom tél 1 Castel Claude 0612345112 2 Le Dray Camille 0422113827 3 Loutard Annie 0654331282 4 Castel Marie 0412324494 5 Biraud Michèle 0434578612 6 Filâtre Jean 0432168719 Là encore, la non répétition des abonnés de la bibliothèque permet de garantir la cohérence des données. id Genre genre 1 Roman 2 Littérature http://creativecommons.org/licenses/by-sa/3.0/fr/ 3/16

Vocabulaire du modèle relationnel Les noms des colonnes de chaque table s'appellent les attributs. Quand on formalise une table quelconque, on note en général les attributs A 1, A 2, A 3, A 4 À chaque attribut est associé son domaine, qui est l'ensemble des valeurs qu'il peut prendre : un entier, une chaîne de caractères, etc. On note Dom(A i ) le domaine de l'attribut A i. Chaque ligne s'appelle un n-uplet (ou tuple en anglais). C'est donc un élément de Dom(A 1 ) Dom(A 2 ) Dom(A 3 ) L'ensemble des n-uplets de la table s'appelle une relation, c'est donc une partie de Dom(A 1 ) Dom(A 2 ) Dom(A 3 ) La base de données est ainsi constituée d'un nombre fini de relations : une par table. On dit que la relation r suit le schéma de relation R(A 1,A 2,A 3, ). L'ensemble des schémas de relation s'appelle le schéma de la base de données. Notation : si t est le n-uplet (3, Loutard, Annie, 0654331282), on note t[id,prénom] = (3, Annie), t[nom]=(loutard) et ainsi de suite. Notions de clé On appelle super-clé d'une relation r un ensemble K d'attributs tel que t,u r, t [K ]=u[ K ] t=u. Une clé (ou encore clé candidate) d'une relation r est alors simplement une super-clé de taille minimale (pour l'inclusion). Une clé primaire est simplement un choix d'une clé candidate. Pour l'indiquer, on souligne les attributs correspondants dans la table. On la nomme souvent id, ce qui a été fait dans quatre des cinq tables ci-dessus. Pour la table Emprunts, c'est le triplet qui, quoi, date qui peut servir de clé primaire. Indiquer au système une clé primaire pour chaque table permet une indexation des données à l'aide de cette clé, ce qui renforce l'efficacité des procédures d'interrogation de la table. http://creativecommons.org/licenses/by-sa/3.0/fr/ 4/16

Notion de clé étrangère (foreign key) Considérons la table Emprunts : elle possède un attribut quoi, qui fait le lien avec l'attribut id de la table Livres. C'est ce qu'on appelle une clé étrangère. Cela permet d'assurer : qu'on ne peut pas insérer une ligne dans la table des Emprunts avec une valeur de l'attribut quoi qui n'existe pas dans la table des Livres ; qu'on ne peut pas supprimer une ligne de la table des Livres si au moins une ligne de la table des Emprunts a une valeur de l'attribut quoi qui corresponde à la ligne à supprimer. Voici le graphe des clés étrangères pour nos 5 tables. Notons que ce graphe permet de trouver un ordre logique de création des tables : on commencera par créer les tables Emprunteurs, Auteurs et Genre (d'où ne sortent aucune clé étrangère), puis la table Livres, et on terminera par la table Emprunts. http://creativecommons.org/licenses/by-sa/3.0/fr/ 5/16

Opérateurs de l'algèbre relationnelle Pour deux relations qui ont le même schéma, on peut bien entendu utiliser les opérateurs ensemblistes usuels d'union, intersection et différence. Mais on peut également définir de façon naturelle un produit cartésien. Si r a pour schéma R et s a pour schéma S, alors : r s={t,t [ R] r, t [S ] s}. Opérateurs spécifiques de l'algèbre relationnelle Nous en venons maintenant aux opérateurs spécifiques de l'algèbre relationnelle. La sélection (ou retriction), notée en général σ Une formule de sélection F est une formule construite à partir des constantes, des attributs, des fonctions usuelles, des opérateurs de comparaison, des connecteurs logiques (et, ou, non). Par exemple : nom= «Loutard» ET date < 1/1/2011. Étant donnée une formule de sélection F, on définit alors : σ F (r)={t r, t satisfait F }. Il s'agit donc de sélectionner les n-uplets qui satisfont telle ou telle condition. La projection, notée en général π Il s'agit ici de récupérer un sous-ensemble des composantes des n-uplets de la relation considérée. Plus formellement, si X est un sous-ensemble d'attributs du schéma d'une relation r, on a donc : Le renommage, noté en général ρ π X (r)={t [ X ], t r}. Il s'agit tout simplement de renommer un attribut (cela pourra en particulier servir lors de jointures cf. plus loin pour utiliser deux tables dont certains attributs portent le même nom alors qu'ils recouvrent des entités différentes). Si R est le schéma de la relation r, si A est un attribut du schéma, mais pas B, on peut renommer A en B : rho A B (r)={t, u r,t [ A]=u[B] et t[c]=u[c ] si C A}. http://creativecommons.org/licenses/by-sa/3.0/fr/ 6/16

La jointure, notée en général Étant donnée une formule de sélection F et deux relations r et s de schéma respectifs R et S, on définit : r F s={t,t [ R] r, t [S ] s, t satisfait F }. On peut remarquer que l'on obtient le même résultat avec σ F (r s). La division, notée en général C'est un peu l'opération inverse du produit cartésien : on considère une relation r de schéma R( A 1, A 2,..., A m, A m+1,..., A n ) et une relation s de schéma S ( A m+1,..., A n ). On définit alors : L'agrégation, notée en général ɣ r s={t, t ' s,(t, t ') r}. On considère un jeu X d'attributs d'une relation r. On rassemble les n-uplets t de r qui ont les mêmes valeurs sur les attributs de X : on obtient, pour chaque valeur commune t[x], un sous-ensemble de n-uplets. Pour chacun de ces sous-ensembles, on calcule ( f 1 ( A i 1 ), f 2 ( A i2 ), f 3 (A i 3 ),...) où les f k sont des fonctions à choisir parmi AVG (moyenne), COUNT, SUM, MAX, MIN et où les A i k sont des attributs qui figurent ou non dans X. On verra des exemples plus bas : le langage SQL utilise les mots clefs GROUP BY et HAVING pour cette opération. http://creativecommons.org/licenses/by-sa/3.0/fr/ 7/16

Le langage SQL Le langage SQL permet de traduire les expressions de l'algèbre relationnelle, avec une syntaxe très simple et un jeu réduit de mots clefs. Projection SQL nom, prénom Auteurs ; Algèbre relationnelle π nom, prénom (Auteurs) Diagramme Alors que l'algèbre relationnelle travaille sur de vrais ensembles au sens mathématique, SQL peut renvoyer des multi-ensembles : c'est-à-dire que la même valeur peut être répétée. Pour éviter ce comportement, on utilise une variante de la syntaxe, à l'aide du mot clef DISTINCT. DISTINCT SQL nom Emprunteurs ; Algèbre relationnelle π nom (Emprunteurs) http://creativecommons.org/licenses/by-sa/3.0/fr/ 8/16

Sélection * SQL Livres genre = «Littérature»; Algèbre relationnelle σ genre=«littérature» (Livres) Diagramme http://creativecommons.org/licenses/by-sa/3.0/fr/ 9/16

Sélection et projection titre SQL Livres genre = «Littérature»; Algèbre relationnelle σ genre=«littérature» (Livres) Diagramme http://creativecommons.org/licenses/by-sa/3.0/fr/ 10/16

Jointure Voici un exemple plus compliqué, pour illustrer la jointure. titre (Livres JOIN Emprunts SQL ON Livres.id = Emprunts.quoi) JOIN Emprunteurs ON Emprunteurs.id = qui Emprunteurs.nom = «Biraud»; Diagramme http://creativecommons.org/licenses/by-sa/3.0/fr/ 11/16

Exercices Quels sont les titres des livres empruntés par Mme Loutard? Livres.titre (Livres JOIN Emprunts ON Livres.id = Emprunts.quoi) JOIN Emprunteurs ON Emprunts.qui = Emprunteurs.id Emprunteurs.nom LIKE "Loutard" ; Qui a emprunté au moins deux livres? nom, prénom Emprunts JOIN Emprunteurs ON Emprunts.qui = Emprunteurs.id GROUP BY nom, prénom HAVING COUNT(*) > 1 ORDER BY nom, prénom ; La clause ORDER BY permet de rendre les résultats rangés en ordre alphabétique, d'abord des noms, puis des prénoms. La clause GROUP BY permet de préparer l'agrégation en spécifiant les critères de définition des sous-ensembles : on regroupe ici par personne concernée. HAVING fait un peu la même chose que, mais permet d'utiliser les fonctions d'agrégation, en l'occurence ici COUNT qui compte le nombre d'éléments de chaque sous-ensemble (donc le nombre de prêts par personne, ici). http://creativecommons.org/licenses/by-sa/3.0/fr/ 12/16

Qui a encore un livre emprunté non rendu?de quel livre s'agit-il? E.nom, E.prénom, L.titre, A.nom as "auteur" (Emprunts as P JOIN Emprunteurs as E JOIN ON P.qui = E.id) (Livres as L JOIN Auteurs as A ON L.auteur = A.id) ON P.quoi = L.id P.rendu is NULL ; Remarque : on ne peut pas écrire = NULL, il faut utiliser is NULL, à cause de conventions particulières sur la constante NULL. Le mot clef AS permet de renommer un attribut pour préparer l'affichage du résultat, mais aussi de donner un synonyme à une table, pour alléger l'écriture du code SQL. Les mots clefs peuvent être écrits en majuscules comme en minuscules. Qui a encore un livre emprunté non rendu depuis au moins deux semaines?de quels livres s'agitil? E.nom, E.prénom, L.titre, A.nom as "auteur", DATEDIFF(NOW(), P.date) as "durée" (Emprunts as P JOIN Emprunteurs as E JOIN ON P.qui = E.id) (Livres as L JOIN Auteurs as A ON L.auteur = A.id) ON P.quoi = L.id DATEDIFF(NOW(),P.date) > 14 AND P.RENDU is NULL ORDER BY DATEDIFF(NOW(),P.date) DESC ; La fonction NOW renvoie la date d'aujourdh'ui. La fonction DATEDIFF permet de calculer le nombre de jours entre deux dates. Le mot clef DESC permet d'avoir un ordre inverse (décroissant). http://creativecommons.org/licenses/by-sa/3.0/fr/ 13/16

Complément : sélections emboîtées Quels sont les employés sur le même site que Martin? Nom, Prénom Employés Site = ( Site Employés Nom = "Martin" ) ; C'est correct car le interne renvoie une seule valeur. http://creativecommons.org/licenses/by-sa/3.0/fr/ 14/16

Quels sont les employés ayant le même poste que Faroux et un salaire au moins égal à celui de Barcolle? Nom, Prénom, Salaire Employés Poste = ( Poste Employés Nom = "Faroux" ) AND Salaire >= ( Salaire Employés Nom = "Barcolle" ; C'est correct car chaque interne renvoie une seule valeur. Quels sont les employés gagnant plus que tous les employés des Bouches-du-Rhône? Nom, Prénom, Salaire Employés Salaire > ALL ( Salaire Employés E JOIN Sites S ON E.Site = S.id Département = 13 ) ; Il existe aussi bien > ALL, > ANY. = ANY ( ) est équivalent à IN ( )!= ALL ( ) est équivalent à NOT IN (...) http://creativecommons.org/licenses/by-sa/3.0/fr/ 15/16

Mises à jour Ce document est mis à jour régulièrement. La dernière version est disponible à cette adresse, où on trouvera également d'autres documents utiles : http://goo.gl/avv5t Auteur Laurent Chéno, laurent.cheno@education.gouv.fr Licence d'utilisation de ce document CC BY-SA 3.0 FR http://creativecommons.org/licenses/by-sa/3.0/fr/ http://creativecommons.org/licenses/by-sa/3.0/fr/ 16/16