Conception de bases de données relationnelles

Documents pareils
SQL Historique

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

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

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

Langage SQL : créer et interroger une base

Les bases de données

Olivier Mondet

Le Langage De Description De Données(LDD)

Le Langage SQL version Oracle

Le langage SQL (première partie) c Olivier Caron

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

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

Pour les débutants. langage de définition des données

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

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

Le langage SQL Rappels

Bases de données relationnelles

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

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

1 Introduction et installation

16H Cours / 18H TD / 20H TP

Création et Gestion des tables

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

CREATION WEB DYNAMIQUE

LE LANGAGE SQL2 1. INTRODUCTION

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

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

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Vincent Augusto

MySQL / SQL EXEMPLES

Cours Bases de données 2ème année IUT

Historisation des données

Information utiles. webpage : Google+ : digiusto/

Bases de Données Avancées

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

TP Contraintes - Triggers

Administration des bases de données. Jean-Yves Antoine

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Bases de données et sites WEB

1/ Présentation de SQL Server :

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

I. MySQL : Serveur et SGBD

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

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

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

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

Les BASES de DONNEES dans WampServer

TP3 : Creation de tables 1 seance

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

OpenPaaS Le réseau social d'entreprise

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

TP Bases de données réparties

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Compétences Business Objects

Bases de Données. Plan

Introduction aux Bases de Données 2004/2005

Systèmes de Gestion de Bases de Données

Partie II Cours 3 (suite) : Sécurité de bases de données

FileMaker 13. Guide de référence SQL

Intégrité des données

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

Structured Query Language

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

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

Intégrité sémantique dans les bases de données relationnelles

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

Bases de données relationnelles & SQL

Gestion des utilisateurs et de leurs droits

A QUOI SERVENT LES BASES DE DONNÉES?

Auto-évaluation Oracle: cours de base

1 Position du problème

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

Mejdi BLAGHGI & Anis ASSÈS

Mysql. Les requêtes préparées Prepared statements

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Présentation du module Base de données spatio-temporelles

I4 : Bases de Données

Bases de données élémentaires Maude Manouvrier

MODE OPERATOIRE OPENOFFICE BASE

Bases de données et sites WEB Licence d informatique LI345

Master Exploration Informatique des données DataWareHouse

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

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

Cours: Administration d'une Base de Données

Optimisation SQL. Quelques règles de bases

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 Outils de gestion

UML et les Bases de Données

Comprendre les bases de données

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

Bases de données - Modèle relationnel

Cours SGBD 1. Concepts et langages des Bases de Données Relationnelles

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

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Transcription:

Conception de bases de données relationnelles Langage SQL Marie Szafranski 2017-2018 ensiie 1 2017-2018 ensiie 1 Généralités Généralités SQL (Structured Query Language) SQL (Structured Query Language) Langage déclaratif pour la manipulation des SGBD(R) interface standard pour accéder aux BD Langage de Définition de Données Création, modification, suppression d objets [LDD / DDL] tables, vues, etc. Langage de Contrôle de Données [LCD / DCL] Gestion des droits sur les objets création des utilisateurs, droits et rôles, etc. Langage de Manipulation de Données [LMD / DML] Recherche, insertion, mise à jour et suppression de données 2017-2018 ensiie 2 2017-2018 ensiie 2

Généralités Généralités Origine du SQL Origine du SQL Fondé sur le modèle relationnel de Codd et l algèbre relationnelle associée [Codd, 70, IBM] Les prédécesseurs de SQL IBM Sequel Structured English QUEry Language IBM DB2 [Boyce & Chamberlin, 77, IBM] La naissance du standard SQL SQL [Relationnal Software (Oracle), 79] SQL-86 [ANSI (États Unis), 86 ; ISO, 87] 2017-2018 ensiie 3 2017-2018 ensiie 3 Généralités Généralités Évolution du SQL Évolution du SQL SQL-86 SQL-89 (ou SQL-1) version originale améliorations mineures SQL-92 (ou SQL-2) extensions majeures (types de données, opérations relationnelles, LDD, transactions, etc.) SQL-99 (ou SQL-3) SQL-2003 introduction du PSM (procédures stockées) introduction du RO extensions XML SQL-2006 SQL-2008 SQL-2011 améliorations mineures (XML) améliorations mineures (RO) améliorations mineures (XML, RO, définition des schémas) 2017-2018 ensiie 4 2017-2018 ensiie 4

