SQL
Les fondamentaux du langage (avec exercices et corrigés)
5e édition
Éditions Eni
Avant-propos
Chapitre 1
Introduction
1. Un peu d'histoire13
2. Les normes SQL15
3. Description rapide du modèle relationnel17
3.1 Principaux concepts du modèle relationnel18
3.2 Principales règles19
4. L'algèbre relationnelle22
4.1 Généralités22
4.2 Les opérateurs22
4.2.1 Union22
4.2.2 Intersection23
4.2.3 Différence24
4.2.4 Division24
4.2.5 Restriction26
4.2.6 Projection26
4.2.7 Produit cartésien27
4.2.8 Jointure28
4.2.9 Calculs élémentaires29
4.2.10 Calcul d'agrégats30
5. Les systèmes de gestion de bases de données utilisant SQL30
Chapitre 2
La définition des données (LDD)
1. Les types de données31
1.1 Numériques31
1.2 Caractères35
1.3 Dates et heures36
1.4 Les types binaires39
1.5 Autres types de données40
2. La création de tables40
2.1 L'ordre CREATE41
2.2 Tables temporaires44
2.3 Les commentaires (COMMENT)45
2.4 Créer une table à partir d'une sélection de données47
2.5 Utilisation des synonymes50
2.6 Les séquences51
3. La suppression de tables55
3.1 L'ordre DROP55
4. Vérifier l'existence d'un objet56
5. La modification de table58
5.1 L'ordre ALTER58
5.2 Renommer une table (RENAME)59
6. Vider une table60
7. Les vues61
7.1 Pourquoi utiliser des vues ?61
7.2 La création de vues53
7.3 La suppression de vues66
8. Les index66
8.1 Les index et la norme SQL67
8.2 Les différentes méthodes d'organisation des index68
8.3 La création d'index69
8.4 La suppression d'index71
9. L'intégrité des données72
9.1 La clé primaire (PRIMARY KEY)72
9.2 La clé étrangère (FOREIGN KEY)74
9.3 Les valeurs par défaut (DEFAULT)76
9.4 La valeur NULL78
9.5 La contrainte d'unicité UNIQUE79
9.6 La contrainte de vérification CHECK79
9.7 La suppression d'une clé primaire80
9.8 Quelques conseils81
10. Exercices82
11. Solutions des exercices84
Chapitre 3
La manipulation des données (LMD)
1. Introduction89
2. La sélection de données89
2.1 L'ordre de sélection de données SELECT91
2.2 Les options DISTINCT et ALL93
2.3 Les tris94
2.4 Les options TOP, LIMIT, OFFSET ou ROWNUM96
2.5 L'utilisation des alias98
2.6 La clause de restriction WHERE100
2.7 Les commentaires101
2.8 Les jointures102
2.8.1 La jointure interne104
2.8.2 La jointure externe106
2.8.3 La jointure naturelle108
2.8.4 La jointure croisée110
2.8.5 Syntaxes des différentes formes de jointures111
2.9 Les regroupements (GROUP BY)112
2.10 Les fonctions utilisées lors d'un regroupement115
2.10.1 Compter des lignes (COUNT)115
2.10.2 Additionner des valeurs (SUM)117
2.10.3 Valeurs maximum et minimum (MAX et MIN)118
2.10.4 Moyenne de valeurs (AVG)119
2.10.5 La clause de restriction sur un regroupement (HAVING)120
2.11 Les instructions de condition CASE et IIF121
2.12 La concaténation123
2.13 L'instruction de choix (CHOOSE)126
2.14 Résumé des syntaxes possibles du SELECT126
2.15 Les opérateurs ensemblistes127
2.15.1 L'opérateur UNION127
2.15.2 L'opérateur INTERSECT131
2.15.3 L'opérateur EXCEPT ou MINUS133
2.16 Les opérateurs arithmétiques135
2.17 Les opérateurs de comparaison135
2.18 Les opérateurs logiques136
2.19 Comment construire une requête : quelques conseils139
2.20 Exercices sur la sélection de données142
2.20.1 Questions générales142
2.20.2 Exercices d'application142
3. L'insertion de données151
3.1 L'ordre INSERT152
3.2 L'insertion à partir d'une autre table154
3.3 Résumé des syntaxes de l'INSERT156
3.4 Exercices sur l'insertion de données156
4. La suppression de données157
4.1 L'ordre DELETE157
4.2 Exercices sur la suppression de données158
5. La modification de données159
5.1 L'ordre UPDATE159
5.2 Exercices sur la modification de données161
6. Agir sur les données à partir d'une autre table161
6.1 L'ordre MERGE161
7. Solutions des exercices165
7.1 Solutions des exercices sur la sélection de données165
7.1.1 Questions générales165
7.1.2 Exercices d'application165
7.2 Solutions des exercices sur l'insertion de données180
7.3 Solutions des exercices sur la suppression de données182
7.4 Solutions des exercices sur la modification de données183
Chapitre 4
Les fonctions
1. Introduction185
2. Les fonctions numériques185
2.1 ABS : valeur absolue186
2.2 Valeur ASCII d'un caractère186
2.3 COS : cosinus - SIN : sinus187
2.4 LOG (<numéro base>, <colonne>) : logarithme de la colonne sélectionnée dans la base indiquée187
2.5 MOD ( <colonne>, <valeur> ) : modulo188
2.6 ROUND(<colonne>,[<précision>]) : arrondi188
2.7 SQRT : racine carrée189
3. Les fonctions de gestion des dates et heures189
3.1 Date du jour : CURRENT_DATE190
3.2 Heure actuelle191
3.3 Date et heure du jour : CURRENT_TIMESTAMP193
3.4 Les différents formats d'affichage des dates194
3.5 La manipulation des dates et des heures200
4. Les fonctions sur les chaînes de caractères207
4.1 Changement de casse LOWER / UPPER / UCASE / LCASE (minuscules et majuscules)207
4.2 Supprimer les espaces à droite ou à gauche d'une chaîne de caractères : TRIM / LTRIM / RTRIM208
4.3 Trouver la position d'une chaîne de caractères dans une chaîne : INSTR, CHARINDEX et POSITION210
4.4 Ajouter des caractères avant ou après une chaîne : LPAD / RPAD211
4.5 Extraire une partie d'une chaîne de caractères : SUBSTR213
4.6 Diviser une chaîne de caractères en lignes de sous-chaînes : STRING_SPLIT213
4.7 Remplacer une chaîne de caractères par une autre chaîne : REPLACE214
4.8 Insérer une chaîne de caractères dans une autre chaîne : STUFF215
4.9 Calculer la longueur d'une chaîne de caractères : LENGTH ou LEN215
4.10 Date au format chaîne de caractères : DATENAME216
5. Les principales fonctions de conversion217
5.1 Transformer un numérique ou une date en texte : TO_CHAR.217
5.2 Changer le type d'une colonne : CAST ou CONVERT218
5.3 Changer le classement d'une colonne de type alphanumérique (COLLATE)219
6. Les fonctions de fenêtrage220
6.1 Numérotation séquentielle et rangement de lignes220
6.2 Distribution de lignes en groupes numérotés221
6.3 Décalage de valeurs d'une ligne à une autre222
7. Les autres fonctions224
7.1 NVL : tester une colonne à null224
7.2 Tester plusieurs valeurs : COALESCE225
7.3 Comparer deux colonnes : NULLIF226
8. Exercices227
9. Solutions des exercices228
Chapitre 5
La sécurité des données (DCL)
1. Introduction237
2. Pourquoi définir des droits ?237
3. Créer une connexion245
4. Créer un utilisateur.245
5. Changer le mot de passe d'un utilisateur247
6. Attribuer des droits (GRANT)248
6.1 Attribuer des droits sur la manipulation d'une table248
6.2 Attribuer des droits sur les objets de la base253
6.3 Les autres droits possibles256
7. Interdire l'accès (DENY)259
7.1 Interdire l'accès à certains objets de la base259
8. Supprimer des droits (REVOKE)259
8.1 Supprimer des droits sur la manipulation d'une table259
8.2 Supprimer des droits sur les objets de la base260
9. Utilisation des rôles261
10. Supprimer un rôle262
11. Exercices263
12. Solutions des exercices263
Chapitre 6
Le contrôle de transactions (TCL)
1. Problématique des accès concurrents267
1.1 Illustration des accès concurrents267
1.1.1 Exemple 1 : mises à jour simultanées267
1.1.2 Exemple 2 : incohérence des données suite à une modification d'un autre utilisateur269
1.2 Le mécanisme de verrouillage270
2. Notion de transaction271
2.1 Définition d'une transaction271
2.2 Comment éviter les incohérences de données272
2.3 Mise en œuvre d'un verrouillage272
2.3.1 READ UNCOMMITTED273
2.3.2 READ COMMITTED273
2.3.3 REPEATABLE-READ273
2.3.4 SERIALIZABLE273
2.3.5 Syntaxes274
2.4 Mise en œuvre d'un verrouillage applicatif275
2.4.1 Comment connaître les verrous posés sur une table ?276
2.4.2 Comment supprimer des verrous posés sur une table ?278
2.5 Validation des modifications (COMMIT)280
2.6 Abandon des modifications (ROLLBACK)281
2.7 Les points de synchronisation (SAVEPOINT)282
2.8 Exemple d'utilisation des points de synchronisation282
3. Exercice285
4. Solution de l'exercice285
Chapitre 7
La programmation
1. Introduction291
2. Syntaxe générale291
3. Les curseurs295
4. Le contrôle des flux.298
4.1 La boucle WHILE298
4.2 La boucle FOR301
4.3 La boucle LOOP303
4.4 Les structures conditionnelles CASE et IF304
5. Les exceptions Oracle les plus utilisées306
6. La gestion des erreurs en Transact SQL307
7. Création d'une procédure stockée309
8. Création d'une fonction stockée313
9. Les packages317
10. Compilation d'une procédure, d'une fonction ou d'un package319
11. Suppression d'une procédure, d'une fonction ou d'un package320
12. Les déclencheurs320
12.1 Création d'un déclencheur de contrôle et mise à jour dans une table324
12.2 Création d'un déclencheur de suivi des mises à jour328
13. Exercices335
14. Solutions des exercices335
Chapitre 8
Approfondissement
1. Les sous-requêtes341
1.1 Les sous-requêtes imbriquées341
1.2 Les sous-requêtes corrélées344
1.3 WITH CTE (Expression de Table Commune)345
2. Les imports et exports de données346
2.1 Charger des données en masse avec SQL*Loader346
2.2 Les imports et exports de tables avec Oracle354
2.2.1 Les exports de tables354
2.2.2 Les imports de tables358
2.3 Extraire les données d'une table dans un fichier à plat359
2.4 Importer les données d'une autre source de données362
2.5 Importer les données d'un fichier XML363
3. Quelques notions de performances365
3.1 Utilisation de EXPLAIN PLAN366
3.2 Utilisation du package DBMS_XPLAN.DISPLAY369
3.3 Optimisation des requêtes par l'utilisation des HINTS370
3.4 Conclusion372
4. Les tables système372
4.1 Tables système pour les tables et colonnes373
4.1.1 Oracle373
4.1.2 MySQL373
4.1.3 SQL Server373
4.1.4 PostgreSQL373
4.2 Tablés système pour les index et les vues374
4.2.1 Oracle374
4.2.2 MySQL374
4.2.3 SQL Server374
4.2.4 PostgreSQL374
4.3 Les autres tables système375
4.3.1 Oracle375
4.3.2 MySQL375
4.3.3 SQL Server376
4.3.4 PostgreSQL376
5. Les métadonnées, fonctions et procédures système SQL Server376
6. Quelques scripts bien utiles377
6.1 Connaître la taille réelle d'une colonne377
6.2 Rechercher et supprimer des doublons dans une table378
6.3 Afficher le contenu d'une table sans connaître sa structure380
6.4 Générer les ordres d'insertion dans une table à partir d'un fichier Excel382
7. Exercices385
8. Solutions des exercices385
Chapitre 9
Les erreurs les plus couramment rencontrées
1. Introduction389
2. Sur les accès aux données (LDD/LMD)390
3. Sur les transactions et les sessions (TCL/DCL)404
4. Sur les composants internes (mémoire, système)406
Annexes
1. Récapitulatif des ordres principaux409
1.1 Les principaux ordres du LDD (Langage de Définition de Données) ou DDL (Data Définition Language)409
1.2 Les principaux ordres du LMD (Langage de Manipulation de Données) ou DML (Data Manipulation Language)412
1.3 Les principaux ordres du LCD (Langage de Contrôle des Données) ou DCL (Data Control Language)416
1.4 Les principaux ordres du LCT (Langage de Contrôle des Transactions) ou TCL (Transaction Control Language)418
1.5 La création de procédures et de fonctions419
2. Fonctions SQL présentées dans ce livre421
3. Glossaire423
Index425