Base de données et SQL



Documents pareils
Bases de Données. Plan

Le Langage SQL version Oracle

1 Introduction et installation

16H Cours / 18H TD / 20H TP

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

Information utiles. webpage : Google+ : digiusto/

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

Bases de données relationnelles

Bases de Données Relationnelles. Le Modèle Relationnel

Langage SQL : créer et interroger une base

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

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

Introduction aux Bases de Données

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

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

Chapitre 1 : Introduction aux bases de données

Vincent Augusto

Bases de données avancées Introduction

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

Le Langage De Description De Données(LDD)

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

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

Introduction aux Bases de Données

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

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

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

Rappel sur les bases de données

Les bases de données

Initiation aux bases de données (SGBD) Walter RUDAMETKIN

Bases de données élémentaires Maude Manouvrier

Patrice BOURSIER. Professeur, Univ. de La Rochelle. Bases de Données. Notes de cours

Cours Bases de données

CONCEPTION Support de cours n 3 DE BASES DE DONNEES

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

BASES DE DONNÉES. CNAM Centre associé de Clermont-Ferrand Cycle A Année J. Darmont I. INTRODUCTION II. LES SYSTÈMES HIÉRARCHIQUES

Chapitre 10. Architectures des systèmes de gestion de bases de données

MODE OPERATOIRE OPENOFFICE BASE

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

Bases de Données Avancées

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

Dossier I Découverte de Base d Open Office

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

Bases de données - Modèle relationnel

INF 1250 INTRODUCTION AUX BASES DE DONNÉES. Guide d étude

CHAPITRE 1. Introduction aux bases de données

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

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

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

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

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

Les bases de données Page 1 / 8

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

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

Systèmes d information et bases de données (niveau 1)

et les Systèmes Multidimensionnels

Chapitre 1 Généralités sur les bases de données

UML et les Bases de Données

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

Introduction aux Systèmes de Gestion de Bases de Données Relationnelles. Olivier Losson

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Formation à l utilisation des Systèmes de Gestion de Bases de Données Relationnelles. organisée avec la collaboration du

TP Bases de données réparties

DESS CCI Formation Continue. Février Université Louis-Pasteur de Strasbourg Département d'informatique

Année Universitaire 2009/2010 Session 2 de Printemps

AGRÉGATION «ÉCONOMIE ET GESTION»

Base de Données et Langage SQL

MySQL / SQL EXEMPLES

Faculté des sciences de gestion et sciences économiques BASE DE DONNEES

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

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

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

LE MODELE CONCEPTUEL DE DONNEES

Bases de données relationnelles & SQL

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Bases de données Cours 1 : Généralités sur les bases de données

COURS de BASES de DONNEES

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

Systèmes de Gestion de Bases de Données

Du 10 Fév. au 14 Mars 2014

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

Introduction aux SGBDR

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

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

OBJECTIFS ET ARCHITECTURE DES SGBD

Chapitre 07 Le modèle relationnel des données

Bases de données. Chapitre 1. Introduction

OASIS Date de publication

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

Bases de données réparties: Fragmentation et allocation

Entrepôt de données 1. Introduction

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

EXCEL TUTORIEL 2012/2013

Introduction aux bases de données Cours 1 : Généralités sur les bases de données

Transcription:

Base de données et SQL IN214 Hédia Mhiri Sellami hedia.mhiri@isg.rnu.tn 1

Chapitre 1 Introduction 1. Base de données et fichiers Un fichier est un ensemble de données qui peut être manipulés par plusieurs utilisateurs ayant une vue unique de ces données. Un fichier est un ensemble d enregistrements physiques (ou articles) composés de «champs». A une certaine époque le traitement de données était étroitement lié à leur structure de stockage. Soit le fichier ETUDIANT ayant la structure suivante : Identifiant _etudiant Nom Prenom Note_Mat1 Note_Mat1 Note_Mat2.. Note_Matn Moyenne_G Supposons que l organisation de ce fichier soit séquentielle et que les moyennes des étudiants soient calculées par un programme P1, ce dernier ne pourra pas être appliqué sur le même fichier si son organisation devient indexée ou directe par exemple. Il faut réécrire certaines parties de P1. Ainsi données et programmes étaient étroitement liés. Ajouter un champ dans la structure d un fichier nécessite la récriture de tous les programmes qui le manipulent. Tout changement de structure ou d organisation engendre des mises à jours au niveau de toutes les applications qui le concernent. Le principe de séparation données-traitement s est donc imposé depuis le début des années soixante ce qui a aboutit à la notion de base de données (BD). Le but initial est de séparer données et traitements. 1.1 Définitions d une base de données Le concept de base de données est présenté par plusieurs définitions dont nous citons quelques unes : -) Une base de données représente un ensemble de données de l'entreprise mémorisé par un ordinateur, qui est utilisé par de nombreuses personnes et dont l'organisation est régie par un modèle de données. -) Une base de données est un ensemble structuré de données enregistrées sur des supports accessibles par l'ordinateur pour satisfaire simultanément plusieurs utilisateurs de façon sélective et en un temps opportun. -) On appelle bases de données sur un certain sujet un ensemble de renseignements sur ce sujet qui répond aux trois critères suivants : exhaustivité, non redondance, structure. 2

-) Une base de données est un ensemble de données qui peut être manipulé par plusieurs utilisateurs ayant des vues différentes de ces données. Une base de données est le regroupement d un ensemble de fichiers partagés par des utilisateurs différents, concurrents et compétiteurs. La structure de cet ensemble requiert une description rigoureuse que l on appelle SCHEMA. -) Une base de données est un ensemble exhaustif de données structurées qui sont fiables, cohérentes et partagées par des utilisateurs ayant des besoins d information différents. Le système de gestion de base de données (SGBD) est le logiciel qui permet de gérer et de manipuler une base de données. Par gestion d une base de données, on entend création et maintenance des données (schéma, répertoires, ), optimisation des performances (prise de statistiques, définition de chemins d accès rapides, évaluation, ). -) Une base de données (BD) est un ensemble structuré d'information qui peut être utilisé simultanément par plusieurs utilisateurs et programmes grâce aux fonctions offertes par un composant logiciel appelé système de gestion de bases de données SGBD. Toutefois certains auteurs lient la définition de Base de données (BD) à celle du système qui la gère à savoir le système de gestion de base de données (SGBD). Cet SGBD se charge de ranger, rechercher, assembler et modifier les données tout en étant indépendant du contenu de la base. Les performances des BD sont d ailleurs étroitement liées à celles de leurs SGBD ou DBMS en anglais (Data Base Management System). Une base de données et son système de gestion peuvent être présentés par le schéma suivant : Programme SGBD BD Utilisateur Programme Utilisateur Schéma 1.1 Schématisation d une BD et d un SGBD Le concept de base de données fait donc intervenir quatre composants : -) les données qui sont spécifiques à un domaine comme par exemple la gestion du stock où on trouve les produits, les fournisseurs. Lorsque la base de données concerne la gestion des étudiants on trouvera les étudiants, les enseignants, les salles -) le matériel informatique où seront stockées et manipulées les données cela peut être un micro-ordinateur; généralement dans le cas de BD mono utilisateur; ou un ou plusieurs serveur avec plusieurs connexions et on est dans le cas de BD multi-utilisateurs -) le logiciel qui va gérer ces données à savoir le système de gestion de base de données (SGBD) 3

