Вы находитесь на странице: 1из 230

Objectifs

Comprendre les notions relatives aux bases de donnes relationnelles et notamment les dfinitions des termes : donne, base de donnes, SGBD, table relationnelle, base relationnelle.

Bases de donnes

-1-

INFOTEL

Une donne
Dfinition
L'objet de l'informatique, c'est le traitement des donnes. Qu'est-ce qu'une donne ? Deux dfinitions : Une donne est la mesure de la ralit physique laquelle elle se rapporte. Une donne est une chane de caractres laquelle est attache une signification.

Bases de donnes

-2-

INFOTEL

Un ensemble de donnes
Dfinition
On ne traite pas ces donnes individuellement, mais en les intgrant dans des ensembles de donnes. On appelle modle logique la reprsentation des rapports entre la ralit et les ensembles de donnes qui y sont associs, ainsi que les liaisons qui existent entre ces ensembles de donnes.

Bases de donnes

-3-

INFOTEL

Une Base de donnes


Dfinitions
1. Dfinition issue du rapport Nora-Minc : "Ensemble exhaustif, non redondant et structur des donnes, fiables et cohrentes, organises indpendamment de leurs applications, accessibles en temps utile, facilement exploitables et satisfaisant des normes de confidentialit". 2. Dfinition du Journal Officiel du 17 janvier 1982 : "Ensemble de donnes organis en vue de son utilisation par des programmes correspondant des applications distinctes et de manire faciliter l'volution indpendante des donnes et des programmes".

Bases de donnes

-4-

INFOTEL

Base de donnes
Objectifs
Description des donnes (LDD). Manipulation des donnes (LMD). Facilit d'accs. Simultanit. Confidentialit. Scurit. Disponibilit. volutivit. Partageabilit.

Bases de donnes

-5-

INFOTEL

SGBD
Dfinition
Un Systme de Gestion de Bases de Donnes (SGBD) est un ensemble de programmes utilitaires, permettant de dcrire et de ranger des ensembles de donnes, utilisables simultanment, n'importe quel moment, par de nombreux utilisateurs. Il garantit la scurit et l'intgrit des donnes, et doit faciliter l'volution des applications existantes.

Il existe trois types de SGBD :

Hirarchique Rseau Relationnel

Bases de donnes

-6-

INFOTEL

Base de donnes relationnelle


