SQL Anne-Christine BISSON Les fondamentaux du … · 29,90 € ISBN : 978-2-409-01142-9 Ce livre...

17
SQL Les fondamentaux du langage (avec exercices et corrigés) Anne-Christine BISSON Eric GODOC 3 e édition

Transcript of SQL Anne-Christine BISSON Les fondamentaux du … · 29,90 € ISBN : 978-2-409-01142-9 Ce livre...

ISBN

: 97

8-2-

409-

0114

2-9

29,9

0 €

Ce livre sur les fondamentaux du langage SQL s’adresse aux développeurs et informaticiens débutants appelés à travailler avec un Système de Gestion de Bases de Données Relationnelles (SGBDR) pour stocker et manipuler des données. Son objectif est de décrire les ordres principaux les plus utilisés du langage SQL (indépendamment des déclinaisons réalisées par les édi-teurs de SGBDR) pour permettre au lecteur de prendre en main rapidement une base de données relationnelle et être capable de créer des tables, de les interroger, de les modifier, d’insérer et de supprimer des lignes. Le livre débute par un bref historique sur la création de la norme SQL puis présente quelques notions sur le modèle relationnel. Ensuite, chaque chapitre présente une subdivision de SQL : la création et la manipulation des tables puis la gestion des don-nées dans ces tables en incluant les dernières évolutions comme les fonctions de fenêtrage. L’auteur enchaîne avec la sécurité des données et quelques notions de transactions, puis présente la programmation avec quelques éléments de PL/SQL et l’étude des déclencheurs. Le livre se termine en abordant des thèmes un peu plus complexes comme les chargements en masse, les imports et exports de tables, les notions de performances ou encore les objets systèmes.Les exemples utilisés dans ce livre ont été réalisés avec la version Oracle 12c (12.1.0.2) DB Developer VM, SQL Server 2016 SP1 Developer Edition, la version MySQL 5.7.11, PostgreSQL en version 9.5.6 et sont en téléchargement sur le site www.editions-eni.fr.

SQLLes fondamentaux du langage

Pour plus d’informations :

Anne-Christine BISSON est consultante indépendante en informatique décision-nelle. Cette experte conseille sur la conception de bases et entrepôts de don-nées de différents SGDB. A ce titre, elle manipule et agrège des données à partir de sources diverses pour les restituer de façon synthétique dans des entreprises et administrations de différents secteurs. Egalement formatrice, elle prolonge avec ce livre sa volonté de partager ses connaissances sur SQL auprès des lec-teurs.

Eric GODOC est Directeur de projets in-formatiques dans une SSII. Ses projets autour du développement et des migra-tions d’applications au sein de grandes entreprises lui ont apporté une expérience significative sur la manipulation de bases de données relationnelles. Avec ce livre il fait bien sûr profiter les lecteurs de ce retour d’expérience et surtout, il leur four-nit les moyens de maîtriser les bases du langage SQL. Son objectif est qu’ils puissent répondre à la majorité des be-soins dans l’utilisation d’une base de données relationnelle, quel qu’en soit l’éditeur.

Les chapitres du livre

Avant-propos  •  Introduction  •  La  définition  des  données (LDD) • La manipulation des données (LMD) • Les fonctions • La sécurité des données (LSC) • Le contrôle de transactions (TCL) • La programmation • Approfondissement • Les erreurs les plus couramment rencontrées • Annexes 

Téléchargementwww.editions-eni.fr.fr

sur www.editions-eni.fr : b Les scripts des exemples

du livre.

SQLLes fondamentaux

du langage(avec exercices et corrigés)

Anne-Christine BISSONEric GODOC

3e édition

Nouvelle édition

SQL

Les

fond

amen

taux

du

lang

age

1Table des matières

Avant-propos

Chapitre 1

Introduction

1. Un peu d'histoire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2. Les normes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3. Description rapide du modèle relationnel . . . . . . . . . . . . . . . . . . . . . . 143.1 Principaux concepts du modèle relationnel . . . . . . . . . . . . . . . . 163.2 Principales règles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4. L’algèbre relationnelle. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.2 Les opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