-) l utilisateur qui peut correspondre à réel ou fictif. Un utilisateur réel peut être le personne qui donne les extraits bancaires ou même l administrateur de la base de données (DBA de l anglais Data Base Administrator). Un utilisateur fictif peut être un programme d édition lancé le soir ou un programme de sauvegarde. 2. Caractéristiques des bases de données Les objectifs principaux d une approche BD sont : - intégration et corrélation, - flexibilité (indépendance), - disponibilité, - sécurité. 2.1 Intégration et corrélation Dans un système d information fichiers classiques chaque application gère ses fichiers via le système de gestion des fichiers (SGF). Il y a autant de couples (application, fichiers) qu il y a d utilisations différentes des données. Il en résulte des inconvénients : - redondance et incohérence des données : la même donnée peut appartenir à plusieurs applications et donc exister dans plusieurs fichiers. Cette donnée (age ou adresse par exemple) peut être modifiée par une application et restée avec son ancienne valeur dans un fichier d une autre application. - difficulté de mettre en œuvre de nouveaux traitements non prévus à l avance. L idée principale de l approche BD est d intégrer toutes les données de l entreprise en un «réservoir» unique de données commun à toutes les applications. 2.2 Flexibilité (indépendance) Dans les systèmes classiques, un changement de support ou de méthode d accès physique entraîne une reprogrammation des applications correspondantes. Dans l approche BD, on peut isoler le niveau utilisation de toute modification que ceci soit : - au niveau de l organisation physique des données puisque le niveau de l utilisateur est transparent à un changement de support, de méthode d accès - au niveau de l organisation logique globale des données puisque le niveau de l utilisateur (programmes d application) est transparent à une modification intervenant dans l organisation logique globale des données. - des chemins d accès aux données puisque le niveau de l utilisateur est transparent à la création de nouveaux index permettant une amélioration des traitements de données. 2.3 Disponibilité L approche BD doit permettre de réduire les temps d accès aux informations en plus du fait qu en travaillant, chaque utilisateur doit pouvoir ignorer l autre. 2.4 Sécurité La sécurité des données recouvre : - l intégrité : protection contre la modification invalide des données (erreur, pannes ). Ces modifications doivent aussi se faire en conformité avec le domaine et les contraintes de travail. - la confidentialité : protection contre la modification illégale des données. 4

