Vous êtes sur la page 1sur 35

Sommaire

OBJECTIFS : .............................................................................................................................................. 2 Procdure dinstallation de SQL server 2000 .......................................................................................... 2 Mise en oeuvre de MySQL (sous Windows) .................................................................................... 2 Dsinstallation ..................................................................................................................................... 3 QUELQUES DEFINITIONS : ...................................................................................................................... 6 IIIIIIIVVARCHITECTURE DUN SGBD ............................................................................................................. 7 LE ROLE DU SGBD ............................................................................................................................ 8 Les oprations sur les donnes ................................................................................................... 8 Optimisation ................................................................................................................................ 9 Concurrence daccs ....................................................................................................................... 9 VIDfinition dun schma relationnel ....................................................................................... 10

Une relation .................................................................................................................................... 11 Schma de relation............................................................................................................................ 11 Caractristiques du langage .................................................................................................................. 12 ILe langage de dfinition de donnes SQL ..................................................................................... 12 I.1- Types SQL .................................................................................................................................... 13 Caractres et chanes de caractres.................................................................................................. 14 I-2 Cration des tables........................................................................................................................... 15 I-3 Modification du schma .................................................................................................................. 20 I-4 Modification des attributs................................................................................................................ 21 I-5 Cration dindex ............................................................................................................................... 21 Exercice.............................................................................................................................................. 22 IILE LANGAGE DE MANIPULATION DES DONNEES .......................................................................... 23 II-1...................................................................................................................................................... 23 La clause WHERE ............................................................................................................................... 25 Syntaxe de la commande SELECT .......................................................................................................... 27 Signification des diffrentes clauses ..................................................................................................... 28 Projection .............................................................................................................................................. 29 SQL : Regroupements ............................................................................................................................ 32 SELECT imbriqus .................................................................................................................................. 33
1

Cours de Bases de donnes


OBJECTIFS :
Ce cours est un cours dinitiation la conception des systmes de gestion des bases de donnes (SGBD). Nous allons nous intresser uniquement la dfinition des structures des donnes (LDD), leur manipulation (LMD) et leur scurit (LCD). Bien entendu il faudrait des pr-requis sur la conception du systme dinformation donc, le modle entit-Association doit tre connu par tous. Le modle logique sera notre priorit. Pour ce cours de base de donnes, nous allons travailler avec deux SGBD au choix : SQL Server ou Mysql. Lessentiel tant de tester le langage SQL travers un SGBD. Vous avez ci-dessous les procdures respectives dinstallation des SGBD. De ce qui est du setup de SQL Server, vous le trouverez dans le dossier Consty-SQL SERVER(D) qui se trouve sur la plate forme

Procdure dinstallation de SQL server 2000.


Cliquer sur le lien ci-dessous http://fadace.developpez.com/mssql/install2000/#soft

Mise en oeuvre de MySQL (sous Windows)


