Académique Documents
Professionnel Documents
Culture Documents
1
SQL, la Norme et le Standard des SGBD Relationnels
Ancêtre SQL => SEQUEL : Stuctured English as QUEry Language initié et lancé par IBM
La troisième norme SQL3 date de 1999 enrichie avec les éléments suivants : concepts
objets, entrepôts de données, séries temporelles, accès à des sources non SQL,
réplication des données, etc
L’un de ses points forts : Peut s’interfacer avec des langages de troisième génération
comme C ou Cobol, mais aussi avec des langages plus évolués comme C++, Java ou C#.
2
Les SGBD Relationnels
Offrent la possibilité de stocker des informations non structurées dans des champs
appelés LOB (Large Object Binary) comme le texte et l’image
3
Classification des ordres SQL
Interrogation des
SELECT données (LID)
GRANT – REVOKE –
COMMIT – ROLLBACK – Contrôle des données
SAVEPOINT - SET (LCD)
TRANSACTION
4
Modèle de données relationnel
Le modèle relationnel est ainsi fondamentalement basé sur les valeurs. Les associations
entre tables sont assurées par les clés étrangères.
La table relationnelle (relational table) est la structure de données de base qui contient des
enregistrements appelés aussi « lignes » (rows) et de colonnes (columns) représentant les
champs.
La clé primaire (primary key) d’une table est l’ensemble minimal de colonnes qui permet
d’identifier de manière unique chaque enregistrement.
Une clé étrangère (foreign key) référence dans la majorité des cas une clé primaire d’une
autre table
5
SGBD MySQL
Succès dû principalement à :
6
Architecture SGBD MySQL
7
Typographie Instructions SQL
Exemple
8
Ordre SELECT : Interrogation des données
L’instruction SELECT est une commande déclarative (elle décrit ce que l’on
cherche sans expliquer le moyen d’opérer). À l’inverse, une instruction
Procédurale (comme un programme) développerait le moyen pour réaliser
l’extraction de données (comme le chemin à emprunter entre des tables ou
une itération pour parcourir un ensemble d’enregistrements).
9
SELECT : Restriction, Projection et Jointure
10
Synthaxe SELECT
DISTINCT et DISTINCTROW jouent le même rôle, à savoir ne pas inclure les duplicatas.
ALL prend en compte les duplicatas (option par défaut).
listeColonnes : { * | expression1 [[AS] alias1 ] [, expression2[[AS] alias2 ]...}
– * : extrait toutes les colonnes de la table.
– expression : nom de colonne, fonction SQL, constante ou calcul.
– alias : renomme l’expression (nom valable pendant la durée de la requête).
FROM désigne la table (qui porte un alias ou non) à interroger.
WHERE définit le critère de sélection
GROUP BY réaliser des groupements par champs
HAVING Définit un critère sur l’ensemble du groupe
OREDER BY : tri sur une ou plusieurs colonnes ou expressions.
LIMIT pour limiter le nombre de lignes après résultat. 11
Interrogations simples
Utilisons la table exemple suivante :
12
Interrogation de toutes les colonnes
13
Interrogation de certaines colonnes
14
Alias de colonnes
15
Alias de table
16
DISTINCT et DISTINCTROW
SELECT SYSDATE()+0 ;
19
Concaténation
20
Limitation du nombre de lignes du SELECT
Syntaxe de l’instruction LIMIT :
LIMIT [rangDépart,] nbLignes
Le rang 0 correspond à la première ligne
Quand ce rang n’est pas spécifié, il prend par défaut la valeur 0
Le rang suit l’ordre de tri du résultat du select
21
Restriction (WHERE)
SELECT [ { DISTINCT | DISTINCTROW } | ALL ] listeColonnes
FROM nomTable [aliasTable]
[ WHERE condition ] ;
22
Opérateurs de comparaison
23
Opérateurs de comparaison
24
Opérateurs de comparaison
25
Opérateurs logiques
26
Opérateurs logiques
27
Opérateurs intégrés : BETWEEN, IN, LIKE et IS NULL
28
Opérateurs intégrés : BETWEEN, IN, LIKE et IS NULL
29
Opérateurs intégrés : BETWEEN, IN, LIKE et IS NULL
30
Opérateurs intégrés : BETWEEN, IN, LIKE et IS NULL
31
Opérateurs intégrés : BETWEEN, IN, LIKE et IS NULL
32
Alias => Mise en garde dans la clause where
Il n’est pas permis d’utiliser un alias de colonne dans la clause WHERE. Cette
recommandation de la norme s’explique par le fait que certaines expressions pourraient
ne pas être déterminées pendant que la condition WHERE est évaluée.
33
Fonctions
La plupart des fonctions pour les caractères acceptent une chaîne de caractères
en paramètre de nature CHAR ou VARCHAR
35
Fonctions Monoligne : Caractères
36
Fonctions Monoligne : Caractères
Premier indice d’une sous-chaîne c1 dans une
INSTR(c1,c2)
chaîne c2.
Exemple : indice de 'Air' dans la chaîne.
37
Fonctions Monoligne : Caractères
38
Fonctions Monoligne : Caractères
39
Fonctions Monoligne : Caractères
40
Fonctions Monoligne : Caractères
41
Fonctions Monoligne : Caractères
42
Fonctions Monoligne : Caractères
43
Fonctions Monoligne : Caractères
44
Fonctions Monoligne : Caractères
45
Fonctions Monoligne : Caractères
46
Fonctions Monoligne : Caractères
47
Fonctions Monoligne : Caractères
48
Fonctions Monoligne : Caractères
49
Fonctions Monoligne : Numériques
50
Fonctions Monoligne : Numériques
51
Fonctions Monoligne : Dates
52
Fonctions Monoligne : Dates
53
Fonctions Monoligne : Dates
54
Fonctions Monoligne : Dates
55
Fonctions Monoligne : Dates
Paramètres d’intervalles pour les fonctions DATE_ADD et DATE_SUB
56
Fonctions Monoligne : Dates
Principaux formats pour les fonctions DATE_FORMAT et STR_TO_DATE
57
Exemples de fonctions pour les dates
Date dans 31 jours.
58
Exemples de fonctions pour les dates
Rendez-vous dans 4 mois.
59
Exemples de fonctions pour les dates
Aujourd’hui en anglais.
60
Conversion
MySQL autorise des conversions de types implicites ou explicites.
61
Fonctions de conversion
62
Comparaisons
MySQL compare deux variables entre elles en suivant les règles suivantes :
Si l’une des deux valeurs est NULL, la comparaison retourne NULL (sauf pour
l’opérateur <=> qui renvoie vrai si les deux valeurs sont NULL).
Si les deux valeurs sont des chaînes, elles sont comparées en tant que telles.
Si les deux valeurs sont des numériques, elles sont comparées en tant que telles.
Les valeurs hexadécimales sont traitées comme des chaînes de bits si elles ne sont
pas comparées à des numériques.
Si l’une des valeurs est TIMESTAMP ou DATETIME et si l’autre est une constante,
cette dernière est convertie en TIMESTAMP.
Dans les autres cas, les valeurs sont comparées comme des numériques (flottants).
63
Autres fonctions
64
Regroupements
HAVING condition : pour inclure ou exclure des lignes aux groupes (la condition ne
peut faire intervenir que des expressions du GROUP BY).
65
Fonctions de groupe
À l’exception de COUNT, toutes les fonctions ignorent les valeurs NULL (il faudra utiliser
IFNULL pour contrer cet effet).
Utilisées sans GROUP BY, ces fonctions s’appliquent à la totalité ou à une seule partie
d’une table.
66
Table Exemple
67
Exemples de fonctions de groupe
Moyenne des heures de vol et des primes des pilotes de la compagnie 'AF'.
68
Exemples de fonctions de groupe
Nom des pilotes de la compagnie 'AF'.
Nombre d’heures de vol le plus élevé, date d’embauche la plus récente. Nombre
d’heures de vol le moins élevé, date d’embauche la plus ancienne.
SELECT MAX(nbHVol), MAX(embauche) "Date+", MIN(prime),
MIN(embauche) "Date-" FROM Pilote;
69
Étude du GROUP BY et HAVING
Les colonnes présentes dans le SELECT doivent apparaître dans le GROUP BY. Seules des
fonctions ou expressions peuvent exister en plus dans le SELECT.
Les alias de colonnes ne peuvent pas être utilisés dans la clause GROUP BY.
70
Exemples de fonctions de groupe avec GROUP BY
Moyenne des heures de vol et des primes pour chaque compagnie.
Nombre de pilotes (et ceux qui ont de l’expérience du vol) par compagnie.
SELECT compa, COUNT(*), COUNT(nbHVol) FROM Pilote
GROUP BY(compa) ;
71
Exemples de fonctions de groupe avec GROUP BY
Nombre d’heures de vol le plus élevé, date d’embauche la plus récente pour chaque
compagnie.
72
Manipulation des données : LMD => INSERT
Syntaxe simplifiée de l’instruction INSERT monoligne:
74
Manipulation des données : LMD => INSERT
Insertion de 3 lignes en une seule instruction INSERT
75
Manipulation des données : LMD => UPDATE
Syntaxe simplifiée de l’instruction UPDATE:
La clause SET actualise une colonne en lui affectant une expression (valeur, valeur
par défaut, calcul).
La condition du WHERE filtre les lignes à mettre à jour dans la table. Si aucune
condition n’est précisée, tous les enregistrements seront actualisés. Si la condition
ne filtre aucune ligne, aucune mise à jour ne sera réalisée.
76
Manipulation des données : LMD => UPDATE
Modification d’une colonne
78
Manipulation des données : LMD => DELETE
Syntaxe simplifiée de l’instruction DELETE:
Il n’est pas possible de « tronquer » une table qui est référencée par des clés étrangères
actives. La solution consiste à désactiver les contraintes puis à tronquer la table.
80
Définition des données : LDD
• Création de la
CREATE
structure de la
TABLE table
• Modification de
LDD ALTER
TABLE
la structure de la
table
• Suppression de
DROP
la structure de la
TABLE table
81
Définition des données : LDD => CREATE
Syntaxe simplifiée de l’instruction CREATE:
NULL représente une valeur qu’on peut considérer comme non disponible, non affectée,
inconnue ou inapplicable. Elle est différente d’un espace pour un caractère ou d’un zéro
pour un nombre.
Les noms des colonnes doivent être uniques pour une table donnée (il est en revanche
possible d’utiliser le même nom de colonne dans plusieurs tables).
Les noms des objets (base, tables, colonnes, contraintes, vues, etc.) ne doivent pas
emprunter des mots-clés de MySQL : TABLE, SELECT, INSERT, IF…
83
Définition des données : LDD => CREATE
Table à créer :
84
Définition des données : LDD => Les Contraintes
CONSTRAINT nomContrainte
UNIQUE (colonne1 [,colonne2]...)
PRIMARY KEY (colonne1 [,colonne2]...)
FOREIGN KEY (colonne1 [,colonne2]...)
REFERENCES nomTablePere [(colonne1 [,colonne2]...)]
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
CHECK (condition)
85
Définition des données : LDD => Les Contraintes
UNIQUE : impose une valeur unique (la valeurs nulles font exception)
PRIMARY KEY : déclare la clé primaire de la table. Un index est généré
automatiquement sur la ou les colonnes concernées. Les colonnes clés primaires ne
peuvent être ni nulles ni identiques (en totalité si elles sont composées de plusieurs
colonnes).
FOREIGN KEY déclare une clé étrangère entre une table enfant (child) et une table père
(parent)
CHECK impose un domaine de valeurs ou une condition simple ou complexe entre
colonnes (exemple : CHECK (note BETWEEN 0 AND 20), CHECK (grade='Copilote' OR
grade='Commandant'))
86
Définition des données : LDD => Les Contraintes
87
Définition des données : LDD => Les Contraintes
Deux tables reliées à créer
L’ordre de création des tables est important quand on définit les contraintes en
même temps que les tables (on peut différer la création ou l’activation des
contraintes, voir le chapitre 3). Il faut créer d’abord les tables « pères » puis les
tables « fils ». Le script de destruction des tables suit le raisonnement inverse.
90
Définition des données : LDD => Types de colonnes
Types de données caractères
91
Définition des données : LDD => Types de colonnes
Types de données caractères
92
Définition des données : LDD => Types de colonnes
Les types BINARY et VARBINARY sont similaires à CHAR et VARCHAR, excepté par le
fait qu’ils contiennent des chaînes d’octets sans tenir compte d’un jeu de caractères
en particulier
Les quatre types permettant aussi de stocker du texte sont TINYTEXT, TEXT,
MEDIUMTEXT et LONGTEXT. Ces types sont associés à un jeu de caractères. Il n’y a
pas de mécanisme de suppression d’espaces de fin ni de possibilité d’y associer une
contrainte DEFAULT.
93
Définition des données : LDD => Types de colonnes
Types de données numériques
94
Définition des données : LDD => Types de colonnes
Types de données numériques
ZEROFILL complète par des zéros à gauche une valeur (par exemple : soit un
INTEGER(5) contenant 4, si ZEROFILL est appliqué, la valeur extraite sera « 00004 »).
95
Définition des données : LDD => Types de colonnes
Types de données dates et heures
96
Définition des données : LDD => DESCRIBE ou DESC
DESCRIBE Pilote;
Les clés primaires sont NOT NULL (désignées par PRI dans la colonne Key).
Les unicités sont désignées par UNI dans la colonne Key.
Les occurrences multiples possibles sont désignées par MUL dans la colonne Key.
Les contraintes NOT NULL nommées (définies via les contraintes CHECK)
n’apparaissent pas.
La colonne Extra indique notamment les séquences (AUTO_INCREMENT).
97
Définition des données : LDD => DESCRIBE ou DESC
DESCRIBE Pilote;
Les clés primaires sont NOT NULL (désignées par PRI dans la colonne Key).
Les unicités sont désignées par UNI dans la colonne Key.
Les occurrences multiples possibles sont désignées par MUL dans la colonne Key.
Les contraintes NOT NULL nommées (définies via les contraintes CHECK)
n’apparaissent pas.
La colonne Extra indique notamment les séquences (AUTO_INCREMENT).
98
Définition des données : LDD => Index
• Un index est associé à une table et peut être défini sur une
ou plusieurs colonnes (dites« indéxées »)
99
Définition des données : LDD => Index
La syntaxe simplifiée de création d’un index est la suivante :
100
Définition des données : LDD => Index
La syntaxe simplifiée de création d’un index est la suivante :
101
Définition des données : LDD => Index
102
Définition des données : LDD => DROP
Syntaxe simplifiée de l’instruction DROP:
Dans le processus de suppression des tables, commencer par les tables fils avant de
remonter aux tables pères, ainsi l’intégrité référentielle est respectée et aucune erreur n’est
signalée pour cause de violation de contrainte.
103