3. Architecture d'une base de données ANSI-SPARC Dans le cadre du groupe de normalisation Nord-Américain ANSI ( American National Standards Committee on Computers and Information Processing), un groupe a été crée en 1969, «Standard Planning And Requirement Committe» (SPARC) pour étudier l impact des SGBD dans les systèmes d information. Ce groupe a décidé en 1972 de mettre un peu d'ordre dans la jungle du vocabulaire et des concepts relatifs aux bases de données. 3.1 Architecture ANSI-SPARC Les travaux du groupe ou comité SPARC ont abouti en 1975 à la publication d un document fondamental (ANSI/X3/SPARC) concernant l'architecture d'une base de données. Ce document sert encore aujourd'hui de référence et le schéma ci-dessous est une description d'une telle architecture : SGBD On remarque, sur ce schéma, que l'architecture comprend 3 grands niveaux : - interne, - conceptuel, - externe. Le niveau interne est défini par le schéma physique qui indique comment l'information est enregistrée sur les mémoires auxiliaires. Ce schéma utilise donc les termes de fichiers, d'index, d'adressages, etc... Le niveau interne décrit une réalité physique (en fait la seule de toute l'architecture), les autres niveaux correspondant à des notions entièrement abstraites. Le niveau conceptuel est défini par un schéma conceptuel dont le rôle est de définir les règles de description des données et des relations entre ces données. En d'autres termes, le schéma conceptuel est une modélisation des objets du monde réel. On l'appelle d'ailleurs modèle de données. On connaît les modèles de données suivant : - le modèle hiérarchique 5

- le modèle réseau - le modèle relationnel - le modèle objet Signalons cependant que nous insisterons beaucoup plus sur le modèle relationnel qui est actuellement le plus utilisé dans la conception des bases de données contemporaine. Le modèle hiérarchique et réseau ont néanmoins joué un grand rôle dans le passé. Notons que, si la base de données possède l'indépendance des données au sens défini précédemment, le modèle de données ne doit pas comporter de références à une quelconque stratégie d'accès, ce n'est cependant pas le cas des modèles hiérarchique et réseau. Le schéma conceptuel ne se limite pas à la description des données et à leurs relations. Il doit comporter en plus des procédures d'autorisation d'accès (sécurité des données) et de contrôle de validité (intégrité des données). Le niveau externe contrairement aux précédents niveaux, le niveau externe peut correspondre à plusieurs schémas externes qui ne sont autres que les vues (partielles) qu'ont les différents utilisateurs de la base de données. Quelquefois, les schémas externes ne sont que des sous-schémas du schéma conceptuel. Parfois ils peuvent permettre, par exemple, de fournir des informations qui n'existent pas en tant que telles dans le schéma conceptuel, mais qui peuvent être obtenues (calculées) à partir d'informations existantes. En ce sens, l'union de tous les schémas externes peut constituer un "recouvrement" du schéma conceptuel. Cette division en trois niveaux permet une double indépendance des données : --> Indépendance vis à vis des applications par distinction entre niveau externe et niveau conceptuel. Un changement dans une application ou la création d'une nouvelle application implique seulement la création d'une nouvelle interface (mapping) entre les deux niveaux et non une modification de l'ensemble de la base de données. --> Indépendance vis à vis des moyens de stockage par distinction entre niveau conceptuel et niveau interne. Un changement de supports magnétiques ne devrait pas influer sur le niveau conceptuel, de nature logique. Seule l'interface conceptuel-interne sera à modifier. 3.2 SGBD et DBA L indépendance entre niveaux permet aussi à l utilisateur (ou au programme) d être libre visà-vis des stratégies d accès. Il indique au système ce qu il désire (le QUOI) et c est au SGBD de trouver le meilleur chemin d accès (le COMMENT). 3.2.1 Le SGBD Le système de gestion de base de données SGBD est un logiciel qui permet la gestion, le contrôle et l'utilisation de la base de données dont il est partie intégrante (pour certains auteurs il est la base de données). Il a comme fonction de : - dialoguer avec l'utilisateur, - assurer l'interactivité entre les utilisateurs et la base de données, - effectuer les opérations de recherche, de sélection, de mise à jour des informations, - décrire l'ensemble des données sous la forme des trois niveaux décrits ci-dessus et assurer les passages entre ces niveaux, - maintenir l'intégrité des données par vérification des contraintes d'intégrité, - maintenir la sécurité et la confidentialité des données par vérification des droits d'accès des utilisateurs, - gérer les accès de plusieurs utilisateurs à une même information, - prévoir des solutions de redémarrage en cas d'incidents. 6

Pour réaliser ces différentes fonctions, un SGBD comporte souvent des langages spécifiques et notamment : - un langage de description de données (LDD) qui définit les différents objets de la base (nature, caractéristiques) ainsi que les contraintes d'intégrité qui portent sur eux. - un langage de manipulation de données (LMD) permettant de réaliser les différentes commandes souhaitées par l'utilisateur sur les données. Il s'agit, en fait, d'une sorte de langage de programmation, soit inclus dans un langage de programmation déjà existant (ce dernier est alors appelé un langage hôte), soit constituant un langage autonome. 3.2.2 Le DBA Le bon fonctionnement du SGBD est assuré, en général, sur les gros systèmes, par un personnel spécialisé, plus particulièrement l'administrateur de la base de données (ABD) ou le DBA (data base administrator). Le DBA est une personne ou un groupe de personnes responsables de tout le système d'information, il a pour rôle : - de définir le schéma et le sous-schéma (choix du contenu de la base de données, choix de la structure de stockage ) - d assurer la sécurité des données (choix de la stratégie d'accès, les relations avec les utilisateurs, choix des autorisations d'accès, des procédures de validation ) - d améliorer la disponibilité des données (stratégie de recopie et de sauvegarde ) - d intégrer les extensions éventuelles de la base (choix des modifications à apporter ). 7

Chapitre 2 Le modèle relationnel 1. Introduction Le modèle relationnel a été introduit pour lever les restrictions imposées par le modèle en réseau sur la représentation des liens inter-entités. En effet certains liens-entités peuvent ne pas exister à un instant donné et apparaître par la suite, et dans le cas du modèle en réseau la structure logique des données doit être alors modifiée. Le principe du modèle relationnel est de représenter les données sous forme de relation. L'algèbre relationnelle est en fait un concept mathématique de relation de la théorie des ensembles. Elle a été inventée en 1970 par Edgar Frank Codd, directeur de recherche du centre IBM de San José en Californie (USA). Le model relationnel [Codd 70] permet une description d un problème sous forme tabulaire. Une relation peut être vue comme une table à double entrée où chaque ligne; appelée nuplet, tuple, instance ou encore occurence peut être vue comme décrivant une entité du monde. Une colonne de la table est appelée un attribut, elle correspond généralement à une propriété de l entité, comme par exemple l entité étudiant dans un problème de gestion de l inscription. L entité étudiant peut être décrite par un code, un nom, un prénom et une adresse. On a donc la table Etudiant ayant les attributs suivants : attribut tuple Code Nom Prenom Adresse 10 Haddad Ali 25 rue.. 14.... L algèbre relationnelle est constituée d'un ensemble d'opérations formelles sur les relations. Les opérations relationnelles permettent de créer une nouvelle relation (table) à partir d'opérations élémentaires sur d'autres tables (par exemple l'union, l'intersection, ou encore la différence). 2. Concepts de base * Une relation R ; on dit parfois schéma relationnel; peut aussi être notée R(A1, A2,..., An) ou encore R = {A1, A2,..., An}. A chaque attribut Ai est associé un domaine Di. 8

* La définition ANSI d un domaine est : «Un domaine est l ensemble des valeurs légales que peut prendre l attribut d une relation» sachant que l attribut est un objet caractéristique d une relation. Par exemples si nous prenons les attributs Num_securite_sociale, Nom, Code_postal et couleur on peut associer à chacun un domaine : D_Num_securite_sociale = { n [10 13 ; 3.10 13 ]} D_Nom = { chaine de 30 caractères} D_Code_postal = { chaine de 5 chiffres} D_couleur = { bleu, vert, rouge, jaune } Deux domaines sont déclarés compatibles s ils sont sémantiquement comparables, c'est-àdire si les ensembles qui les définissent ne sont pas disjoints. C est par exemple le cas des domaines suivant : Le domaine de l attribut LOCALISATION-AVION = {Paris, Nice} et de l attribut VILLE- DEPART-VOL = {Paris, Nice, Toulouse}, peuvent être compatibles. * Le degré de la relation est le nombre d'attributs de celle-ci. Ainsi pour la relation R(A1, A2,..., An), son degré est n. Le degré de notre table Etudiant précédente est de 4. * La cardinalité d une relation est son nombre de tuples ou d occurrences ou encore de lignes. * Une association représente les liens existants entre les entités. Elle est caractérisée, comme les entités, par un nom et des attributs. Elle est aussi nommée relation. * Pour une relation on peut aussi distinguer ses contraintes d'intégrité. Une contrainte d'intégrité associée à une relation concerne les règles de manipulation ou de gestion d'une relation avec les autres. C'est une propriété du monde que l'on va modéliser comme par exemple le fait que «un employé a un chef et un seul» ou encore que «La moyenne des salaires n'est pas inférieur à 10 000» *Parmi les attributs d une entité on distingue : - Clé primaire: est un attribut (ou un groupe d attributs) dont la (les) valeur(s) permet (ent) d identifier un tuple de manière unique dans une relation, comme par exemple le numéro d'une pièce ou le numéro du passeport. Ces identifiants sont souvent soulignés lors des représentations schématiques. - Clé étrangère: est un attribut qui est clé primaire d une autre relation. Ainsi pour connaître le fournisseur de chaque produit il faut par exemple ajouter l attribut numéro de fournisseur à la relation pièce. * Une relation est un ensemble de nuplets, il n'y a donc pas de notion d'ordre sur les nuplets, toutefois un uplet est une séquence ordonnée d'attributs. * Une valeur d'attribut doit généralement être atomique ou encore simple comme par exemple le poids. 9

* Une base de données est donc un sous-ensemble du produit cartésien de n ensembles (D i ) appelés domaines : R D 1 *D 2 * *D n Ou encore c est un ensemble de n-uplets (ou tuples) tj, j (1,m), m étant la cardinalité de la relation (ou le nombre de lignes). Cet ensemble peut être défini d une manière extensive ou intensive : - extensive : une relation est déterminée en donnant la liste des tuples : R= { t1,, tj,, tm}, avec tj = < dj1, dj2,, djk, djn> ; et dji Di ; j [1, m] et i [1,n] Dans l exemple suivant où le degré est de 4 on donne une relation AVION de manière extensive AVION : {<100, AIRBUS, 300, PARIS>, <101, B707, 250, PARIS>.} - intensive : une relation est déterminée en donnant un prédicat d appartenance d un n- uplet à R, soit P (A1,, An) ce prédicat à n variables : R= {tj / P (dj1,, djn) VRAI } Un tuple correspond alors à une assignation «vraie» A cette dualité de définition d une relation correspond aussi une dualité de manipulation. On distingue deux grandes classes des langages de manipulation d une BDR basées sur : - la théorie ensembliste : langage algébrique, SQL - la théorie des prédicats : conduisant au calcul relationnel (des tuples ou des domaines) comme par exemple QUEL d INGRES, les langage graphiques comme QBE d IBM 3. Dépendance fonctionnelle et normalisation 3.1 Dépendance fonctionnelle La dépendance fonctionnelle permet d établir des liens sémantiques entre attributs ou groupe d attributs. Etant donné une relation R, nous disons qu il y a dépendance fonctionnelle (DF) d un attribut (ou groupe d attributs) X de R vers un attribut (ou groupe d attributs) Y de R si à une valeur de X est associé une valeur de Y. Cette dépendance fonctionnelle est notée X Y. [Miranda] Cette définition peut aussi être présentée par : Y dépend de X si toute valeur pour l attribut X détermine au plus une valeur de l attribut Y. Plus formellement : Soit X et Y deux attributs d une relation R ; on a une dépendance fonctionnelle X Y (Y dépend de X ) si et seulement si on a la condition suivante : Si, E1 et E2 deux n-uplets de R, ont les mêmes valeurs pour l attribut X, alors E1 et E2 ont nécessairement les mêmes valeurs pour l attribut Y. On peut généraliser cette définition en prenant pour X et Y des sous-ensembles de l ensemble des attributs d une même relation. Exemple : Dans la relation AVION suivante il y a une DF entre le nom de l avion et sa capacité: AVNOM CAP 10

AVION AV# AVNOM CAP 100 CARAV 100 101 B707 150 102 CARAV 100 103 AIRBUS 250 104 AIRBUS 250 105 B727 150...... Cette DF traduit le fait que connaissant le nom d un avion on a automatiquement sa capacité. On dit que Y ; qui est un attribut (ou groupe d attributs) ; dépend fonctionnellement de X ; qui est un attribut (ou groupe d attributs) ; si pour toute instance de R, deux tuples ayant des valeurs identiques pour X ont obligatoirement des valeurs identiques pour Y. Dans la relation (Nom, Prénom, code_postal, ville, département) on a : (Code_postal ) département mais (ville département) car deux villes peuvent avoir le même nom. 3.1.1 Propriétés des dépendances fonctionnelles (ou axiomes d'amstrong) Quand on a un ensemble de dépendances fonctionnelles on peut en déduire d autres dépendances fonctionnelles en appliquant les règles suivantes : Réflexivité: Y X X Y Augmentation : X Y XZ YZ Transitivité : X Y et Y Z X Z Union : X Y et X Z X YZ Pseudo-transitivité : X Y et WY Z WX Z Décomposition : X Y et Z Y X Z * Lorsque X prend tous les attributs il est clair que pour tout y on a X Y. * De même pour tout X on a X -> Ø * Si X= Ø alors X->Y signifie que Y est constant. Il est important de noter que la dépendance n'existe que si elle est vérifiée pour toutes les instances d une relation. * C est une propriété définie sur l'intension du schéma et non son extension (elle est donc invariante dans le temps et ne peut être extraite à partir d'exemples). C'est une propriété qui doit être extraite de la connaissance que l'on a de l'application à modéliser. Cela signifie que la dépendance est conceptuelle et non factuelle. * Par exemple : 11

- la clef primaire est un attribut (ou un groupe d attributs) dont dépendent fonctionnellement tous les autres attributs de la relation à laquelle appartient la clef. - Le numéro du livre déterminera tout le temps son titre et son éditeur. - Par contre il ne détermine pas l'auteur puisqu'il peut y en avoir plusieurs. 3.2 Décomposition binaire d'une relation R(X,Y,Z) ET X -> Y => R(X,Y,Z) = R[X,Y] * R[X, Z] - on peut toujours décomposer une relation suivant une dépendance fonctionnelle - on ne peut décomposer une relation s'il n'y a pas de dépendance fonctionnelle - la décomposition suivant une dépendance fonctionnelle ne perd pas d'information 3.2 Normalisation On appelle schéma relationnel la donnée d un - ensemble de relations liées à un même domaine - des dépendances fonctionnelles entre les attributs de ces relations Normaliser un schéma relationnel c'est le remplacer par un schéma équivalent où toutes les relations vérifient certaines propriétés basées sur l'analyse des dépendances fonctionnelles à l intérieur de chaque relation. Exemple : soit la relation non normalisée CommandeProduit : NumProd Quantité NumFour AdresseFour 104 1000 902 Rue Claude Bernard............ Cette relation présente différentes anomalies lors de sa mise à jour: - Anomalies de modification: Si on souhaite modifier l'adresse d un fournisseur, il faut le faire pour tous les tuples concernés (produits qu'il fournit). - Anomalies d insertion: Pour ajouter un nouveau fournisseur, il faut obligatoirement fournir des valeurs pour NumProd et Quantité (ajouter un nouveau produit). - Anomalies de suppression : La suppression par exemple du produit 104 fait perdre toutes les informations concernant le fournisseur 902. La normalisation permet de: - éviter les redondances (perte de place et incohérences) - minimiser l espace de stockage - éviter les problèmes de mises à jour. Un schéma relationnel est normalisé si les relations qui le composent sont toutes normalisées. 12