Généralités Généralités Super exemple : fil d Ariane Super exemple : fil d ariane Super heros (SH) #nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite 2017-2018 ensiie 5 2017-2018 ensiie 5 Création et modification de tables (attributs, types, etc.) Définition des contraintes d intégrité (clés primaires, candidates, etc.) Définition des contraintes référentielles (clés étrangères) Création de vues Suppression d objets (tables, vues, attributs, domaines, etc.) 2017-2018 ensiie 6 2017-2018 ensiie 6

Types de données Types de données Types numériques INTEGER, TINYINT, SMALLINT, LONGINT DECIMAL[(s, t)], NUMERIC FLOAT[(s, t)] Types chaînes de caractères CHAR(l), VARCHAR(l) TEXT Types date DATE ( AAA-MM-JJ ), DATETIME( AAAA-MM-JJ HH:MM:SS ) YEAR, MONTH, TIME... Autres types RTFM! Monétaires, énumérés (ENUM), séquences (SEQUENCE/SERIAL) Valeur NULL 0, L fait partie du domaine 2017-2018 ensiie 7 2017-2018 ensiie 7 Création de tables Création de tables Définition d un schéma de relation en intension Spécification des attributs et des domaines CREATE TABLE <nom de table>( <nom attribut 1> <type attribut 1> [NOT NULL],. <nom attribut n> <type attribut n> [NOT NULL]); CREATE TABLE Super heros( nom super VARCHAR(20), nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(3)); 2017-2018 ensiie 8 2017-2018 ensiie 8

Contraintes d intégrité Contraintes d intégrité Définition et contrôle de la cohérence d une (ensemble de) donnée(s) création des tables Contrainte sur un attribut Clé primaire Unicité Intégrité référentielle Validité (restriction de domaine) Contrainte sur une table (Après la définition d un attribut) PRIMARY KEY UNIQUE REFERENCES <table> (<attribut(s)>) CHECK (<condition>) (Après la définition de tous les attributs) Clé primaire Unicité Intégrité référentielle PRIMARY KEY (<liste d attributs>) UNIQUE (liste d attributs) FOREIGN KEY (<liste d attributs>) REFERENCES <table> (<liste d attributs>) Validité (restriction de domaine) CHECK (<condition>) 2017-2018 ensiie 9 2017-2018 ensiie 9 Contraintes d intégrité (Super exemple) Contraintes d intégrité (Super exemple) Contrainte sur un attribut CREATE TABLE Super heros( nom super VARCHAR(20) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(2) (CHECK age BETWEEN 1 AND 65)); -- UNIQUE NOT NULL Contrainte sur une table CREATE TABLE Super heros pouvoirs( super VARCHAR(20), pouvoir VARCHAR(20), CONSTRAINT pk SHP PRIMARY KEY (super, pouvoir), FOREIGN KEY (super) REFERENCES Super heros (super), FOREIGN KEY (pouvoir) REFERENCES Super pouvoirs (nom pouvoir)); 2017-2018 ensiie 10 2017-2018 ensiie 10

Contraintes d intégrité (Autre exemple) Contraintes d intégrité (Autre exemple) CREATE TABLE Personne( n ss CHAR(13) PRIMARY KEY, nom VARCHAR(25) NOT NULL, prenom VARCHAR(25) NOT NULL, age INTEGER(3) CHECK (age BETWEEN 18 AND 65), mariage CHAR(13) REFERENCES Personne(n ss), code postal INTEGER(5), pays VARCHAR(50), CONSTRAINT ck Personne UNIQUE (nom, prenom), CONSTRAINT fk Personne Pays FOREIGN KEY (code postal, pays) REFERENCES Adresse (c p, pays)); CREATE TABLE Adresse( c p INTEGER(5) NOT NULL, pays VARCHAR(50) NOT NULL, initiale CHAR(1) CHECK (initiale = LEFT(pays, 1)), PRIMARY KEY (c p, pays)); 2017-2018 ensiie 11 2017-2018 ensiie 11 Contraintes d intégrité référentielles (Portée) Contraintes d intégrité référentielles (Portée) Suppression ou mises à jour sur les clés étrangères ON DELETE/UPDATE CASCADE ON DELETE/UPDATE RESTRICT 2017-2018 ensiie 12 2017-2018 ensiie 12