4.2.1 Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204.2.2 Intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.2.3 Différence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.2.4 Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234.2.5 Restriction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244.2.6 Projection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.7 Produit cartésien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.8 Jointure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254.2.9 Calculs élémentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.2.10 Calcul d'agrégats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

5. Les systèmes de gestion de bases de données utilisant SQL . . . . . . . 28

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RI3SQL dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

lcroise
Tampon

2Les fondamentaux du langage

SQL

Chapitre 2

La définition des données (LDD)

1. Les types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.1 Numériques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291.2 Caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321.3 Dates et heures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341.4 Les types binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361.5 Autres types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

2. La création de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.1 L'ordre CREATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372.2 Tables temporaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412.3 Les commentaires (COMMENT) . . . . . . . . . . . . . . . . . . . . . . . . 422.4 Créer une table à partir d'une sélection de données . . . . . . . . . . 442.5 Utilisation des synonymes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.6 Les séquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

3. La suppression de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513.1 L'ordre DROP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

4. La modification de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.1 L'ordre ALTER. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534.2 Renommer une table (RENAME) . . . . . . . . . . . . . . . . . . . . . . . . 54

5. Vider une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555.1 L'ordre TRUNCATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6. Les vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.1 Pourquoi utiliser des vues ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.2 La création de vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3 La suppression de vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

7. Les index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617.1 Les index et la norme SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617.2 Les différentes méthodes d'organisation des index . . . . . . . . . . 627.3 La création d'index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647.4 La suppression d'index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

3Table des matières

8. L'intégrité des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668.1 La clé primaire (PRIMARY KEY). . . . . . . . . . . . . . . . . . . . . . . . . 678.2 La clé étrangère (FOREIGN KEY) . . . . . . . . . . . . . . . . . . . . . . . . 688.3 Les valeurs par défaut (DEFAULT) . . . . . . . . . . . . . . . . . . . . . . . 708.4 La valeur NULL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728.5 La contrainte d’unicité UNIQUE . . . . . . . . . . . . . . . . . . . . . . . . 738.6 La contrainte de vérification CHECK . . . . . . . . . . . . . . . . . . . . . 738.7 Quelques conseils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

9. Exercices d'application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75

10. Solutions des exercices d'application. . . . . . . . . . . . . . . . . . . . . . . . . . 77

Chapitre 3

La manipulation des données (LMD)

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

2. La sélection de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812.1 L'ordre de sélection de données SELECT. . . . . . . . . . . . . . . . . . . 832.2 Les options DISTINCT et ALL . . . . . . . . . . . . . . . . . . . . . . . . . . 842.3 Les tris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862.4 Les options TOP, LIMIT, OFFSET ou ROWNUM . . . . . . . . . . 882.5 L’utilisation des alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892.6 La clause de restriction WHERE . . . . . . . . . . . . . . . . . . . . . . . . . 912.7 Les commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932.8 Les jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

2.8.1 La jointure interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952.8.2 La jointure externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972.8.3 La jointure naturelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992.8.4 La jointure croisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012.8.5 Syntaxes des différentes formes de jointures. . . . . . . . . 102

2.9 Les regroupements (GROUP BY) . . . . . . . . . . . . . . . . . . . . . . . 1032.10 Les fonctions utilisées lors d'un regroupement. . . . . . . . . . . . . 106

2.10.1 Compter des lignes (COUNT) . . . . . . . . . . . . . . . . . . . . 1062.10.2 Additionner des valeurs (SUM) . . . . . . . . . . . . . . . . . . . 108

4Les fondamentaux du langage

SQL

2.10.3 Valeurs maximum et minimum (MAX et MIN). . . . . . 1092.10.4 Moyenne de valeurs (AVG) . . . . . . . . . . . . . . . . . . . . . . 1102.10.5 La clause de restriction