Les formes normales les plus utilisées sont au nombre de six, mais nous nous intéressons aux trois premières uniquement (formes de Boyce-Codd) 3.2.1 Première forme normale (1FN) Une relation est en 1FN si tout attribut n est pas décomposable, ou encore si elle ne possède pas d'attribut multi-valué. Exemples: Personne (Nom, Prénom, Age) est en 1FN Département (Nom, Adresse, Tel) est en 1FN Toutefois ces relations peuvent être considérées non 1 NF si dans le domaine réel que représente ces tables : - l attribut prénom peut avoir des valeur comme sonia, miriam - l'attribut adresse est du type: rue de marseille, Tunis La relation Client (code_client, Nom, Prénom, Immat1, Immat2) est NON 1FN car : - on ne peut pas enregistrer plus de deux véhicules - si la personne ne possède qu'un seul véhicule, Immat 2 prend de la place inutilement. Pour résoudre cela on peut proposer de créer une nouvelle table pour l'attribut multi-valué: 1. On créé une nouvelle relation contenant un attribut (une valeur de l'attribut multi-valué) 2. On fait le lien entre la nouvelle relation et la première relation en ajoutant à la nouvelle relation la clé primaire de la première relation 3. Ce nouvel attribut est une clé externe Nouveau schéma en 1FN et ce en considérant deux tables : Client (code_client, Nom, Prénom) Véhicule (code_client, Immatricule) La relation Livre (code, Titre, auteurs) est non 1NF car un livre peut avoir plusieurs auteurs. 3.2.2 Deuxième forme normale (2FN) Une relation est en 2FN si: Elle est en 1FN, Tout attribut, non clef primaire, est dépendant de la clef primaire. Exemple : CLIENT (N client, nom, prénom, date de naissance, rue, ville) Cette relation est en 2FN Exemple de relation en 1FN mais pas en 2FN: 13

Projet (NumProjet, NumEmployé, NomEmployé) Problèmes - on ne peut enregistrer un employé que s'il participe à un projet - si un employé participe à plusieurs projets, on doit répéter les informations sur cet employé (redondance et problèmes de mise à jour) - l attribut NomEmployé dépend de NumEmployé qui n est pas la clef Une solution peut être proposée qui consiste à extraire la dépendance fonctionnelle: 1. On créé une nouvelle relation contenant l'attribut déterminé par une partie de la clé primaire 2. La clé primaire de la nouvelle relation est cette partie de la clé Employé (NumEmployé, NomEmployé) Projet (NumProjet, NumEmployé) NumEmployé est à la fois clé primaire dans Employé et clé externe dans Projet On peut aussi étudier d'autres relations comme: La relation suivante n'est pas en 2FN. COMMANDE_PRODUIT (N produit, quantité, N fournisseur, ville) Cette relation n'est pas en 2FN car: N produit,n fournisseur df Quantité N fournisseur df Ville On peut corriger on considérant: COMMANDE (N produit, N fournisseur, quantité) FOURNISSEUR (N fournisseur, Ville) 3.2.3 Troisième forme normale (3FN) Une relation est en 3FN si: Elle est en 2FN, Il n existe aucune DF entre deux attributs non clef primaire (ou encore si tout attribut non clé ne dépend pas d'un autre attribut non clé) VOITURE (NV, Marque, Type, Puissance, Couleur) Cette relation n'est pas en 3FN car : Type Marque Type Puissance 14