Si tout se passe bien, comptez quelques minutes pour installer MySQL. Je vous conseille toutefois de crer un point de restauration Windows pour pouvoir revenir votre dernire bonne configuration connue. Extraire larchive tlcharge sur le site officiel de MySQL AB (http://dev.mysql.com/downloads/) dans un rpertoire temporaire (exemple : C:\Temp), puis excuter Setup.exe. Installation Le premier choix est donn pour le type dinstallation : typique, complte et personnalise choisir typique dans un premier temps. Le deuxime cran vous invite vous enregistrer ce nest pas obligatoire, mais conseill toutefois pour saluer lnorme travail fait par ces jeunes informaticiens de gnie (voil, la pommade est passe). La suite concerne la configuration du serveur de donnes (choisir la configuration dtaille pour suivre les diffrentes tapes et mieux comprendre le paramtrage de votre serveur).
2

_ Lassistant propose en premier lieu de dterminer le type de votre serveur (machine de dveloppement, serveur ou machine ddie). Jai opt pour le premier choix. _ Choissisez ensuite le type de base de donnes que vous comptez exploiter (multifonction, mode transactionnel seulement ou jamais transactionnel). Jai opt pour le premier choix. _ Dterminez ensuite le rpertoire qui contiendra les donnes des bases InnoDB (cest le type de tables que nous utiliserons dans cet ouvrage, car tant le seul, dans cette version, prendre en charge les cls trangres). Jai opt pour le choix par dfaut. _ Choisissez ensuite loption qui convient votre utilisation (en fonction du nombre de connexions). Jai opt pour le premier choix (vingt connexions maximum). _ Il est ensuite possible de modifier le port UDP dcoute (par dfaut 3306) et le mode comportemental du serveur par rapport la syntaxe des instructions SQL. Jai opt pour le premier choix (mode strict). _ Attention ne pas slectionner un jeu de caractres japonais dans lcran qui arrive. Jai opt pour les choix par dfaut (West European et latin1). _ Lcran suivant permet de dclarer MySQL comme un service Windows (quon pourra arrter via le panneau de configuration plutt quavec une belle commande en ligne, ou par un Ctrl-Alt-Suppr bien connu des bidouilleurs). Penser aussi inclure dans le path le chemin de lexcutable mysql de manire pouvoir lancer une connexion en ligne de commande. Il vous suffit de cocher la case approprie. _ Saisissez un mot de passe pour root ; vous pouvez aussi crer un compte anonyme (connexion fantme sans utilisateur ni mot de passe).

Aprs avoir valid la demande dexcution (bouton Execute), quelques secondes vont scouler avant quon vous invite terminer linstallation. Voil, MySQL est install. Si ce nest pas le cas, la section suivante vous aidera srement. Dernire chose, si vous nutilisez pas souvent MySQL, pensez arrter et positionner sur Manuel le service (ce nest pas pour lespace quil occupe : 10 Mo en RAM). Pour modifier une configuration existante, vous trouverez un assistant dans Dmarrer/ MySQL//MySQL Server Instance Wizard.

Quelques recommandations au cas o linstallation ne sest pas bien droule :

Dsinstallation
Pour supprimer une configuration, vous trouverez un assistant dans Dmarrer/Tous les programmes/MySQL//MySQL Server Instance Wizard, choix Remove Instance.
3

Cependant le rpertoire install par dfaut dans Program Files reste sur le disque (compter une centaine de mga-octets). De mme quen ce qui concerne les entres dans le menu Dmarrer, je ne parle pas de la base de registres qui est inchange Dans Panneau de configuration, Ajout/Suppression de programmes, supprimer MySQL Server. Il reste encore des choses dans la base de registres. Le rpertoire MySQL sous Program Files a diminu de taille, mais il est toujours prsent. Une fois que tout est fait, redmarrez votre machine et reprenez linstallation initiale. Prudence si vous modifiez les chemins des rpertoires des donnes entre plusieurs installations. Reconfiguration En relanant une installation, il vous est donn dajouter des composants (option Modify) si vous navez pas fait une installation complte au dbut. Vous avez aussi la possibilit de rparer (option Repair) une configuration existante.

IBEasy+, est aussi in SGBD libre et simple que vous pouvez utiliser. Pour cela, il vous faut au pralable installer son serveur Firebird.

CHAP1 GENERALITES SUR LES SGBD


QUELQUES DEFINITIONS :
Donnes, Bases de donnes et SGBD La premire chose faire est dtablir quelques points de terminologie. Quest-ce quune donne ? Cest une information quelconque comme, par exemple : voici une personne, elle sappelle Ali. Une donne peut aussi tre une relation entre des informations : Ali passe des commandes dans le cadre dune activit commerciale. Des relations de ce genre dfinissent des structures. Une base de donnes est un ensemble, en gnral volumineux, de telles informations, avec une caractristique essentielle : on souhaite les mmoriser de manire permanente. Do la dfinition : Definition Une Base de donnes est un gros ensemble dinformations structures

mmorises sur un support permanent.

On peut remarquer quune organisation consistant en un (ou plusieurs) fichier(s) stocks sur mmoire secondaire est conforme cette dfinition. Un ensemble de fichiers ne prsentant quune complexit assez faible, il ny aurait pas l matire longue dissertation. Malheureusement lutilisation directe de fichiers soulve de trs gros problmes : 1. Lourdeur daccs aux donnes. En pratique, pour chaque accs, mme le plus simples, il faudrait crire un programme. 2. Manque de scurit. Si tout programmeur peut accder directement aux fichiers, il est impossible de garantir la scurit et lintgrit des donnes. 3. Pas de contrle de concurrence. Dans un environnement o plusieurs utilisateurs accdent aux mmes fichiers, des problmes de concurrence daccs se posent. Do le recours un logiciel charg de grer les fichiers constituant une base de donnes, de prendreen charge les fonctionnalits de protection et de scurit et de fournir les diffrents types dinterface ncessaires laccs aux donnes. Ce logiciel (le SGBD) est trs complexe et fournit le sujet principal de.
6

Definition Un Systme de Gestion de Bases de Donnes (SGBD) est un logiciel qui permet de manipuler les informations stockes dans une base de donnes. La complexit dun SGBD est essentiellement issue de la diversit des techniques mises en oeuvre, de la multiplicit des composants intervenant dans son architecture, et des diffrents types dutilisateurs (administrateurs, programmeurs, non informaticiens, ...) qui sont confronts, diffrents niveaux, au systme. Voici quelques exemples illustrant tous les cas de figure quil faudrait envisager dans un cours exhaustif : Les modles de donnes : entit-relation, rseau, hirarchique, relationnel, orient-objet, modles smantiques. Les langages de requtes : fondements thoriques (logiques du premier ordre, du point fixe, algbres diverses) et les langages comme SQL, SQL3, Datalog, OQL, etc. Les techniques de stockage : sur disque (optique), sur bande. Lorganisation des fichiers : index, arbre-B, hachage, ... Larchitecture : centralis, distribu, sur dautres bases accessibles par rseau. Les techniques dvaluation et doptimisation de requtes. La concurrence daccs et les techniques de reprise sur pane.

I-

ARCHITECTURE DUN SGBD

Chaque niveau du SGBD remplit (ralise) un certain nombre de fonctions : Niveau physique : gestion sur mmoire secondaire (fichiers) des donnes, du schma, des index ; Partage de donnes et gestion de la concurrence daccs ; Reprise sur pannes (fiabilit) ; Distribution des donnes et interoprabilit (accs aux rseaux). Niveau logique : Dfinition de la structure de donnes : Langage de Description de Donnes (LDD) ; Consultation et Mise Jour des donnes : Langages de Requtes (LR) et Langage de Manipulation de Donnes (LMD) ; Gestion de la confidentialit (scurit) ; Maintien de lintgrit ; Niveau externe : Vues ; Environnement de programmation (intgration avec un langage de programmation)

; Interfaces conviviales et Langages de 4e Gnration (L4G) ; Outils daides (e.g. conception de schmas) ; Outils de saisie, dimpression dtats. En rsum, un SGBD est destin grer un gros volume dinformations, persistantes (annes) et fiables (protection sur pannes), partageables entre plusieurs utilisateurs et/ou programmes et manipules indpendamment de leur reprsentation physique.

II-

LE ROLE DU SGBD

Bien entendu, le SGBD doit tre capable de garantir le respect de ces contraintes. Quand on conoit une application pour une BD, on tient compte (plus ou moins consciemment) de cette architecture en plusieurs niveaux. Typiquement : (1) On dcide la structure logique, (2) on dcide la structure physique, (3) on crit les programmes dapplication en utilisant la structure logique, enfin (4) Le SGBD se charge de transcrire les commandes du LMD en instructions appropries appliques la reprsentation physique. Cette approche offre de trs grands avantages quil est important de souligner. Tout dabord elle ouvre lutilisation des SGBD de utilisateurs non-experts : les langages proposs par les modles logiques sont plus simples, et donc plus accessibles, que les outils de gestion de fichiers. Ensuite, on obtient une caractristique essentielle : lindpendance physique. On peut modifier limplantation physique sans modifier les programmes dapplication. Un concept voisin est celui dindpendance logique : on peut modifier les programmes dapplication sans toucher limplantation. Enfin le SGBD dcharge lutilisateur, et en grande partie ladministrateur, de la lourde tche de contrler la scurit et lintgrit des donnes

III-

Les oprations sur les donnes

Il existe 4 oprations classiques (ou requtes) : 1. La cration (ou insertion).


8

2. La modification (ou mise--jour). 3. La destruction. 4. La recherche. Ces oprations correspondent des commandes du LMD. La plus complexe est la recherche en raison de la varit des critres. Pour lutilisateur, une bonne requte a les caractristiques suivantes. Tout dabord elle sexprime facilement: lidal serait de pouvoir utiliser le langage naturel, mais celui-ci prsente trop dambigits. Ensuite le langage ne devrait pas demander dexpertise technique (syntaxe complique, structures de donnes, implantation particulire ...). Il est galement souhaitable de ne pas attendre trop longtemps ( charge pour le SGBD de fournir des performances acceptables). Enfin , et peut-tre surtout, la rponse doit tre fiable. Une bonne partie du travail sur les SGBD consiste satisfaire ces besoins. Le rsultat est ce que lon appelle un langage de requtes, et constitue la fois un sujet majeur dtude et une caractristique essentielle de chaque SGBD. Le langage le plus rpandu lheure actuelle est SQL.

IV-

Optimisation

Loptimisation (dune requte) sappuie sur lorganisation physique des donnes. Les principaux types dorganisation sont les fichiers squentiels, les index (denses. secondaires, arbres B) et le regroupement des donnes par hachage. Un module particulier du SGBD, loptimiseur, tient compte de cette organisation et des caractristiques de la requte pour choisir le meilleur squencement des oprations.

V-

Concurrence daccs

Plusieurs utilisateurs doivent pouvoir accder en mme temps aux mmes donnes. Le SGBD doit savoir : Grer les conflits si les deux font des mises--jour. Offrir un mcanisme de retour en arrire si on dcide dannuler des modifications en cours. Donner une image cohrente des donnes si lun fait des requtes et lautre des mises-jour. Le but : viter les blocages, tout en empchant des modifications.

Un modle de donnes dfinit un mode de reprsentation de linformation selon trois composantes : 1. Des structures de donnes.
9

2. Des contraintes qui permettent de spcifier les rgles que doit respecter une base de donnes. 3. Des oprations pour manipuler les donnes, en interrogation et en mise jour. Les deux premires composantes relvent du Langage de Dfinition de Donnes (DDL) dans un SGBD. Le DDL est utilis pour dcrire le schma dune base de donnes. La troisime composante (oprations) est la base du Langage de Manipulation de Donnes (DML) dont le reprsentant le plus clbre est SQL. Dans le contexte des bases de donnes, la principale qualit dun modle de donnes est dtre indpendant de la reprsentation physique. Cette indpendance permet de sparer totalement les tches respectives des administrateurs de la base, chargs de loptimisation de ses performances, et des dveloppeurs dapplication ou utilisateurs finaux qui nont pas se soucier de la manire dont le systme satisfait leurs demandes. Le modle relationnel, venant aprs les modles hirarchique et rseau, offre une totale indpendance entre les reprsentations logique et physique. Ce chapitre prsente la partie du modle relative la dfinition et la cration des tables, ce qui constitue lessentiel du schma.

VI-

Dfinition dun schma relationnel

Un des grands avantages du modle relationnel est sa trs grande simplicit. Il nexiste en effet quune seule structure, la relation. Une relation peut simplement tre reprsente sous forme de table, comme sur la figure 4.1. Une relation a donc un nom (Film) et se compose dun ensemble de colonnes dsignes par titre anne genre Titre Alien Anne 1979 Genre Science-Fiction

Vertigo

1958

Suspense

Volte-face

1997

Thriller

Pulp Fiction

1995

Policier

FIG. 1

10

Une relation
Un nom dattribut. Dans chaque colonne on trouve des valeurs dun certain domaine (chanes de caractres,nombres). Enfin on constate que chaque ligne (ou tuple) correspond une entit (ici des films). Un schma relationnel est constitu dun ensemble de schmas de relations qui dcrivent, laide des lements prsents informellement ci-dessus (domaines, attributs, noms de relation) le contenu dune relation. Le schma de la relation de la figure 4.1 est donc : Film (titre: string, anne: number, genre : string) Il existe un langage de dfinition pour crer une relation dans un SGBDR, mais nous nous contenterons pour linstant de la description ci-dessus. Voici maintenant quelques prcisions sur la terminologie introduite ci-dessus. Domaines Un domaine de valeurs est un ensemble dinstances dun type lmentaire. Exemple : les entiers, les rels, les chanes de caractres, etc. La notion de type lmentaire soppose celle de type structur : il est interdit en relationnel de manipuler des valeurs instances de graphes, de listes, denregistrements, etc. En dautres termes le systme de types est fig et fourni par le systme. Attributs Les attributs nomment les colonnes dune relation. Il servent la fois indiquer le contenu de cette colonne, et la rfrencer quand on effectue des oprations. Un attribut est toujours associ un domaine. Le nom dun attribut peut apparatre dans plusieurs schmas de relations.

Schma de relation
Un schma de relation est simplement un nom suivi de la liste des attributs, chaque attribut tant associ son domaine. La syntaxe est donc : R(A1 :D1, A2 :D2,., An :Dn)
\

o les Ai sont les noms dattributs et les Di les domaines. Larit dune relation est le nombre

de ses attributs. On peut trouver dans un schma de relation plusieurs fois le mme domaine, mais une seule fois un nom dattribut. Le domaine peut tre omis en phase de dfinition.

11

CHAP 2 LE LANGAGE SQL (STRUCTURED QUERY LANGUAGE)


Ceci est une premire approche du langage et de ses principales fonctionnalits. L'apprentissage du langage est facilit grce au couplage avec un SGBD relationnel qui permet un traitement interactif des requtes.

Caractristiques du langage
SQL (Structured Query Language) est le langage unique qui permet de dcrire, manipuler, contrler l'accs et interroger les bases de donnes relationnelles.

C'est un langage dclaratif, qui s'adresse la fois aux utilisateurs "novices" et aux programmeurs confirms. Il est rgi par une norme (ANSI/ISO) qui assure la portabilit du langage sur diffrentes plates-formes aussi bien matrielles que logicielles. Une commande SQL crite dans un environnement Windows sous ACCESS peut, souvent sans modification, tre utilise directement dans un environnement ORACLE sous Unix...

Ischma

Le langage de dfinition de donnes SQL

Ce chapitre prsente le langage de dfinition de donnes (LDD) qui permet de spcifier le dune base de donnes relationnelle. Ce langage correspond une partie de la norme SQL (structured query language), lautre partie tant relative la manipulation des donnes (LMD). La dfinition dun schma logique comprend essentiellement deux parties : dune part la description des tables et de leur contenu, dautre part les contraintes qui portent sur les donnes de la base. La spcification des contraintes est souvent place au second plan bien quelle soit en fait trs importante : elle permet dassurer, au niveau de la base des contrles sur lintgrit des donns qui simposent toutes les

12

applications accdant cette base. Un dernier aspect de la dfinition dun schma, rapidement survol ici, est la description de la reprsentation physique. Il existe plusieurs versions de SQL. Le plus ancien standard date de 1989. Il a t rvis de manire importante en 1992 : la norme rsultant de cette rvision est SQL-92 ou SQL2. Une extension (SQL3) comprenant lintroduction de caractristiques orientes-objet est en cours de discussion depuis trs longtemps, et certains systmes ont dj anticip en proposant de nouvelles fonctionnalits. Le matriel prsent dans ce cours est essentiellement SQL2, sauf pour quelques nouveauts explicitement indiques.

I.1- Types SQL


La norme SQL ANSI propose un ensemble de types qui sont donns dans le tableau 4.1. Ce tableau prsente galement la taille, en octets, des instances de chaque type, cette taille ntant ici qu titre indicatif car elle peut varier selon les systmes.

Type INTEGER SMALLINT BIGINT FLOAT DOUBLE

Description Type des entiers relatifs Idem. Idem. Flottants simple prcision

Taille 4 octets 2 octets 8 octets 4 octets

PRECISION Flottants double 8 octets prcision

REAL NUMERIC (M, D)

Synonyme de FLOAT

4 octets

Numrique avec prcision M octets fixe.

CHAR(M) VARCHAR(M) DATE TIME

Chanes de longueur fixe Chanesde longueur variable Date (jour, mois, an) Horaire secondes) (heure,

M octets

env. 4 octets minutes, env. 4 octets

DATETIME YEAR

Date et heure Anne

8 octets 2 octets
13

Fig2 Types SQL ANSI

Types numriques exacts La norme SQL ANSI distingue deux catgories dattributs numriques : les numriques exacts, et les numriques flottants. Les types de la premire catgorie (essentiellement INTEGER et DECIMAL) permettent de spcifier la prcision souhaite pour un attribut numrique, et donc de reprsenter une valeur exacte. Les numriques flottants correspondent aux types couramment utiliss en programmation (FLOAT, DOUBLE) et ne reprsentent une valeur quavec une prcision limite. Le type INTEGER permet de stocker des entiers, sur 4 octets en gnral, mais la taille du stockage nest pas spcifie par la norme. Il existe deux variantes du type INTEGER : SMALLINT et BIGINT. Ces types diffrent par la taille utilise pour le stockage.

Le type DECIMAL (M, D) correspond un numrique de taille maximale M, avec un nombre de dcimales fix D. Le type NUMERIC est un synonyme pour DECIMAL. Ces types sont surtout utiles pour manipuler des valeurs dont la prcision est connue, comme les valeurs montaires. Afin de prserver cette prcision, les instances de ces types sont stockes comme des chanes de caractres. Types numriques flottants Ces types sappuient sur la reprsentation des numriques flottants propre la machine, en simple ou double prcision. Leur utilisation est donc analogue celle que lon peut en faire dans un langage de programmation comme le C. 1. Le type FLOAT correspond aux flottants en simple prcision. 2. Le type DOUBLE PRECISION correspond aux flottants en double prcision. Le raccourci DOUBLE est accept. 3. Le type REAL est un synonyme pour DOUBLE.

Caractres et chanes de caractres


Les deux types principaux de la norme ANSI, disponibles dans la plupart des SGBD relationnels, sont CHAR et VARCHAR. Ces deux types permettent de stocker des chanes de caractres dune taille maximale

14

fixe par le paramtre M. Les syntaxes sont identiques. Pour le premier, CHAR(M), et pour le second VARCHAR(M). La diffrence essentielle entre les deux types est quune valeur CHAR a une taille fixe, et se trouve donc complte avec des blancs si sa taille est infrieure M. En revanche une valeur VARCHAR a une taille variable et est tronque aprs le dernier caractre non blanc. Quand on veut stocker des chanes de caractres trs longues (des textes, voire des livres), le type VARCHAR ne suffit plus. La norme SQL propose un type BIT VARYING qui correspond de trs longues chanes de caractres. Souvent les systmes proposent des variantes de ce type sous le nom BLOB (pour Binary Long Object) ou LONG. Dates Un attribut de type DATE stocke les informations jour, mois et anne (sur 4 chiffres). La reprsentation interne nest pas spcifie par la norme. Tous les systmes proposent de nombreuses oprations de conversion (non normalises) qui permettent dobtenir un format daffichage quelconque. Un attribut de type TIME stocke les informations _heure _, _minute _ et _seconde _. Laffichage se fait par dfaut au format HH:MM:SS. Le type DATETIME permet de combiner une date et un horaire, laffichage se faisant au format AAAA-MM-JJ HH:MM:SS.

I-2 Cration des tables


Soit le schma relationnel suivant : Film (idFilm, titre, anne, genre, rsum, idArtiste, codePays) Artiste (idArtiste, nom, prnom, anneNaissance) Pays (code, nom, langue) _Internaute(nom, prenom,motDePasse,anneNaiss) _Cinma(nom,adresse) _Notation(idFilm, email,titre, note) Le rle prcis tenu par lartiste dans lassociation La commande principale est CREATE TABLE. Voici la commande de cration de la table Internaute. CREATE TABLE Internaute (email VARCHAR (50) NOT NULL, nom VARCHAR (20) NOT NULL,

15

prenom VARCHAR (20), motDePasse VARCHAR (60) NOT NULL, anneeNaiss DECIMAL (4)) La syntaxe se comprend aisment. La seule difficult est de choisir correctement le type de chaque attribut. Le NOT NULL dans la cration de table Internaute indique que lattribut correspondant doit toujours avoir une valeur. Il sagit dune diffrence importante entre la pratique et la _thorie _: on admet que certains attributs peuvent ne pas avoir de valeur, ce qui est trs diffrent dune chane vide ou de 0. Quand on parle de valeur NULL en SQL2, il sagit en fait dune absence de valeur. En consquence : 1. on ne peut pas faire dopration incluant un NULL ; 2. on ne peut pas faire de comparaison avec un NULL. Loption NOT NULL oblige toujours indiquer une valeur. Loption suivante permet ainsi de garantir que tout internaute a un mot de passe. motDePasse VARCHAR(60) NOT NULL Le SGBD rejettera alors toute tentative dinsrer une ligne dans Internaute sans donner de mot de passe. Si les valeurs NULL sont autorises, il faudra en tenir compte quand on interroge la base. Cela peut compliquer les choses, voire donner des rsultats surprenants : il est prfrable de forcer les attributs important avoir une valeur. Une autre manire de forcer un attribut toujours prendre une valeur est de spcifier une valeur par dfaut avec loption DEFAULT. CREATE TABLE Cinma (nom VARCHAR (50) NOT NULL, adresse VARCHAR (50) DEFAULT Inconnue) Quand on insrera une ligne dans la table Cinma sans indiquer dadresse, le systme affectera automatiquement la valeur Inconnu cet attribut. En gnral on utilise comme valeur par dfaut une constante, sauf pour quelques variables fournies par le systme (par exemple SYSDATE qui peut indiquer la date du jour). Contraintes La cration dune table telle quon la vue prcdemment est extrmement sommaire car elle nindique que le contenu de la table sans spcifier les contraintes que doit respecter ce contenu. Or il y a toujours des contraintes et il est indispensable de les inclure dans le schma pour assurer (dans la mesure du possible) lintgrit de la base. Voici les rgles (ou contraintes dintgrit) que lon peut demander au systme de garantir :
16

1. Un attribut doit toujours avoir une valeur. Cest la contrainte NOT NULL vue prcdemment. 2. Un attribut (ou un ensemble dattributs) constitue(nt) la cl de la relation. 3. Un attribut dans une table est lie la cl primaire dune autre table (intgrit rfrentielle). 4. La valeur dun attribut doit tre unique au sein de la relation. 5. Enfin toute rgle sappliquant la valeur dun attribut (min et max par exemple). Les contraintes sur les cls doivent tre systmatiquement spcifies. La dernire (clause CHECK) sappuie en grande partie sur la connaissance du langage dinterrogation de SQL et sera vue ultrieurement. Cls dune table Une cl est un attribut (ou un ensemble dattributs) qui identifie(nt) de manire unique un tuple dune relation. Il peut y avoir plusieurs cls mais lune dentre elles doit tre choisie comme cl primaire. Ce choix est important : la cl primaire est la cl utilise pour rfrencer une ligne et une seule partir dautres tables. Il est donc assez dlicat de la remettre en cause aprs coup. En revanche les cls secondaires peuvent tre cres ou supprimes beaucoup plus facilement. La cl primaire est spcifie avec loption PRIMARY KEY. CREATE TABLE Internaute (email VARCHAR (50) NOT NULL, nom VARCHAR (20) NOT NULL, prenom VARCHAR (20), motDePasse VARCHAR (60) NOT NULL, anneeNaiss INTEGER, PRIMARY KEY (email)) Il devrait toujours y avoir une PRIMARY KEY dans une table pour ne pas risquer dinsrer involontairement deux lignes strictement identiques. Une cl peut tre constitue de plusieurs attributs : CREATE TABLE Notation (idFilm INTEGER NOT NULL, email VARCHAR (50) NOT NULL, note INTEGER DEFAULT 0, PRIMARY KEY (titre, email)) Tous les attributs figurant dans une cl doivent tre dclars NOT NULL. Cela na pas vraiment de sens en effet didentifier des lignes par des valeurs absentes. On peut galement spcifier que la valeur dun attribut est unique pour lensemble de la colonne. Cela permet dindiquer des cls secondaires. On peut par exemple indiquer que deux artistes ne peuvent avoir les mmes nom et prnom avec loption UNIQUE. CREATE TABLE Artiste(id INTEGER NOT NULL, nom VARCHAR (30) NOT NULL,
17

prenom VARCHAR (30) NOT NULL, anneeNaiss INTEGER, PRIMARY KEY (id), UNIQUE (nom, prenom)); Il est facile de supprimer cette contrainte de cl secondaire par la suite. Ce serait beaucoup plus difficile si on avait utilis la paire (nom, prenom) comme cl primaire puisquelle serait alors utilise pour rfrencer un artiste dans dautres tables. Voici un autre exemple dutilisation dune cl secondaire : on indique ci-dessous quon ne peut pas trouver deux cinmas la mme adresse. Ce deuxime exemple montre que lon peut placer une contrainte comme UNIQUE sur la ligne de lattribut auquel elle se rapporte. Ce nest bien entendu possible que quand cette contrainte ne concerne quun seul attribut. CREATE TABLE Cinema (nom VARCHAR (30) NOT NULL, adresse VARCHAR(50) UNIQUE, PRIMARY KEY (nomCinema)) La clause UNIQUE ne sapplique pas aux valeurs NULL : il peut y avoir plusieurs cinmas dadresse inconnue. En revanche le nom du cinma est obligatoire (clause NOT NULL) et il est unique (clause PRIMARY KEY). Cls trangres La norme SQL ANSI permet dindiquer quelles sont les cls trangres dans une table, autrement dit, quels sont les attributs qui font rfrence une ligne dans une autre table. On peut spcifier les cls trangres avec loption FOREIGN KEY. CREATE TABLE Film (idFilm INTEGER NOT NULL, titre VARCHAR (50) NOT NULL, annee INTEGER NOT NULL, idMES INTEGER, codePays INTEGER, PRIMARY KEY (idFilm), FOREIGN KEY (idMES) REFERENCES Artiste, FOREIGN KEY (codePays) REFERENCES Pays);

La commande FOREIGN KEY (idMES) REFERENCES Artiste indique que idMES rfrence la cl primaire de la table Artiste. Le SGBD vrifiera alors, pour toute modification pouvant affecter le lien entre les deux tables, que la valeur de idMES correspond bien une ligne de Artiste. Ces modifications sont : 1. linsertion dans Film avec une valeur inconnue pour idMES ;
18

2. la destruction dun artiste ; 3. la modification de id dans Artiste ou de idMES dans Film. En dautres termes le lien entre Film et Artiste est toujours valide. Cette contrainte est importante pour garantir quil ny a pas de fausse rfrence dans la base, par exemple quun film ne fait pas rfrence un artiste qui nexiste pas. Il est beaucoup plus confortable dcrire une application par la suite quand on sait que les informations sont bien l o elles doivent tre. Il faut noter que lattribut idMES nest pas dclar NOT NULL, ce qui signifie que lon sautorise ne pas connatre le metteur en scne dun film. Quand un attribut est NULL, la contrainte dintgrit rfrentielle ne sapplique pas. Que se passe-t-il quand la violation dune contrainte dintgrit est dtecte par le systme ? Par dfaut, la mise jour est rejete, mais il est possible de demander la rpercussion de cette mise jour de manire ce que la contrainte soit respecte. Les vnements que lon peut rpercuter sont la modification ou la destruction de la ligne rfrence, et on les dsigne par ON UPDATE et ON DELETE respectivement. La rpercussion elle-mme consiste soit mettre la cl trangre NULL (option SET NULL), soit appliquer la mme opration aux lignes de lentit composante (option CASCADE). Voici comment on indique que la destruction dun metteur en scne dclenche la mise NULL de la cl trangre idMES pour tous les films quil a raliss. CREATE TABLE Film (titre VARCHAR (50) NOT NULL, annee INTEGER NOT NULL, idMES INTEGER, codePays INTEGER, PRIMARY KEY (titre), FOREIGN KEY (idMES) REFERENCES Artiste ON DELETE SET NULL, FOREIGN KEY (codePays) REFERENCES Pays); Dans le cas dune entit faible, on dcide en gnral de dtruire le composant quand on dtruit le compos. Par exemple, quand on dtruit un cinma, on veut galement dtruire les salles ; quand on modifie la cl dun cinma, on veut rpercuter la modification sur ses salles. CREATE TABLE Salle (nomCinema VARCHAR (30) NOT NULL, no INTEGER NOT NULL, capacite INTEGER, PRIMAR KEY (nomCinema, no), FOREIGN KEY (nomCinema) REFERENCES Cinema ON DELETE CASCADE ON UPDATE CASCADE
19

) Il est important de noter que nomCinema fait partie de la cl et ne peut donc pas tre NULL. On ne pourrait donc pas spcifier ici ON DELETE SET NULL. La spcification des actions ON DELETE et ON UPDATE simplifie considrablement la gestion de la base par la suite : on na plus par exemple se soucier de dtruire les salles quand on dtruit un cinma.

Une autre manire de dfinir, dans la base, lensemble des valeurs autorises pour un attribut en dautres termes, une codification impose consiste placer ces valeurs dans une table et la lier lattribut par une contrainte de cl trangre. Cest ce que nous pouvons faire par exemple pour la table Pays. CREATE TABLE Pays (code VARCHAR (4) DEFAULT 0 NOT NULL, nom VARCHAR (30) NOT NULL, langue VARCHAR (30) NOT NULL, PRIMARY KEY (code)) INSERT INTO Pays VALUES (0, Inconnu, Inconnue); INSERT INTO Pays VALUES (1, France, Franais); INSERT INTO Pays VALUES (2, USA, Anglais); INSERT INTO Pays VALUES (3, Allemagne, Allemand); INSERT INTO Pays VALUES (4, Angleterre, Anglais); ... Si on ne fait pas de vrification automatique, soit avec CHECK, soit avec la commande FOREIGN KEY, il faut faire cette vrification dans lapplication, ce qui est plus lourd grer.

I-3 Modification du schma


La cration dun schma nest quune premire tape dans la vie dune base de donnes. On est toujours amen par la suite crer de nouvelles tables, ajouter des attributs ou en modifier la dfinition. La forme gnrale de la commande permettant de modifier une table est : ALTER TABLE nomTable ACTION description o ACTION peut tre principalement ADD, MODIFY, DROP ou RENAME, et description est la commande de modification associe ACTION. La modification dune table peut poser des problmes si elle est incompatible avec le contenu existant. Par exemple passer un attribut NOT NULL implique que cet attribut a dj des valeurs pour toutes les lignes de la table.
20

I-4 Modification des attributs


Voici quelques exemples dajout et de modification dattributs. On peut ajouter un attribut region la table Internaute avec la commande : ALTER TABLE Internaute ADD region VARCHAR(10); Sil existe dj des donnes dans la table, la valeur sera NULL ou la valeur par dfaut. La taille de region tant certainement insuffisante, on peut lagrandir avec MODIFY, et la dclarer NOT NULL par la mme occasion : ALTER TABLE Internaute MODIFY region VARCHAR(30) NOT NULL; Il est galement possible de diminuer la taille dune colonne, avec le risque dune perte dinformation pour les donnes existantes. On peut mme changer son type, pour passer par exemple de VARCHAR INTEGER, avec un rsultat imprvisible. Loption ALTER TABLE permet dajouter une valeur par dfaut. ALTER TABLE Internaute ALTER region SET DEFAULT PACA; Enfin on peut dtruire un attribut avec DROP. ALTER TABLE Internaute DROP region;

I-5 Cration dindex


Pour complter le schma dune table, on peut dfinir des index. Un index offre un chemin daccs aux lignes dune table qui est considrablement plus rapide que le balayage de cette table du moins quand le nombre de lignes est trs lev. Les SGBDL crent systmatiquement un index sur la cl primaire de chaque table. Il y a deux raisons cela ; 1. lindex permet de vrifier rapidement, au moment dune insertion, que la cl nexiste pas dj ; 2. beaucoup de requtes SQL, notamment celles qui impliquent plusieurs tables (jointures), se basent sur les cls des tables pour reconstruire les liens. Lindex peut alors tre utilis pour amliorer les temps de rponse. Un index est galement cr pour chaque clause UNIQUE utilise dans la cration de la table. On peut de plus crer dautres index, sur un ou plusieurs attributs, si lapplication utilise des critres de recherche autres que les cls primaire ou secondaires. La commande pour crer un index est la suivante : CREATE [UNIQUE] INDEX nomIndex ON nomTable (attribut1 [, ...]) La clause UNIQUE indique quon ne peut pas trouver deux fois la mme cl. La commande ci-dessous cre un index de nom idxNom sur les attributs nom et prenom de la table Artiste.

21

Cet index a donc une fonction quivalente la clause UNIQUE dj utilise dans la cration de la table. CREATE UNIQUE INDEX idxNom ON Artiste (nom, prenom); On peut crer un index, cette fois non unique, sur lattribut genre de la table Film. CREATE INDEX idxGenre ON Film (genre); Cet index permettra dexcuter trs rapidement des requtes SQL ayant comme critre de recherche le genre dun film. SELECT * FROM Film WHERE genre = Western Cela dit il ne faut pas crer des index tort et travers, car ils ont un impact ngatif sur les commandes dinsertion et de destruction. chaque fois, il faut en effet mettre jour tous les index portant sur la table, ce qui reprsente un cot certain.

Exercice
Complter le schma relationnel suivant, sachant quun mdecin peut faire plusieurs consultations et qu linverse une consultation est faite par quun seul mdecin. Un patient assiste plusieurs consultations alors quune consultation nest rserve qu un patient. Un mdicament est prescrit au cours de plusieurs consultations et inversement. Ensuite, pour chaque table, il faut indiquer prcisment, laide de la syntaxe vue en cours : La cl primaire. Les cls trangres.

Mdecin( Matricule, nom) Patient ( NSS, nom) Consultation (N, date) Mdicament (Code, libell) Est Prescrit(Nbre_Prises)

22

II-

LE LANGAGE DE MANIPULATION DES DONNEES

II-1 Requtes simples SQL


1 Slections simples Soit une instance de base pour les relations Station et Activite. Premire requte : on souhaite extraire de la base le nom de toutes les stations se trouvant aux Antilles. SELECT nomStation FROM Station WHERE region = Antilles Ce premier exemple montre la structure de base dune requte SQL, avec les trois clauses SELECT, FROM et WHERE. FROM indique la (ou les) tables dans lesquelles on trouve les attributs utiles la requte. Un attribut peut tre utile de deux manires (non exclusives) : (1) on souhaite afficher son contenu, (2) on souhaite quil ait une valeur particulire (une constante ou la valeur dun autre attribut). SELECT indique la liste des attributs constituant le rsultat. WHERE indique les conditions que doivent satisfaire les n-uplets de la base pour faire partie du rsultat. Dans lexemple prcdent, linterprtation est simple : on parcourt les n-uplets de la relation Station. Pour chaque n-uplet, si lattribut region a pour valeur Antilles, on place lattribut nomStation dans le rsultat 1. On obtient donc le rsultat : nomStation Venusa Santalba Le rsultat dun ordre SQL est toujours une relation (une table) dont les attributs sont ceux spcifis dans la clause SELECT. On peut donc considrer en premire approche ce rsultat comme un dcoupage, horizontal et vertical, de la table indique dans le FROM, similaire une utilisation combine de la slection et de la projection en algbre relationnelle. En fait on dispose dun peu plus de libert que cela. On peut : Renommer les attributs Appliquer des fonctions aux valeurs de chaque tuple. Introduire des constantes.

23

Les fonctions applicables aux valeurs des attributs sont par exemple les oprations arithmtiques (+,-, /, *, ...) pour les attributs numriques ou des manipulations de chane de caractres (concatnation, souschanes, mise en majuscule, ...). Il nexiste pas de norme mais la requte suivante devrait fonctionner sur tous les systmes : on convertit le prix des activits en euros et on affiche le cours de leuro avec chaque tuple. SELECT libelle, prix / 6.56, Cours de leuro = , 6.56 FROM Activite WHERE nomStation = Santalba 1. Attention, ce nest pas forcment ainsi que la requte est excute par le systme.

Ce qui donne le rsultat : libelle prix / 6.56 Cours de leuro = 6.56 Kayac 7.62 Cours de leuro = 6.56 Renommage Les noms des attributs sont par dfaut ceux indiqus dans la clause SELECT, mme quand il y a des expressions complexes. Pour renommer les attributs, on utilise le mot-cl AS. SELECT libelle, prix / 6.56 AS prixEnEuros, Cours de leuro = , 6.56 AS cours FROM Activite WHERE nomStation = Santalba On obtient alors : libelle prixEnEuros Cours de leuro = cours Kayac 7.69 Cours de leuro = 6.56 Remarque : Sur certains systmes, le mot-cl AS est optionnel. Doublons Lintroduction de fonctions permet daller au-del de ce qui est possible en algbre relationnelle. Il existe une autre diffrence, plus subtile : SQL permet lexistence de doublons dans les tables (il ne sagit donc pas densemble au sens strict du terme). La spcification de cls permet dviter les doublons dans les relations stockes, mais il peuvent apparatre dans le rsultat dune requte. Exemple : SELECT libelle FROM Activite donnera autant de lignes dans le rsultat que dans la table Activite.
24

libelle Voile Plongee Plongee Ski Piscine Kayac Pour viter dobtenir deux tuples identiques, on peut utiliser le mot-cl DISTINCT. SELECT DISTINCT libelle FROM Activite Attention : llimination des doublons peut tre une opration coteuse. Tri du rsultat Il est possible de trier le rsultat dun requte avec la clause ORDER BY suivie de la liste des attributs servant de critre au tri. Exemple : SELECT * FROM Station ORDER BY tarif, nomStation

La clause WHERE
Dans la clause WHERE, on spcifie une condition boolenne portant sur les attributs des relations du FROM. On utilise pour cela de manire standard le AND, le OR, le NOT et les parenthses pour changer lordre de priorit des oprateurs boolens. Par exemple : SELECT nomStation, libelle FROM Activite WHERE nomStation = Santalba AND (prix > 50 AND prix < 120) Les oprateurs de comparaison sont ceux du Pascal : <,> ,=, <=, >=. Pour obtenir une recherche par intervalle, on peut galement utiliser le mot-cl BETWEEN. La requte prcdente est quivalente : SELECT nomStation, libelle FROM Activite WHERE nomStation = Santalba
25

AND prix BETWEEN 50 AND 120 Chanes de caractres Les comparaisons de chanes de caractres soulvent quelques problmes dlicats. 1. Il faut tre attentif aux diffrences entre chanes de longueur fixe et chanes de longueur variable. Les premires sont compltes par des blancs ( ) et pas les secondes.

26

COMPLEMENTS DU COURS DE SQL


Les commandes SQL Catgorie Description des donnes (DDL) Commandes SQL CREATE ALTER DROP INS Manipulation des (DML) donnes ERT UPDATE DELETE GRANT Contrle des REVOKE Cration de tables Modification de tables Suppression de tables Insertion de lignes dans une table Mise jour de lignes dans une table Suppression de lignes dans une table Attribution de droits d'accs Suppression de droits d'accs Prise en compte des mises jour Suppression des mises jour Interrogations diverses

donnes (DCL) COMMIT ROLLBACK Interrogation des donnes SELECT

Nous ne traiterons dans cette prsentation que des commandes lies l'interrogation de donnes : clause SELECT.

Syntaxe de la commande SELECT


SELECT FROM [WHERE [GROUP { BY [DISTINCT] {* table conditions expr, | ...] | expr [AS [alias], sous [HAVING conditions} alias], ... } ... ]

conditions]

[ORDER BY {expr | num}{ASC | DESC}, ...]; Conventions syntaxiques MAJUSCULES prsent.


27

: (SELECT ......... ...) Entrer les valeurs exactement comme

Italique approprie. Alias Conditions Sous conditions Expr num {} obligatoirement [] () prsent. ... _ Soulign :

: colonne, table. Paramtre devant tre remplac par la valeur

: : : :

Synonyme Expression Expression Colonne,

d'un

nom la

de

table valeur une calcul de

ou vraie

de ou

colonne. fausse.

prenant

contenant ou attribut

sous-interrogation. (+, -, *, /)

Numro : Ex {ON|OFF}. Une des tre : Valeur

colonne spares par '|' doit

valeurs

saisie. optionnelle.

: Les parenthses et les virgules doivent tre saisies comme

: Les valeurs prcdentes peuvent tre rptes plusieurs fois : Indique la valeur par dfaut.

Signification des diffrentes clauses


SELECT Prcise les colonnes qui vont apparatre dans la rponse Prcise la (ou les) table intervenant dans

FROM

l'interrogation Prcise les conditions appliquer sur les lignes. On peut trouver comparateurs : =, >, <, >=, : <=,<>

WHERE

Des

- Des oprateurs logiques : AND, OR, NOT - Les prdicats : IN, LIKE, NULL, ALL, SOME, ANY, EXISTS...

GROUP BY HAVING

Prcise la (ou les) colonne de regroupement Prcise la (ou les) conditions associes un regroupement Prcise l'ordre dans lequel vont apparatre les lignes

ORDER BY

de ASC :

la En ordre

rponse ascendant (par

: dfaut)

- DESC: En ordre descendant

28

SQL : Projection, slection

Projection
L'opration de projection consiste choisir le nom des colonnes de la (ou des) table(s) que l'on souhaite voir apparatre dans la rponse. Si l'on veut afficher toutes les colonnes, il faut utiliser "*". Les colonnes sont donnes aprs la clause SELECT. - Afficher le Nom et le code sexe des tudiants. SELECT FROM ETUDIANT; - Afficher le Contenu de la table ETUDIANT SELECT * SQL : les prdicats NULL, IN, LIKE, BETWEEN Nometu, Cdsexe

Prdicat NULL Un attribut (une colonne, un champ...) peut avoir la valeur "NULL" soit en raison d'information incomplte (la valeur n'tait pas connue au moment de la saisie des donnes) soit parce que la donne n'est pas pertinente. Dans une table qui modlise des individus, l'attribut "Nom Marital" n'est pas pertinent pour les individus de sexe masculin et a donc la valeur "NULL". La valeur "NULL" est diffrente de la valeur par dfaut de l'attribut : zro pour un attribut de type numrique et espace pour un attribut de type caractre. La syntaxe est : IS NULL et sa ngation IS NOT NULL. - Numro, nom et sexe des tudiants dont la date de naissance n'est pas connue SELECT FROM WHERE Dtnaiss IS NULL; Prdicat IN Il comporte une liste de valeurs et vrifie si une valeur particulire apparat sur cette liste.
29