sur un regroupement (HAVING) . . . . . . . . . . . . . . . . . . 1112.11 Les instructions de condition CASE et IIF . . . . . . . . . . . . . . . . 1122.12 La concaténation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142.13 L’instruction de choix (CHOOSE) . . . . . . . . . . . . . . . . . . . . . . 1152.14 Résumé des syntaxes possibles du SELECT . . . . . . . . . . . . . . . 1162.15 Les opérateurs ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2.15.1 L'opérateur UNION. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172.15.2 L'opérateur INTERSECT. . . . . . . . . . . . . . . . . . . . . . . . . 1212.15.3 L'opérateur EXCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

2.16 Les opérateurs arithmétiques. . . . . . . . . . . . . . . . . . . . . . . . . . . 1242.17 Les opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . 1252.18 Les opérateurs logiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.19 Comment construire une requête : quelques conseils . . . . . . . 1282.20 Exercices sur la sélection de données. . . . . . . . . . . . . . . . . . . . . 131

2.20.1 Questions génrales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312.20.2 Exercices d'application . . . . . . . . . . . . . . . . . . . . . . . . . . 132

3. L'insertion de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403.1 L'ordre INSERT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413.2 L'insertion à partir d'une autre table . . . . . . . . . . . . . . . . . . . . . 1433.3 Résumé des syntaxes de l'INSERT . . . . . . . . . . . . . . . . . . . . . . 1453.4 Exercices sur l'insertion de données. . . . . . . . . . . . . . . . . . . . . . 145

4. La suppression de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1464.1 L'ordre DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1464.2 Exercices sur la suppression de données . . . . . . . . . . . . . . . . . . 147

5. La modification de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.1 L'ordre UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485.2 Exercices sur la modification de données . . . . . . . . . . . . . . . . . 150

6. Agir sur les données à partir d’une autre table . . . . . . . . . . . . . . . . . 1506.1 L'ordre MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

5Table des matières

7. Solutions des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547.1 Solutions des exercices sur la sélection de données . . . . . . . . . 154

7.1.1 Questions générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547.1.2 Exercices d'application. . . . . . . . . . . . . . . . . . . . . . . . . . . 154

7.2 Solutions des exercices sur l'insertion de données . . . . . . . . . . 1667.3 Solutions des exercices sur la suppression de données . . . . . . . 1687.4 Solutions des exercices sur la modification de données . . . . . . 169

Chapitre 4

Les fonctions

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

2. Les fonctions numériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712.1 ABS : valeur absolue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.2 Valeur ASCII d'un caractère. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722.3 COS : cosinus - SIN : sinus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732.4 LOG (<numéro base>,<colonne>) : logarithme

de la colonne sélectionnée dans la base indiquée . . . . . . . . . . . 1732.5 MOD(<colonne>,<valeur>) : modulo . . . . . . . . . . . . . . . . . . 1742.6 ROUND(<colonne>,[<précision>]) : arrondi . . . . . . . . . . . . 1742.7 SQRT : racine carrée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175

3. Les fonctions de gestion des dates et heures . . . . . . . . . . . . . . . . . . . 1753.1 Date du jour : CURRENT_DATE . . . . . . . . . . . . . . . . . . . . . . . 1763.2 Heure actuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773.3 Date et heure du jour : CURRENT_TIMESTAMP . . . . . . . . . 1783.4 Les différents formats d’affichage des dates . . . . . . . . . . . . . . . 1803.5 La manipulation des dates et des heures . . . . . . . . . . . . . . . . . . 186

4. Les fonctions sur les chaînes de caractères . . . . . . . . . . . . . . . . . . . . 1924.1 Changement de casse LOWER / UPPER / UCASE / LCASE

(minuscules et majuscules) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1924.2 Supprimer les espaces à droite ou à gauche d'une chaîne

de caractères : TRIM / LTRIM / RTRIM . . . . . . . . . . . . . . . . . 193

6Les fondamentaux du langage

SQL

4.3 Trouver la position d'une chaîne de caractères dans une chaîne : INSTR, CHARINDEX et POSITION . . . . . 195

4.4 Ajouter des caractères avant ou après une chaîne : LPAD / RPAD . . . . . . . . . . . . . . . . . . . . . 196