On peut extraire la dépendance fonctionnelle en générant deux relation: VOITURE (NV, Type, Couleur) MODELE (Type, Marque, Puissance) 1. On créé nouvelle relation contenant l'attribut déterminé par l'attribut non-clé (partie droite de la DF) 2. La clé primaire de la nouvelle relation est l'attribut déterminant (partie gauche de la DF) 3. Cette clé primaire devient une clé externe dans l'ancienne relation Solution : on extrait la dépendance fonctionnelle : 1. On créé nouvelle relation contenant l'attribut déterminé par l'attribut non-clé (partie droite de la DF) 2. La clé primaire de la nouvelle relation est l'attribut déterminant (partie gauche de la DF) 3. Cette clé primaire devient une clé externe dans l'ancienne relation 4. Langages de requête relationnels Plusieurs types de langage d interrogation des bases de données relationnelles ont été proposés. Ils s appuient sur trois théories : - l algèbre relationnelle qui est à la base du langage SQL - le calcul relationnel des tuples qui a inspiré le langage QUEL du SGBD Ingres - le calcul relationnel des domaines qui est à la base du langage QBE (Query By Example) d IBM. Il a été démontré que ces langages sont équivalents car ils permettent de générer les mêmes ensembles de données résultats. Ces langages de requête sont non-procéduraux ; ils sont dits «fermés» car toute manipulation de relations par un langage relationnel génère une relation qui peut être manipulée à son tour. Quelque soit le langage de requête considéré nous avons les caractéristiques suivantes : - les opérateurs relationnels s appliquent à des relations prises dans leur globalité, c'est-à-dire à des ensembles de tuples - le résultat de chaque opérateur (requête) est une nouvelle relation qui peut servir d argument à une autre requête. - les opérateurs sont basés sur des valeurs d attribut ce qui constitue le seul moyen d accès. Nous allons nous intéresser essentiellement à l algèbre relationnelle qui a inspiré le langage SQL. 4.1 Algèbre relationnelle Le principe de l algèbre relationnelle est de donner une suite d opérateurs que l on applique à des relations de la base de données pour obtenir des relations qui répondent aux données cherchées. Le langage algébrique a été défini par CODD en 1970 et offre deux types d opérateurs : - les opérateurs «relationnels» : PROJECTION, SELECTION, JOIN, DIVISION. - les opérateurs «ensemblistes» : UNION, INTERSECTION, DIFFERENCE, PRODUIT CARTESIEN. 15

4.1.1 Projection La projection d une relation R sur l attribut Y peut être représentée par PROJ Y (R) ou π Y (R). Le résultat est une relation R sans doublons qui a un nombre d attributs inférieur à celui de R. Y peut être un ou plusieurs attributs. On peut représenter cet opérateur par le schéma suivant : π(r) La projection d une relation revient à un découpage vertical. Exemple : soit la relation AVION1 AV# AVNOM CAP LOC 100 AIRBUS 350 Toul 101 AIRBUS 350 Toul 104 AIRBUS 150 Paris 105 CARAV 250 Paris La projection de AVION1 sur les attributs Avnom et Cap π Avnom,Cap (Avion1) donne le découpage vertical suivant : AVNOM CAP AIRBUS 350 AIRBUS 150 CARAV 250 Remarquez l élimination du doublon (Airbus, 350) Alors que π Av# (Avion1) donne : AV# 100 101 104 105 4.1.2 Sélection La sélection, le terme restriction est aussi utilisé est souvent représentée par le symbole σ ou le terme SELECTION Soit R une relation et c une formule (ou condition) logique construite à partir : de constantes d attributs d une relation R désignés par leurs noms ou leurs numéros, d opérateurs de comparaisons =,, <,, >, de connecteurs logiques,, La relation σ c (R) désigne l'ensemble des tuples t de R qui vérifie la condition c. 16

La relation σ c (R) a en général moins de tuples que R. On peut représenter cet opérateur par le schéma suivant : σ c (R) Exemple : soit la relation PILOTE4 représentant les pilotes habitants PARIS ou TOULOUSE : PILOTE4 Découpage horizontal PL# PLNOM ADR 100 Jean Paris 101 Pierre Paris 120 Paul Paris 130 Serge Toul 140 Michel Toul Si nous posons comme condition : ARD= Paris, le découpage correspondant à σ ADR= Paris (R) est ci-dessous : Le résultat correspond donc à : PL# PLNOM ADR 100 Jean Paris 101 Pierre Paris 120 Paul Paris Si on a σ ADR Paris (R) ; le résultat serait : PL# PLNOM ADR 130 Serge Toul 140 Michel Toul 4.1.3 Jointure Soient les relations R (A, B1) et S (B2, C) avec B1 et B2 attributs définis sur un même domaine. Soit θ un élément de l ensemble {<,,, =, >, } applicable aux valeurs des attributs B1, B2. Le JOIN de R sur B1 avec S sur B2 est noté R (B1 θ B2) S ou JOIN θ-expression (R,S) ou bien R θ-expression S ou encore R θ S C est la relation dont les tuples sont ceux obtenus par concaténation des tuples de R avec ceux de S pour lesquels la relation θ entre les composantes B1 et B2 est vérifiée. Lorsque θ est l égalité, alors l opérateur porte le nom d EQUI-JOIN. Exemple : soient les tables PILOTE1 représentant les pilotes habitant Paris, et VOL1 représentant les vols de la compagnie : PILOTE1 PL# PLNOM ADR VOL1 VOL# AV# PL# 17