Modification de tables Modification de tables Modification d attributs ou de contraintes préalablement définis ALTER TABLE <table> ADD COLUMN (<définition de l attribut>); ALTER TABLE <table> DROP COLUMN (<nom de l attribut>); -- Ajout d un attribut -- Suppression d un attribut -- Modification d un attribut ALTER TABLE <table> ALTER COLUMN (<redéfinition de l attribut>); -- Ajout d une contrainte ALTER TABLE <table> ADD CONSTRAINT (<définition de la contrainte>);... 2017-2018 ensiie 13 2017-2018 ensiie 13 Modification de tables (Super exemple) Modification de tables Super exemple Modification d attributs ou de contraintes préalablement définis CREATE TABLE Super heros( nom super VARCHAR(20) PRIMARY KEY, nom civil VARCHAR(20), prenom VARCHAR(20), age INTEGER(3)); -- table initiale -- modifications ALTER TABLE Super heros ALTER COLUMN nom super TYPE VARCHAR(50); ALTER TABLE Super heros ADD CONSTRAINT u n UNIQUE (nom civil, prenom); ALTER TABLE Super heros DROP COLUMN age; CREATE TABLE Super heros( nom super VARCHAR(50) PRIMARY KEY, nom civil VARCHAR(50), prenom VARCHAR(20), CONSTRAINT u n UNIQUE (nom civil, prenom); -- table modifiée 2017-2018 ensiie 14 2017-2018 ensiie 14

Modification de tables (Remarques) Modification de tables Remarques Modification d attributs ou de contraintes préalablement définis Modification d une table vide sans ALTER Suppression de la table (DROP) et création avec les modifications Plus compliqué si la table est référencée Modification d une table non vide sans ALTER Copie des données dans une table temporaire de même schéma Suppression et création d une table modifiée avec le nouveau schéma Copie des données depuis la table temporaire vers la table modifiée 2017-2018 ensiie 15 2017-2018 ensiie 15 Création de vues Création de vues Définition logique d une relation sans stockage de données Requête stockée (définition) ouvrant une fenêtre dynamique sur les données (résultat) Implantation du concept de schéma externe d un MCD CREATE VIEW <nom de vue> <liste d attributs> AS <spécification de question>; -- nombre et types identiques que dessus CREATE VIEW Super age (super, age) AS SELECT (nom super, age) FROM Super heros; Remarques Lecture d une vue Source d une vue Restitution de l héritage pour tous (modulo les droits accordés) une relation, une autre vue 2017-2018 ensiie 16 2017-2018 ensiie 16

Suppression d objets Suppression d objets Suppression d une relation ou d une vue DROP TABLE <table>; DROP VIEW <table>; DROP TABLE Parvenus; DROP VIEW Parvenus; --! tables référencées 2017-2018 ensiie 17 2017-2018 ensiie 17 Super exemple : fil d Ariane Super exemple : fil d ariane Super heros (SH) #nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite 2017-2018 ensiie 18 2017-2018 ensiie 18

Sélection (Syntaxe) Sélection (Syntaxe) (Produit cartésien + restriction) ou jointure + projection Expression basique d une requête avec SQL SELECT <liste d attributs projetés> FROM <liste de relations> WHERE <condition>; SELECT : sous-ensemble des attributs projetés schéma de la requête FROM : relations des attributs utilisés en projection, en restriction ou en jointure WHERE : conditions sur les attributs restriction ou jointure si exprimée ici 2017-2018 ensiie 19 2017-2018 ensiie 19 Sélection Sélection SELECT SELECT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 SELECT nom super, age FROM Super heros WHERE nom civil = Parr ; SELECT nom super, age FROM Super heros WHERE nom civil = Parr ; projection 2017-2018 ensiie 20 2017-2018 ensiie 20

Sélection Sélection SELECT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 SELECT Super heros.nom super FROM Super heros WHERE nom civil = Parr ; projection restriction 2017-2018 ensiie 20 2017-2018 ensiie 20 Sélection Sélection SELECT DISTINCT SELECT DISTINCT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Frozone Best Lucius 36 SELECT nom civil, age FROM Super heros WHERE age = 36; projection restriction SELECT nom civil, age FROM Super heros WHERE age = 36; projection restriction 2017-2018 ensiie 21 2017-2018 ensiie 21

Sélection Sélection SELECT DISTINCT Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Frozone Best Lucius 36 SELECT DISTINCT nom civil, age FROM Super heros WHERE age = 36; projection restriction 2017-2018 ensiie 21 2017-2018 ensiie 21 Sélection Sélection SELECT AS SELECT AS Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super heros nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Frozone Best Lucius 36 SELECT <nom attribut> AS <nouveau nom attribut> FROM <liste de relations>; SELECT <nom attribut> AS <nouveau nom attribut> FROM <liste de relations>; SELECT nom super, age FROM Super heros WHERE age = 36; 2017-2018 ensiie 22 2017-2018 ensiie 22

Sélection Sélection SELECT AS Super heros Liste de Supers nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Frozone Best Lucius 36 SELECT <nom attribut> AS <nouveau nom attribut> FROM <liste de relations>; SELECT nom super AS Liste de Supers, age FROM Super heros WHERE age = 36; 2017-2018 ensiie 22 2017-2018 ensiie 22 Sélection (Synthèse) Sélection (synthèse) Projeter l ensemble des attributs SELECT * Éliminer les doublons SELECT DISTINCT Renommer les attributs SELECT a AS a Préfixer un attribut par une relation en cas d ambiguïté SELECT Relation.attribut 2017-2018 ensiie 23 2017-2018 ensiie 23

Opérateurs de comparaison et opérateurs logiques Opérateurs de comparaison et opérateurs logiques Restriction : condition exprimée dans la clause WHERE (résultat booléen) Opérateurs de comparaison A = C, A <> C, A < C, A > C, A <= C, A >= C A BETWEEN C1 AND C2 A LIKE chaine joker : %, A IN (C1, C2,...) A IS NULL Opérateurs logiques OR, AND, NOT condition élémentaire := attribut <opérateur de comparaison> constante condition := condition <opérateur logique> condition condition élém. 2017-2018 ensiie 24 2017-2018 ensiie 24 Expression du produit cartésien (Syntaxe) Expression du produit cartésien (Syntaxe) Produit cartésien : opération binaire R1 R2 Schéma : juxtaposition des schémas de R1 et R2 Résultat : combinaison des tuples de R1 et R2 Algèbre relationnelle R3 = Produit(R1, R2) -- = Produit(R2, R1) -- (modulo l ordre des attributs dans le schéma) SQL SELECT * FROM R1, R2; 2017-2018 ensiie 25 2017-2018 ensiie 25

Expression du produit cartésien Expression du produit cartésien Super heros (SH) nom super nom civil prenom age M. Indestructible Parr Robert 36 Elastic girl Parr Helene 36 Violette Parr Violette 16 Fleche Parr Roger 12 Jack-Jack Parr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Schéma SH SP? (nom super, nom civil, prenom, age, nom pouvoir) Nombre de tuples? 6 6 Expression? SELECT * FROM SH, SP; 2017-2018 ensiie 26 2017-2018 ensiie 26 Expression d une jointure (Syntaxe) Expression d une jointure (Syntaxe) Jointure : opération binaire sur R1 et R2 Jointure : condition C sur attributs de R1 et R2 de mêmes domaines Schéma : juxtaposition de R1 et R2 Résultat : concaténation des tuples de R1 et de R2 vérifiant C Algèbre relationnelle Jointure(R1, R2, R1.X <operateur de comparaison> R2.Y) SQL SELECT * FROM R1 [INNER] JOIN R2 ON R1.X <op. comparaison> R2.Y; -- SQL-92 SELECT * FROM R1, R2 WHERE R1.X <op. comparaison> R2.Y; -- SQL-89 restriction sur un produit cartésien 2017-2018 ensiie 27 2017-2018 ensiie 27

Expression d une jointure Expression d une jointure Super heros (SH) Super heros pouvoirs (SHP) Super heros (SH) Super heros pouvoirs (SHP) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite SELECT nom super, pouvoir, age FROM Super heros INNER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 28 nom super pouvoir age Indestructible Resistance 36 Elastic girl Elasticite 36 Frozone Champ de glace 36 Violette Invisibilite 16 Violette Champ de force 16 Fleche Rapidite 12 2017-2018 ensiie 28 Expression d une jointure Expression d une jointure Super heros (SH) Super heros pouvoirs (SHP) Super heros (SH) Super heros pouvoirs (SHP) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite SELECT heros, pouvoir, age FROM Super heros INNER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 28 heros pouvoir age Indestructible Resistance 36 Elastic girl Elasticite 36 Frozone Champ de glace 36 Violette Invisibilite 16 Violette Champ de force 16 Fleche Rapidite 12 2017-2018 ensiie 28

Expression d une jointure Expression d une jointure 2017-2018 ensiie 28 2017-2018 ensiie 28 Expression d une jointure (Compléments) Expression d une jointure (Compléments) Jointure naturelle SQL Jointure naturelle SQL Jointure portant sur des attributs de mêmes noms Jointure portant sur des attributs de mêmes noms Super heros(nom super, nom civil, prenom civil, age) Super heros pouvoirs(nom super, pouvoirs) Super heros(nom super, nom civil, prenom civil, age) Super heros pouvoirs(nom super, pouvoirs) -- SQL-92 (nom super, nom civil, prenom civil, age, pouvoirs) SELECT * FROM Super heros NATURAL JOIN Super heros pouvoirs ; -- SQL-92 (nom super, nom civil, prenom civil, age, pouvoirs) SELECT * FROM Super heros NATURAL JOIN Super heros pouvoirs ; -- SQL-89 (nom civil, prenom civil, age, nom super, nom super, pouvoirs) SELECT * FROM Super heros SH, Super heros pouvoirs SHP WHERE SH.nom super = SHP.nom super; 2017-2018 ensiie 29 2017-2018 ensiie 29

Expression d une jointure (Compléments) Expression d une jointure (Compléments) Jointure naturelle SQL Jointure portant sur des attributs de mêmes noms Super heros(nom super, nom civil, prenom civil, age) Super heros pouvoirs(nom super, pouvoirs) -- SQL-92 SELECT * FROM Super heros [INNER] JOIN Super heros pouvoirs USING (...); Restriction quand plusieurs attributs de m^eme nom 2017-2018 ensiie 29 2017-2018 ensiie 29 Expression d une jointure (Compléments) Expression d une jointure (Compléments) Auto jointure SQL Jointure portant sur la même relation SELECT * FROM R1 <alias1>, R1 <alias2> WHERE <alias1>.attribut = <alias2>.attribut; -- Tous les Supers appartenant à une m^eme famille SELECT nom civil, prenom FROM Super heros SH1, Super heros SH2 WHERE SH1.nom civil = SH2.nom civil; 2017-2018 ensiie 30 2017-2018 ensiie 30

Expression d une jointure externe (Syntaxe) Expression d une jointure externe (Syntaxe) Jointure externe : opération binaire sur R1 et R2 Schéma : juxtaposition de R1 et R2 Résultat : tuples de la jointure de R1 et R2 + tuples de R1 (ou R2) exclus Algèbre relationnelle JointureExterne(R1, R2, R1.X <op. comparaison> R2.Y) SQL SELECT * FROM R1 OUTER JOIN R2 ON R1.X <op. comparaison> R2.Y; SELECT * -- JointureExterneGauche(R1, R2, R1.C = R2.X) FROM R1 LEFT OUTER JOIN R2 ON R1.X <op. comparaison> R2.Y; SELECT * -- JointureExterneDroite(R2, R1, R1.C = R2.X) FROM R2 RIGHT OUTER JOIN R1 ON R1.X <op. comparaison> R2.Y; 2017-2018 ensiie 31 2017-2018 ensiie 31 Expression d une jointure externe Expression d une jointure externe Super heros (SH) Super heros pouvoirs (SHP) Super heros (SH) Super heros pouvoirs (SHP) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack #heros=>sh Indestructible Elastic girl Frozone Violette Violette Fleche #pouvoir=>sp Resistance Elasticite Champ de glace Invisibilite Champ de force Rapidite SELECT nom super, pouvoir, age FROM Super heros OUTER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 32 nom super age pouvoir Indestructible 36 Resistance Elastic girl 36 Elasticite Frozone 36 Champ de glace Violette 16 Invisibilite Violette 16 Champ de force Fleche 12 Rapidite Jack-Jack 2 NULL 2017-2018 ensiie 32

Expression d une jointure externe Expression d une jointure externe Super heros (SH) age #nom super 36 Indestructible 36 Elastic girl 36 Frozone 16 Violette 12 Fleche 2 Jack-Jack Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite SELECT nom super, pouvoir, age FROM Super heros OUTER JOIN Super heros pouvoirs ON nom super = heros; = SELECT nom super, pouvoir, age FROM Super heros LEFT OUTER JOIN Super heros pouvoirs ON nom super = heros; 2017-2018 ensiie 32 2017-2018 ensiie 32 Expression d une jointure externe (Exemple complet) Expression d une jointure externe (Exemple complet) #A B C=>R2 1 Alpha 10 2 Bravo 10 3 Charlie 20 4 Delta R1 R2 #X Y 10 Echo 20 Fox 30 Golf 2017-2018 ensiie 33 2017-2018 ensiie 33

Expression d une jointure externe (Synthèse) Expression d une jointure externe (Synthèse) Équivalence entre et R1 LEFT OUTER JOIN R2 R2 RIGHT OUTER JOIN R1 LEFT OUTER JOIN : relation issue d une asso. 0..1 : (0..)n sélection de tous les tuples du côté 1 (ayant une référence ou pas) RIGHT OUTER JOIN : relation issue d une asso. (0..)1 : 0..n sélection de tous les tuples du côté n (référencés ou pas) Utile pour trouver les tuples non référencés par une clé étrangère 2017-2018 ensiie 34 2017-2018 ensiie 34 Opérateurs ensemblistes Opérateurs ensemblistes Union SQL SELECT * FROM R1 UNION SELECT * FROM R2; Intersection SQL SELECT * FROM R1 INTERSECT SELECT * FROM R2; Différence SQL SELECT * FROM R1 EXCEPT SELECT * FROM R2; 2017-2018 ensiie 35 2017-2018 ensiie 35

Tris Tris Résultat : en fonction des valeurs des attributs retournés SQL SELECT <liste d attributs> FROM <liste de relations> WHERE <conditions> ORDER BY <liste de (noms numéro dans la projection) d attributs à ordonner>[asc, DESC]; SELECT nom super, prenom, age FROM Super heros WHERE age >= 16 ORDER BY nom super, age1, 3 DESC; 2017-2018 ensiie 35 2017-2018 ensiie 35 Fonctions de calcul Fonctions de calcul Fonction de calcul : dans une relation Fonction de calcul : sur l ensemble de valeurs d un attribut Résultat : une valeur atomique unique (entier, chaine, date, etc.) count(relation, attribut) nombre de valeurs non nulles d un attribut pour tous les tuples sum(relation, attribut) et avg(relation, attribut) somme (resp.moyenne) des valeurs d un attribut numérique min(relation, attribut) et max(relation, attribut) plus petite (resp. grande) valeur d un attribut parmi les tuples 2017-2018 ensiie 35 2017-2018 ensiie 35

Fonctions de calcul (Syntaxe et exemple) Fonctions de calcul (Syntaxe et exemple) SQL SELECT <liste de fonctions de calcul> FROM <liste de relations> WHERE <conditions à appliquer avant le calcul>; SELECT min(age), max(age), avg(age) FROM Super heros WHERE nom civil = Parr ; Remarques Nombre de tuples d une relation count sur une clé primaire Fonction de calcul d un agrégat clause ORDER BY ou HAVING Fonction de calcul d un agrégat jamais dans une clause WHERE 2017-2018 ensiie 36 2017-2018 ensiie 36 Agrégat Agrégat Agrégat : partitionnement horizontal d une relation en sous-relations Agrégat : un ou plusieurs attributs de partitionnement Agrégat : + fonction de calcul sur chaque attribut des sous-relations Agrégat : partitionnement horizontal d une relation en sous-relations Agrégat : un ou plusieurs attributs de partitionnement Agrégat : + fonction de calcul sur chaque attribut des sous-relations SQL SELECT <liste d attributs de partitionnement et de fonctions de calcul> FROM <liste de relations> WHERE <conditions à appliquer avant le calcul de l agrégat> GROUP BY <liste ordonnée d attributs de partitionnement> HAVING <condition sur les fonctions de calcul>; SELECT pouvoir, avg(age) FROM Super heros INNER JOIN Super heros pouvoir ON nom super = heros GROUP BY pouvoir HAVING avg(age) > 10; 2017-2018 ensiie 37 SQL SELECT <liste d attributs de partitionnement et de fonctions de calcul> FROM <liste de relations> WHERE <conditions à appliquer avant le calcul de l agrégat> GROUP BY <liste ordonnée d attributs de partitionnement> HAVING <condition sur les fonctions de calcul>; SELECT Societe.nom, avg(personne.age) FROM Societe INNER JOIN Personne ON Personne.societe = Societe.nom WHERE Societe.nom LIKE A% GROUP BY Societe.nom HAVING count(num ss) >10; 2017-2018 ensiie 37

Agrégat (Remarques) Agrégat (Remarques) Restriction : avant le calcul de l agrégat (clause WHERE) Restriction : après le calcul de l agrégat (clause HAVING) Projection : attributs dans la clause SELECT sans fonction de calcul Projection : également dans la clause GROUP BY Projection : inverse vrai dans certains SGBDR (Oracle par exemple) Fonction de calcul si GROUP BY : dans les clauses SELECT ou HAVING 2017-2018 ensiie 38 2017-2018 ensiie 38 Requêtes imbriquées Requêtes imbriquées Requêtes imbriquées : recherches plus complexes Requêtes imbriquées : impossibles à écrire en algèbre relationnelle Requêtes imbriquées : sous-requête est une clause FROM ou WHERE SELECT <liste d attributs> FROM <liste de relations> WHERE <sous-requ^ete>; SELECT nom civil, prenom FROM Super heros WHERE nom super IN (SELECT heros FROM Super heros pouvoirs); SELECT nom FROM Chercheur WHERE nom IN (SELECT nom FROM Enseignant); MAL MAL 2017-2018 ensiie 39 2017-2018 ensiie 39

Sous-requête d existence IN Sous-requête d existence IN Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); SELECT C.nom FROM Chercheur C WHERE C.universite IN ( SELECT U.nom FROM Universite U WHERE U.ville = Paris ); -- une colonne SELECT num ss FROM Chercheur WHERE (nom, prenom, age) IN ( SELECT nom, prenom, age FROM Enseignant); -- plusieurs colonnes 2017-2018 ensiie 40 2017-2018 ensiie 40 Sous-requête d existence IN Sous-requête d existence IN Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); Présence de la projection d un tuple de la requête dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> IN (<sous-requ^ete>); SELECT nom FROM Chercheur WHERE universite = Paris 6 IN ( SELECT nom FROM Enseignant WHERE universite IN ( SELECT nom FROM Universite WHERE Ville = Paris )); -- imbrications multiples Alternative à la jointure Non existence d un tuple dans une sous-requête à éviter NOT IN 2017-2018 ensiie 40 2017-2018 ensiie 40