Numetu,

Nometu ETUDIANT

La

syntaxe

est

IN(val1,

val2,

...)

et

sa

ngation

NOT

IN(val1,

val2,

...).

Lorsque la liste des valeurs est connue et fixe, le prdicat IN peut tre remplac par une suite d'oprateurs logiques OR. Lorsque la liste des valeurs n'est pas connue priori, comme dans certaines sous-interrogations, ce prdicat est ncessaire. - Numro et nom des enseignants qui sont soit assistants (ASS) soit professeurs (PR) Version IN SELECT FROM Numens, Nomens ENSEIGNANT Version OR SELECT FROM WHERE OR Grade='PR'; Numens, Nomens

ENSEIGNANT Grade='ASS'

WHERE Grade IN('ASS', 'PR');

Prdicat LIKE Ce prdicat permet de faire des recherches l'intrieur d'une chane de caractres, lorsque l'on dispose d'informations incompltes. Il utilise 2 caractres gnriques : % : utilis pour reprsenter une chane de caractre de longueur quelconque. _ : utilis pour reprsenter un caractre unique. La syntaxe est : LIKE 'Chane de recherche' et sa ngation NOT LIKE 'Chane de recherche' - Nom et date de naissance des tudiants dont la 2 lettre du nom est 'a'. SELECT FROM WHERE Nometu LIKE '_a%'; Nometu, Dtnaiss ETUDIANT