100 JEAN PARIS 101 PIERRE PARIS 120 PAUL PARIS IT500 110 100 IT501 130 100 IT503 110 100 IT504 110 120 IT506 120 120 IT507 130 110 Le JOIN (PL# = PL#) (PILOTE1, VOL1) représente l ensemble des pilotes habitant PARIS en service avec les numéros des vols et des avions correspondants PL# PLNOM ADR VOL# AV# PL# 100 JEAN PARIS IT500 110 100 100 JEAN PARIS IT501 130 100 100 JEAN PARIS IT503 110 100 120 PAUL PARIS IT504 110 120 120 PAUL PARIS IT506 120 120 JOIN NATUREL Il est à noter que dans le JOIN tous les attributs composant les relations apparaissent, ce qui n est pas le cas de l EQUI-JOIN, où on a deux colonnes identiques. Lorsqu on supprime l attribut de la deuxième relation on parle de JOIN naturel. La sélection est donc un cas particulier de l équi-join naturel avec une relation constante. 3.1.1 Opérateurs ensemblistes Pour l union ( ), l intersection ( ) et la différence (-), les opérateurs doivent vérifier : - les relations doivent avoir le même degré (n) - les attributs associés deux à deux doivent être du même type syntaxique (pas nécessairement le même domaine de définition) 4.1.4 Division Soient R (B,A1) une relation binaire et S (A2) une relation unaire, où A1 et A2 sont des attributs définis sur le même domaine. La division de R par S est notée R(B, A1) S(A2) ou R A1 S ou encore tout simplement R S lorsqu il n y a pas de confusion et finalement on peut trouver R/S. La division de R par S est le sous-ensemble des éléments de R(B) dont le produit cartésien avec S est inclus dans R. La division de R par S, R(B, A1) S(A2) peut aussi être présentée comme étant l ensemble des tuples t de R(B) tels que pour chaque élément s S la concaténation de t et s soit un tuple de R. En pratique cela correspond à prendre toutes les valeurs de l attribut B qui sont associées à toutes les valeurs de A2. Exemple R S R S B A1 X 1 Y 2 X 3 z 1 C 1 3 A X 18

D après la première définition la division va servir à traduire le quantificateur universel. Chaque fois que l on aura «pour tout x» il suffira de mettre l attribut x dans le diviseur. Le dividende binaire doit contenir alors le même attribut (sur lequel porte la division) et l attribut du résultat recherché. L exemple précédent répond à la question : quels sont les A qui sont associés à tous les C. 4.1.5 UNION L union de deux relations R et S, qui ont des domaines compatibles, est notée R S ; c est l ensemble des tuples qui appartiennent, soit à R, soit à S, soit à la fois à R et à S. L union peut être schématisée comme suit : Exemple : Soient deux relations PILOTE1 et PILOTE2 avec les occurrences suivantes (en terminologie BDR on parle souvent d occurrence pour désigner des lignes d une table) : PILOTE1 PILOTE2 PL# ADR PL# VD 100 PARIS 101 PARIS 120 PARIS 110 PARIS 130 TOUL 140 TOUL 150 TOUL 100 TOUL 120 TOUL 130 PARIS 101 PARIS 140 PARIS 110 PARIS La table PILOTE1 PILOTE2 est : PILOTE1 PILOTE2 PL# VILLE 100 PARIS 101 PARIS 120 PARIS 110 PARIS 130 TOUL 140 TOUL 150 TOUL 100 TOUL 120 TOUL 130 PARIS 101 PARIS 140 PARIS Les duplications sont éliminées car l UNION traduit le OU logique. 19

b) INTERSECTION L intersection de deux relations R et S, qui ont des domaines compatibles, est notée R S; c est l ensemble des tuples qui appartiennent à la fois à R et à S. L intersection peut être schématisée comme suit : Exemple : En se basant sur les deux relations PILOTE1 et PILOTE2 précédentes on a PILOTE1 PILOTE2 : PL# VILLE 101 PARIS 110 PARIS L intersection permet de traduire le ET logique. c) DIFFERENCE La différence de deux relations R et S, qui ont des domaines compatibles, est notée R - S; c est l ensemble des tuples qui appartiennent à R sans appartenir à S. C est l opérateur complémentaire de l intersection. La différence peut être schématisée comme suit : Exemple : En se basant sur les deux relations PILOTE1 et PILOTE2 précédentes on a PILOTE1- PILOTE2 : PL# VILLE 100 PARIS 120 PARIS PILOTE1- PILOTE2 représente l ensemble des pilotes habitant PARIS et n assurant pas de vol au départ de PARIS ou TOULOUSE. La différence permet de traduire la négation logique et donc la suppression de tuples dans une relation. d) PRODUIT CARTESIEN Le produit cartésien de deux relations R et S notée R * S est l ensemble de tous les tuples obtenus par concaténation de tuples de R et de tuples de S. C est un ensemble de paires ordonnées : Exemple : Soient les deux relations PILOTE3 et AVION suivante : 20

PILOTE3 PL# ADR 103 NICE 106 NICE AVION AVNOM CAP AIRBUS 350 CARAV 250 La relation PILOTE3 * AVION est : PL# ADR AVNOM CAP 103 NICE AIRBUS 350 103 NICE CARAV 250 106 NICE AIRBUS 350 106 NICE CARAV 250 21

Chapitre 3 Créer et manipuler rapidement une table 1 Création d'une table La syntaxe élémentaire SQL de création d'une table Oracle est: CREATE TABLE nom_de table (définition de colonne1,, définition de colonne n) * Un nom de table doit être unique dans votre environnement de travail et ne doit pas être un mot clé SQL. * Un nom de table doit commencer par une lettre de l alphabet * Un nom de table peut comporter des chiffres et certains symboles comme $ ou _ ou #. * Il n y a pas de différence entre les majuscules et les miniscules pour les noms des objets Oracle ainsi que pour les instructions. * Une table doit contenir au minimum une colonne. Le nombre maximum de colonnes dépend de la version du logiciel. 1.1 Définition de colonne La définition élémentaire d'une colonne consiste à lui attribuer un nom et un type. * Le nom d une colonne obéit aux contraintes du nom d une table citées précédemment (unique dans votre environnement, pas de différence entre les majuscules ). * Les types de données les plus utilisés dans Oracle sont: CHAR (n) VARCHAR2 (n), VARCHAR (n) NUMBER (p, s) LONG Chaîne de caractères de taille fixe n. La zone peut être complétée par des blancs si nécessaire. Le maximum de la valeur de n varie en fonction de la version d'oracle. A partir de la version 8i, il est de 2000 octets. Chaîne de caractères ayant une longueur variable, avec un maximum de n caractères. Maximum de size est 4000, et le minimum est 1. p: nombre total de chiffres s : nombre de chiffres après la virgule (scale). Ce type permet de stocker des entiers positifs ou négatifs, des réels à virgule fixe ou flottante. La plage des valeurs varie entre ± 1*10-130 à ± 9.99*10 125 Données de type caractère de taille variable allant jusqu'à 2 gigabytes (ou GO). 22