Sous-requête d existence IN Sous-requête d existence IN 2017-2018 ensiie 40 2017-2018 ensiie 40 Sous-requête d existence EXISTS Sous-requête d existence EXISTS Existence d au moins un tuple dans la sous-requête Existence d au moins un tuple dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> EXISTS (<sous-requ^ete>); SELECT nom super, nom civil, prenom FROM Super heros WHERE EXISTS ( SELECT * FROM Super heros pouvoirs WHERE nom super = heros); SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> EXISTS (<sous-requ^ete>); SELECT Chercheur.nom FROM Chercheur WHERE EXISTS ( SELECT * FROM Universite; WHERE Universite.nom = Chercheur.universite); 2017-2018 ensiie 41 2017-2018 ensiie 41

Sous-requête d existence EXISTS Sous-requête d existence EXISTS Existence d au moins un tuple dans la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <projection d un tuple> EXISTS (<sous-requ^ete>); Pour valider l existence d un tuple projection inutile dans dans la sous-requête (SELECT *) Non présence d un tuple dans une sous-requête NOT IN 2017-2018 ensiie 41 2017-2018 ensiie 41 Sous-requête de comparaison ALL Sous-requête de comparaison ALL Vérification d une condition : pour les tuples de la requête Vérification d une condition : sur tous les tuples de la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <attribut> <operateur de comparaison> ALL (<sous-requ^ete>); SELECT Nom FROM Chercheur WHERE age > ALL ( SELECT age FROM Eleve; 2017-2018 ensiie 42 2017-2018 ensiie 42

Sous-requête de comparaison ANY Sous-requête de comparaison ANY Vérification d une condition : pour les tuples de la requête Vérification d une condition : sur au moins un tuple de la sous-requête SELECT <liste d attributs> FROM <liste de relations> WHERE <attribut> <operateur de comparaison> ANY (<sous-requ^ete>); SELECT Nom FROM Chercheur WHERE age < ANY ( SELECT age FROM Eleve); SOME peut être utilisé comme synonyme de ANY 2017-2018 ensiie 43 2017-2018 ensiie 43 Raffinement des requêtes dans la clause WHERE Raffinement des requêtes dans la clause WHERE Raffinement : enchaînement récursif de n requêtes dans la clause FROM SELECT <liste d attributs> FROM <requ^ete>; SELECT avg(s) FROM ( SELECT sum(b) as s FROM t GROUP BY a); 2017-2018 ensiie 44 2017-2018 ensiie 44

Exercice Exercice Potion magique Druide(#nom, prénom) Potion(#nom, inventeur 1=>Druide, inventeur 2=>Druide) Ingrédient(#nom I, description) Composition(#(nom P=>Potion, nom I=>Ingredient), quantité) Modèle conceptuel Noms des potions et noms et prénoms de leurs inventeurs Noms et descriptions des ingrédients de la potion magique Nombre d ingrédients de la potion magique Nombre d ingrédients dans chaque potion 2017-2018 ensiie 45 2017-2018 ensiie 45 Super exemple : fil d Ariane Super exemple : fil d Ariane Super heros (SH) #nom super nom civil prenom age M. Indestructible Parrr Robert 36 Elastic girl Parrr Helene 36 Violette Parrr Violette 16 Fleche Parrr Roger 12 Jack-Jack Parrr Jack 2 Frozone Best Lucius 36 Super pouvoirs (SP) #nom pouvoir Elasticite Champ de glace Champ de force Invisibilite Rapidite Resistance Super heros pouvoirs (SHP) #heros=>sh #pouvoir=>sp Indestructible Resistance Elastic girl Elasticite Frozone Champ de glace Violette Invisibilite Violette Champ de force Fleche Rapidite 2017-2018 ensiie 46 2017-2018 ensiie 46

Insertion de données Insertion de données Insertion directe des valeurs INSERT INTO <table> (<liste ordonnée d attributs>) VALUES (<liste ordonnée des valeurs à affecter aux attributs>); -- si les parvenus étaient des super-héros comme les autres INSERT INTO Super heros (nom super, nom civil, prenom) VALUES (Syndrome, Pine, Buddy); Insertion de valeurs par sélection INSERT INTO <table> (<liste ordonnée d attributs>) SELECT...; -- nombre et type identiques que ci-dessus -- si les parvenus étaient des super-héros comme les autres INSERT INTO Super heros (nom super, nom civil, prenom) SELECT nom parvenu, nom civil, prenom FROM Parvenus; 2017-2018 ensiie 47 2017-2018 ensiie 47 Insertion de données (Remarques) Insertion de données (Remarques) Possibilité de ne pas spécifier un (ou plusieurs) attribut(s) NULL -- l attribut age n est pas spécifié INSERT INTO Super heros (nom super, nom civil, prenom) VALUES (Syndrome, Pine, Buddy); Syndrome, Pine, Buddy, NULL Possibilité de ne pas spécifier la liste d attributs (cas simples) tous les attributs dans l ordre de définition de la relation INSERT INTO Super heros SELECT * FROM Parvenus; -- (nom super, nom civil, prenom, age) 2017-2018 ensiie 48 2017-2018 ensiie 48

Mise à jour de données Mise à jour de données UPDATE INTO <table> SET <liste d attributs = valeurs> WHERE <condition pour filtrer les enregistrements>; Mise à jour directe des valeurs UPDATE Super heros SET nom civil = Parr WHERE nom civil = Parrr ; -- correction de l orthographe du nom Parr Mise à jour de valeurs par calcul UPDATE Super heros SET age=age+1 WHERE nom super = Violette ; -- happy birthday Violette... 2017-2018 ensiie 49 2017-2018 ensiie 49 Suppression de données Suppression de données DELETE FROM <table> WHERE <condition pour filtrer les enregistrements>; Suppression de tous les enregistrements d une relation -- si les parvenus étaient des super-héros comme les autres DELETE FROM Parvenus; Suppression sélective de enregistrements -- si les parvenus étaient des super-héros comme les autres, -- ça se saurait... DELETE FROM Super heros WHERE nom super = Syndrome ; 2017-2018 ensiie 50 2017-2018 ensiie 50

LCD : langage de contrôle des données LCD : langage de contrôle des données LCD : langage de contrôle des données LCD : langage de contrôle des données Création d utilisateurs Définition de leurs droits SGBD, BD, relations ou attributs Remarque Gestion de la création d utilisateur (CREATE USER) par le SGBD en général 2017-2018 ensiie 51 2017-2018 ensiie 51 LCD : langage de contrôle des données LCD : langage de contrôle des données Attribution des droits Attribution de droits GRANT <liste de droits> ON <table> TO <utilisateur> [WITH GRANT OPTION]; -- transfert de droits GRANT SELECT, UPDATE ON Super heros TO Edna Mode; GRANT ALL PRIVILEGES ON Super heros TO Government; Liste des droits SELECT INSERT DELETE UPDATE ALTER ALL PRIVILEGES 2017-2018 ensiie 52 2017-2018 ensiie 52

LCD : langage de contrôle des données LCD : langage de contrôle des données Attribution des droits (Remarques) Attribution de droits (Remarques) Droits sur un SGBD Certains SGBD (MySQL) Droits CREATE et DROP généralement ajoutés (création et suppression de BD et des tables) Droits sur une BD Certains SGBD (MySQL) Droits CREATE et DROP généralement ajoutés (création et suppression de tables) Droits sur une vue Syntaxe quasi-identique (VIEW à la place de TABLE) 2017-2018 ensiie 53 2017-2018 ensiie 53 LCD : langage de contrôle des données LCD : langage de contrôle des données Révocation de droits Révocation de droits REVOKE [GRANT OPTION FOR] <liste de droits> ON <object> TO <utilisateur> REVOKE UPDATE ON Super heros TO Edna Mode; REVOKE ALL PRIVILEGES ON Super heros TO PUBLIC; Droit supprimé pour un utilisateur U droit supprimé en cascade pour les utilisateurs ayant obtenu le droit par U 2017-2018 ensiie 54 2017-2018 ensiie 54