SQL : Les jointures

Jointure C'est une opration fondamentale lorsque l'on manipule des bases de donnes et qui permet de runir, 2 par 2, des tables. Il faut prciser, aprs la clause FROM, le nom des tables qui
30

vont intervenir et, aprs la clause WHERE, les conditions qui vont permettre de raliser la jointure. Notions d'alias Un alias permet de renommer une colonne ou une table. Cette opration est utile lorsque l'on veut qu'une colonne ait un nom plus "parlant" ou qu'une table puisse tre manipule plus facilement notamment quand il existe diffrentes conditions de jointure. Donner un nom d'alias une table est indispensable en cas d'auto-jointure. -Alias de colonne Syntaxe : Col1 AS "Nom de la colonne".

Dans le rsultat de la requte correspondante, Col1 sera remplace par "Nom de la colonne". Les guillemets ne sont obligatoires que si le nom d'alias comporte des espaces. Alias de table Syntaxe : Table1 Alias1

Dans une requte, Alias1 sera identique Table1 Equi-jointure Cette opration permet de relier, avec une relation d'galit, des tables qui ont au moins un attribut commun. On doit avoir n-1 conditions de jointure, n tant le nombre de tables qui interviennent cartsien des tables impliques. - Nom et libell du sexe de chaque tudiant SELECT FROM Nometu AS ETUDIANT "Nom tudiant", E, Lbsexe SEXE AS Sexe S dans la requte.