DATE RAW (size) LONG RAW ROWID Donnée de type date. Données de type binaire ayant une longueur fixe de size bytes (ou octets) allant jusqu'à 2000 bytes. Données de type binaire ayant une longueur variable de size bytes (octets) allant jusqu'à 2 gigabytes. Chaîne Hexadécimale représentant l'adresse unique d'une ligne de la table. Sa valeur est retournée par la pseudo-colonne de même nom Consulter les types de données d Oracle en annexe1. Exemple : Soit la table Departement ayant la structure suivante : Numéro du département Nom du département Localité du département L instruction SQL permettant de créer une telle table peut être : CREATE TABLE Departement (Dnum NUMBER(3), Dname VARCHAR2(15), DLoc VARCHAR2(25) ); Exercice 1 Ecrivez l'instruction nécessaire pour créer la table des fournisseurs nommée F. F F# Fnom Statut Ville F1 smith 20 Londre F2 Jones 10 Paris F3 Blake 30 Paris F4 Clark 20 Londre F5 Adams 30 Athens Table F des fournisseurs Nous allons regarder avec plus de détails le type NUMBER (p,s). Soit le nombre 7456123.89; pour chaque expression de NUMBER nous donnons le résultat généré: NUMBER 7456123.89 NUMBER(9) 7456124 NUMBER(9,2) 7456123.89 NUMBER(9,1) 7456123.9 NUMBER(6) exceeds precision NUMBER(7,-2) 7456100 NUMBER(7,2) exceeds precision 23

Nous avons une erreur car on a une précision (p) inférieure à la taille du nombre (cas du 6 ou 7,2). Si le s est négatif alors le chiffre est arrondi à autant de zéros que la valeur de s. Si le s est supérieur à p, même si ce n est pas normal, il indique le nombre après la virgule en l arrondissant parfois comme le montre l exemple suivant : Exercice 2 La donnée Le format La donnée enregistrée.01234 NUMBER(4,5).01234.00012 NUMBER(4,5).00012.000127 NUMBER(4,5).00013.0000012 NUMBER(2,7).0000012.00000123 NUMBER(2,7).0000012 Le tableau suivant indique pour chaque nombre un format qui va lui être associé, nous vous demandons d'indiquer la valeur du résultat: la valeur donnée le format.01234 NUMBER(4,5).00012 NUMBER(4,5).000127 NUMBER(4,5).0000012 NUMBER(2,7).00000123 NUMBER(2,7) La valeur NULL Pour spécifier que la valeur d'un champ est indéterminé Oracle utilise la clause NULL lors de la définition d'une colonne. Dans le cas de la table Departement, et pour indiquer que l'attribut Dloc est généralement indéterminé on peut écrire: CREATE TABLE Departement (Dnum NUMBER(3), Dname VARCHAR2(15), DLoc VARCHAR2(25) NULL); 2 Insertion des données dans une table 2.1 Insertion de données externes Une fois la table crée il s'agit d'y insérer des occurrences et ce en utilisant l'instruction INSERT. Une forme élémentaire de l instruction INSERT est : INSERT INTO nom_de table (col 1,, col n) VALUES ( val 1,..., val n) ; Supposons que nous disposons de la table des fournisseurs F ayant la structure suivante: F (f# char(3), fnom varchar2(20), statut number, ville varchar2(20) ) Si nous désirons insérer l'occurrence relative au fournisseur f1 de nom smith ayant comme statut 20 et habitant Londre la requête SQL sera: 24

