Академический Документы
Профессиональный Документы
Культура Документы
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
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.
Bases de donnes
-6-
INFOTEL
Bases de donnes
-7-
INFOTEL
Bases de donnes
-8-
INFOTEL
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
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
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.
- 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
- 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 :
Langage SQL
Identificateurs
Exemples
NOM
NOM_DE_TABLE
'NOM DE TABLE'
UTIL1.NOM_DE_TABLE NOM_DE_TABLE.NOM_DE_COLONNE
- 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
- 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)
- 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
- 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)
- 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
- 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
- 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
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
- 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
- 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
- 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)
- 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
- 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
- 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 : >
- 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
- 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 +
- 34 -
INFOTEL
Langage SQL
Notations
rptition avec sparateur + , + V >> INSTRUCTION ( clause | + )><
- 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
- 36 -
INFOTEL
- 37 -
INFOTEL
+++DEFAULT+++
- 38 -
INFOTEL
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
- 40 -
INFOTEL
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
- 43 -
INFOTEL
nom-de-colonne+)+
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
- 46 -
INFOTEL
Ordre INSERT
Rgles
L'instruction INSERT permet de valoriser les colonnes d'une ligne de table Des contrles de validit sont effectus :
- 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')
- 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
- 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+
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
- 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 -
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)
- 53 -
INFOTEL
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
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
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
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
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
Elle est constitue d'un ou plusieurs prdicats relis par les oprateurs logiques AND, OR et NOT
Notation
- 59 -
INFOTEL
Rsultat TITRE
LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS
------------------------ --------
- 60 -
INFOTEL
Rsultat : AUTEUR
HUGO HUGO
ANNEE GENRE 1856 1862 1857 1866 POESIE ROMAN ROMAN ROMAN POESIE
-------- -------------------
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
- 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
Rsultat
AUTEUR -------BALZAC DUMAS DUMAS FLAUBERT HUGO HUGO HUGO STENDHAL VERLAINE
GENRE -------ROMAN ROMAN THEATRE ROMAN POESIE ROMAN THEATRE ROMAN POESIE
- 63 INFOTEL
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
- 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.
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
Objectifs
Savoir manipuler des formes plus complexes de l'instruction SELECT : Sous-select Prdicats Fonctions incorpores dans SQL Traitement des donnes temporelles
- 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)
- 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
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
- 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
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
- 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
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
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
- 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
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)
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
Le prdicat IN
Exemple2 Rsultat
AUTEUR LIEU -------- -------------------HUGO BESANCON BALZAC TOURS DUMAS VILLERS-COTTERETS DUMAS PARIS STENDHAL GRENOBLE FLAUBERT ROUEN VERLAINE METZ
- 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)
- 83 -
INFOTEL
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
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
- 85 -
INFOTEL
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
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
La fonction SUM
Format
La fonction SUM permet de calculer la somme des valeurs d'une collection de nombres
+ALL+ | | >SUM(++expression)> | | +DISTINCT+
Exemple
Rsultat -------------
717.00
- 88 -
INFOTEL
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
- 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)
- 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
- 93 -
INFOTEL
- 94 -
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
- 97 -
INFOTEL
Exemple
- 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
- 99 -
INFOTEL
La fonction STRIP
Format
>STRIP-(expression+--------------------+>< | | +-,BOTH----+-----+----------------+-| +-,B-------| | | +-,LEADING-| +-,strip char + +-,L-------| +-,TRAILING| +-,T-------+
- 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
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
- 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
- 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
- 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
- 105 -
INFOTEL
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
- 106 -
INFOTEL
- 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
- 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)>
- 109 -
INFOTEL
La fonction MAX
Format
La fonction MAX fournit la plus grande valeur dun ensemble de valeurs
>MAX(exp1, exp2, exp3, ) >
- 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)>
- 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
- 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
- 113 -
INFOTEL
La fonction RIGHT
Format
La fonction RIGHT fournit la partie droite dune chane de caractres
>RIGHT(expression, entier)>
- 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
- 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)>
- 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
- 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%
- 119 -
INFOTEL
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
- 120 -
INFOTEL
Exemple
UCASE (abcde) donne ABCDE
- 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
- 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+
Exemple
- 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)>
- 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
- 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
Expression de dure
Exemple
Ajout de deux expressions de dure d'units diffrentes une date DATE_1 + 5 MONTHS + 6 DAYS
INFOTEL
Dures
Dure date
Nombre de format AAAAMMJJ Obtenue par la soustraction de deux dates ex : DATE_FIN - DATE_DEBUT
Dure heure
Ex : HEURE_FIN - HEURE_DEBUT
Dure instant
Nombre de format AAAAMMJJHHMMSSmmmmmm Obtenue par la soustraction de deux instants Ex : INSTANT_FIN - INSTANT_DEBUT
- 128 -
INFOTEL
compare une donne de mme type ou une constante de son type Les comparaisons s'effectuent selon la squence chronologique
Exemple
- 129 -
INFOTEL
Additions
Format
On ne peut additionner qu'une dure une donne temporelle :
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
- 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
- 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
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
- 132 -
INFOTEL
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
- 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-------------+
- 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
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
- 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
- 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
- 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 : 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
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 -
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
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
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
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
- 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
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
- 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
TITRE -----------------------HERNANI LES CONTEMPLATIONS LES MISERABLES EUGENIE GRANDET LE PERE GORIOT LES TROIS MOUSQUETAIRES VINGT ANS APRES LA DAME AUX CAMELIAS
- 154 -
Annuler, dans la table OUVRAGES, les lignes relatives aux DELETE FROM OUVRAGES WHERE AUTEUR = 'HUGO';
TITRE
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
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
INSERT n'oblige pas valoriser toutes les donnes de toutes les colonnes
- 157 -
INFOTEL
- 158 -
INFOTEL
- 159 -
INFOTEL
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
la table LIVRES1 contenant les donnes relatives aux livres la table AUTEURS1 contenant les donnes relatives aux auteurs
- 161 -
INFOTEL
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
- 163 -
INFOTEL
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
- 166 -
INFOTEL
- 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
- 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
- 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
- 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
- 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
- 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
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
- 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
- 176 -
INFOTEL
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
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
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
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
Exemple
TITRE et GENRE : table LIVRES RAYON : table ECRIVAINS Mais il y a ambigut si des colonnes ont le mme nom dans diffrentes tables
- 183 -
INFOTEL
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
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
- 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
- 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
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
- 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
- 189 -
INFOTEL
Notion de jointure
Jointure
Slection, par un seul ordre SELECT, de colonnes provenant de plusieurs tables
Produit cartsien
Produit cartsien T1 et T2
A A B B
1 2 1 2
1 2
TABLE T2
- 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
- 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
Exemple
Rsultat
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
Expression de table
- 198 -
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
- 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
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
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
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
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
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
Exemple 1
- 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
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
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 -
INFOTEL
Contrainte dunicit
- 217 -
INFOTEL
- 219 -
INFOTEL
Contrainte de rfrence
- 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)
- 222 -
INFOTEL
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
- 223 -
- 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
- 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
Le chargement des Tables doit imprativement se faire dans l'ordre suivant : 1. Table Parente 2. Table Dpendante
- 227 -
INFOTEL
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
- 228 -
INFOTEL