Depuis quand ?
Au dbut de l'informatique, on a privilgi le physique : notion de fichier. Puis, dans les annes 60, sont apparues les bases de donnes hirarchiques telles qu'IMS (DL/1) et rseau : IDS ou IDMS. En 1970, Edgar F.Codd (IBM) dfinit les principes des bases relationnelles : le modle relationnel (s'appuyant sur les mathmatiques) la thorie de la normalisation le langage relationnel

Bases de donnes

-7-

INFOTEL

Base de donnes relationnelle


On peut utiliser DB2 sur diffrentes plates-formes matrielles, l'ensemble de ces SGBD constituant la famille DB2

Bases de donnes

-8-

INFOTEL

Base de donne relationnelle


Table relationnelle
Expression d'une relation entre des donnes. Une table est constitue : d'un nombre dtermin de colonnes et d'un nombre variable de lignes L'intersection d'une ligne et d'une colonne est une valeur ou l'ensemble vide (NULL : absence de valeur)

L'ordre des lignes n'est pas significatif L'ordre des colonnes n'est pas significatif sauf si une colonne
est dfinie par sa position relative

Mme nature des donnes pour tous les lments d'une


colonne
Bases de donnes -9 INFOTEL

Base de donne relationnelle


Base de donne relationnelle
C'est un ensemble de donnes structur sous forme de tables La forme tabulaire des donnes ne laisse pas transparatre :

la manire dont est stocke l'information les techniques d'accs les liens entre les tables
L'information est sous une forme simple, facile dcrire et manipuler

Bases de donnes

- 10 -

INFOTEL

Base de donne relationnelle


Exemple
Table relationnelle portant sur les ouvrages dune bibliothque : Table livres
AUTEUR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE TITRE HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS ANNEE 1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866 GENRE POESIE ROMAN ROMAN ROMAN ROMAN ROMAN ROMAN ROMAN ROMAN POESIE PRIX 78.50 148.50 100.00 80.00 80.00 98.50 110.50 99.50 90.50 THEATRE 120.00

THEATRE 110.00

Bases de donnes

- 11 -

INFOTEL

Objectifs
Connatre la syntaxe du langage SQL et son utilisation pour crer et charger une table. Caractres et lments du langage SQL. Donnes gres par SQL. Dfinition d'une table : CREATE TABLE. Chargement d'une table : INSERT.

Dfinition dune table relationnelle

- 12 -

INFOTEL

Langage SQL
SQL (Structured Query Language) est utilis pour : La dfinition des donnes (LDD) La manipulation des donnes (LMD) C'est un langage normalis commun aux diffrents SGBD relationnels : DB2, ORACLE ... La norme en vigueur est SQL92

Dfinition dune table relationnelle

- 13 -

INFOTEL

Langage SQL
Caractres Caractres : et lments du langage . Les majuscules de A Z (les minuscules sont remplaces par
les majuscules correspondantes sauf pour les littraux) . Les chiffres de 0 9 . Les caractres spciaux (#, @ et $) et le caractre blanc soulign ( _ ) Elments du langage : . Suite de caractres symbolisant des constantes, des motscls, des identificateurs ....
Dfinition dune table relationnelle - 14 INFOTEL

Langage SQL
Identificateurs Deux types :

Identificateur ordinaire : compos de lettres, chiffres et blanc


soulign ( _ ), commence par une lettre

Identificateur dlimit : squence de caractres entre un


couple de dlimiteurs (" ou ' selon les options) Deux longueurs :

Identificateur court (ou nom court) : 8 caractres au plus (pas


de caractres spciaux)

Identificateur long (ou nom long) : jusqu' 18 caractres


Identificateurs qualifis :

Suite d'identificateurs spars par des points ( . )


Dfinition dune table relationnelle - 15 INFOTEL

Langage SQL
Identificateurs
Exemples

NOM

NOM_DE_TABLE

'NOM DE TABLE'

UTIL1.NOM_DE_TABLE NOM_DE_TABLE.NOM_DE_COLONNE

Dfinition dune table relationnelle

- 16 -

INFOTEL

Langage SQL
Donnes gres par SQL
SQL permet de grer diffrents types de donnes : Donnes numriques 1. Entiers 2. Dcimaux 3. Nombres en virgule flottante Donnes non numriques Donnes temporelles Objets de grande taille (LOB) ROWID User-Defined Distinct Type (UDT)
Dfinition dune table relationnelle - 17 INFOTEL

Langage SQL
Donnes gres par SQL
Donnes numriques

Entiers Entiers longs (INTEGER ou INT) 1. Mot binaire de 31 bits plus le signe 2. Valeur entre -2147483648 et +2147483647

Entiers courts (SMALLINT) 1. Demi mot binaire de 15 bits plus le signe 2. Valeur entre -32768 et +32767

Dfinition dune table relationnelle

- 18 -

INFOTEL

Langage SQL
Donnes gres par SQL
Donnes numriques

Dcimaux DECIMAL(p,e) ou NUMERIC(p,e) p : nombre de chiffres significatifs (p<32) e : nombre de chiffres aprs la marque dcimale (e < p) + DECIMAL(11,2) : nombre de 11 chiffres dont 2 aprs la virgule Format condens (deux chiffres par octet) Valeur entre 10**31-1 et 1-10**31 Dfaut : DECIMAL (ou DEC ou NUMERIC) quivaut : DECIMAL(5,0) L'chelle peut tre omise : DECIMAL(10) quivaut DECIMAL(10,0)

Dfinition dune table relationnelle

- 19 -

INFOTEL

Langage SQL
Donnes gres par SQL
Donnes numriques

Nombres en virgule flottante Virgule flottante simple prcision REAL ou FLOAT(n) avec n<22 occupe 32 bits valeur comprise entre 5.4E-79 et 7.2E+75 (soit entre 5.4*(10**-79) et 7.2*(10**+75)) Virgule flottante double prcision DOUBLE PRECISION ou FLOAT(n) avec 21<n<54 occupe 64 bits valeur comprise entre 5.4E-79 et 7.2E+75

Dfinition dune table relationnelle

- 20 -

INFOTEL

Langage SQL
Donnes gres par SQL
Donnes non numriques

Chanes de caractres Chanes de caractres de longueur fixe CHARACTER(n) ou CHAR(n) avec n < 255 CHARACTER (ou CHAR) quivalent CHARACTER(1) Chanes de caractres de longueur variable VARCHAR(n) ou CHAR VARYING(n) ou CHARACTER VARYING(n) avec n compris entre 1 et 32 704 et infrieur la longueur maximum autorise (dpendant de la longueur dune page physique)

Dfinition dune table relationnelle

- 21 -

INFOTEL

Langage SQL
Donnes gres par SQL
Donnes non numriques

Chanes de caractres graphiques un caractre occupe deux octets (16 bits) principalement utilises pour ranger les caractres orientaux (caractres japonais Kanji par exemple) soit de longueur fixe : GRAPHIC(n), (n<128) soit de longueur variable : VARGRAPHIC(n), n infrieur la plus grande valeur permise par le stockage physique

Dfinition dune table relationnelle

- 22 -

INFOTEL

Langage SQL
Donnes gres par SQL
Donnes temporelles

DATE : date (an, mois, jour) huit chiffres significatifs (AAAAMMJJ) occupe 4 octets en format interne condens (2 pour l'anne, 1 pour le mois, 1 pour le jour) TIME : heure (heure, minutes, secondes) six chiffres significatifs (HHMMSS) occupe 3 octets en format interne condens (1 pour l'heure, 1 pour les minutes, 1 pour les secondes) TIMESTAMP : instant (date, heure, microsecondes) vingt chiffres significatifs (AAAAMMJJHHMMSSmmmmmm) occupe 10 octets en format interne condens

Dfinition dune table relationnelle

- 23 -

INFOTEL

Langage SQL
Donnes gres par SQL
Constantes (littraux)

Constantes entires Ex: Ex: Ex: 1 +1234 -234 1234567890 10E1 2.2E-2 123.345E-23 1 +12.34 -234. +1234567890.12345 Constantes flottantes Constantes dcimales Constantes chanes de caractres forme caractres Ex: Ex: Ex: 'ABCD' '123456' X'00123c' X'C1C2C3' G'<chane graphique>'
- 24 INFOTEL

forme hexadcimale Constantes graphiques

Dfinition dune table relationnelle

Langage SQL
Donnes gres par SQL
Donnes temporelles

Une constante temporelle doit tre incluse entre deux dlimiteurs (' ou ") et correspondre l'un des formats prdfinis Constantes date et heure FORMAT ISO USA EUR JIS LOCAL Exemple Constante instant Un seul format : AAAA-MM-JJ-HH.MM.SS.mmmmmm Exemple : '1988-1-1-6.07.25.123456' DATE SSAA-MM-JJ MM/JJ/AAAA JJ.MM.AAAA AAAA-MM-JJ selon installation 1998-08-20 HEURE HH.MM.SS HH :MM AM ou PM HH.MM.SS HH :MM :SS 18.30.40

Dfinition dune table relationnelle

- 25 -

INFOTEL

Langage SQL
Donnes gres par SQL
Objets de grande taille (LOB)

Un LOB peut stocker des chanes de caractres d'une dimension pouvant atteindre 2 Giga octets Il existe 3 types lmentaires d'objets de grande taille : Les BLOB - Binary Large Object utilisables pour le son, les images, la vido, etc. Les CLOB - Character Large Object destins contenir des chanes de caractres SBCS ou mixtes(mixed) ddies aux applications de Gestion Electronique de documents (GED) Les DBCLOB destins aux chanes dites graphiques DBCS (Double bytes Character set)
LOB Gnrique

DBCLOB BLOB CLOB

Dfinition dune table relationnelle

- 26 -

INFOTEL

LANGAGE SQL
Donnes gres par SQL
Objets de grande taille (LOB)
Tablespace de base Table de base COL1 COL2 Idcol LOBdef Tablespace LOB Table auxiliaire Les LOBs vivent l en tant que colonnes auxiliaires Les lignes ici, reprsentent les LOB qui sont rangs hors de la table de base

Dfinition dune table relationnelle

- 27 -

INFOTEL

Langage SQL
Donnes gres par SQL
User-Defined Distinct Type (UDT)

Un UDT c'est : Un type de donnes dfini par l'utilisateur partir des types de donne de base (INTEGER, CHARACTER, etc.) Permettant : De modliser les donnes traiter D'tablir la smantique des donnes Exemple 1 modlisation des donnes : Franc DECIMAL (8,2) Euro DECIMAL (8,6) Exemple 2 smantique des donnes : Audio BLOB(1M) Vido BLOB(1M)

Dfinition dune table relationnelle

- 28 -

INFOTEL

Langage SQL
Donnes gres par SQL
User-Defined Distinct Type (UDT)

La cration d'un UDT s'effectue l'aide de l'instruction : CREATE DISTINCT TYPE nom_type Le type doit tre unique dans un schma La cration d'un type peut tre effectue de manire dynamique ou incorpore dans un programme WITH COMPARISONS Est une clause qui autorise les oprations de comparaison telles que =, <, >, etc. Exemple : CREATE DISTINCT TYPE FRANC AS DECIMAL (8,2) WITH COMPARISONS

Dfinition dune table relationnelle

- 29 -

INFOTEL

Langage SQL
Donnes gres par SQL
User-Defined Distinct Type (UDT)

Les fonctions CAST permettent de comparer les UDT avec le type de base dont ils sont issus Les fonctions CAST sont gnres automatiquement par DB2 lors de la cration du type. Deux fonctions CAST sont cres : La fonction de passage de l'UDT au type de base La fonction de passage du type de base l'UDT

Exemple : Aprs la cration du type FRANC, les fonctions FRANC et DECIMAL ont t automatiquement ajoutes. Elles autorisent les comparaisons suivantes : Soit col_FRANC une colonne de type FRANC Col_FRANC = FRANC (100,00) est valide DECIMAL(col_FRANC) = 100,00 est valide CAST(col_FRANC AS DECIMAL(8,2)) > 100,00 est valide
INFOTEL

Dfinition dune table relationnelle

- 30 -

Langage SQL
Notations
Pour dcrire la syntaxe des ordres SQL, nous utiliserons les conventions suivantes : dbut d'une instruction : >> fin d'une instruction : >< l'instruction se poursuit : > suite de l'instruction : >

Dfinition dune table relationnelle

- 31 -

INFOTEL

Langage SQL
Notations
Mots en majuscules = mots cls Mots en minuscules = variables cres par l'utilisateur Symboles (.,() etc) = font partie de l'instruction

Dfinition dune table relationnelle

- 32 -

INFOTEL

Langage SQL
Notations
absence de paramtres >> INSTRUCTION >< paramtres obligatoires >>INSTRUCTIONPARAM1( PARAM2 )>< choix parmi des paramtres obligatoires >> INSTRUCTION + PARAM1 +>< | paramtres facultatifs >> INSTRUCTION ++>< |
Dfinition dune table relationnelle - 33 -

+ PARAM2 +

|
INFOTEL

+ PARAM1 +

Langage SQL
Notations
option par dfaut ou de lisibilit + PARAM1 + | | >> INSTRUCTION ++>< rptition ++ V | | | >> INSTRUCTION + PARAM1 ++>< + PARAM2 +

Dfinition dune table relationnelle

- 34 -

INFOTEL

Langage SQL
Notations
rptition avec sparateur + , + V >> INSTRUCTION ( clause | + )><

Dfinition dune table relationnelle

- 35 -

INFOTEL

Langage SQL
Dlimiteurs Selon le contexte dans lequel on se situe, diffrents dlimiteurs dordres doivent tre utiliss : SQL
caractre ";" pour sparer 2 ordres SQL dans l'environnement interactif EXEC SQL et END-EXEC encadrant un ordre SQL dans les programmes COBOL

Dfinition dune table relationnelle

- 36 -

INFOTEL

Dfinition dune table


CREATE TABLE
La dfinition d'une table (noms des colonnes, type des donnes ...) se fait par l'ordre : CREATE TABLE Format gnral simplifi >>CREATE TABLE nom-de-table-> + , + V | >( dfinition-de-colonne+)><

Dfinition dune table relationnelle

- 37 -

INFOTEL

Dfinition dune table


Dfinition dune colonne
>>nom-de-colonnetype-de-donne> >++++>< | | | | +WITH+ +constante+ +USER+ +CURRENT SQLID+ | | +NOT NULL+

+++DEFAULT+++

Dfinition dune table relationnelle

- 38 -

INFOTEL

Dfinition dune table


Description Nom de table Nom long, identifiant unique de la table pour un utilisateur des paramtres
Une table appartient un utilisateur identifi par son idautorisation et un systme dans le cas de systmes distribus Un nom de table peut tre qualifi : par l'identifiant de son crateur

FUTIL1.TABLE_EMPLOYE
par l'identifiant de son crateur et le nom du systme o rside la table

F LYON.UTIL1.TABLE_EMPLOYE
Par dfaut, le nom de table est qualifi par le systme et l'utilisateur courants
Dfinition dune table relationnelle - 39 INFOTEL

Dfinition dune table


Description Description des paramtres des paramtres
Nom de colonne Nom long, identifiant de manire unique la colonne dans la table Nombre de colonnes d'une table limit (749 colonnes au maximum pour une table dpendante, 770 sinon)

Type de donne INTEGER, DECIMAL, CHAR ...

Dfinition dune table relationnelle

- 40 -

INFOTEL

Dfinition dune table


Description Option NOT NULL des paramtres NOT NULL empche l'introduction de valeurs nulles :
mission d'un message d'erreur si tentative d'insertion de nuls

NOT NULL WITH DEFAULT remplace une absence de


valeur par une valeur par dfaut dpendant du type de donne dfini pour la colonne (avec INSERT et LOAD) :

zro pour les donnes numriques blanc pour les chanes de caractres de longueur fixe chane de longueur zro pour les chanes de caractres de
longueur variable

date, heure ou instant courant pour les donnes de type


date, heure ou instant
Dfinition dune table relationnelle - 41 INFOTEL

Dfinition dune table


Description Option WITH DEFAULT des paramtres Il est possible de dfinir pour une colonne une valeur par
dfaut autre que celle correspondant naturellement son type Cette valeur peut s'exprimer par :

Une constante d'un type compatible avec celui de la


colonne

Les mots-cls USER, CURRENT SQLID

FOmettre NOT NULL et DEFAULT est quivalent DEFAULT


NULL
Dfinition dune table relationnelle - 42 INFOTEL

Dfinition dune table


Exemple
CREATE TABLE LIVRES (AUTEUR CHARACTER(8) TITRE ANNEE GENRE PRIX SMALLINT, CHAR(8) NOT NULL WITH DEFAULT 'DIVERS', DECIMAL(5, 2)) NOT NULL, CHARACTER(24) NOT NULL,

Dfinition dune table relationnelle

- 43 -

INFOTEL

Chargement dune table : INSERT


INSERT
Format gnral simplifi
>>INSERT INTOnom-de-table++> | | +( + , + V | | |

nom-de-colonne+)+

+ , + V | >VALUES(+expression++)>< | | +NULL+ | | +DEFAULT+ | | +registre-spcial+


Dfinition dune table relationnelle - 44 INFOTEL

Chargement dune table : INSERT


Description Nom de table Qualifi ou non qualifi des paramtres
Nom de colonne Ordre indiffrent On peut omettre des colonnes (sauf si NOT NULL) Dfaut : toutes les colonnes dans l'ordre de dfinition VALUES Correspondance positionnelle

expression NULL DEFAULT


Dfinition dune table relationnelle - 45 INFOTEL

Ordre INSERT
Description VALUES (suite) : des registre spcial : USER paramtres CURRENT DATE
CURRENT SQLID CURRENT SERVER CURRENT TIME CURRENT TIMESTAMP CURRENT TIMEZONE CURRENT SERVER CURRENT DEGREE CURRENT PACKAGESET CURRENT RULES

Dfinition dune table relationnelle

- 46 -

INFOTEL

Ordre INSERT
Rgles
L'instruction INSERT permet de valoriser les colonnes d'une ligne de table Des contrles de validit sont effectus :

si l'ensemble des valeurs correspond la nature des


donnes, la nouvelle ligne de table est insre

si une erreur est dtecte, la ligne n'est pas insre

Dfinition dune table relationnelle

- 47 -

INFOTEL

Ordre INSERT
Exemple
INSERT INTO LIVRES VALUES ('HUGO','HERNANI', 1830,'THEATRE', 120.00)

INSERT INTO LIVRES (AUTEUR, TITRE, ANNEE, GENRE) VALUES ('BALZAC','LE PERE GORIOT', 1834,'ROMAN')

Dfinition dune table relationnelle

- 48 -

INFOTEL

Objectifs
Savoir utiliser le langage SQL pour obtenir des rsultats partir des donnes ranges dans les tables. Ordre SELECT pour chercher des informations dans une table WHERE pour conditionner la recherche GROUP BY pour travailler sur des groupes de lignes ORDER BY pour trier les rsultats

Les recherches simples de donnes

- 49 -

INFOTEL

Principe de la slection
Select
+ ALL + | | >> SELECT +++ * +> | | | + , + | + DISTINCT + | V | | + expression ++ > FROM nom-de-table> >++> | | +WHERE condition-de-recherche+ >++> | + , + | | V | | +GROUP BYnom-de-colonne++ >++> | | +HAVING condition-de-recherche+ >++>< | + , + | | | + ASC + | | | V | | | | + ORDER BY + nom-de-colonne+++++ | | | | + entier + + DESC + + expression+

En rsum : SELECT rubriques FROM nom-de-table [options]


Les recherches simples de donnes - 50 INFOTEL

Select
Comment a marche ?

L'instruction SELECT forme conceptuellement, partir de la table de base dont le nom suit FROM, une table rsultante dont les colonnes dpendent des rubriques cites aprs SELECT (colonnes directement issues de la table d'origine, valeurs calcules, constantes, etc.) dont les lignes satisfont, tant pour leur contenu que pour leur prsentation, aux options suivant, le cas chant, le nom de la table

Les recherches simples de donnes

- 51 -

INFOTEL

SELECT * D
Le caractre * reprsente l'ensemble des colonnes de la table cite aprs FROM dans leur ordre de dfinition ==> Exemple : Lister le contenu de la table LIVRES SELECT * FROM LIVRES AUTEUR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS TITRE HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS

D
ANNEE GENRE 1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866 PRIX THEATR 120.0 POESIE 78.50 ROMAN 148.5 0 ROMAN 100.0 ROMAN 0 ROMAN ROMAN THEATR E ROMAN ROMAN 80.00 80.00 110.0 0 98.50 110.5 0 99.50
INFOTEL

STENDHAL LE ROUGE ET LE NOIR STENDHAL LA CHARTREUSE DE PARME FLAUBERT MADAME BOVARY VERLAINE POEMES SATURNIENS
Les recherches simples de donnes - 52 -

ROMAN POESIE 90.50

SELECT avec expression


SELECT peut tre suivi dune ou plusieurs expressions Format simplifi d'une expression
Format
++CONCAT++ | + || + | | + / + | | + * + | | + + + | | + - + | V | >+++(expression)++> | | | | + + + +constante+ | | | | + - + +nom-de-colonne+ | | +registre-spcial+ | | +expression case-+

Exemples dexpressions

'NOM : ' TABLE1.COLONNE_1 COLONNE_2 CONCAT ' ET ' CONCAT COLONNE_3 COLONNE_4 * COLONNE_5 (COLONNE_6 * 1.25) / (COLONNE_7 + COL_8)

Les recherches simples de donnes

- 53 -

INFOTEL

SELECT avec colonnes


Exemple
Lister la date de parution et le titre des ouvrages contenus dans la table LIVRES SELECT ANNEE, TITRE FROM LIVRES

Rsultat

ANNEE ---------1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866

TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 54 INFOTEL

Les recherches simples de donnes

SELECT avec valeurs calcules


Exemple
Lister le titre et le prix en centimes de chaque ouvrage de la table LIVRES SELECT TITRE, 'PRIX : ', PRIX * 100, 'centimes' FROM LIVRES
Rsultat
TITRE HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 55 -

PRIX PRIX PRIX PRIX PRIX PRIX PRIX PRIX PRIX PRIX PRIX PRIX

:12000.00 :7850.00 :14850.00 :10000.00 : ------:8000.00 :8000.00 :11000.00 :9850.00 :11050.00 :9950.00 :9050.00

centimes centimes centimes centimes centimes centimes centimes centimes centimes centimes centimes centimes
INFOTEL

Les recherches simples de donnes

Nommer une expression


Il est possible d'attribuer un nom une expression par l'utilisation de AS dans la clause SELECT Ce nom peut tre utilis dans les autres clauses de l'instruction pour faire rfrence la colonne rsultant de l'valuation de l'expression (WHERE, GROUP BY, ORDER BY, etc...)

Exemple

Lister le titre et le prix en centimes de chaque ouvrage de la table LIVRES. SELECT TITRE, PRIX * 100 AS CENTIMES FROM LIVRES ORDER BY CENTIMES TITRE LES CONTEMPLATIONS LES TROIS MOUSQUETAIRES VINGT ANS APRES POEMES SATURNIENS LE ROUGE ET LE NOIR MADAME BOVARY EUGENIE GRANDET LA DAME AUX CAMELIAS LA CHARTREUSE DE PARME HERNANI LES MISERABLES LE PERE GORIOT
- 56 -

Rsultat

CENTIMES 7850.00 8000.00 8000.00 9050.00 9850.00 9950.00 10000.00 11000.00 11050.00 12000.00 14850.00 ------------ INFOTEL

Les recherches simples de donnes

Loption DISTINCT
Exemple
L'option DISTINCT indique aprs SELECT permet l'limination des lignes en double

Lister les auteurs de la table LIVRES SELECT AUTEUR FROM LIVRES AUTEUR Rsultat LIVRES -------HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE
Les recherches simples de donnes - 57 -

SELECT DISTINCT AUTEUR FROM ------BALZAC DUMAS FLAUBERT HUGO STENDHAL VERLAINE

INFOTEL

Slection conditionnelle avec WHERE


L'option WHERE permet de prciser une condition de slection des lignes de la table en utilisant un ou plusieurs prdicats Prdicat de base >expression+=+expression> +^=+ +<>+ +>+ +^>+ +<+ +^<+ +>=+ +<=+

Prdicat de base

Rgles de comparaison

Les nombres sont compars selon leur valeur algbrique les chanes de caractres sont compares caractre par caractre de gauche droite, la chane la plus courte tant considre comme complte par des blancs

Le rsultat d'un prdicat peut tre "vrai", "faux" ou "inconnu" si l'une des expressions est nulle Seules les lignes donnant le rsultat "vrai" sont retenues
Les recherches simples de donnes - 58 INFOTEL

Slection conditionnelle avec WHERE


Condition de recherche

Elle est constitue d'un ou plusieurs prdicats relis par les oprateurs logiques AND, OR et NOT

Notation

++ AND ++ | | | | | + OR + | V | >+++ prdicat +-+> | | | | + NOT + + ( condition-de-recherche ) +

Les recherches simples de donnes

- 59 -

INFOTEL

SELECT avec prdicat de base


Exemple
Rechercher, dans la table LIVRES, le titre et le genre de tous les ouvrages crits par DUMAS SELECT TITRE, GENRE FROM LIVRES WHERE AUTEUR = 'DUMAS'

Rsultat TITRE
LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS

GENRE ROMAN ROMAN THEATRE

------------------------ --------

Les recherches simples de donnes

- 60 -

INFOTEL

SELECT avec condition de recherche


Exemple :
SELECT * FROM LIVRES WHERE NOT (AUTEUR = 'DUMAS') AND ANNEE > 1835

Rsultat : AUTEUR
HUGO HUGO

TITRE LES CONTEMPLATIONS LES MISERABLES

ANNEE GENRE 1856 1862 1857 1866 POESIE ROMAN ROMAN ROMAN POESIE

PRIX 78.50 148.50 110.50 99.50 90.50


INFOTEL

-------- -------------------

----- -------- ----------

STENDHAL LA CHARTREUSE DE PARME 1839 FLAUBERT MADAME BOVARY VERLAINE POEMES SATURNIENS
Les recherches simples de donnes - 61 -

L'option GROUP BY
Dfinition Comment a marche ?
L'option GROUP BY permet de traiter des groupes de lignes ayant une ou plusieurs caractristiques communes GROUP BY suivi de colonnes de regroupement Autant de groupes que de valeurs distinctes des colonnes de regroupement Une ligne rsultat par groupe Le SELECT ne peut comporter que les noms des colonnes de regroupement, ou des noms de fonctions

A B B A A C

1 2 3 4 5 6

A A A

1 4 5

B B

2 3

C
INFOTEL

Les recherches simples de donnes

- 62 -

L'option GROUP BY
Exemple
Lister, en les regroupant par auteur et par genre, les donnes auteur et genre des ouvrages de la table LIVRES (ou donner les types d'ouvrages crits par chaque auteur) SELECT AUTEUR, GENRE FROM LIVRES

GROUP BY AUTEUR, GENRE

Rsultat

AUTEUR -------BALZAC DUMAS DUMAS FLAUBERT HUGO HUGO HUGO STENDHAL VERLAINE

GENRE -------ROMAN ROMAN THEATRE ROMAN POESIE ROMAN THEATRE ROMAN POESIE
- 63 INFOTEL

Les recherches simples de donnes

L'option HAVING
Associe la clause GROUP BY, l'option HAVING permet d'appliquer une condition de recherche des groupes Ne pas confondre : WHERE : slection de lignes avant regroupements HAVING : slection de groupes crs par GROUP BY Lister en les regroupant par auteur et par genre, les donnes Exemple relatives aux auteurs et aux genres des ouvrages de la table LIVRES, en liminant les posies SELECT AUTEUR, GENRE FROM LIVRES GROUP BY AUTEUR, GENRE HAVING GENRE <> 'POESIE' AUTEUR GENRE Rsultat -------- -------BALZAC ROMAN DUMAS ROMAN DUMAS THEATRE FLAUBERT ROMAN HUGO ROMAN HUGO THEATRE STENDHAL ROMAN

Having

Les recherches simples de donnes

- 64 -

INFOTEL

L'option ORDER BY
L'option ORDER BY permet le classement de la table rsultante Critre de classement : nom, numro relatif de colonne ou expression (ce dernier cas tant autoris pour les Sous-Select) Squence de tri : ASC (par dfaut) ou DESC

Exemple 1

Lister l'auteur, le titre et l'anne des ouvrages de la table LIVRES, tris par ordre chronologique.

SELECT AUTEUR, TITRE, ANNEE ORDER BY ANNEE


AUTEUR TITRE

FROM LIVRES
ANNEE

Rsultat -------- ------------------------ ---------HUGO STENDHAL BALZAC BALZAC STENDHAL DUMAS DUMAS DUMAS HUGO FLAUBERT HUGO VERLAINE
Les recherches simples de donnes

HERNANI LE ROUGE ET LE NOIR EUGENIE GRANDET LE PERE GORIOT LA CHARTREUSE DE PARME LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LES CONTEMPLATIONS MADAME BOVARY LES MISERABLES POEMES SATURNIENS
- 65 -

1830 1831 1833 1834 1839 1844 1845 1852 1856 1857 1862 1866
INFOTEL

L'option ORDER BY
Exemple 2
Lister par ordre de prix en centimes dcroissant et par titre croissant le prix en centimes, l'auteur et le titre des ouvrages de la table LIVRES SELECT PRIX * 100, AUTEUR, TITRE FROM LIVRES ORDER BY PRIX * 100 DESC, TITRE AUTEUR TITRE -----------------------LE PERE GORIOT LES MISERABLES HERNANI LA CHARTREUSE DE PARME LA DAME AUX CAMELIAS EUGENIE GRANDET MADAME BOVARY LE ROUGE ET LE NOIR POEMES SATURNIENS LES TROIS MOUSQUETAIRES VINGT ANS APRES LES CONTEMPLATIONS
INFOTEL

Rsultat --------- ---------------14850.00 12000.00 11050.00 11000.00 10000.00 9950.00 9850.00 9050.00 8000.00 8000.00 7850.00
Les recherches simples de donnes

BALZAC HUGO HUGO STENDHAL DUMAS BALZAC FLAUBERT STENDHAL VERLAINE DUMAS DUMAS HUGO
- 66 -

Exemple rcapitulatif
Exemple
Lister l'auteur, le libell "GENRE : " et le genre des ouvrages de la table LIVRES non publis en 1834, en les regroupant par genre et par auteur, en liminant les pices de thtre, et en triant le rsultat par genre croissant et par auteur dcroissant SELECT AUTEUR, 'GENRE : ', GENRE FROM LIVRES WHERE ANNEE <> 1834 GROUP BY GENRE, AUTEUR HAVING GENRE <> 'THEATRE' ORDER BY GENRE ASC, AUTEUR DESC

Rsultat : AUTEUR

GENRE -------- -------- -------VERLAINE GENRE : POESIE HUGO GENRE : POESIE STENDHAL GENRE : ROMAN HUGO GENRE : ROMAN FLAUBERT GENRE : ROMAN DUMAS GENRE : ROMAN BALZAC GENRE : ROMAN
- 67 INFOTEL

Les recherches simples de donnes

Objectifs
Savoir manipuler des formes plus complexes de l'instruction SELECT : Sous-select Prdicats Fonctions incorpores dans SQL Traitement des donnes temporelles

Les possibilits avances de recherche de donnes

- 68 -

INFOTEL

Table AUTEURS
Pour illustrer ce chapitre, nous crons une nouvelle table : Table auteurs
AUTEUR HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND
Les possibilits avances de recherche de donnes

NE_EN 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804
- 69 -

LIEU BESANCON TOURS VILLERS-COTTERETS PARIS GRENOBLE ROUEN METZ PARIS CHARLEVILLE PARIS

SALLE RAYON 2 1 1 1 3 1 3 3 3 3 3 1 1 1 5 2 6 6 5 5
INFOTEL

SELECT et SOUS-SELECT
Dfinition
Dfinition d'un SOUS-SELECT On appelle sous-select un ordre SELECT comportant le mot-cl FROM et, ventuellement, les options WHERE, GROUP BY et HAVING Le sous-select construit une table rsultante selon la squence d'oprations suivante : 1. Recherche de la table dfinie aprs le mot cl FROM 2. Application de la ou des conditions explicites par la clause WHERE 3. Constitution des groupes selon la clause GROUP BY 4. Elimination des groupes ne rpondant pas la clause HAVING 5. Enfin, prsentation de la table rsultante selon les modalits suivant le mot cl SELECT (liste de rubriques avec, ventuellement, l'option DISTINCT)

Les possibilits avances de recherche de donnes

- 70 -

INFOTEL

SELECT et SOUS-SELECT
Dfinition
Dfinition d'un SELECT COMPLET Un SELECT complet est la combinaison d'une ou plusieurs instructions SELECT (portant sur une ou plusieurs tables)

Format

++ V | >+sous-select++++> | | | | +(select-complet)+ ++UNION++sous-select++ | || | +UNION ALL+ +(select-complet)+

Aprs ce SELECT complet, on pourra ventuellement faire figurer l'option ORDER BY pour ordonner le rsultat de la requte
Les possibilits avances de recherche de donnes - 71 INFOTEL

Option UNION
UNION permet de dfinir une table rsultante partir des lignes de deux autres tables (tables origine) aprs application des clauses figurant dans chacun des sous-select Tables d'origine : Mme nombre de colonnes Deux colonnes de mme rang doivent tre de mme nature
UNION ALL

La table rsultante contient toutes les lignes provenant de chacun des sous-select Les lignes en double sont limines (peut entraner un tri)

UNION

Les possibilits avances de recherche de donnes

- 72 -

INFOTEL

Option UNION
Exemple
Lister par ordre chronologique les vnements intervenus entre 1825 et 1850 figurant dans les tables LIVRES et AUTEURS, en prcisant la nature de l'vnement et l'auteur correspondant SELECT ANNEE, 'PARUTION ', AUTEUR FROM LIVRES WHERE ANNEE >= 1825 AND ANNEE <= 1850 UNION ALL SELECT NE_EN, 'NAISSANCE', AUTEUR FROM AUTEURS WHERE NE_EN >= 1825 AND NE_EN <= 1850 ORDER BY 1

Rsultat ------1830 1831 1833 1834 1839 1840 1844 1844 1845

--------PARUTION PARUTION PARUTION PARUTION PARUTION NAISSANCE NAISSANCE PARUTION PARUTION


- 73 -

-------HUGO STENDHAL BALZAC BALZAC STENDHAL ZOLA VERLAINE DUMAS DUMAS


INFOTEL

Les possibilits avances de recherche de donnes

Les prdicats
Dans une condition de recherche, on peut aussi utiliser les prdicats suivants : BETWEEN NULL LIKE EXISTS IN prdicats quantifis : ALL SOME et ANY DISTINCT

Les possibilits avances de recherche de donnes

- 74 -

INFOTEL

Le prdicat BETWEEN
Dfinition
Le prdicat BETWEEN permet une recherche dans une tranche de valeurs

Exemple

Lister le nom et le lieu de naissance de tous les auteurs ns entre 1802 et 1850 SELECT AUTEUR, LIEU, FROM AUTEURS WHERE NE_EN BETWEEN 1802 AND 1850

AUTEUR -------HUGO Rsultat DUMAS DUMAS FLAUBERT VERLAINE ZOLA SAND


Les possibilits avances de recherche de donnes

LIEU -------------------BESANCON VILLERS-COTTERETS PARIS ROUEN METZ PARIS PARIS


- 75 INFOTEL

Le prdicat NULL
Dfinition
Le prdicat NULL permet de tester la ou les valeurs nulles dans une colonne
>nom-de-colonneIS++NULL> | | +NOT+

Exemple

Lister l'auteur et le titre des ouvrages dont on ne connat pas le prix SELECT AUTEUR, TITRE FROM LIVRES WHERE PRIX IS NULL

Rsultat

AUTEUR -------BALZAC

TITRE -----------------------LE PERE GORIOT


- 76 INFOTEL

Les possibilits avances de recherche de donnes

Le prdicat LIKE
Dfinition
Le prdicat LIKE permet de rechercher des sous-chanes de caractres prcises par leur profil
>nom-de-colonne++LIKE+registre-spcial+> | | | | +NOT+ +constante-chane+ >++> | | +ESCAPEconstante-chane+

La colonne doit tre de type caractre La sous-chane de caractres dfinissant le profil peut contenir : Le caractre _ (blanc soulign), remplaant un caractre quelconque Le caractre % (pour-cent), remplaant une squence de zro n caractres Une combinaison de ces caractres _ et % Des caractres quelconques
Les possibilits avances de recherche de donnes - 77 INFOTEL

Le prdicat LIKE
Exemples
Si la sous-chane recherche contient les caractres _ ou %, chacun de ces caractres doit tre immdiatement prcd, dans le profil, par un caractre "d'chappement" Le caractre "d'chappement" est indiqu dans une constantechane suivant le mot-cl ESCAPE AUTEUR LIKE 'B%' est vrai pour tout auteur dont le nom commence par la lettre B AUTEUR LIKE '_A_ _ _ _ _ _' est vrai pour tout auteur ayant un "A" en deuxime caractre AUTEUR LIKE '_ _+_%' ESCAPE '+' est vrai pour tout auteur ayant un blanc soulign en troisime caractre

Les possibilits avances de recherche de donnes

- 78 -

INFOTEL

Le prdicat EXISTS
Format
Le prdicat EXISTS permet de tester si le sous-select plac aprs EXISTS retourne au moins une ligne

>EXISTS(sous-select)>

Exemple

SELECT * FROM LIVRES WHERE EXISTS (SELECT 1 FROM AUTEURS WHERE NE_EN = 1830)

produit, comme rsultat, une table vide, car il n'y a pas un seul auteur n en 1830 F : Il n'est pas ncessaire de mentionner des noms de colonnes dans la clause SELECT de la sous-requte. Le prdicat EXISTS est surtout utilis avec des sous-requtes corrles (chapitre "Manipulation de plusieurs tables")
Les possibilits avances de recherche de donnes - 79 INFOTEL

Le prdicat IN
Format
Le prdicat IN permet une recherche dans une collection de valeurs dfinie par une numration ou par un sous-select
>+expression++IN+(full-select1)++> | | | | +,+ | | | +NOT+ | V | | | | +(expression2+)+ | | | +(row_value_expression++IN (full-select2)+ +NOT+

Exemple 1

Lister l'auteur, le titre et l'anne des ouvrages de la table LIVRES crits en 1839, 1866 ou 1857 SELECT AUTEUR, TITRE, ANNEE FROM LIVRES WHERE ANNEE IN (1839, 1866, 1857) -------STENDHAL FLAUBERT VERLAINE TITRE ---------------------LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 80 -

Rsultat AUTEUR

ANNEE ---------1839 1857 1866


INFOTEL

Les possibilits avances de recherche de donnes

Le prdicat IN
Exemple 2
Lister le nom et le lieu de naissance des auteurs de la table AUTEURS figurant dans la table LIVRES SELECT AUTEUR, LIEU FROM AUTEURS WHERE AUTEUR IN (SELECT AUTEUR FROM LIVRES)

Fonctionnement La requte la plus interne est excute en premier, ce qui

permet de dfinir une liste dauteurs La requte de niveau suprieur est ensuite excute, ce qui permet de ne slectionner que les auteurs figurant dans la liste Lorsque le IN utilise lexpression Row Value Expression (Row Expression), cela signifie quun ensemble de valeurs est recherch dans un autre ensemble de valeurs (compos obligatoirement du mme nombre de valeurs). La recherche seffectue sur le groupe de valeurs qui est ainsi considr comme une ligne
- 81 INFOTEL

Les possibilits avances de recherche de donnes

Le prdicat IN
Exemple2 Rsultat
AUTEUR LIEU -------- -------------------HUGO BESANCON BALZAC TOURS DUMAS VILLERS-COTTERETS DUMAS PARIS STENDHAL GRENOBLE FLAUBERT ROUEN VERLAINE METZ

Les possibilits avances de recherche de donnes

- 82 -

INFOTEL

Le prdicat IN
Exemple 3
Rechercher dans la table ECRIVAINS (AUTEUR, NE_EN) les auteurs qui se trouvent dans la table LIVRES (AUTEUR, ANNEE) SELECT AUTEUR, NE_EN FROM ECRIVAINS WHERE (AUTEUR, NE_EN) IN (SELECT AUTEUR, ANNEE FROM LIVRES)

Les possibilits avances de recherche de donnes

- 83 -

INFOTEL

Les prdicats quantifis


SOME,ANY, Un prdicat quantifi permet deffectuer une comparaison entre une expression et le rsultat dun sous-select avec lune des ALL options SOME, ANY ou ALL
>expression+=++SOME+(sous-select)> +^=+ | | +<>+ +ANY+ +>+ | | +^>+ +ALL+ +<+ +^<+ +>=+ +<=+ ALL

ALL : vrai si la condition est satisfaite pour toutes les valeurs retournes par le sous-select condition ou si le sous-select ne renvoie aucune valeur vrai si la condition est satisfaite pour au moins une valeur retourne par le sous-select faux si aucune valeur retourne par le sous select
- 84 INFOTEL

SOME (ou ANY)

Les possibilits avances de recherche de donnes

Les prdicats quantifis


ROW Expression

Tout comme avec IN, les prdicats quantifis permettent la comparaison dun ensemble de valeurs avec un ensemble de colonnes (obligatoirement de mme nombre) rsultat dun Select Dans ce cas, la recherche seffectue sur le groupe de valeurs qui est ainsi considr comme une ligne

Les possibilits avances de recherche de donnes

- 85 -

INFOTEL

Les fonctions sur colonnes


Dfinition
Une fonction sur colonne renvoie une valeur unique 6 fonctions sur colonne : AVG SUM MAX et MIN COUNT COUNT_BIG

Le rsultat d'une fonction sur colonne dpend du type de SELECT : Sans GROUP BY : une seule valeur pour toute la table Avec GROUP BY : une valeur par groupe distinct

Les possibilits avances de recherche de - 86 donnes

INFOTEL

La fonction AVG
Format
La fonction AVG permet de calculer la moyenne des valeurs d'une collection de nombres
+ALL+ | | >AVG(++expression)> | | +DISTINCT+

Le type de donne rsultant est identique au type de donnes origine La valeur nulle est neutre Le rsultat est la valeur nulle si la collection de valeurs est vide

Exemple

Lister la moyenne des prix de chaque genre d'ouvrage de la table LIVRES SELECT GENRE, AVG(PRIX) FROM LIVRES GROUP BY GENRE

Rsultat GENRE -------- -------------------POESIE ROMAN THEATRE


Les possibilits avances de recherche de donnes

84.50000000000 102.42857142857 115.00000000000


- 87 INFOTEL

La fonction SUM
Format
La fonction SUM permet de calculer la somme des valeurs d'une collection de nombres
+ALL+ | | >SUM(++expression)> | | +DISTINCT+

Rgles : idem fonction AVG

Exemple

Lister la somme des prix des romans de la table LIVRES

SELECT SUM(PRIX) FROM LIVRES WHERE GENRE = 'ROMAN'

Rsultat -------------

717.00

Les possibilits avances de recherche de donnes

- 88 -

INFOTEL

Les fonctions MAX et MIN


Format
Les fonctions MAX et MIN ont le mme format :
+ALL+ | | >+MAX+(++expression)> | | | | +MIN+ +DISTINCT+

MAX et MIN s'appliquent sur tous les types de donnes Les valeurs nulles sont ignores DISTINCT n'a aucune incidence sur le rsultat obtenu Le rsultat est la valeur nulle si la collection de valeurs est vide

Exemple

Donner le prix maximum des ouvrages de la table LIVRES SELECT MAX(PRIX) FROM LIVRES Donner le prix maximum des ouvrages de chaque genre de la table LIVRES SELECT GENRE, MAX(PRIX) FROM LIVRES GROUP BY GENRE
- 89 INFOTEL

Les possibilits avances de recherche de donnes

Les fonctions MAX et MIN


Rsultat
GENRE -------POESIE ROMAN THEATRE

---------90.50 148.50 120.00

Les possibilits avances de recherche de donnes

- 90 -

INFOTEL

La fonction COUNT
Format
La fonction COUNT permet de dnombrer une collection de lignes ou de valeurs +ALL+ | | >COUNT(+++expression+)> || | | |+DISTINCT+ | +*+

Le rsultat est un entier long COUNT(*) : nombre de lignes d'un groupe ou d'une table rsultante aprs application des conditions de slection Les lignes qui ne contiennent que des valeurs nulles sont comptes COUNT (DISTINCT nom-de-colonne) : nombres de valeurs distinctes prsentes dans une colonne, en liminant les valeurs nulles Le rsultat est gal 0 si la collection de valeurs est vide
Les possibilits avances de recherche de donnes - 91 INFOTEL

La fonction COUNT_BIG
Fonction
La fonction COUNT_BIG permet de dnombrer le nombre de lignes (ou de valeurs) dans un ensemble de lignes (ou de valeurs) La syntaxe est identique celle de COUNT Son fonctionnement est identique celui de COUNT si ce nest que le rsultat est un dcimal de prcision 31 (alors que cest un entier long pour la fonction COUNT)

Les possibilits avances de recherche de donnes

- 92 -

INFOTEL

Imbrication de fonctions
Exemples
SUM (INTEGER (PRIX)) somme les valeurs entires des prix, soit 1113 INTEGER (SUM (PRIX)) donne la valeur entire de SUM (PRIX), soit 1116

Les possibilits avances de recherche de donnes

- 93 -

INFOTEL

Les fonctions scalaires


Format
Les fonctions scalaires effectuent une opration sur une valeur (ou sur un nombre fixe de valeurs) Une fonction scalaire peut tre utilise dans une expression Fonctions scalaires de format simple >> nom-de-fonction ( expression ) >< Fonctions ayant ce format : DIGITS FLOAT HEX INTEGER LENGTH VARGRAPHIC

Les possibilits avances de recherche de donnes

- 94 -

INFOTEL

Les fonctions scalaires


DIGITS convertit la valeur absolue d'un nombre entier dcimal ou binaire en chane de caractres de longueur fixe FLOAT permet d'obtenir la reprsentation en virgule flottante double prcision d'un nombre HEX donne la reprsentation en hexadcimal d'une chane de caractres Si l'argument est une date, une heure ou un instant, on obtient la reprsentation hexadcimale interne de cet argument INTEGER permet d'obtenir, sous forme d'un entier long, la reprsentation d'un nombre LENGTH donne la longueur de la reprsentation interne d'un argument VARGRAPHIC permet de convertir une chane de caractres en chane de caractres graphique de longueur variable
Les possibilits avances de recherche de - 95 donnes INFOTEL

la fonction DECIMAL
Format
La fonction DECIMAL permet d'obtenir la reprsentation dcimale d'une valeur numrique ou dune chane de caractres >DECIMAL(expression++)> | | +,entier++ | | +,entier++ +,marque+

Premier argument : nombre convertir Deuxime argument : prcision du rsultat Troisime argument : chelle du rsultat Quatrime argument (pour les chanes de caractres) : marque du point dcimal
Les possibilits avances de recherche de donnes - 96 INFOTEL

La fonction SUBSTR
Format
La fonction SUBSTR permet d'extraire une sous-chane partir d'une chane de caractres >SUBSTR(expression,position++)> | | +,longueur+ Expression : chane de caractres de dpart Position : position de dpart de la sous-chane Longueur : longueur de la sous-chane extraire

Exemple

SUBSTR ('HUGO', 2) SUBSTR ('HUGO', 2, 2)

donne 'UGO', donne 'UG'.

Les possibilits avances de recherche de donnes

- 97 -

INFOTEL

Les fonctions VALUE et COALESCE


Format
La fonction VALUE permet de substituer une valeur dfinie une valeur nulle ++ V | >VALUE(expression,expression+)> Les expressions entre parenthses doivent tre compatibles Le rsultat de la fonction sera la premire valeur non nulle Le rsultat ne sera nul que si toutes les expressions ont la valeur nulle VALUE (PRIX, 0) Le rsultat sera : la valeur de PRIX si elle est non nulle zro si PRIX a la valeur nulle La fonction COALESCE est synonyme de la fonction VALUE

Exemple

Les possibilits avances de recherche de donnes

- 98 -

INFOTEL

La fonction NULLIF
Format Rgles
>--NULLIF--(--expression1-,--expression2-)------------> Cette fonction permet de retourner une valeur NULL si les deux arguments sont gaux Si les deux arguments sont diffrents, alors la valeur du premier argument est renvoye Les deux arguments doivent tre de type compatible (comparaison de deux expressions caractres ou de deux expressions numriques ou de deux dates, dure) NULLIF(e1,e2) donne le mme rsultat que lexpression CASE ci dessous : CASE WHEN e1=e2 THEN NULL ELSE e1 END NULLIF retourne la valeur du premier argument dans le cas ou une ou les deux expressions sont nulles

Les possibilits avances de recherche de donnes

- 99 -

INFOTEL

La fonction STRIP
Format
>STRIP-(expression+--------------------+>< | | +-,BOTH----+-----+----------------+-| +-,B-------| | | +-,LEADING-| +-,strip char + +-,L-------| +-,TRAILING| +-,T-------+

Les possibilits avances de recherche de donnes

- 100 -

INFOTEL

La fonction STRIP
Rgles
La fonction STRIP permet une application de retirer les blancs ou tout autre caractre spcial de la fin, du dbut, voire des deux, dune chane de caractres FLe premier argument doit tre une chane de caractres FLe deuxime est optionnel, il indique si les caractres sont retirer du dbut ou de la fin de la chane. Sil nest pas spcifi les caractres sont retirer au dbut et la fin de la chane FLe troisime correspond au caractre devant tre retir

Exemples

Lexemple suivant retourne le rsultat 123.45 si la valeur de


COST de type CHAR(10) est 0000123.45 STRIP(COST,L,0)

Lexemple suivant retourne le rsultat HUGO si la valeur de


AUTEUR de type CHAR(9) est HUGO STRIP(AUTEUR)
Les possibilits avances de recherche de donnes - 101 INFOTEL

La Fonction STRIP
Le rsultat Ce quelle de longueurde cette fonction sera sous la forme dune chane variable avec la mme longueur maximum que la retourne variable dorigine

La taille du rsultat sera de longueur :


expression nombre doctets supprims

Tous les arguments peuvent tre supprims : le rsultat sera


une chane de caractres variable de longueur zro

Si le premier argument est null le rsultat sera aussi null

Les possibilits avances de recherche de donnes

- 102 -

INFOTEL

La fonction FLOOR
Format
La fonction FLOOR permet dobtenir lentier le plus grand qui est infrieur lexpression numrique prcise en argument Le rsultat est du mme type que celui de largument Si largument est DECIMAL, le rsultat sera DECIMAL avec une prcision 0
>FLOOR(expression)>

Exemple

FLOOR (3.5) donne 03 FLOOR (-3.1) donne -04

Les possibilits avances de recherche de donnes

- 103 -

INFOTEL

La fonction IFNULL
Format
La fonction IFNULL permet dobtenir la premire expression non nulle Cette fonction est identique la fonction COALESCE si ce nest que la fonction IFNULL naccepte que deux arguments
>IFNULL(exp1, exp2)>

Exemple

IFNULL (PRIX, 0) le rsultat sera : la valeur de PRIX si elle est non nulle zro si PRIX a la valeur nulle

Les possibilits avances de recherche de donnes

- 104 -

INFOTEL

La fonction INSERT
Format
La fonction INSERT permet dobtenir une nouvelle chane de caractres constitue partir dune chane prcise en argument dans laquelle ont t supprims n caractres partir dune certaine position et ajoute une chane de caractres
>INSERT(expression, position, longueur, chane)>

Exemple

CHAR (INSERT(INSERTING,4,2,IS),10) Donne une chane de 10 caractres contenant INSISTING

Les possibilits avances de recherche de donnes

- 105 -

INFOTEL

La fonction INTEGER (ou INT)


Format
La fonction INTEGER convertit en nombre entier une expression
>INTEGER(expression) >

Exemple

La colonne MAT (toujours numrique) de la table TEMPL est dfinie CHAR(04) SELECT INTEGER(MAT) FROM TEMPL Permet de traduire les matricules sous la forme dentiers

Les possibilits avances de recherche de donnes

- 106 -

INFOTEL

La fonction LCASE (ou LOWER)


Format
Les fonctions LCASE et LOWER traduisent une chane de caractres en minuscules
>LCASE(expression) > >LOWER(expression) >

Les possibilits avances de recherche de donnes

- 107 -

INFOTEL

La fonction LEFT
Format
La fonction LEFT extrait la partie gauche dune chane de caractres
>LEFT(expression, entier) >

Exemple

Pour rcuprer les 3 premiers caractres de la colonne NOM de la table TEMPL SELECT LEFT (NOM, 3)FROM TEMPL

Les possibilits avances de recherche de donnes

- 108 -

INFOTEL

La fonction LTRIM
Format
La fonction LTRIM permet de retirer les blancs du dbut dune chane de caractres Cette fonction est identique la fonction STRIP avec loption LEADING
>LTRIM(expression)>

Les possibilits avances de recherche de donnes

- 109 -

INFOTEL

La fonction MAX
Format
La fonction MAX fournit la plus grande valeur dun ensemble de valeurs
>MAX(exp1, exp2, exp3, ) >

Les possibilits avances de recherche de donnes

- 110 -

INFOTEL

La fonction POSSTR
Format
La fonction POSSTR fournit la position de dbut de la premire occurrence dune chane de caractres lintrieur dune autre chane
>POSSTR(Recherche, Chane)>

Les possibilits avances de recherche de donnes

- 111 -

INFOTEL

La fonction REPEAT
Format
La fonction REPEAT fournit une chane de caractres rsultant de la rptition n fois de la chane de caractres prcise en argument
>REPEAT(expression, n) >

Exemple

REPEAT (AB, 2) Donne le rsultat ABAB

Les possibilits avances de recherche de donnes

- 112 -

INFOTEL

La fonction REPLACE
Format
La fonction REPLACE fournit une chane de caractres partir de la chane initiale dans laquelle toutes les occurrences des chanes recherches ont t remplaces
>REPLACE(chane, chane_recherche, remplace_par)>

Exemple

CHAR(REPLACE (DINING, N, VID)), 10) Donne une chane de 10 caractres contenant DIVIDIVIDG

Les possibilits avances de recherche de donnes

- 113 -

INFOTEL

La fonction RIGHT
Format
La fonction RIGHT fournit la partie droite dune chane de caractres
>RIGHT(expression, entier)>

Les possibilits avances de recherche de donnes

- 114 -

INFOTEL

La fonction ROUND
Format
La fonction ROUND permet darrondir lexpression1 sur un nombre de dcimales exprim par expression2
>ROUND (expression1,expression2)>

Exemple
ROUND (3.6, 0) Donne 4.0

Les possibilits avances de recherche de donnes

- 115 -

INFOTEL

La fonction RTRIM
Format
La fonction RTRIM permet de retirer les blancs situs la fin dune chane de caractres Cette fonction est identique la fonction STRIP avec loption TRAILING
>RTRIM (expression)>

Les possibilits avances de recherche de donnes

- 116 -

INFOTEL

La fonction SIGN
Format
La fonction SIGN permet de connatre le signe dune valeur numrique Le rsultat est -1 si la valeur est < 0, 0 si la valeur est 0, 1 si la valeur est > 0 Le rsultat contient la valeur nulle si la valeur contient la valeur nulle
>SIGN (expression)>
INFOTEL

Les possibilits avances de recherche de donnes

- 117 -

La fonction TRANSLATE
Format
La fonction TRANSLATE permet dobtenir une nouvelle chane de caractres partir dune chane initiale dans laquelle un ou plusieurs caractres ont t remplacs par dautres caractres Le premier caractre de From_String est remplac par le premier caractre de To_String et ainsi de suite Si la longueur de From_String est plus grande que celle de To_String, cest le caractre de padding qui est considr
>TRANSLATE (str++)> +,To-string+| | +, + | +,From_string+++ +,pad+
Les possibilits avances de recherche de donnes - 118 INFOTEL

La fonction TRANSLATE
Exemple
TRANSLATE (Hanauma Bay, bA, Bay, %) Donne HAnAumA bA%

Les possibilits avances de recherche de donnes

- 119 -

INFOTEL

La fonction TRUNCATE (ou TRUNC)


Format
La fonction TRUNCATE permet de faire la troncature dune valeur numrique
>TRUNCATE (expression1, expression2)>

Exemple
TRUNC TRUNC TRUNC TRUNC TRUNC (873.726, 2)donne (873.726, 1)donne (873.726, 0)donne (873.726,-1)donne (873.726,-2)donne 873,720 873,700 873,000 870,000 800,000

Les possibilits avances de recherche de donnes

- 120 -

INFOTEL

La fonction UCASE (ou UPPER)


Format
Les fonctions UCASE et UPPER convertissent en majuscules une chane de caractres
>UCASE (expression) >

Exemple
UCASE (abcde) donne ABCDE

Les possibilits avances de recherche de donnes

- 121 -

INFOTEL

La fonction CHAR
Temps caractre
La fonction CHAR permet de convertir une date, une heure ou un instant en une chane de caractres de longueur fixe
>CHAR(expression++)> +,ISO+ +,USA+ +,EUR+ +,JIS+ +,LOCAL+

Le second paramtre de la fonction indique le format dsir. (par dfaut : selon option de format de l'installation)

Exemple

CHAR(CURRENT DATE, USA) peut donner '12/20/2004'

Les possibilits avances de recherche de donnes

- 122 -

INFOTEL

La fonction CHAR
Caractre La fonction CHAR produit une chane de caractres dune certaine longueur partir dune autre chane de caractres caractre
>CHAR(expression++)> +longueur+

Longueur indique la longueur de la chane rsultat (entre 1 et 255)

Exemple

CHAR(A, 40) Produit une chane de 40 caractres contenant A

Les possibilits avances de recherche de donnes

- 123 -

INFOTEL

La fonction CHAR
Entier caractre
La fonction CHAR produit une chane de caractres dune longueur fixe (6 ou 11) partir dune expression numrique entier (SMALLINT ou INTEGER)
>CHAR(expression)>

Dcimal caractre

La fonction CHAR produit une chane de caractres dune longueur fixe partir dune expression numrique DECIMAL. La longueur de la chane rsultat est 2+p si p est la prcision de lexpression fournie en argument
>CHAR(expression++)> +marque dcimale+

Rowid caractre

La fonction CHAR produit une chane de 40 caractres partir dune expression de type ROWID
>CHAR(expression)>

Les possibilits avances de recherche de donnes

- 124 -

INFOTEL

La fonction TIMESTAMP
Format
La fonction TIMESTAMP permet d'obtenir un instant partir d'une ou de deux valeurs

>TIMESTAMP(expression1++)> | | +,expression2+

Exemple

TIMESTAMP ('1997-06-20-09.10.17') (formats ISO) et TIMESTAMP ('1997-06-20','09.10.17') sont quivalents

Les possibilits avances de recherche de donnes

- 125 -

INFOTEL

Expression de dure
Format
Une expression de dure reprsente une unit de temps exprime selon le format :

>+fonction+unit> | | +(expression)+ | | +constante+ | | +nom-de-colonne+ expression : addition ou soustraction premier oprande : de type DATE, TIME ou TIMESTAMP YEAR MONTH DAY HOUR MINUTE SECOND MICROSECOND YEARS MONTHS DAYS HOURS MINUTES SECONDS MICROSECONDS
INFOTEL

Unit
un des mots de la liste

Les possibilits avances de recherche de - 126 donnes

Expression de dure
Exemple
Ajout de deux expressions de dure d'units diffrentes une date DATE_1 + 5 MONTHS + 6 DAYS

Les possibilits avances de recherche de - 127 donnes

INFOTEL

Dures
Dure date
Nombre de format AAAAMMJJ Obtenue par la soustraction de deux dates ex : DATE_FIN - DATE_DEBUT

Dure heure

Nombre de format HHMMSS Obtenue par la soustraction de deux heures

Ex : HEURE_FIN - HEURE_DEBUT

Dure instant

Nombre de format AAAAMMJJHHMMSSmmmmmm Obtenue par la soustraction de deux instants Ex : INSTANT_FIN - INSTANT_DEBUT

Les possibilits avances de recherche de donnes

- 128 -

INFOTEL

Oprations sur donnes temporelles


Affectations affecte
Une donne de type DATE, TIME ou TIMESTAMP peut tre Soit une colonne de mme type Soit une variable ou une colonne reprsente par une chane de caractres Dans ce cas, il y a conversion en constante de type date, heure ou instant

Comparaison Une donne de type DATE, TIME ou TIMESTAMP peut tre

compare une donne de mme type ou une constante de son type Les comparaisons s'effectuent selon la squence chronologique

Exemple

HEURE_DEBUT > '18.30.40' DATE_FIN > DATE_DEBUT

Les possibilits avances de recherche de donnes

- 129 -

INFOTEL

Additions
Format
On ne peut additionner qu'une dure une donne temporelle :

DATE + dure HEURE + dure INSTANT + dure

DATE HEURE INSTANT

Les additions se font en tenant compte du calendrier

Exemple

Si DATE_DEBUT contient la valeur correspondant au 31 janvier 1996, l'expression : DATE_DEBUT + 31 DAYS aura pour rsultat la date correspondant au 2 mars 1996, car l'anne 1996 est bissextile

Les possibilits avances de recherche de donnes

- 130 -

INFOTEL

Additions (variante)
Format
Pour ajouter un nombre de mois une date, on peut utiliser la fonction ADD_MONTHS On obtient une nouvelle date ADD_MONTHS(expression, nbmois)

Remarque

Si la date prcise en argument correspond au dernier jour dun mois, la nouvelle date correspondra au dernier jour du mois rsultant de laddition du nombre de mois De la mme faon si le mois rsultant a moins de jours que la date initiale, le rsultat de la fonction sera le dernier jour du mois Si DATE_DEBUT contient la valeur correspondant au 29 fvrier 2000 DATE_DEBUT + 4 MONTHS aura pour rsultat la date du 29 juin 2000 ADD_MONTHS (DATE_DEBUT, 4) aura pour rsultat la date du 30 juin 2000 (puisque le 29 fvrier est le dernier jour du mois de fvrier)

Exemple

Les possibilits avances de recherche de donnes

- 131 -

INFOTEL

Soustractions
Format
Le premier oprande peut tre : Une date DATE - DATE DATE - dure Une heure HEURE HEURE HEURE dure Un instant INSTANT dure

dure DATE DATE dure HEURE HEURE INSTANT

Exemple

Si DATE_FIN contient la valeur correspondant au 31 janvier 1997, l'expression : DATE_FIN - 31 DAYS aura pour rsultat la date correspondant au 31 dcembre 1996

Les possibilits avances de recherche de donnes

- 132 -

INFOTEL

Fonctions scalaires lies au temps


Liste
DATE DAY permet d'obtenir une date donne la partie JJ d'une date ou le nombre de jours couls entre 2 dates DAYOFMONTH donne la partie JJ dune date DAYOFWEEK donne le numro du jour dans la semaine (de 1 pour dimanche 7 pour samedi) correspondant une date DAYOFWEEK_ISO donne le numro du jour dans la semaine (de 1 pour lundi 7 pour dimanche) correspondant une date DAYOFYEAR donne le numro du jour dans lanne (de 1 pour le 1er janvier 366) DAYS donne le nombre de jours entre le 1er janvier 0001 et une date
- 133 INFOTEL

Les possibilits avances de recherche de donnes

Fonctions scalaires lies au temps


Liste
HOUR JULIAN_DAY LAST_DAY donne la partie HH d'une heure donne le nombre de jours couls depuis le 1er janvier du calendrier julien donne la date correspondant au dernier jour du mois de la date fournie en

argument MICROSECOND donne la partie microsecondes d'un instant MIDNIGHT_SECONDS donne le nombre de microsecondes coules depuis minuit et linstant fourni en argument MINUTE donne la partie MM d'une heure MONTH donne la partie MM d'une date NEXT_DAY donne la date qui est postrieure la date prcise en argument et qui correspond au jour de la semaine prcis en argument QUARTER donne le numro du trimestre correspondant la date prcise en argument SECOND donne la partie SS d'une heure TIME permet d'obtenir une heure TIMESTAMP permet d'obtenir un instant
Les possibilits avances de recherche de donnes - 134 INFOTEL

Fonctions scalaires lies au temps


Liste
TIMESTAMP_FORMAT permet d'obtenir un instant dans le format spcifi en argument TRUNC_TIMESTAMP permet d'obtenir un instant avec une troncature dans lunit spcifie en argument WEEK permet d'obtenir le numro de semaine dans lanne (de 1 54) correspondant la date prcise en argument la semaine dbute le dimanche et le 1er Janvier est toujours dans la semaine 1 WEEK_ISO permet d'obtenir le numro de semaine dans lanne (de 1 54) correspondant la date prcise en argument la semaine dbute le lundi et semaine 1 est la premire semaine qui contient un mercredi YEAR donne la partie AAAA d'une date

Les possibilits avances de recherche de donnes

- 135 -

INFOTEL

Lexpression CASE
Dfinition
Une expression CASE permet : dvaluer une condition avec la clause WHEN daffecter une valeur de sortie avec la clause ELSE si aucun cas nest vrifi Lexpression CASE peut-tre utilise dans un prdicat IN
+- ELSE NULL --------------+ | | >CASE-clausewhen-+--------------------------+-END CASE>< | | +-ELSE expression rsultat-+

Format

Clause when
>---whencondition de recherche---then--+expression rsultat+-----> | | +--NULL-------------+

Les possibilits avances de recherche de donnes

- 136 -

INFOTEL

Lexpression CASE
Exemple 1
SELECT ACCOUNT_NUM, NORD SELECT ACCOUNT_NUM, FROM ACCOUNT_TABLE WHERE REGION = N CASE REGION UNION ALL SELECT ACCOUNT_NUM, SUD WHEN N THEN NORD FROM ACCOUNT_TABLE WHERE REGION = S WHEN S THEN SUD UNION ALL SELECT ACCOUNT_NUM, OUEST WHEN W THEN OUEST FROM ACCOUNT_TABLE WHERE REGION = W WHEN E THEN EST UNION ALL SELECT ACCOUNT_NUM, EST ELSE NON ASSIGNE FROM ACCOUNT_TABLE WHERE REGION = E END CASE UNION ALL SELECT ACCOUNT_NUM, NON ASSIGNE FROM ACCOUNT_TABLE FROM ACCOUNT_TABLE WHERE REGION NOT IN (N, S, W, E)
- 137 INFOTEL

Les possibilits avances de recherche de donnes

Expression CASE
Exemple 2
UPDATE table_employe SET SALAIRE = CASE NOTE WHEN 15 THEN SALAIRE * 1.15 WHEN 16 THEN SALAIRE * 1.16 WHEN 17 THEN SALAIRE * 1.17 WHEN 18 THEN SALAIRE * 1.18 WHEN 19 THEN SALAIRE * 1.19 WHEN 20 THEN SALAIRE * 1.20 ELSE SALAIRE END CASE

Les possibilits avances de recherche de donnes

- 138 -

INFOTEL

Expression CASE
Exemple 3
SELECT EMPNO, NO_DEPT, SALAIRE+COMM FROM EMPLOYE WHERE (CASE WHEN SALAIRE = 0 THEN NULL ELSE COMM/SALAIRE END CASE) > 0.25

Les possibilits avances de recherche de donnes

- 139 -

INFOTEL

Objectifs du chapitre
Connatre les oprations de mise jour de donnes : Ajout Modification Annulation

Etre sensibilis aux notions de normalisation des tables : Trois premires formes normales Cl primaire

Savoir utiliser les index :

Cration Rle et utilisation

Mise jour - Normalisation et index

- 140 -

INFOTEL

Table ouvrages
Pour illustrer ce chapitre nous crons une nouvelle table. AUTEUR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND
Mise jour - Normalisation et index

TITRE HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LESTROISMOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS GERMINAL UNE SAISON EN ENFER LA MARE AU DIABLE
- 141 -

NE_EN SALLE RAYON 1802 1802 1802 1799 1799 1802 1802 1824 1783 1783 1821 1844 1840 1854 1804 2 2 2 1 1 1 1 1 3 3 1 3 3 3 3 3 3 3 1 1 1 1 1 5 5 2 6 6 5 5
INFOTEL

INSERT avec sous select


Il est possible d'inclure un sous-select dans l'instruction INSERT pour ranger dans une table des donnes provenant d'une autre table Format gnral simplifi
>>INSERT INTOnom-de-table++> | +,+ | | V | | +(nom-de-colonne+)+

+,+ V | >+VALUES(+constante++)+>< | | | | | +NULL+ | | | | | | +registre-spcial+ | | | +sous-select+


Mise jour - Normalisation et index - 142 INFOTEL

INSERT : exemples
Exemple 1

Initialiser la table OUVRAGES (considre comme vide) partir de la table LIVRES et lister la table aprs initialisation INSERT INTO OUVRAGES (AUTEUR, TITRE) SELECT AUTEUR, TITRE FROM LIVRES SELECT * FROM OUVRAGES

Rsultat AUTEUR

-------HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE

TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 143 -

NE_EN -----0 0 0 0 0 0 0 0 0 0 0 0

SALLE RAYON ------ ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----- INFOTEL

Mise jour - Normalisation et index

INSERT : exemples
Exemple 2

INSERT INTO OUVRAGES (AUTEUR, NE_EN, SALLE, RAYON) SELECT AUTEUR, NE_EN, SALLE, RAYON FROM AUTEURS SELECT * FROM OUVRAGES

Rsultat AUTEUR

-----HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND

TITRE ------3

NE_EN -----1802 1799 1802 1824 1783 1821 1844 1840 1854 1804
- 144 -

SALLE RAYON ----- -----2 1 1 1 3 1 3 3 3 3 1 1 1 5 2 6 6 5 5


INFOTEL

Mise jour - Normalisation et index

UPDATE
Format simplifi
L'instruction UPDATE permet de modifier la valeur des donnes des colonnes d'une ou de plusieurs lignes d'une table Format gnral simplifi
>>UPDATEnom-de-table> +,+ V | >SETnom-de-colonne=+expression++> | | +NULL+ | | +(Select scalaire)+ >++>< | | +WHEREcondition-de-recherche+
Mise jour - Normalisation et index - 145 INFOTEL

UPDATE
Paramtres UPDATE est suivi du nom de la table dans laquelle on veut
modifier des donnes SET dfinit le nom de la ou des colonnes que l'on dsire mettre jour, ainsi que le mode d'obtention de la nouvelle valeur Select scalaire = SELECT (sans GROUP BY ni HAVING) produisant une table rsultante dune ligne et dune colonne Si le table rsultante est vide, la valeur NULL est retenue pour la mise jour WHERE permet de slectionner les lignes mettre jour En cas d'erreur, aucune valeur n'est modifie
Mise jour - Normalisation et index - 146 INFOTEL

UPDATE
Format ROW
Dans la clause SET, il est possible de mettre jour le contenu de plusieurs colonnes : par une succession de COL = x, spars par des , ou en utilisant le format Row :
+,+ +,+ V | V | > SET (col+)- = (++expression+++)> | | | | | +NULL+ | | | +Select +

Le Select (sans GROUP BY ni HAVING) doit produire une table rsultante dune ligne et dautant de colonnes que de colonnes mettre jour Si la table rsultante est vide, la valeur Null est retenue pour chacune des colonnes mettre jour
Mise jour - Normalisation et index - 147 INFOTEL

UPDATE : exemples
Exemple 3

Mettre jour la table OUVRAGES obtenue aprs l'exemple 1 en remplaant l'anne de naissance par la constante 1800 UPDATE OUVRAGES SET NE_EN = 1800 UPDATE OUVRAGES SET NE_EN = NE_EN + 1800

SELECT * FROM OUVRAGES

Rsultat AUTEUR
HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE
Mise jour - Normalisation et index

TITRE HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 148 -

NE_EN SALLE RAYON 1800 1800 1800 1800 1800 1800 1800 1800 1800 1800 1800 1800 ------------------------------------------------------------------------------------------------------------------------ INFOTEL

UPDATE : exemples
Exemple 4

Mettre jour la table OUVRAGES obtenue aprs l'exemple 3 en remplaant l'anne de naissance de Victor HUGO par 1802, et en valorisant les donnes SALLE et RAYON aux valeurs correspondant cet auteur UPDATE OUVRAGES SET NE_EN = 1802, SALLE = 2, RAYON = 3 WHERE AUTEUR = 'HUGO'
-------HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 149 -

Rsultat AUTEUR

NE_EN -----1802 1802 1802 1800 1800 1800 1800 1800 1800 1800 1800 1800

SALLE RAYON ------ -----2 3 2 3 2 3 ------------------------------------------------------------------------------------------ INFOTEL

Mise jour - Normalisation et index

UPDATE : exemples
Exemple 5

Mettre jour la table OUVRAGES obtenue aprs l'exemple 4 en remplaant l'anne de naissance, la salle et le rayon des auteurs compris entre BALZAC et DUMAS respectivement par les valeurs 1799, 1 et 1
UPDATE OUVRAGES SET (NE_EN, SALLE, RAYON) = (1799, 1, 1) WHERE AUTEUR BETWEEN 'BALZAC' AND 'DUMAS' SELECT * FROM OUVRAGES AUTEUR TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 150 -

Rsultat -------HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE
Mise jour - Normalisation et index

NE_EN -----1802 1802 1802 1799 1799 1799 1799 1799 1800 1800 1800 1800

SALLE RAYON ------ -----2 3 2 3 2 3 1 1 1 1 1 1 1 1 1 1 ---------------------------------------- INFOTEL

UPDATE : Remarques
Trois remarques :

6. la date de naissance de DUMAS est incorrecte 7. dans la table AUTEURS, il existe deux DUMAS avec deux dates de naissance diffrentes : DUMAS pre et DUMAS fils

8. les tables AUTEURS et OUVRAGES prsentent des incohrences (exemple : la date de naissance de VERLAINE est 1844 dans la table AUTEURS et 1800 dans la table OUVRAGES) L'opration de mise jour n'assure donc pas implicitement l'intgrit des donnes

Mise jour - Normalisation et index

- 151 -

INFOTEL

UPDATE : exemple
Exemple 6 Mettre jour la table OUVRAGES obtenue aprs l'exemple 5 en distinguant DUMAS pre et DUMAS fils et en corrigeant leur date de naissance UPDATE OUVRAGES SET AUTEUR = 'DUMAS F', NE_EN = 1824 WHERE AUTEUR = 'DUMAS' AND TITRE = 'LA DAME AUX CAMELIAS' UPDATE OUVRAGES SET AUTEUR = 'DUMAS P', NE_EN = 1802 WHERE AUTEUR = 'DUMAS' SELECT * FROM OUVRAGES AUTEUR -------HUGO HUGO HUGO BALZAC BALZAC DUMAS P DUMAS P DUMAS F STENDHAL STENDHAL FLAUBERT VERLAINE
Mise jour - Normalisation et index

TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS LE ROUGE ET LE NOIR LA CHARTREUSE DE PARME MADAME BOVARY POEMES SATURNIENS
- 152 -

NE_EN -----1802 1802 1802 1799 1799 1802 1802 1824 1800 1800 1800 1800

SALLE RAYON ------ -----2 3 2 3 2 3 1 1 1 1 1 1 1 1 1 1 ---------------------------------------- INFOTEL

DELETE
Format
L'instruction DELETE permet de supprimer des lignes d'une table

>>DELETE FROMnom-de-table->

>++>< | | +WHEREcondition-de-recherche+

Fonctionnement : pas d'option WHERE : suppression de toutes les lignes de la table en cas d'erreur, aucune ligne n'est supprime

Mise jour - Normalisation et index

- 153 -

INFOTEL

DELETE : exemples
Exemple 7

Annuler, dans la table OUVRAGES obtenue aprs l'exemple 6, les lignes correspondant des auteurs ayant leur date de naissance la valeur 1800 DELETE FROM OUVRAGES WHERE NE_EN = 1800 SELECT * FROM OUVRAGES

Rsultat AUTEUR

-------HUGO HUGO HUGO BALZAC BALZAC DUMAS P DUMAS P DUMAS F

TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS
- 154 -

NE_EN -----1802 1802 1802 1799 1799 1802 1802 1824

SALLE RAYON ------ -----2 3 2 3 2 3 1 1 1 1 1 1 1 1 1 1


INFOTEL

Mise jour - Normalisation et index

La premire forme normale et ses inconvnients


Dfinition
Une table est en premire forme normale quand elle possde uniquement des donnes lmentaires pour chaque colonne dans chaque ligne (pas de donnes rptitives)

Inconvnients : Anomalies au DELETE Anomalies l'INSERT Anomalies l'UPDATE

Toutes les tables prsentes en exemples sont en premire forme normale


Mise jour - Normalisation et index - 155 INFOTEL

La premire forme normale et ses inconvnients


Anomalies ouvrages crits par l'auteur HUGO au DELETE
Exemple

Annuler, dans la table OUVRAGES, les lignes relatives aux DELETE FROM OUVRAGES WHERE AUTEUR = 'HUGO';
TITRE

SELECT * FROM OUVRAGES

Rsultat ------- ---------------------- ----BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND EUGENIE GRANDET 1799 LE PERE GORIOT 1799 LES TROIS MOUSQUETAIRES1802 VINGT ANS APRES 1802 LA DAME AUX CAMELIAS 1824 LE ROUGE ET LE NOIR 1783 LA CHARTREUSE DE PARME 1783 MADAME BOVARY 1821 POEMES SATURNIENS 1844 GERMINAL 1840 UNE SAISON EN ENFER 1854 LA MARE AU DIABLE 1804

AUTEUR

NE_EN

SALLE RAYON ----- ----1 1 1 1 1 1 1 1 1 1 3 5 3 5 1 2 3 6 3 6 3 5 3 5

En annulant les informations relatives aux ouvrages crits par Victor HUGO, on perd galement la date de naissance de cet auteur, information indpendante des ouvrages
Mise jour - Normalisation et index - 156 INFOTEL

La premire forme normale et ses inconvnients


Anomalies l'insert
Introduire, dans la table OUVRAGES, le livre "La Cousine Bette" de l'auteur BALZAC INSERT INTO OUVRAGES (AUTEUR, TITRE) VALUES ('BALZAC', 'LA COUSINE BETTE') SELECT * FROM OUVRAGES
AUTEUR ------BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND BALZAC TITRE NE_EN ---------------------- ----EUGENIE GRANDET 1799 LE PERE GORIOT 1799 LES TROIS MOUSQUETAIRES1802 VINGT ANS APRES 1802 LA DAME AUX CAMELIAS 1824 LE ROUGE ET LE NOIR 1783 LA CHARTREUSE DE PARME 1783 MADAME BOVARY 1821 POEMES SATURNIENS 1844 GERMINAL 1840 UNE SAISON EN ENFER 1854 LA MARE AU DIABLE 1804 LA COUSINE BETTE 0 SALLE RAYON ----- ----1 1 1 1 1 1 1 1 1 1 3 5 3 5 1 2 3 6 3 6 3 5 3 5 ---- ------

INSERT n'oblige pas valoriser toutes les donnes de toutes les colonnes

Mise jour - Normalisation et index

- 157 -

INFOTEL

La premire forme normale et ses inconvnients


Anomalies l'UPDATE
Mettre jour la date de naissance, la salle et le rayon du livre "La Cousine Bette" de l'auteur BALZAC UPDATE OUVRAGES SET NE_EN = 1800, SALLE = 2, RAYON = 2 WHERE AUTEUR = 'BALZAC' AND TITRE LIKE '%BETTE%' SELECT * FROM OUVRAGES AUTEUR ------BALZAC BALZAC DUMAS DUMAS DUMAS STENDHAL STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND BALZAC TITRE NE_EN SALLE ---------------------- --------EUGENIE GRANDET 1799 1 LE PERE GORIOT 1799 1 LES TROIS MOUSQUETAIRES1802 1 VINGT ANS APRESne contrle 1802 prsence1 UPDATE pas la LA DAME AUX CAMELIAS 1824 1 de donnes relatives BALZAC dans3 LE ROUGE ET LE NOIR 1783 d'autres lignesPARME 1783 la mise de la table. Ainsi, LA CHARTREUSE DE 3 MADAME BOVARY introduire des incohrences1 1821 jour peut POEMES SATURNIENS les lignes 1844 3 entre GERMINAL 1840 3 UNE SAISON EN ENFER 1854 3 LA MARE AU DIABLE 1804 3 LA COUSINE BETTE 1800 2 RAYON ----1 1 1 1 1 5 5 2 6 6 5 5 2

Mise jour - Normalisation et index

- 158 -

INFOTEL

La premire forme normale et ses inconvnients


Causes et remdes
Pourquoi ces anomalies ? Parce que la table n'est qu'une juxtaposition de colonnes, alors que nous nous intressons la ralit que cette table dcrit La table OUVRAGES contient : des donnes relatives des auteurs (AUTEUR, NE_EN, SALLE, RAYON) car on range les ouvrages par auteur des donnes relatives des ouvrages (AUTEUR, TITRE) De plus, les auteurs ne sont pas correctement identifis : au nom DUMAS correspondent deux auteurs diffrents (Alexandre DUMAS pre et Alexandre DUMAS fils), chacun ayant sa propre date de naissance

Mise jour - Normalisation et index

- 159 -

INFOTEL

La premire forme normale et ses inconvnients


Identifiant ou cl primaire : dfinition
Aprs changement de DUMAS par DUMAS F ou DUMAS P, on obtient un identifiant unique pour chaque auteur : c'est la cl primaire (ou identifiant ou critre d'identification) On appelle cl primaire une donne (ou une suite de donnes) permettant de dfinir de manire unique un lment dans un ensemble

Cl candidate et cl primaire Si plusieurs donnes peuvent tre utilisables comme identifiant, on donne le nom de cl candidate chacune de ces cls potentielles, et on choisit la cl primaire parmi les cls candidates
Mise jour - Normalisation et index - 160 INFOTEL

Deuxime forme normale


Pour mettre en vidence la deuxime forme normale, nous crons, par projection, deux nouvelles tables partir de la table OUVRAGES initiale :

la table LIVRES1 contenant les donnes relatives aux livres la table AUTEURS1 contenant les donnes relatives aux auteurs

Mise jour - Normalisation et index

- 161 -

INFOTEL

Deuxime forme normale


Table LIVRES1 Table AUTEURS1 AUTEUR BALZAC BALZAC DUMAS F DUMAS P DUMAS P FLAUBERT HUGO HUGO HUGO RIMBAUD SAND STENDHAL STENDHAL VERLAINE ZOLA TITRE EUGENIE GRANDET LE PERE GORIOT LA DAME AUX CAMELIAS LES TROIS MOUSQUETAIRES VINGT ANS APRES MADAME BOVARY HERNANI LES CONTEMPLATIONS LES MISERABLES UNE SAISON EN ENFER LA MARE AU DIABLE LA CHARTREUSE DE PARME LE ROUGE ET LE NOIR POEMES SATURNIENS GERMINAL AUTEUR BALZAC DUMAS F DUMAS P FLAUBERT HUGO RIMBAUD SAND STENDHAL VERLAINE ZOLA NE_EN 1799 1824 1802 1821 1802 1854 1804 1783 1844 1840 SALLE RAYON 1 1 1 1 1 2 3 3 3 3 3 1 1 2 3 5 5 5 6 6

La colonne TITRE constitue la cl primaire de la table LIVRES1. La colonne AUTEUR constitue la cl primaire de la table AUTEURS1
Mise jour - Normalisation et index - 162 INFOTEL

Deuxime forme normale


Dfinition
Les tables LIVRES1 et AUTEURS1 remdient aux inconvnients de mise jour de la premire forme normale Ces tables sont en deuxime forme normale Une relation est en deuxime forme normale si et seulement si elle est en premire forme normale et si chaque attribut non cl dpend de la totalit de la cl LIVRES1 ne contient plus de redondances : c'est un ensemble de donnes relatives aux livres de la bibliothque Cependant, des anomalies peuvent encore se produire au cours d'oprations de mise jour de la table AUTEURS1, car elle contient des dpendances fonctionnelles

Mise jour - Normalisation et index

- 163 -

INFOTEL

Deuxime forme normale


Dpendance Chaque auteur possde une date de naissance, une salle et un fonctionnelle rayon dans lequel on trouve ses ouvrages
Les donnes NE_EN, SALLE et RAYON dpendent fonctionnellement de la donne AUTEUR dans la table AUTEURS1 Mais il existe aussi des dpendances fonctionnelles entre attributs de la table AUTEURS1 : un rayon appartient une salle et une seule La connaissance du rayon implique celle de la salle (dpendance transitive entre AUTEUR et SALLE via RAYON) Le fait de mlanger les donnes relatives aux rayons et celles relatives aux salles peut aussi tre gnrateur d'erreurs de mise jour
Mise jour - Normalisation et index - 164 INFOTEL

Anomalies de mise jour


Anomalies L'annulation dans la table AUTEURS1 des ouvrages crits par au DELETE l'auteur HUGO entrane la perte de l'information : "la salle 2 Anomalies lINSERT
Il est impossible de crer une nouvelle salle ou un nouveau rayon si on n'a pas d'auteurs y ranger ( moins d'introduire des donnes sans signification dans les colonnes AUTEUR et NE_EN d'une ligne)

contient le rayon 3", information indpendante de l'auteur HUGO

Anomalies L'instruction lUPDATE

UPDATE AUTEURS1 SET SALLE = 4 WHERE AUTEUR = 'ZOLA' introduit une incohrence : le rayon 6 est en salle 4 pour ZOLA en salle 3 pour VERLAINE
- 165 INFOTEL

Mise jour - Normalisation et index

Troisime forme normale et BCNF


La solution consiste crer deux tables partir de la table AUTEURS1 : table AUTEURS2 comprenant les donnes AUTEUR, NE_EN et RAYON cette table ne contient que des donnes dpendant fonctionnellement d'AUTEUR une table RAYONS comprenant les donnes RAYON et SALLE cette table matrialise la dpendance fonctionnelle de SALLE par rapport RAYON Les deux tables sont en troisime forme normale

Mise jour - Normalisation et index

- 166 -

INFOTEL

Troisime forme normale et BCNF


Dfinitions
Une relation est en troisime forme normale si et seulement si elle est en deuxime forme normale et si toutes les donnes non cl ne dpendent fonctionnellement que de la cl primaire Autre dfinition : Forme normale de Boyce/Codd (ou BCNF pour Boyce/Codd Normal Form) Si on appelle dterminant une donne ou une suite de donnes dont dpend fonctionnellement un attribut, on peut fournir la dfinition suivante : Une relation est en forme normale de Boyce/Codd si et seulement si chaque dterminant est une cl candidate Troisime forme normale = minimum requis pour la conception des tables

Mise jour - Normalisation et index

- 167 -

INFOTEL

Les index
Dfinition
Tables = ensemble de lignes non ordonnes Une instruction de lecture ou de mise jour (SELECT, UPDATE, DELETE ou INSERT) comportant une condition de recherche peut entraner un balayage complet de la table Index = moyen d'acclrer la recherche par un accs plus rapide aux donnes De plus : possibilit de contrler l'unicit de certaines valeurs possibilit de demander un ordre de rangement physique

Mise jour - Normalisation et index

- 168 -

INFOTEL

Les index
Dfinition
Index : structure d'accs btie sur une table partir des donnes contenues dans une ou plusieurs colonnes de cette table ensemble ordonn de postes Poste d'index : tablit la correspondance entre une valeur et une ou plusieurs lignes de table contenant cette valeur contient : 1. la valeur indexe (provenant d'une ou de plusieurs colonnes) 2. un pointeur vers la ligne de table correspondante

Mise jour - Normalisation et index

- 169 -

INFOTEL

CREATE INDEX
Format
L'instruction CREATE INDEX permet de dfinir un index sur une table. Format gnral simplifi
>>CREATE+-----+----> +UNIQUE+++ + WHERE NOT NULL + >INDEXnom-d'indexONnom-de-table> +,+ | | | +ASC+ | V | | | >(nom-de-colonne+++)> | | +DESC+ >++>< | | +CLUSTER+
Mise jour - Normalisation et index - 170 INFOTEL

CREATE INDEX
Rgles
si des lignes existent dans la table, construction immdiate ou diffre (selon l'option DEFER) des entres de l'index index maintenu chaque mise jour (INSERT, UPDATE, DELETE) prsence d'index transparente pour les programmes (sauf si option UNIQUE) : seules les performances peuvent tre affectes

Mise jour - Normalisation et index

- 171 -

INFOTEL

CREATE INDEX
Exemples
Crer un index sur la table LIVRES par ordre croissant d'auteur et de titre CREATE INDEX I1LIVRES ON (AUTEUR, TITRE) Crer un index sur la table LIVRES par ordre dcroissant de prix, par ordre croissant d'auteur et par ordre dcroissant d'anne de parution CREATE INDEX I2LIVRES ON LIVRES LIVRES

(PRIX DESC, AUTEUR ASC, ANNEE DESC)

Mise jour - Normalisation et index

- 172 -

INFOTEL

Les index
Loption UNIQUE
L'option UNIQUE permet de garantir que deux lignes ne contiennent pas des valeurs identiques dans une ou plusieurs colonnes prcises contrle effectu chaque opration de chargement ou de mise jour s'applique galement sur une table ayant des lignes : pas de constitution d'index si doublons si l'option WHERE NOT NULL est omise : NULL se comporte comme toute autre valeur si l'option WHERE NOT NULL est utilise : deux occurrences de la valeur NULL sont considres comme des valeurs diffrentes

Mise jour - Normalisation et index

- 173 -

INFOTEL

Les index
Exemples
Crer, sur la table LIVRES, un index assurant l'unicit des couples auteur-titre CREATE UNIQUE INDEX I3LIVRES ON LIVRES (AUTEUR ASC, TITRE ASC) Rsultat : l'index est construit.

Crer, sur la table LIVRES, un index assurant l'unicit du prix lorsque celui ci est connu CREATE UNIQUE WHERE NOT NULL INDEX I4LIVRES ON LIVRES (PRIX) Rsultat : la colonne PRIX contenant deux fois la valeur 80.00 l'index n'est pas construit
- 174 INFOTEL

Mise jour - Normalisation et index

Les index
Loption CLUSTER
L'option CLUSTER permet d'indiquer la squence physique de rangement des lignes de la table (objectif : performances) Ainsi, dans un ordre CREATE INDEX avec l'option CLUSTER, le nom de la ou des colonnes dfinissent la squence de rangement choisie pas plus d'un index CLUSTER par table CLUSTER ne garantit pas l'ordre : si pas de place disponible l'INSERT, ligne place le plus prs possible de son emplacement idal si cration d'un index CLUSTER sur une table contenant des donnes, reclassement au rechargement ou la rorganisation

Mise jour - Normalisation et index

- 175 -

INFOTEL

Les index
Exemple
Crer, sur la table LIVRES, un index assurant la fois l'unicit des couples auteur-titre et l'ordre de rangement selon cette mme squence CREATE UNIQUE INDEX I5LIVRES ON LIVRES (AUTEUR ASC, TITRE ASC) CLUSTER Rsultat : l'ordre de rangement physique des lignes de la table s'effectuera par auteur et titre croissants la prochaine rorganisation

Mise jour - Normalisation et index

- 176 -

INFOTEL

Rle et utilisation des index


Possibilits Les index ont une importance considrable dans un systme
relationnel :

caractristiques logiques : option UNIQUE seul moyen d'viter les doubles, et de garantir qu'une donne est un identifiant; utiliser pour les cls primaires caractristiques physiques : option CLUSTER pour demander un ordre de rangement, et minimiser les entres-sorties utilisation par le systme pour choisir la stratgie d'accs Mais chaque index entrane un cot supplmentaire de gestion Importance du choix de bons index (dans la conception et le suivi des bases)
Mise jour - Normalisation et index - 177 INFOTEL

Objectifs
Savoir utiliser l'ordre SELECT pour obtenir des rsultats partir d'informations issues de diffrentes tables. Format complet de l'ordre SELECT Notion de jointure de tables Nom de corrlation Notion de sous-requtes corrles Notion de jointure externe Expressions de tables imbriques Rgles d'intgrit et de vrification
Manipulation de plusieurs tables. - 178 INFOTEL

Exemples de tables
Table LIVRES
Cl primaire : TITRE
AUTEUR HUGO HUGO HUGO BALZAC BALZAC DUMAS DUMAS DUMAS TITRE HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS ANNEE 1830 1856 1862 1833 1834 1844 1845 1852 1831 1839 1857 1866 GENRE THEATRE POESIE ROMAN ROMAN ROMAN ROMAN ROMAN THEATRE ROMAN ROMAN ROMAN POESIE PRIX 120.00 78.50 148.50 100.00 80.00 80.00 110.00 98.50 110.50 99.50 90.50
INFOTEL

STENDHAL LE ROUGE ET LE NOIR STENDHAL LA CHARTREUSE DE PARME FLAUBERT VERLAINE


Manipulation de plusieurs tables.

MADAME BOVARY POEMES SATURNIENS


- 179 -

Exemples de tables
Table ECRIVAINS
Cl primaire : AUTEUR

AUTEUR HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND

NE_EN 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804

LIEU BESANCON TOURS VILLERS-COTTERETS PARIS GRENOBLE ROUEN METZ PARIS CHARLEVILLE PARIS

RAYON 3 1 1 1 5 2 6 6 5 5

TABLE RAYONS
Cl primaire : RAYON

RAYON 1 2 3 4 5 6

SALLE 1 1 2 2 3 3
- 180 INFOTEL

Manipulation de plusieurs tables.

Instruction SELECT
Format gnral
>>select-complet++>< | | +,+ | | +ASC+ | |

| V | ||| +ORDER BY+nom-de-colonne+++++ | || | +entier+ +DESC+ | | +expression+ ++ V | >+sous-select++++> | | | | +(select-complet)+ ++UNION++sous-select++ | || | +UNION ALL+ +(select-complet)+
- 181 INFOTEL

Selectcomplet

Manipulation de plusieurs tables.

Instruction SELECT
Sous-Select
+ALL+ >SELECT+++*+> | | | | +DISTINCT+ | +,+ | | V || ++expression+++++ | |+AS+ || | +++nom-de-colonne+| ++nom-de-table+.*+ | | +nom-de-corrlation+ +,+ V | >FROM++nom-de-table+++++> | +nom-de-vue+ | +AS+ | | | +++nom-de-corrlation+ | | +AS+ | +(sous-select)++nom-de-corrlation+ +table-jointe+ >++> | | +WHEREcondition-de-recherche+ >++> | +,+ | | V | | +GROUP BYnom-de-colonne++ >++> | | +HAVINGcondition-de-recherche+
- 182 INFOTEL

Manipulation de plusieurs tables.

Option FROM avec plusieurs tables


L'instruction SELECT permet d'indiquer plusieurs tables aprs le mot cl FROM

Exemple

SELECT TITRE, GENRE, RAYON FROM LIVRES, ECRIVAINS

TITRE et GENRE : table LIVRES RAYON : table ECRIVAINS Mais il y a ambigut si des colonnes ont le mme nom dans diffrentes tables

Manipulation de plusieurs tables.

- 183 -

INFOTEL

Option FROM avec plusieurs tables


Exemple

L'exemple suivant n'est pas syntaxiquement correct SELECT AUTEUR, TITRE, GENRE FROM LIVRES, ECRIVAINS

TITRE et GENRE : table LIVRES AUTEUR : table LIVRES ou table ECRIVAINS ??? Il faut qualifier chaque nom de colonne susceptible de provoquer une ambigut SELECT LIVRES.AUTEUR, TITRE, GENRE FROM LIVRES, ECRIVAINS

La colonne AUTEUR est celle de la table LIVRES


Manipulation de plusieurs tables. - 184 INFOTEL

Nom de corrlation
Dfinition
On peut utiliser un nom de corrlation pour prfixer les noms de colonnes la place du nom de table Identificateur long suivant chaque nom de table aprs FROM Valable uniquement dans l'instruction o il est cit

Exemple

SELECT A.AUTEUR, B.AUTEUR, B.TITRE, FROM B.GENRE LIVRES A, ECRIVAINS B

Manipulation de plusieurs tables.

- 185 -

INFOTEL

Sous-requtes corrles
Rappel
On peut utiliser une sous-requte l'intrieur d'une condition de recherche (WHERE) Il y a d'abord excution de la sous-requte puis son rsultat est exploit dans la condition de recherche On parle de sous-requte corrle quand la sous-requte fait rfrence une colonne figurant un niveau suprieur de requte Dans ce cas, la sous-requte est excute plusieurs fois : une fois par ligne de la requte suprieure

Manipulation de plusieurs tables.

- 186 -

INFOTEL

Sous-requtes corrles
Exemple
Lister l'auteur, le titre et l'anne de parution des ouvrages de la table LIVRES crits aprs l'anne maximum de naissance des auteurs de la table ECRIVAINS, dont le nom est infrieur au nom de l'auteur courant SELECT AUTEUR, TITRE, ANNEE FROM LIVRES WHERE ANNEE > (SELECT MAX(NE_EN) FROM ECRIVAINS WHERE AUTEUR < LIVRES.AUTEUR ) MAX(NE_EN) calcul autant de fois qu'il y a de lignes dans la table LIVRES
AUTEUR TITRE ANNEE -------- ------------------------ --------VERLAINE POEMES SATURNIENS 1866 FLAUBERT MADAME BOVARY 1857 DUMAS F LA DAME AUX CAMELIAS 1852 DUMAS P VINGT ANS APRES 1845 DUMAS P LES TROIS MOUSQUETAIRES 1844 BALZAC LE PERE GORIOT 1834 BALZAC EUGENIE GRANDET 1833 HUGO LES MISERABLES 1862 HUGO LES CONTEMPLATIONS 1856 HUGO HERNANI 1830
Manipulation de plusieurs tables. - 187 INFOTEL

Sous requtes corrles


Avec loption GROUP BY
Exemple

Lister le nom de lauteur et l'anne de parution du dernier ouvrage des auteurs de la table LIVRES ayant crit leur dernier ouvrage aprs la moyenne de la date de naissance des auteurs de la table ECRIVAINS hormis cet crivain SELECT AUTEUR, MAX(ANNEE) FROM LIVRES X GROUP BY AUTEUR HAVING MAX(ANNEE) > (SELECT AVG(NE_EN) FROM ECRIVAINS WHERE NOT AUTEUR = X.AUTEUR ) -------- ---------BALZAC 1834 DUMAS F 1852 DUMAS P 1845 FLAUBERT 1857 HUGO 1862 STENDHAL 1839 VERLAINE 1866

Rsultat AUTEUR

Manipulation de plusieurs tables.

- 188 -

INFOTEL

Sous-requtes corrles
Avec EXISTS
Lister le nom des auteurs et le titre des ouvrages de la table LIVRES crits la mme anne que l'anne de naissance d'un des auteurs de la table ECRIVAINS SELECT AUTEUR, TITRE FROM LIVRES X WHERE EXISTS (SELECT 1 FROM ECRIVAINS WHERE NE_EN = X.ANNEE) AUTEUR TITRE -------- -----------------------DUMAS P LES TROIS MOUSQUETAIRES Est value pour chaque valeur de l'anne de parution Ne renvoie la valeur "vrai" que lorsqu'elle trouve au moins une ligne satisfaisant la condition de recherche

La fonction EXISTS

Manipulation de plusieurs tables.

- 189 -

INFOTEL

Notion de jointure
Jointure
Slection, par un seul ordre SELECT, de colonnes provenant de plusieurs tables

Produit cartsien

Le produit cartsien s'obtient par une jointure sans condition de recherche


TABLE T1

Produit cartsien T1 et T2

A A B B

1 2 1 2

1 2
TABLE T2

Manipulation de plusieurs tables.

- 190 -

INFOTEL

Produit cartsien
Exemple
Effectuer une jointure entre les auteurs de la table LIVRES et ceux de la table ECRIVAINS SELECT A.AUTEUR, B.AUTEUR FROM LIVRES A, ECRIVAINS B
Rsultat

AUTEUR AUTEUR -------- -------HUGO HUGO HUGO BALZAC HUGO DUMAS P HUGO DUMAS F ................. VERLAINE RIMBAUD VERLAINE SAND Peut tre extrmement pnalisant en performances Appliquer des conditions de recherche exploitant des donnes communes aux tables jointes pour rduire le nombre de lignes rsultantes

Manipulation de plusieurs tables.

- 191 -

INFOTEL

Equi-jointure
Exemple
La mise en correspondance de plusieurs tables sur l'galit d'un critre est appele qui-jointure Lister le titre, l'auteur et le rayon de rangement des ouvrages de la bibliothque
SELECT A.AUTEUR, A.TITRE, B.RAYON FROM LIVRES A, ECRIVAINS B WHERE A.AUTEUR = B.AUTEUR Rsultat AUTEUR -------BALZAC BALZAC DUMAS F DUMAS P DUMAS P FLAUBERT HUGO HUGO HUGO STENDHAL STENDHAL VERLAINE TITRE RAYON ------------------------ ---------EUGENIE GRANDET 1 LE PERE GORIOT 1 LA DAME AUX CAMELIAS 1 LES TROIS MOUSQUETAIRES 1 VINGT ANS APRES 1 MADAME BOVARY 2 HERNANI 3 LES CONTEMPLATIONS 3 LES MISERABLES 3 LE ROUGE ET LE NOIR 5 LA CHARTREUSE DE PARME 5 POEMES SATURNIENS 6
- 192 INFOTEL

Manipulation de plusieurs tables.

Jointure de plusieurs tables


Comment a marche ?
On peut raliser la jointure de plus de deux tables : jointure, de faon interne, de deux tables puis partir de la table intermdiaire ainsi obtenue, jointures successives, jusqu' aboutir la table rsultante finale Reconstituer la table OUVRAGES partir des tables LIVRES, ECRIVAINS et RAYONS SELECT X.AUTEUR, X.TITRE, Y.NE_EN, Z.SALLE, Z.RAYONS FROM LIVRES X, ECRIVAINS Y, RAYON Z WHERE X.AUTEUR = Y.AUTEUR AND Y.RAYON = Z.RAYON AUTEUR TITRE NE_EN SALLE RAYON -------- ------------------------ ------ ------ -----BALZAC EUGENIE GRANDET 1799 1 1 BALZAC LE PERE GORIOT 1799 1 1 DUMAS F LA DAME AUX CAMELIAS 1824 1 1 DUMAS P LES TROIS MOUSQUETAIRES 1802 1 1 DUMAS P VINGT ANS APRES 1802 1 1 FLAUBERT MADAME BOVARY 1821 1 2 HUGO HERNANI 1802 2 3 HUGO LES CONTEMPLATIONS 1802 2 3 HUGO LES MISERABLES 1802 2 3 STENDHAL LE ROUGE ET LE NOIR 1783 3 5 STENDHAL LA CHARTREUSE DE PARME 1783 3 5 VERLAINE POEMES SATURNIENS 1844 3 6
- 193 INFOTEL

Exemple
Rsultat

Manipulation de plusieurs tables.

Jointure naturelle
Dfinition
Une jointure naturelle est une qui-jointure dans laquelle la table rsultante ne comporte qu'une seule fois le domaine commun (et pas de lignes en double) Effectuer la jointure naturelle de la table LIVRES et de la table ECRIVAINS sur l'galit de la donne AUTEUR en listant l'auteur et le rayon
SELECT DISTINCT A.AUTEUR, B.RAYON FROM LIVRES A, ECRIVAINS B WHERE A.AUTEUR = B.AUTEUR Rsultat AUTEUR RAYON -------- ---------BALZAC 1 DUMAS F 1 DUMAS P 1 FLAUBERT 2 HUGO STENDHAL 5 VERLAINE 6

Exemple

L'option DISTINCT permet d'liminer les doubles


Manipulation de plusieurs tables. - 194 INFOTEL

Jointure avec conditions quelconques


Exemple
Lister les auteurs ns aprs l'criture des pices de thtre, et plus prcisment, lister les donnes GENRE, ANNEE, NE_EN, AUTEUR de la table LIVRES et AUTEUR de la table ECRIVAINS obtenues par jointure sur la condition anne de naissance suprieure anne d'criture en restreignant au genre THEATRE SELECT A.GENRE, A.ANNEE, B.NE_EN, A.AUTEUR, B.AUTEUR FROM LIVRES A, ECRIVAINS B WHERE B.NE_EN > A.ANNEE AND A.GENRE = 'THEATRE'
Rsultat GENRE ANNEE NE_EN AUTEUR -------- ---------- ---------- -------THEATRE 1830 1844 HUGO THEATRE 1830 1840 HUGO THEATRE 1830 1854 HUGO THEATRE 1852 1854 DUMAS F
Manipulation de plusieurs tables. - 195 -

AUTEUR -------VERLAINE ZOLA RIMBAUD RIMBAUD


INFOTEL

Jointure dune table sur elle-mme


Exemple
Pour rapprocher plusieurs lignes d'une table entre elles, on peut faire figurer plusieurs fois la mme table dans un ordre SELECT Dans ce cas, les noms de corrlation sont indispensables Lister le nom et la date de naissance des crivains ns la mme anne
SELECT A.AUTEUR, A.NE_EN, B.AUTEUR FROM ECRIVAINS A, ECRIVAINS B WHERE A.NE_EN = B.NE_EN Rsultat : AUTEUR NE_EN AUTEUR -------- ---------- -------STENDHAL 1783 STENDHAL BALZAC 1799 BALZAC HUGO 1802 HUGO HUGO 1802 DUMAS P DUMAS P 1802 HUGO DUMAS P 1802 DUMAS P SAND 1804 SAND FLAUBERT 1821 FLAUBERT DUMAS F 1824 DUMAS F ... ... ...
- 196 INFOTEL

Manipulation de plusieurs tables.

Syntaxe explicite de la jointure


Table jointe
(telle qu'elle peut apparatre dans la clause FROM) +INNER+ >expression-de-table++++JOIN-expression-de-table> ++LEFT++++ +RIGHT++OUTER+ +FULL+ +AND+ V | >ONexpression-de-jointure+=+expression-de-jointure+> +<>+ +<>+ +<+ +>+ +<+ +<+ +>=+ +<=+ >++nom-de-table++++>< | +nom-de-vue+|+AS+ || | +++nom-de-corrlation+| | +AS+ | +(sous-select)++nom-de-corrlation+ +table-jointe+
- 197 INFOTEL

Expression de table

Manipulation de plusieurs tables.

Syntaxe explicite de la jointure


Expression de jointure
>+nom-de-colonne+>< | ++ | | V | | ++VALUE+(nom-de-colonne,nom-de-colonne+)+ | | +COALESCE+

Manipulation de plusieurs tables.

- 198 -

INFOTEL

Syntaxe explicite de la jointure


Exemple
Il existe une forme explicite de la syntaxe de jointure : SELECT A.GENRE, A.ANNEE, B.NE_EN, A.AUTEUR, B.AUTEUR FROM LIVRES A, ECRIVAINS B WHERE B.NE_EN > A.ANNEE AND A.GENRE = 'THEATRE' La jointure "classique" ou jointure interne peut se coder : SELECT A.GENRE, A.ANNEE, B.NE_EN, A.AUTEUR, B.AUTEUR FROM LIVRES A INNER JOIN ECRIVAINS B ON B.NE_EN > A.ANNEE WHERE A.GENRE = 'THEATRE' Le rsultat est logiquement quivalent la condition de jointure est introduite par "ON" dans la clause FROM la clause "WHERE" exprime les critres de slection des lignes de la table rsultant de la jointure
Manipulation de plusieurs tables. - 199 INFOTEL

Jointure externe
Dfinition
On souhaite crire une requte qui permette d'associer chaque auteur, les ouvrages ayant t crits l'anne de sa naissance Une jointure entre les tables LIVRES et ECRIVAINS laisse apparatre la seule valeur commune aux colonnes NE_EN et ANNEE SELECT A.AUTEUR, A.NE_EN, B.ANNEE, B.TITRE FROM ECRIVAINS A, LIVRES B WHERE A.NE_EN = B.ANNEE

AUTEUR NE_EN ANNEE TITRE --------- ------ ------ ----------------------VERLAINE 1844 1844 LES TROIS MOUSQUETAIRES On appelle ce type d'opration une jointure interne
Manipulation de plusieurs tables. - 200 INFOTEL

Jointure externe
Exemple 1
Le principe de la jointure exclut certains ouvrages, parce qu'aucun auteur n'est n au cours de leur anne de parution Si on veut voir apparatre ces ouvrages, il faut associer la jointure avec une requte sur LIVRES qui exclut cette fois les ouvrages pris en compte par la jointure SELECT A.AUTEUR, A.NE_EN, B.ANNEE, B.TITRE FROM ECRIVAINS A, LIVRES B WHERE A.NE_EN = B.ANNEE UNION ALL SELECT '--------', 0, ANNEE, TITRE FROM LIVRES A WHERE NOT EXISTS (SELECT 1 FROM ECRIVAINS B WHERE B.NE_EN=A.ANNEE)
Manipulation de plusieurs tables. - 201 INFOTEL

Jointure externe
Rsultat

AUTEUR NE_EN ANNEE TITRE -------- ------------ ------- -----------------------VERLAINE 1844 1844 LES TROIS MOUSQUETAIRES -------0 1830 HERNANI -------0 1856 LES CONTEMPLATIONS -------0 1862 LES MISERABLES -------0 1833 EUGENIE GRANDET -------0 1834 LE PERE GORIOT -------0 1845 VINGT ANS APRES -------0 1852 LA DAME AUX CAMELIAS -------0 1831 LE ROUGE ET LE NOIR -------0 1839 LA CHARTREUSE DE PARME -------0 1857 MADAME BOVARY -------0 1866 POEMES SATURNIENS

F pour le deuxime sous-select de l'UNION, il faut utiliser une


valeur de substitution ('--------',0) pour les colonnes AUTEUR et NE_EN

Manipulation de plusieurs tables.

- 202 -

INFOTEL

Jointure externe
Exemple 2
On peut utiliser le mme principe pour faire apparatre les auteurs qui ont t exclus par la jointure : SELECT AUTEUR, NE_EN, 0, '--------------------' FROM ECRIVAINS A WHERE NOT EXISTS (SELECT 1 FROM LIVRES B WHERE A.NE_EN=B.ANNEE) UNION ALL SELECT A.AUTEUR, A.NE_EN, B.ANNEE, B.TITRE FROM ECRIVAINS A, LIVRES B WHERE A.NE_EN = B.ANNEE UNION ALL SELECT '--------', 0, ANNEE, TITRE FROM LIVRES A WHERE NOT EXISTS (SELECT 1 FROM ECRIVAINS B WHERE B.NE_EN=A.ANNEE)
Manipulation de plusieurs tables. - 203 INFOTEL

Jointure externe
Rsultat AUTEUR NE_EN --------- ----------- ------------ ------------------------HUGO 1802 0 -------------------BALZAC 1799 0 -------------------DUMAS P 1802 0 -------------------DUMAS F 1824 0 -------------------STENDHAL 1783 0 -------------------FLAUBERT 1821 0 -------------------ZOLA 1840 0 -------------------RIMBEAU 1854 0 -------------------SAND 1804 0 -------------------VERLAINE 1844 1844 LES TROIS MOUSQUETAIRES -------0 1830 HERNANI -------0 1856 LES CONTEMPLATIONS -------0 1862 LES MISERABLES -------0 1833 EUGENIE GRANDET -------0 1834 LE PERE GORIOT -------0 1845 VINGT ANS APRES -------0 1852 LA DAME AUX CAMELIAS -------0 1831 LE ROUGE ET LE NOIR -------0 1839 LA CHARTREUSE DE PARME -------0 1857 MADAME BOVARY -------0 1866 POEMES SATURNIENS
- 204 INFOTEL

Manipulation de plusieurs tables.

Jointure externe
Exemple 3
Le mme rsultat peut tre obtenu avec la syntaxe de la jointure externe :
SELECT A.AUTEUR, A.NE_EN, B.ANNEE, B.TITRE FROM ECRIVAINS A FULL OUTER JOIN LIVRES B ON A.NE_EN = B.ANNEE; AUTEUR NE_EN ANNEE TITRE --------- ------ ------- ------------------------STENDHAL 1783 ------ -----------------------BALZAC 1799 ------ -----------------------HUGO 1802 ------ -----------------------DUMAS P 1802 ------ -----------------------SAND 1804 ------ -----------------------FLAUBERT 1821 ------ -----------------------DUMAS F 1824 ------ ------------------------------- -----1830 HERNANI -------- -----1831 LE ROUGE ET LE NOIR -------- -----1833 EUGENIE GRANDET -------- -----1834 LE PERE GORIOT -------- -----1839 LA CHARTREUSE DE PARME ZOLA 1840 ------ -----------------------VERLAINE 1844 1844 LES TROIS MOUSQUETAIRES -------- -----1845 VINGT ANS APRES -------- -----1852 LA DAME AUX CAMELIAS RIMBEAU 1854 ------ ------------------------------- -----1856 LES CONTEMPLATIONS -------- -----1857 MADAME BOVARY -------- -----1862 LES MISERABLES -------- -----1866 POEMES SATURNIENS
- 205 INFOTEL

Rsultat

Manipulation de plusieurs tables.

Jointure externe
L'exemple prcdent est une jointure externe complte, ce qui signifie que l toutes les lignes de chacune des deux tables jointes apparaissent dans la table rsultante On peut se limiter l'une des deux tables en faisant une jointure externe gauche ou droite Jointure externe gauche : SELECT A.AUTEUR, A.NE_EN, B.ANNEE, B.TITRE FROM ECRIVAINS A LEFT OUTER JOIN LIVRES B ON A.NE_EN = B.ANNEE
AUTEUR NE_EN ANNEE TITRE --------- ------ ------- ------------------------STENDHAL BALZAC HUGO DUMAS P SAND FLAUBERT DUMAS F ZOLA VERLAINE RIMBEAU
Manipulation de plusieurs tables.

1783 1799 1802 1802 1804 1821 1824 1840 1844 1854

----------------------------------------1844 ------ 206 -

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------LES TROIS MOUSQUETAIRES ----------------------- INFOTEL

Jointure externe
Jointure externe droite
Exemple SELECT A.AUTEUR, A.NE_EN, B.ANNEE, B.TITRE FROM ECRIVAINS A RIGHT OUTER JOIN LIVRES B ON A.NE_EN = B.ANNEE AUTEUR NE_EN ANNEE TITRE -------- ------- ------- -------------------------------- -----1830 HERNANI -------- -----1831 LE ROUGE ET LE NOIR -------- -----1833 EUGENIE GRANDET -------- -----1834 LE PERE GORIOT -------- -----1839 LA CHARTREUSE DE PARME VERLAINE 1844 1844 LES TROIS MOUSQUETAIRES -------- -----1845 VINGT ANS APRES -------- -----1852 LA DAME AUX CAMELIAS -------- -----1856 LES CONTEMPLATIONS -------- -----1857 MADAME BOVARY -------- -----1862 LES MISERABLES -------- -----1866 POEMES SATURNIENS
- 207 INFOTEL

Manipulation de plusieurs tables.

Synthse des oprations de jointure


Ecrivains Livres

Jointure interne : seulement les auteurs ns la mme anne que la parution dun ouvrage de la table LIVRES Jointure externe complte : tous les auteurs et tous les ouvrages
Que lon peut remplacer par des valeurs de substitution NULL NULL NULL NULL

Jointure externe gauche : tous les auteurs


NULL NULL

Jointure externe droite : tous les ouvrages


NULL
Manipulation de plusieurs tables.

NULL
- 208 INFOTEL

Jointure externe
En rsum
Conditions de jointures externes Condition de jointure introduite par "ON" dans la clause "FROM" Uniquement oprateur = pour la jointure externe complte Tout oprateur pour les jointures externes droite et gauche Uniquement AND (pas de OR ni de NOT) pour combiner des conditions de jointures Clause ON pour comparer 2 expressions, pouvant tre des colonnes ou des fonctions COALESCE pour les jointures externes compltes

F En pratique, DB2 applique la jointure droite en inversant


l'ordre des tables et en excutant une jointure gauche
Manipulation de plusieurs tables. - 209 INFOTEL

Select dans la clause FROM


Dfinition
Les oprandes de la clause FROM peuvent tre plus complexes qu'un simple nom de table Une expression de table imbrique correspond l'utilisation d'un sous-select dans la clause FROM Il est obligatoire d'associer un nom de corrlation chaque sousselect Lister le prix moyen de chaque genre d'ouvrage de la table LIVRE SELECT AVG(PRIX) AS PRIXMOYEN, GENRE FROM LIVRES GROUP BY GENRE PRIXMOYEN GENRE ----------------- ----------84,500000000000 POESIE 102,428571428571 ROMAN 115,000000000000 THEATRE
Manipulation de plusieurs tables. - 210 INFOTEL

Exemple 1

Select dans la clause FROM


Exemple 2
Trouver la valeur la plus leve du prix moyen par genre d'ouvrage SELECT MAX(TEMP.PRIXMOYEN) AS MAXPRIXMOYEN FROM (SELECT AVG(PRIX) AS PRIXMOYEN, GENRE FROM LIVRES GROUP BY GENRE) AS TEMP Rsultat : MAXPRIXMOYEN ------------------115,000000000000

Manipulation de plusieurs tables.

- 211 -

INFOTEL

Exemple de synthse
Lister le nom des auteurs de la table ECRIVAINS, le titre des romans de la table LIVRES, en associant les lignes de chacune de ces deux tables sur l'galit de l'anne de naissance et de l'anne de parution On prsentera le rsultat tri suivant le critre de jointure
Fusion des deux colonnes SELECT E.AUTEUR, COALESCE(E.NE_EN, TEMP.ANNEE) AS DATE_EVEN, TEMP.TITRE Condition de recherche FROM (SELECT ANNEE, TITRE FROM LIVRES WHERE GENRE = 'ROMAN') AS TEMP FULL OUTER JOIN ECRIVAINS AS E Condition de jointure ON TEMP.ANNEE = E.NE_EN ORDER BY DATE_EVEN
Manipulation de plusieurs tables. - 212 INFOTEL

Exemple de synthse
Rsultat

AUTEUR DATE_EVEN TITRE -------- ---------- ------------------------STENDHAL 1783 -----------------------BALZAC 1799 -----------------------HUGO 1802 -----------------------DUMAS P 1802 -----------------------SAND 1804 -----------------------FLAUBERT 1821 -----------------------DUMAS F 1824 ------------------------------1831 LE ROUGE ET LE NOIR -------1833 EUGENIE GRANDET -------1834 LE PERE GORIOT -------1839 LA CHARTREUSE DE PARME ZOLA 1840 -----------------------VERLAINE 1844 LES TROIS MOUSQUETAIRES -------1845 VINGT ANS APRES RIMBEAU 1854 ------------------------------1857 MADAME BOVARY -------1862 LES MISERABLES

F
Manipulation de plusieurs tables.

la fonction COALESCE permet de fusionner les colonnes NE_EN et ANNEE et d'obtenir ainsi une jointure naturelle
- 213 INFOTEL

Intgrit dentit et de rfrence


Dfinition
Pour que les informations obtenues en rapprochant plusieurs tables soient valides, il faut que la cohrence des donnes soit assure Deux rgles d'intgrit remplissent cette fonction Intgrit d'entit Assure quand il n'est pas possible d'accepter la valeur NULL pour une cl primaire Intgrit de rfrence Assure quand toute cl trangre correspond une cl primaire existant dans la table de rfrence. Ces rgles d'intgrit sont prises en charge par DB2 grce des options du CREATE TABLE
Manipulation de plusieurs tables. - 214 INFOTEL

Cl primaire et cl trangre
Dfinitions
Identifie une ligne de table de manire unique Il existe une seule cl primaire par table
Cl primaire On appelle Table Parente, une table comportant une cl

primaire rfrence par une cl trangre

Rfrence la cl primaire d'une table


Cl trangre

Il peut exister plusieurs cls trangres pour une table On appelle Table Dpendante, une table comportant une cl trangre

Cl primaire et cl trangre
Cl primaire
RAYON Table RAYONS 1 2 3 4 5 6 SALLE 1 1 2 2 3 3

Cl Primaire
Table crivains

Cl trangre
LIEU BESANCON TOURS VILLERS-COTTERETS PARIS GRENOBLE ROUEN METZ PARIS CHARLEVILLE PARIS RAYON 3 1 1 1 5 2 6 6 5 5

AUTEUR HUGO BALZAC DUMAS DUMAS STENDHAL FLAUBERT VERLAINE ZOLA RIMBAUD SAND

NE_EN 1802 1799 1802 1824 1783 1821 1844 1840 1854 1804
- 216 -

Manipulation de plusieurs tables.

INFOTEL

CREATE TABLE avec cl primaire et contrainte de rfrence


Format du CREATE TABLE >>CREATE TABLEnom-de-table-----> +,+ V | >+(+dfinition-de-colonne++)+> | | | | | +contrainte dunicit+ | | | | | | +contrainte-de-rfrence+ | | | | | | +contrainte-de-vrification+ | | | +LIKE+nom-table++++ | || +COLUMN ATTRIBUTES+ | +nom-vue++INCLUDING IDENTITY+++

Contrainte dunicit

+,+ V | ++ +PRIMARY KEY+(nom-de-colonne+) +CONSTRAINTnom+ +UNIQUE+

Manipulation de plusieurs tables.

- 217 -

INFOTEL

CREATE TABLE avec cl primaire et contrainte de rfrence


Contrainte de rfrence +,+ V | >++FOREIGN KEY(nom-de-colonne+)> +CONSTRAINT nom+ REFERENCESnom-de-table++> | +,+ | | V | | + (nom-de-colonne+)+ ++> +ON DELETE+RESTRICT++ +NO ACTION+ +CASCADE+ + SET NULL+
Manipulation de plusieurs tables. - 218 INFOTEL

CREATE TABLE avec cl primaire et contrainte de rfrence


Option Primary Key
Option PRIMARY KEY Exemple CREATE TABLE RAYONS (RAYON SMALLINT NOT NULL, SALLE SMALLINT, PRIMARY KEY(RAYON)) CREATE UNIQUE INDEX IXRAY ON RAYONS (RAYON) Dsigne la cl primaire de la table Constitue de 1 64 colonnes Longueur totale infrieure 255 Chaque colonne de la cl primaire doit tre dfinie avec l'option NOT NULL Pour que la dfinition de la table soit complte, il faut crer un index unique associ la cl primaire

Manipulation de plusieurs tables.

- 219 -

INFOTEL

CREATE TABLE avec cl primaire et contrainte de rfrence


FOREIGN KEY
Option FOREIGN KEY Dsigne une cl trangre de la table La liste des colonnes doit correspondre la dfinition de la cl primaire de la table parente (nombre de colonnes, type, longueur) Les colonnes de la cl trangre peuvent admettre des nuls Le nom de contrainte est optionnel (s'il est omis, il sera dtermin par DB2) La construction d'un index associ la cl trangre est conseille REFERENCES Dsigne la table parente Dsigne les colonnes rfrences dans la cl trangre. Ces colonnes ne sont pas ncessairement cl primaire de la table parente. Seul un index unique est requis sur les colonnes contenues dans le mot cl REFERENCES. Sil ny a pas ou plus dindex unique le statut de la table est chang incomplete ON DELETE Prcise la rgle appliquer en cas de suppression d'une valeur de cl primaire dans la table parente : que faire des lignes dpendantes ?
Manipulation de plusieurs tables. - 220 INFOTEL

CREATE TABLE avec cl primaire et contrainte de rfrence


Exemple
CREATE TABLE ECRIVAINS (AUTEUR CHAR(8) NOT NULL, NE_EN SMALLINT NOT NULL, LIEU CHAR(20) NOT NULL, RAYON SMALLINT, PRIMARY KEY(AUTEUR), FOREIGN KEY(RAYON) REFERENCES RAYONS ON DELETE RESTRICT)

Contrainte de rfrence

Manipulation de plusieurs tables.

- 221 -

INFOTEL

Intgrit de rfrence
Comment a marche ?
En cas d'ajout d'une valeur de cl trangre dans la table dpendante (par INSERT ou UPDATE) : La nouvelle valeur de cl trangre (si elle n'est pas nulle) doit correspondre une cl primaire de la table parente C'est une rgle implicite
Exemple

L'ordre INSERT suivant ne sera pas ralis car le rayon 7 n'existe pas dans la table RAYONS INSERT INTO ECRIVAIN (AUTEUR,NE_EN,LIEU,RAYON) VALUES ('LEROUX',1862,'PARIS',7)

Manipulation de plusieurs tables.

- 222 -

INFOTEL

Intgrit de rfrence : fonctionnement


En cas de suppression d'une valeur de cl primaire dans la table parente Si la cl primaire supprime correspond une ou des cls trangres dans une table dpendante : La rgle respecter se dfinit de manire explicite dans l'ordre CREATE TABLE de chaque table dpendante quatre options possibles
Option par dfaut

RESTRICT Une valeur dfinie en tant que cl primaire ne pourra tre supprime que lorsqu'elle n'aura plus de dpendants CASCADE La suppression d'une cl primaire se propage sur tous ses dpendants SET NULL La suppression d'une cl primaire entrane le positionnement des cls trangres des dpendants la valeur NULL (Les nuls doivent tre autoriss)
INFOTEL

Manipulation de plusieurs tables.

- 223 -

Intgrit de rfrence : fonctionnement


NO ACTION Dans tous les cas, une diffrence prs cette rgle de suppression fournit le mme rsultat que loption RESTRICT La diffrence entre RESTRICT et NO ACTION se situe lors de la mise en uvre de la rgle de suppression : loption NO ACTION est mise en uvre la fin de linstruction, tandis que RESTRICT est mis en uvre immdiatement Cas o il existe une diffrence en terme de rsultat : Lorsque un DELETE mettant en jeu une contrainte auto rfrence (i-e :la table parente et la table dpendante sont les mmes) supprime plus dune ligne NO ACTION autorise la suppression tandis que RESTRICT lempche

Manipulation de plusieurs tables.

- 224 -

INFOTEL

Intgrit de rfrence
Exemples
On dsire supprimer le rayon 6 de la table RAYONS DELETE FROM RAYONS WHERE RAYON = 6 Avec l'option RESTRICT ou No action CREATE TABLE ECRIVAINS (AUTEUR CHAR(8) NOT NULL, NE_EN SMALLINT NOT NULL, LIEU CHAR(20) NOT NULL, RAYON SMALLINT, PRIMARY KEY(AUTEUR), FOREIGN KEY(RAYON) REFERENCES RAYONS ON DELETE RESTRICT) L'ordre DELETE n'est pas ralis car le Rayon 6 est rfrenc dans la table ECRIVAINS
INFOTEL

Manipulation de plusieurs tables.

- 225 -

Intgrit de rfrence
Exemples
Avec l'option CASCADE : CREATE TABLE ECRIVAINS ... ... ON DELETE CASCADE) L'ordre DELETE est ralis : Le rayon 6 est supprime de la table RAYONS Les lignes de la table ECRIVAINS faisant rfrence au rayon 6 sont aussi supprimes Avec l'option SET NULL : CREATE TABLE ECRIVAINS ... ... ON DELETE SET NULL) L'ordre DELETE est ralis : Le rayon 6 est supprime de la table RAYONS Les colonnes RAYON de la table ECRIVAINS faisant rfrence au rayon 6 sont mises la valeur NULL
Manipulation de plusieurs tables. - 226 INFOTEL

Intgrit de rfrence : ordre de cration de tous les objets


Si l'on dfinit des rgles d'intgrit rfrentielle, les objets doivent tre dcrits dans l'ordre suivant : 9. Table Parente 10. Index Primaire 11. Table Dpendante 12. Eventuellement, index sur la cl trangre

Le chargement des Tables doit imprativement se faire dans l'ordre suivant : 1. Table Parente 2. Table Dpendante

Manipulation de plusieurs tables.

- 227 -

INFOTEL

CREATE TABLE avec contrainte de vrification


Format
Contrainte de vrification >++> | | +CONSTRAINTnom-de-contrainte+ >CHECK(condition de vrification)><

Clause CHECK Permet de dfinir une rgle de contrle sur la valeur des colonnes Contrle effectu par DB2 lors des insertions et des mises jour de la table

Manipulation de plusieurs tables.

- 228 -

INFOTEL

CREATE TABLE avec contrainte de vrification


Dfinition
La condition de vrification s'exprime sous la forme d'une condition de recherche et : ne se rfre qu'aux colonnes de la table lexception des colonnes LOB et ROWID ne pas tre code sur plus de 3800 caractres constitue dun ou plusieurs prdicats connects par AND/OR (mais pas NOT) ne peut pas contenir : ni sous-select ni fonction sur colonne ni variable hte ni registre spcial ni colonne associe une FIELDPROC ni expression CASE ni prdicat quantifi (SOME, ANY ou ALL) ni prdicat EXISTS
- 229 INFOTEL

Manipulation de plusieurs tables.

CREATE TABLE avec contrainte de vrification


Exemple
Exemple de table avec contrainte de vrification CREATE TABLE ECRIVAINS Contrainte de (AUTEUR CHAR(8) NOT NULL, vrification NE_EN SMALLINT NOT NULL, LIEU CHAR(20) NOT NULL, RAYON SMALLINT) CONSTRAINT VERIFNE_EN CHECK (NE_EN BETWEEN 1600 AND 2000)
- 230 INFOTEL

Manipulation de plusieurs tables.

Вам также может понравиться