4.5 Extraire une partie d'une chaîne de caractères : SUBSTR . . . . 198

5. Les principales fonctions de conversion . . . . . . . . . . . . . . . . . . . . . . 1985.1 Transformer un numérique

ou une date en texte : TO_CHAR. . . . . . . . . . . . . . . . . . . . . . . 1985.2 Changer le type d'une colonne : CAST ou CONVERT . . . . . . 200

6. Les fonctions de fenêtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2016.1 Numérotation séquentielle et rangement de lignes . . . . . . . . . 2016.2 Distribution de lignes en groupes numérotés . . . . . . . . . . . . . . 2026.3 Décalage de valeurs d’une ligne à une autre . . . . . . . . . . . . . . . 203

7. Les autres fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2057.1 NVL : tester une colonne à null . . . . . . . . . . . . . . . . . . . . . . . . 2057.2 Tester plusieurs valeurs : COALESCE. . . . . . . . . . . . . . . . . . . . 2067.3 Comparer deux colonnes : NULLIF. . . . . . . . . . . . . . . . . . . . . . 207

8. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

9. Solutions des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

Chapitre 5

La sécurité des données (DCL)

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

2. Pourquoi définir des droits ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

3. Créer une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

4. Créer un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

5. Changer le mot de passe d’un utilisateur . . . . . . . . . . . . . . . . . . . . . 225

6. Attribuer des droits (GRANT). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2266.1 Attribuer des droits sur la manipulation d’une table . . . . . . . . 2266.2 Attribuer des droits sur les objets de la base. . . . . . . . . . . . . . . 231

7Table des matières

6.3 Les autres droits possibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

7. Interdire l’accès (DENY) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2377.1 Interdire l’accès à certains objets de la base . . . . . . . . . . . . . . . 237