INSERT INTO F (f#,fnom,statut, Ville) VALUES ('f1', 'smith', 20,'Londre' ); Remarques 1) Une chaîne de caractère est insérée entre cote simple comme par exemple ' Londre' 2) La présentation des valeurs à insérer doit respecter l ordre de présentation des colonnes dans la table. 3) Si on site tous les noms des colonnes il faut juste suivre l ordre de présentation des colonnes dans la requête. La requête précédente donne le même résultat que celle qui suit: INSERT INTO F (f#, Ville,Fnom,Statut) VALUES ('f1','londre', 'smith', 20 ); 4) La syntaxe de l'instruction INSERT peut être simplifiée dans le cas où on a autant de valeur que de colonnes et en respectant l'ordre de présentation des colonnes et des valeurs. En effet les deux requêtes précédentes donnent le même résultat que celle qui suit: INSERT INTO F VALUES ('f1', 'smith', 20, 'Londre' ); Cette forme est possible car la structure de la table est composée de 4 colonnes et on a exactement une valeur pour chaque colonne. Ces valeurs sont en plus présentées dans l'ordre de création des colonnes. 5) Si l'ordre de présentation des valeurs n'est pas le même que celui de la définition ou si on a moins de valeurs que le nombre total des colonnes il faut revenir à la première syntaxe en mentionnant les colonnes concernées. Si par exemple pour le fournisseur f1 je n'ai que la ville la requête serait: INSERT INTO F (f#,ville) VALUES ('f1','londre' ); Exercice 3 : Soit la table fournisseur déjà présentée, donnez une instruction SQL qui nous permet d y insérer l'occurrence f6 dont la ville est Paris et le nom est Jean. Exercice 4 : Soient les tables de données suivantes: Fournisseur (F), Pièce (P), projet (J) et FPJ indiquant la quantité fournie par un fournisseur, pour un projet relativement à une pièce. 1) Ecrivez l'instruction nécessaire pour créer la table F. 2) Ecrivez l'instruction nécessaire pour créer la table P. 3) Ecrivez l'instruction nécessaire pour créer la table J. 4) Ecrivez l'instruction nécessaire pour créer la table FPJ. 5) Pour chaque table écrire l'instruction d'insertion de la première occurrence. F F# Fnom Statut Ville f1 smith 20 Londre f2 Jones 10 Paris f3 Blake 30 Paris f4 Clark 20 Londre f5 Adams 30 Athens FPJ F# P# J# Qty f1 p1 j1 200 f1 p1 j4 700 f2 p3 j1 400 f2 p3 j2 200 f2 p3 j3 200 25

P P# Pnom Couleur Poids Ville p1 Nut Rouge 12 Londre p2 Boltes Vert 17 Paris p3 Screw Bleue 17 Rome p4 Screw Rouge 14 Londre p5 Cam Bleue 12 Paris p6 Cog Rouge 19 Londre J J# Jnom Ville j1 Sorter Paris j2 Punch Rome j3 Reader Athens j4 Cpnsole Athens j5 Collator Londre j6 Terminal Oslo j7 Tape Londre f2 p3 j4 500 f2 p3 j5 600 f2 p3 j6 400 f2 p3 j7 800 f2 p5 j2 100 f3 p3 j1 200 f3 p4 j2 500 f4 p6 j3 300 f4 p6 j7 300 f5 p2 j2 200 f5 p2 j4 100 f5 p5 j5 500 f5 p5 j7 100 f5 p6 j2 200 f5 p1 j4 100 f5 p3 j4 200 f5 p4 j4 800 f5 p5 j4 400 f5 p6 j4 500 3 Consultation simple La syntaxe élémentaire de consultation d'une table Oracle est: SELECT nom_colonne_1,, nom_colonne_j FROM nom_de table; Si on désire consulter la table F qui a cette structure F (F#, Fnom, Statut, Ville) on écrira: SELECT F#,Fnom,Statut,Ville FROM F; Le résultat sera: F# Fnom statut Ville f1 Smith 20 Londre f2 Jones 10 Paris f3 Blacke 30 Paris f4 Clark 20 Londre f5 Adams 30 Athene Lorsqu'on désire consulter tous les attributs d'une table on peut écrire: SELECT * FROM nom_de table; 26

Chapitre 4 Consultation de tables 1 Consultation simple On rappelle que la syntaxe élémentaire de consultation d'une table Oracle est: SELECT nom_colonne_1,, nom_colonne_j FROM nom_de table; Ainsi si on désire consulter la table F qui a cette structure F (F#,Fnom,Statut,Ville) on écrira: SELECT F#,Fnom,Statut,Ville FROM F; Lorsqu'on désire consulter tous les attributs d'une table il suffit d écrire: SELECT * FROM nom_de table; Il est aussi possible de demander que le résultat soit affiché en étant triés par une ou plusieurs colonnes en utilisant la clause ORDER BY. La syntaxe du select devient: SELECT nom_colonne_1,, nom_colonne_j FROM nom_de_table [ORDER BY {expression/position} [ASC/DESC]...] [ NULLS FIRST ] [ NULLS LAST ]; C est l ordre ascendant (ASC) qui est pris par défaut. On peut spécifier l'ordre de tri (ascendant ou descendant) relativement à une expression (généralement des colonnes). La mention de position qui suit le ORDER BY indique qu on peut utiliser la position d une colonne dans la clause select à la place de son nom. Exemple : Soit la table F des fournisseurs : F# Fnom statut Ville f1 Smith 20 Londre f2 Jones 10 Paris f3 Blacke 30 Paris f4 Clark 20 Londre f5 Adams 30 Athene f6 Adams 30 Berlin Si on désire avoir pour chaque fournisseur son nom, son statut et sa ville et que le résultat soit ordonné selon la ville on peut écrire : SELECT Fnom,Statut,Ville FROM F ORDER BY 3; 27

Le résultat sera ordonné en fonction du statut: Fnom statut Ville Jones 10 Paris Smith 20 Londre Clark 20 Londre Blacke 30 Paris Adams 30 Athene Adams 30 Berlin NULL FIRST ou LAST pour positionner les valeurs nulls. NULL LAST est par défaut avec l option ASC,NULL FIRST est par défaut avec l option DESC. Lorsque le résultat d un select comprend des redondances comme l exemple suivant : SELECT Fnom,Statut FROM F; Fnom statut Jones 10 Smith 20 Clark 20 Blacke 30 Adams 30 Adams 30 il est possible de les supprimer par la clause DISTINCT : SELECT [{DISTINCT / UNIQUE} / ALL ] liste de colonnes FROM nom_de_table ; DISTINCT / UNIQUE jouent le même rôle à savoir ne pas prendre en compte les redondances. La requête suivante peut donner : SELECT DISTINCT Fnom,Statut FROM F; Fnom statut Jones 10 Smith 20 Clark 20 Blacke 30 Adams 30 ALL est l option par défaut qui prend en compte les redondances. On peut utiliser des parenthèses pour éliminer des duplicata par paires, triplets 2 Consultation avec qualification 28

Si on désire consulter uniquement quelques lignes d'une table relativement à une ou plusieurs conditions la syntaxe peut être enrichie et devient: SELECT nom_colonne_1,, nom_colonne_j FROM nom_de_table [WHERE condition]; Exemple : Soit la table F des fournisseurs : F# Fnom statut Ville f1 Smith 20 Londre f2 Jones 10 Paris f3 Blacke 30 Paris f4 Clark 20 Londre f5 Adams 30 Athene Pour consulter uniquement les fournisseurs de Londre on peut écrire: SELECT F#,Fnom,Statut FROM F WHERE ville = 'Londre'; Le résultat sera: F# Fnom Statut f1 Smith 20 f4 Clark 20 Remarques: 1) Si on a écrit 'LONDRE' on n'aurait aucune réponse, car dans la phase de comparaison entre chaîne de caractère, SQL tient compte des majuscules et minuscules. Ainsi 'LONDRE' est différente de 'LONDRe'. Il est souvent recommandé lors de la comparaison de chaîne de caractères d utiliser une des deux fonctions : LOWER (chaîne) : retourne la chaîne de caractère avec toutes les lettres en minuscule. UPPER (chaîne) : retourne la chaîne de caractère avec toutes les lettres en majuscule. La requête précédente pourra être écrite : SELECT F#,Fnom,Statut FROM F WHERE UPPER ( ville ) = 'LONDRE'; 2) Plusieurs conditions peuvent être combinées à l'aide des opérateurs logiques AND et OR. Le NOT peut être utilisé pour indiquer la négation. Exercice 1 Ecrire la requête SQL qui permet de donner la partie suivante à partir de la table F déjà présentée: f3 Blake 30 Paris f2 Jones 10 Paris 29

L instruction SELECT peut aussi être associé à l'instruction CREATE pour créer une table et y insérer des données à partir d'une autre table existante. La syntaxe est: CREATE TABLE nom_table ( nom_colonne_1,, nom_colonne_j) AS ( une instruction SELECT ); 2.1 Consultation avec critères On peut répartir la consultation d'une table selon des critères en trois groupes: 1) Consultation avec condition de comparaison 2) Consultation avec condition de jointure 3) Consultation avec condition en sous-requête 2.1.1 Consultation avec conditions de comparaison Nous pouvons citer différentes formes de spécification de condition de comparaison: 2.1.1.1 Les opérateurs de comparaison expression [NOT] opérateur-relationnel expression Oracle offre les opérateurs relationnels suivants: =;!= ou <>; >; <=; >=; <; Exemple : Si on désire avoir les numéros des pièces ayant un poids supérieur à 14 il suffit d'écrire la requête suivante: SELECT p# FROM P WHERE poids > 14; La comparaison concerne aussi bien les valeurs numériques que les chaines de caractères et les dates. 2.1.1.2 Le prédicat BETWEEN expression [NOT] BETWEEN expression AND expression Le terme expression peut désigner un nom de colonne, une constante (numérique ou caractère), une pseudo-colonne, une valeur nulle ou une combinaison de ces éléments par des opérateurs arithmétiques (+, -, *, /). Between teste l appartenance à un intervalle fermé de valeurs. Exemple: Soit la table des pièces suivantes P P# Pnom Couleur Poids Ville p1 Nut Rouge 12 Londre p2 Boltes Vert 17 Paris p3 Screw Bleue 17 Rome p4 Screw Rouge 14 Londre p5 Cam Bleue 12 Paris p6 Cog Rouge 19 Londre Si on désire avoir les numéros des pièces ayant un poids entre 14 et 17 il suffit d'écrire : 30