Si aucune condition de jointure est prcise, la requte correspondante ralisera le produit

WHERE E.Cdsexe=S.Cdsexe; Dans cette requte, la jointure s'effectue sur l'attribut commun (Cdsexe) entre les tables ETUDIANT et SEXE qui ont pour alias respectifs E et S. L'attribut de jointure (Cdsexe) ayant le mme nom dans les 2 tables, il est ncessaire de le prfixer par le nom de la table auquel il se rattache.

31

SQL : Regroupements

Clause GROUP BY Cette clause permet de crer des sous-ensembles (regroupements) de lignes pour lesquels la valeur d'une (ou plusieurs) colonne est identique. Cette clause est lie l'utilisation de fonctions statistiques qui seront appliques sur les sous-ensembles dfinis par GROUP BY. - Regroupement par grade des enseignants SELECT FROM GROUP BY Grade; Cette requte va crer autant de sous-ensembles que de valeurs possibles de l'attribut Grade. Ici 3 sous-ensembles : ASS, MCF, PR. Clause HAVING Cette clause, contrairement la clause WHERE qui prcise les conditions appliquer sur les lignes d'une table, permet de prciser des conditions au niveau des sous-ensembles crs par GROUP BY. - Regroupement par grade des enseignants de type 'ASS' SELECT FROM GROUP HAVING Grade='ASS'; Fonctions statistiques Fonctions COUNT([DISTINCT] expr [alias] Rle Renvoie le nombre de valeurs dans la colonne. Si DISTINCT BY Grade ENSEIGNANT Grade Grade ENSEIGNANT

32

est prcis, les doublons sont limins. COUNT(*) Compte toutes les lignes de la table. Renvoie la moyenne des

AVG(expr [alias])

valeurs de la colonne spcifie. Renvoie la plus petite valeur de la colonne spcifie. Renvoie la plus grande valeur de la colonne spcifie. Renvoie la somme des valeurs de la colonne spcifie.

MIN(expr [alias])

MAX(expr [alias])

SUM(expr [alias])

- Afficher la date de naissance de l'tudiant le plus jeune et de l'tudiant le plus g. SELECT MIN(Dtnaiss) AS "Plus jeune", MAX(Dtnaiss) AS "Plus g"

FROM ETUDIANT; - Afficher le nombre total d'tudiants SELECT FROM ETUDIANT; COUNT(*)

SELECT imbriqus
Les sous-interrogations, ou SELECT imbriqus, permettent de raliser des interrogations complexes qui ncessiteraient normalement plusieurs interrogations avec stockage des rsultats intermdiaires. Elles se caractrisent par une interrogation (clause SELECT) inclue dans la clause WHERE, la clause HAVING ou la clause SELECT d'une autre interrogation. - Dterminer le nom le sexe et l'ge de l'tudiant le plus g. SELECT FROM WHERE (CURRENT_DATE-Dtnaiss)/365 Nometu, Cdsexe, (CURRENT_DATE-Dtnaiss)/365 AS Age

ETUDIANT =

(SELECT MAX((CURRENT_DATE-Dtnaiss)/365) FROM ETUDIANT);

33

Prdicats IN, ANY, ALL, EXISTS Une sous-interrogation peut retourner un sous ensemble de zro n valeurs. En fonction des conditions que l'on veut exprimer au niveau des valeurs renvoyes par la requte, on peut utiliser les prdicats IN, ANY, ALL ou EXISTS. Prdicat IN Utilisation L'oprateur de comparaison est l'galit et l'opration logique entre les valeurs est OU. Permet de vrifier si au moins une valeur de la liste satisfait la condition. Permet de vrifier si la condition est ralise pour toutes les valeurs de la liste. Si la sous-interrogation renvoie un rsultat, la valeur retourne est Vrai sinon la valeur Faux est retourne.

ANY

ALL

EXISTS

- Afficher les notes de l'tudiant numro 1 qui sont gales aux notes de l'tudiant numro 2. SELECT FROM WHERE Numetu=1 AND Note (SELECT Note FROM NOTES WHERE Numetu=2); - Afficher les notes de l'tudiant numro 1 qui sont suprieures aux notes de l'tudiant numro 2. SELECT FROM WHERE Numetu=1 AND Note > (SELECT Note FROM NOTES WHERE Numetu=2); - Afficher les notes de l'tudiant numro 1 qui sont infrieures toutes les notes de l'tudiant numro 9. Note NOTES ANY Note NOTES IN

34

SELECT FROM WHERE Numetu=1 AND Note < (SELECT Note FROM NOTES WHERE Numetu=9); - Afficher toutes les informations sur les tudiants qui n'ont aucune note. SELECT FROM WHERE ETUDIANT NOT

Note NOTES ALL

* E EXISTS

(SELECT Numetu FROM NOTES WHERE Numetu=E.Numetu);

35