8. Supprimer des droits (REVOKE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2378.1 Supprimer des droits sur la manipulation d’une table . . . . . . . 2378.2 Supprimer des droits sur les objets de la base . . . . . . . . . . . . . . 238

9. Utilisation des rôles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

10. Supprimer un rôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240

11. Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

12. Solutions des exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

Chapitre 6

Le contrôle de transactions (TCL)

1. Problématique des accès concurrents . . . . . . . . . . . . . . . . . . . . . . . . 2451.1 Illustration des accès concurrents . . . . . . . . . . . . . . . . . . . . . . . 245

1.1.1 Exemple 1 : mises à jour simultanées . . . . . . . . . . . . . . . 2451.1.2 Exemple 2 : incohérence des données

suite à une modification d’un autre utilisateur . . . . . . . 2471.2 Le mécanisme de verrouillage . . . . . . . . . . . . . . . . . . . . . . . . . . 248

2. Notion de transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2492.1 Définition d'une transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . 2492.2 Comment éviter les incohérences de données . . . . . . . . . . . . . 2502.3 Mise en œuvre d'un verrouillage . . . . . . . . . . . . . . . . . . . . . . . . 250

2.3.1 READ UNCOMMITTED . . . . . . . . . . . . . . . . . . . . . . . . 2512.3.2 READ COMMITTED . . . . . . . . . . . . . . . . . . . . . . . . . . . 2512.3.3 REPEATABLE-READ. . . . . . . . . . . . . . . . . . . . . . . . . . . . 2512.3.4 SERIALIZABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2512.3.5 Syntaxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252

8Les fondamentaux du langage

SQL

2.4 Mise en œuvre d'un verrouillage applicatif . . . . . . . . . . . . . . . . 2532.4.1 Comment connaître les verrous posés sur une table ? . 2542.4.2 Comment supprimer des verrous posés sur une table ? 256

2.5 Validation des modifications (COMMIT) . . . . . . . . . . . . . . . . 2582.6 Abandon des modifications (ROLLBACK) . . . . . . . . . . . . . . . . 2592.7 Les points de synchronisation (SAVEPOINT ). . . . . . . . . . . . . 2592.8 Exemple d'utilisation des points de synchronisation . . . . . . . . 260

Chapitre 7

La programmation

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

2. Syntaxe générale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

3. Les curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

4. Le contrôle des flux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2754.1 La boucle WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2754.2 La boucle FOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2784.3 La boucle LOOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2814.4 Les structures conditionnelles CASE et IF . . . . . . . . . . . . . . . . 282

5. Les exceptions les plus utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

6. La gestion des erreurs en Transact SQL . . . . . . . . . . . . . . . . . . . . . . 285

7. Création d'une procédure stockée . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

8. Création d'une fonction stockée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

9. Les packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296

10. Compilation d'une procédure, d'une fonction ou d'un package . . . 299

11. Suppression d'une procédure, d'une fonction ou d'un package . . . . 300

12. Les déclencheurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30012.1 Création d'un déclencheur de contrôle

et mise à jour dans une table . . . . . . . . . . . . . . . . . . . . . . . . . . . 30312.2 Création d'un déclencheur de suivi des mises à jour . . . . . . . . 307

9Table des matières

Chapitre 8

Approfondissement

1. Les sous-requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3131.1 Les sous-requêtes imbriquées . . . . . . . . . . . . . . . . . . . . . . . . . . . 3131.2 Les sous-requêtes corrélées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

2. Les imports et exports de données. . . . . . . . . . . . . . . . . . . . . . . . . . . 3192.1 Charger des données en masse avec SQL*Loader . . . . . . . . . . . 3192.2 Les imports et exports de tables avec Oracle . . . . . . . . . . . . . . 327

2.2.1 Les exports de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3272.2.2 Les imports de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

2.3 Extraire les données d’une table dans un fichier à plat . . . . . . 3322.4 Importer les données d’une autre source de données . . . . . . . . 3352.5 Importer les données d’un fichier XML . . . . . . . . . . . . . . . . . . 336

3. Quelques notions de performances . . . . . . . . . . . . . . . . . . . . . . . . . . 3373.1 Utilisation de EXPLAIN PLAN . . . . . . . . . . . . . . . . . . . . . . . . . 3383.2 Utilisation du package DBMS_XPLAN.DISPLAY . . . . . . . . . . 3413.3 Optimisation des requêtes par l’utilisation des HINTS. . . . . . 3423.4 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

4. Les tables système. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3444.1 Tables système pour les tables et colonnes. . . . . . . . . . . . . . . . 344

4.1.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3444.1.2 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3444.1.3 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

4.2 Tables système pour les index et les vues . . . . . . . . . . . . . . . . . 3454.2.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3454.2.2 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3454.2.3 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345

4.3 Les autres tables système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3464.3.1 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3464.3.2 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3464.3.3 SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

5. Les métadonnées, fonctions et procédures système SQL Server . . . 347

10Les fondamentaux du langage

SQL

6. Quelques scripts bien utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3486.1 Connaître la taille réelle d'une colonne . . . . . . . . . . . . . . . . . . . 3486.2 Rechercher et supprimer des doublons dans une table . . . . . . 3496.3 Afficher le contenu d'une table sans connaître sa structure . . 3506.4 Générer les ordres d'insertion dans une table

à partir d'un fichier Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

Chapitre 9

Les erreurs les plus couramment rencontrées

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357

2. Sur les accès aux données (LDD/LMD) . . . . . . . . . . . . . . . . . . . . . . 358

3. Sur les transactions et les sessions (TCL/DCL) . . . . . . . . . . . . . . . . 372

4. Sur les composants internes (mémoire, système) . . . . . . . . . . . . . . 374

Annexes

1. Récapitulatif des ordres principaux. . . . . . . . . . . . . . . . . . . . . . . . . . 3771.1 Les principaux ordres du LDD (langage de définition

de données) ou DDL (Data Definition Language) . . . . . . . . . . 3771.2 Les principaux ordres du LMD (langage de manipulation

de données) ou DML (Data Manipulation Language) . . . . . . . 3801.3 Les principaux ordres du LCD (langage de contrôle

des données) ou DCL (Data Control Language). . . . . . . . . . . . 3841.4 Les principaux ordres du LCT (langage de contrôle

des transactions) ou TCL (Transaction Control Language) . . 3861.5 La création de procédures et de fonctions. . . . . . . . . . . . . . . . . 388

2. Fonctions SQL présentées dans ce livre. . . . . . . . . . . . . . . . . . . . . . . 390

3. Glossaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

Chapitre 3

La manipulation des données (LMD)

81

La manipulation des données (LMD)

1. Introduction

Le langage de manipulation de données permet aux utilisateurs et aux déve-loppeurs d'accéder aux données de la base, de modifier leur contenu, d'insérerou de supprimer des lignes.

Il s'appuie sur quatre ordres de base qui sont SELECT, INSERT, DELETE etUPDATE.

Ces quatre ordres ne sont pas toujours autorisés par l'administrateur de la basequi est le seul à pouvoir attribuer ou non les droits d'utilisation sur ces ordres.

Pour l'utilisateur lambda, il pourra indiquer que seul l'ordre SELECT est utili-sable. Les ordres de modification de la base ne sont pas accessibles pourcertains utilisateurs pour des raisons évidentes de sécurité.

2. La sélection de données

L'ordre SELECT permet de réaliser des requêtes simples assez rapidementmême sans connaissances approfondies en langage de programmation. C'estl'ordre de base qui permet d'indiquer au serveur que l'on désire extraire desdonnées.

lcroise
Tampon

© E

dit

ions

EN

I -

All r

ights

rese

rved

82Les fondamentaux du langage

SQL

Il peut également être très puissant si l'on connaît toutes les fonctions ettoutes les possibilités du langage. On peut réaliser des requêtes complexes,avec de nombreuses tables mais il faut toujours faire attention aux perfor-mances qui peuvent se dégrader très rapidement sur un ordre SQL malconstruit ou n'utilisant pas les bons index dans les tables. Il faut être vigilantet utiliser les outils d'analyse de requête (cf. chapitre Approfondissement -Quelques notions de performances) avant d'exécuter une requête sur une baseréelle avec des tables conséquentes.

Les tables de base qui sont utilisées dans les sections suivantes sont celles-ci :

Les principaux éléments d'une requête de sélection

Clause Expression

SELECT Liste colonne(s) et ou éléments d'extraction

FROM Table(s) source(s)

WHERE Condition(s) ou restriction(s), optionnelle

GROUP BY Regroupement(s), optionnelle

HAVING Condition(s) ou restriction(s) sur le(s) regroupement(s),optionnelle

ORDER BY Tri(s)

83La manipulation des données (LMD)Chapitre 3

2.1 L'ordre de sélection de données SELECT

Le SELECT est l'ordre le plus important et le plus utilisé en SQL. Avec cetordre, nous pouvons ramener des lignes d’une ou plusieurs tables mais égale-ment transformer des données par l'utilisation de fonction ou encore réaliserdes calculs.

Nous allons décrire progressivement les possibilités de cet ordre dans les para-graphes suivants.

L'utilisation la plus courante consiste à sélectionner des lignes dans une tablecomme ceci :

SELECT NombreLit, Description FROM TypesChambre;

Dans cet exemple, nous avons sélectionné deux colonnes de la table Types-Chambre.

L'ordre va donc nous ramener toutes les lignes de la table pour ces deuxcolonnes.

Si on avait voulu toutes les colonnes et toutes les lignes de la table, l'ordreaurait été celui-ci :

SELECT * FROM TypesChambre;

idTypeChambre NombreLit TypeLit Description

1 1 lit simple 1 lit simple avec douche

2 2 lit simple 2 lits simples avec douche

3 2 lit simple 2 lits simples avec douche et WC séparés

4 1 lit double 1 lit double avec douche

5 1 lit double 1 lit double avec douche et WC séparés

6 1 lit double 1 lit double avec bain et WC séparés

7 1 lit XL 1 lit double large avec bain et WC séparés

© E

dit

ions

EN

I -

All r

ights

rese

rved

84Les fondamentaux du langage

SQL

L'étoile est pratique lorsque l'on ne connaît pas le nom des colonnes, mais lerésultat est rarement lisible avec des tables contenant un nombre importantde colonnes. Pour connaître le nom des colonnes, faites un DESC de la tableauparavant (DESC <nom table>).

La syntaxe simple est donc :

SELECT <colonne 1>, <colonne 2> ... | * FROM <table1>, <table2> ...

Si certaines colonnes ont le même nom mais appartiennent à des tables diffé-rentes, il faudra ajouter le nom de la table devant la colonne afin que lesystème sache quelle colonne prendre.

Il n'est pas obligatoire de mettre le nom des tables devant chaque colonne,mais pour une question de lisibilité et de maintenance, il est préférable de lesmettre sur des sélections complexes.

SELECT Hotels.Libelle, Hotels.Etoile, Chambres.NumChambre, TypesChambre.DescriptionFROM Chambres, Hotels, TypesChambre;

Nous verrons dans la section L’utilisation des alias de ce chapitre que pouralléger la lecture il est également possible de donner un alias à chaque table.Cet alias est souvent simple et permet de retrouver facilement la table concer-née, par exemple CH pour Chambres ou TYP pour TypesChambre.

2.2 Les options DISTINCT et ALL

Par défaut, lors de l'exécution d'un SELECT, toutes les lignes sont ramenées(l'option ALL est automatique). Si l’on veut supprimer les doublons, il fautajouter l'ordre DISTINCT.

L'ordre DISTINCT s'applique à toutes les colonnes présentes.

Exemple

SELECT NombreLit, TypeLit, Description FROM TypesChambre;

85La manipulation des données (LMD)Chapitre 3

et :

SELECT DISTINCT NombreLit, TypeLit, Description FROM TypesChambre;

Les deux SELECT ci-dessus ont le même résultat car il y a un doublon sur lestrois premières lignes. Ces deux premières colonnes sont identiques mais pasla troisième.

En revanche, si on réduit la sélection à deux colonnes comme :

SELECT NombreLit, TypeLit FROM TypesChambre;

on obtient :

Si on ajoute un ordre DISTINCT, une des deux lignes contenant '2' et 'litsimple' sera supprimée.

SELECT DISTINCT NombreLit, TypeLit FROM TypesChambre;

Remarque

La clause DISTINCT ne peut pas être utilisée avec des opérateurs de regroupe-ment (voir le GROUP BY). En effet, les opérateurs de type COUNT ou SUM élimi-nent automatiquement les doublons.

NombreLit TypeLit Description

1 lit double 1 lit double avec bain et WC séparés

1 lit double 1 lit double avec douche

1 lit double 1 lit double avec douche et WC séparés

1 lit simple 1 lit simple avec douche

1 lit XL 1 lit double large avec bain et WC séparés

NombreLit TypeLit

1 lit simple

2 lit simple

2 lit simple

1 lit double

1 lit double

© E

dit

ions

EN

I -

All r

ights

rese

rved

86Les fondamentaux du langage

SQL

2.3 Les tris

Lorsque l’on ramène des colonnes d’une ou de plusieurs tables avec unSELECT, il est souvent intéressant d’obtenir un résultat trié sur certainescolonnes.

Pour cela, on utilisera la clause ORDER BY en fin de requête. On peut trier surn’importe quelles colonnes d’une table, il faut pour cela que les colonnesfassent partie de la sélection, mais elles ne sont pas obligatoirement affichées.

La clause ne peut être utilisée qu’une seule fois dans une requête et doittoujours être la dernière clause de la requête.

Le tri par défaut est ascendant, noté ASC (du plus petit au plus grand). Il estpossible d’indiquer que l’on désire réaliser le tri en descendant en notantDESC.

Syntaxe de l’ORDER BY

ORDER BY <colonne 1> [ASC|DESC], <colonne 2> [ASC|DESC]...

Exemple

Tri sur la DateDebut de la table Tarifs en ascendant et tri sur le prix de la tableen descendant.

SELECT hotel, typeChambre, DateDebut, prixFROM TarifsORDER BY DateDebut, prix DESC;

NombreLit TypeLit

1 lit double1 lit simple1 lit XL2 lit simple