Introduction au Langage SQL et DML
Introduction au Langage SQL et DML
Lilia SFAXI
Chapitre 3
Le Langage SQL
2
Chp3 - Le Langage SQL
PRÉSENTATION DE SQL
3
SQL: Structured Query Language
Présentation de SQL
4
SQL: Un peu d’histoire
Présentation de SQL
• 1977 : Création du langage SEQUEL (Structured English Query
Language)
▪ SEQUEL évolue pour devenir SQL, mais la prononciation en anglais reste la
même
• 1981: IBM sort sa première version de SQL
• 1986: Le premier standard SQL (SQL-1) de ISO (International Standard
Organization) apparaît
• 1992: SQL2 (support amélioré de l’intégrité) —> le plus commun
• 1999: SQL3 (ajout des extensions objet, triggers, etc.)
• 2003: Introduction des fonctions pour la manipulation XML, etc.
• SQL est à présent implémenté par les vendeurs de SGBDR les plus
connus (Oracle, IBM DB2, Microsoft SQL Server, MySQL, Sybase, etc.)
5
Quelques Remarques
Présentation de SQL
• SQL est intégré dans les langages de programmation tels que C, Java
ou PL/SQL.
6
Sous-Ensembles de SQL
Présentation de SQL
7
Sous-Ensembles de SQL
Présentation de SQL
8
Types de Données
Présentation de SQL
9
Chp3 - Le Langage SQL
10
Définition
DML: Data Manipulation Language
• Instructions principales
▪ INSERT INTO: Insertion des données
▪ SELECT: Affichage/Sélection des données
▪ UPDATE: Modification des données
▪ DELETE: Suppression des données
11
À vous de jouer!
Base de données: ClassicModels
12
DML: Data Manipulation Language
13
INSERT INTO
Insert, delete & Update
• La commande INSERT INTO permet d'ajouter un ou plusieurs Tuples à une table.
• Sa syntaxe est la suivante:
14
INSERT INTO: Exemples
Insert, delete & Update
UsedCar ;
15
DELETE
Insert, delete & Update
16
UPDATE
Insert, delete & Update
[WHERE condition]
17
À vous de jouer!
Insert, delete & Update
employeeNumber: 2000
lastName: Doe
f rstName: John
extension: x222
email: [Link]@[Link]
off ceCode: 2
reportsTo: 1143
LA COMMANDE SELECT
19
SELECT: Définition
SELECT
• La commande SELECT permet de sélectionner plusieurs tuples d’une ou
plusieurs tables
• Sa syntaxe est la suivante:
20
-
SELECT: Paramètres
SELECT
21
SELECT: Exemples
SELECT
22
Clause WHERE
SELECT
23
Prédicats (1)
SELECT
24
Prédicats (2)
SELECT
• Types de prédicats:
▪ Comparaison: =, !=, >, >=, <, <= (valide pour INTEGER, FLOAT, CHAR, VARCHAR and
DATE)
▪ Test d’intervalles: permet de tester si la valeur d’un terme est incluse entre deux
valeurs constantes (BETWEEN)
▪ Comparaison de texte: pour tester si un terme de type chaîne contient une ou
plusieurs sous-chaînes (LIKE)
o Il est possible d’utiliser des wildcards (% remplace plusieurs caractères, _ remplace
un seul caractère)
▪ Test de nullité: qui permet de tester si un terme a une valeur nulle, ce qui signifie que sa
valeur est inconnue ou que le champ n'a pas été rempli (IS NULL)
▪ Test d’appartenance: qui permet de tester si la valeur d'un terme appartient à une liste de
valeurs constantes (IN)
25
Exemples de Prédicats (1)
SELECT
• Q1: Afficher les tuples dont la puissance (power) est inférieure ou égale à
6 chevaux, ou dont le prix est supérieur ou égal à 10.000 €.
26
<
=
>
=
Exemples de Prédicats (2)
SELECT
• Q2: afficher les tuples de la table CAR dont la puissance n'est pas égale à
6 chevaux.
27
Exemples de Prédicats (3)
SELECT
• Q3: afficher les tuples de la table CAR dont la marque commence par
"Ren", dont la couleur est noire, bleue ou jaune et dont le prix est connu.
28
À vous de jouer!
Commande SELECT
29
Agrégation (1)
SELECT
30
Agrégation (2)
SELECT
31
Exemples d’Agrégations (1)
SELECT
32
Exemples d’Agrégations (2)
SELECT
33
Exemples d’Agrégations (3)
SELECT
34
À vous de jouer!
Agrégations
35
Group BY (1)
SELECT
36
Group BY (2)
SELECT
37
Exemples de GROUP BY (1)
SELECT
• Q1: Quelle est la somme des prix des voitures par puissance dans la table
CAR ?
Power SUM (price)
SELECT power, SUM(price) FROM car 5 23500
GROUP BY power; 6 13000
7 15250
38
Exemples de GROUP BY (2)
SELECT
• Q2: Quelle est la somme des prix des voitures selon la puissance dans la
table CAR (limiter l'affichage aux partitions contenant au moins 2
éléments) ?
Power SUM (price)
SELECT power, SUM(price) FROM car
5 23500
GROUP BY power HAVING COUNT(*) > 1;
7 15250
39
Group BY avec ROLLUP
SELECT
40
À vous de jouer!
Group By
2. Calculer les revenus des ventes réalisées pour les produits dont le total
des ventes a dépassé 1100 unités (table orderDetails).
41
Sémantique d’Agrégation et de Groupement
SELECT
42
Sémantique d’Agrégation et de Groupement
SELECT
43
>
=
Sémantique d’Agrégation et de Groupement
SELECT
44
>
=
Sémantique d’Agrégation et de Groupement
SELECT
45
>
=
Sémantique d’Agrégation et de Groupement
SELECT
SELECT power, SUM(price) FROM car Power Registration Brand Color Price
7 15 250
requête SELECT et afficher le résultat
46
>
=
SELECT: Autres Opérations
SELECT
• Calcul sur des colonnes
▪ Il est possible d’effectuer des calcul sur des colonnes en utilisant:
o Des constantes
o Des noms de champs
o Des opérateurs: +, -, *, /, div, mod, etc.
o Des fonctions: sin, exp, etc.
• Exemple:
SELECT registration, price * 1.19 FROM car ;
47
SELECT: Autres Opérations
SELECT
• (Re)Nommage d’une colonne
▪ Il est possible de (re)nommer une colonne dans une requête SELECT en
utilisant le mot clef AS.
• Exemple:
48
SELECT: Autres Opérations
SELECT
• Tri
▪ Il est possible de trier les résultats d’un ou plusieurs attributs par
ordre ascendant (par défaut) ou descendant en utilisant le mot clef
ORDER BY.
SELECT <expression> FROM <table> ORDER BY
<colonne> [DESC | ASC] ;
• Exemple:
SELECT registration, price FROM car ORDER BY
price DESC;
49
Exemple de ORDER BY
SELECT
• Q: Affiche tous les Tuples de la table CAR triés sur l'attribut Puissance par
ordre décroissant, puis sur l'attribut Couleur (ordre alphabétique) par
ordre croissant. Registration Brand Color Power Price
50
À vous de jouer!
SELECT: Autres Opérations
51
DML: Data Manipulation Language
OPÉRATEURS ET FONCTIONS
52
Fonctions et Opérateurs Numériques
Opérateurs et Fonctions
• Plusieurs fonctions et opérateurs numériques sont supportés par SQL
▪ Diffèrent d’un SGBD à un autre
▪ Pour MYSQL, en plus des opérateurs classiques (+, -, *, /), plusieurs autres :
o MOD ou % : Modulo
o DIV: Division entière
o ABS() : valeur absolue
o CEIL() ou CEILING(): Retourne la plus petite valeur entière non inférieure à
l’argument
o FLOOR(): Retourne la plus grande valeur entière non supérieure à l’argument
o POW() ou POWER(): Retourne l'argument élevé à la puissance spécifiée
o …
▪ La liste exhaustive se trouve ici: [Link]
[Link]
53
Fonctions et Opérateurs Numériques
Opérateurs et Fonctions
SELECT
price,
price / 3 AS ‘Division Std’, Price Division Std Division Reste
price DIV 3 AS ‘Division’, 10 000 3333.3333 3333 1
MOD(price, 3) AS ‘Reste’
5 250 1750.0000 1750 0
FROM car
WHERE power = 7;
54
Fonctions et Opérateurs pour Chaînes de Caractères
Opérateurs et Fonctions
55
Fonctions et Opérateurs pour Chaînes de Caractères
Opérateurs et Fonctions
SELECT
Text
concat(‘The car ‘, registration,
‘ is ‘,lower(color)) AS text The car 123ABC75 is red
FROM car The car 156AMN86 is blue
WHERE power = 7;
56
Fonctions et Opérateurs pour Date et Heure
Opérateurs et Fonctions
57
Fonctions et Opérateurs pour Date et Heure
Opérateurs et Fonctions
SELECT
concat(‘The car ‘, num_vehicule,
‘ was bought on ‘,dayname(date),’, ’,
monthname(date),
‘ ‘,day(date),’, ’,year(date), ‘ - Text
58
Fonctions et Opérateurs de Contrôle de Flux
Opérateurs et Fonctions
• Ces fonctions et opérateurs permettent de réaliser des tests sur les
valeurs des objets dans les requêtes SQL.
• On distingue principalement quatre (4) fonctions
▪ CASE: Opérateur case
CASE <val> WHEN <val_comp> THEN <res>
[WHEN <val_comp> THEN <res> ] [ELSE <res> ]
END
▪ IF(exp1, exp2, exp3): si exp1 est vraie, retourne exp2, sinon retourne
exp3
▪ IFNULL(exp1, exp2): si exp1 est nulle, retourne exp2, sinon retourne
exp1
▪ NULLIF(exp1, exp2): retourne NULL si exp1 = exp2
59
.
.
.
Fonctions et Opérateurs de Contrôle de Flux
Opérateurs et Fonctions
Num_proprio Année
SELECT 1000 1989
num_proprio, IFNULL(year(date),’Année 1500 1996
non déf nie’) AS année 1000 1991
FROM achat 1350 Année non définie
1500 1991
Alain?
SELECT Alain
CASE num_proprio WHEN 1000 THEN ‘Alain’ Pas Alain
ELSE ‘Pas Alain’ END AS ‘Alain?’ Alain
FROM achat Pas Alain
Pas Alain
60
i
Fonction ISNULL() vs Opérateur IS NULL
Opérateurs et Fonctions
• Il existe deux façons de vérifier si un objet dans la base a une valeur nulle:
▪ La fonction isnull(obj) -> retourne 1 si l’objet est nul, 0 sinon
▪ Il est recommandé d'utiliser IS NULL au lieu de la fonction isnull() dans un prédicat (tel
que la clause WHERE), car la première utilise une recherche d'index alors que la seconde
effectue un balayage complet des enregistrements.
o Utilisez la fonction isnull() dans les requêtes sélectionnées, par exemple :
SELECT registration, isnull(brand) AS ‘No Brand Defined’ FROM car;
61
À vous de jouer!
Opérateurs et Fonctions
62
DML: Data Manipulation Language
JOINTURES
63
JOIN: Définition
Jointures
• Une jointure entre deux tables retourne toutes les combinaisons de
leurs tuples qui remplissent certaines conditions spécifiées
• Sa syntaxe est la suivante :
64
JOIN: Exemple
Jointures
Car
• Considérons les tables ci-après: Registration Brand Color Power Price
≡
Registration Brand Color SELECT registration, [Link], color
FROM car AS c, brand AS b
123ABC75 Renault Red
WHERE [Link] = [Link]
123ABC92 Peugeot Black
≡
956BZD59 Peugeot Yellow
SELECT registration, brand, color
156AMN86 Renault Blue FROM car JOIN brand
USING (brand);
65
Sémantique de Jointure
Jointures
SELECT R.A A
FROM R,S Résulat 3
WHERE R.A = S.B;
3
R Projection
A
A B C
1
1 2 3
3
1 3 4 A B C
Produit Cartésien 1 3 5 Sélection 3 3 4
S
B C 3 2 3 3 3 5
2 3 3 3 4
3 4 3 3 5
3 5
66
Opérateurs de Jointure (1)
Jointures
• Considérons trois tables, ayant une colonne commune A:
R S
T
SELECT * SELECT *
FROM R,S,T FROM R,S,T
WHERE R.A = S.A; WHERE R.A S.A;
R S R S
T T
67
<
>
Opérateurs de Jointure (2)
Jointures
SELECT * SELECT *
FROM R,S,T
R S FROM R,S,T
R S
WHERE R.A = S.A WHERE R.A S.A
OR R.A = T.A; T AND R.A T.A; T
SELECT * R S SELECT * R S
FROM R,S,T FROM R,S,T
WHERE R.A = S.A T WHERE R.A = T.A T
AND R.A = T.A; AND R.A S.A;
SELECT * SELECT *
FROM R,S,T R S FROM R,S,T R S
WHERE NOT (R.A = S.A WHERE NOT (R.A = S.A
AND R.A = T.A); T OR R.A = T.A T
OR S.A = T.A);
68
<
<
>
>
<
>
Types de Jointure (1)
Jointures
• Cross Join : Jointure sans conditions (produit cartésien)
R S
SELECT *
FROM R,S;
• Inner Join : Retourne les tuples combinés des deux tables dont les valeurs
correspondent à la condition de jointure. R S
SELECT *
FROM R INNER JOIN S
WHERE [Link] = [Link];
69
Types de Jointure (2)
Jointures
• Left Join : Retourne les tuples combinés des deux tables dont les valeurs correspondent à la
condition de jointure, ainsi que ceux de la table de gauche qui ne se trouvent pas dans la
table de droite. R S
SELECT *
FROM R LEFT JOIN S X
WHERE [Link] = [Link]; X
• Right Join : Retourne les tuples combinés des deux tables dont les valeurs correspondent à la
condition de jointure, ainsi que ceux de la table de droite qui ne se trouvent pas dans la table
R S
de gauche.
SELECT *
FROM R RIGHT JOIN S
X
WHERE [Link] = [Link];
X
70
Types de Jointure (3)
Jointures
• Full Outer Join (non supportée par MySQL) : Retourne:
▪ les tuples combinés des deux tables dont les valeurs
correspondent à la condition de jointure,
▪ ceux de la table de gauche qui ne se trouvent pas dans la table
de droite.
▪ ceux de la table de droite qui ne se trouvent pas dans la table
de gauche. R S
SELECT *
FROM R FULL OUTER JOIN S
X X
WHERE [Link] = [Link];
X X
71
Types de Jointure (4)
Jointures
R S
SELECT *
FROM R NATURAL JOIN S;
72
À vous de jouer!
Jointures
• Tester tous les types de jointures (inner, right, left, natural) sur les
tables Customers et Payments de la base de données classicModels.
73
DML: Data Manipulation Language
REQUÊTES IMBRIQUÉES
74
Définition
Requêtes Imbriquées
75
Exemple
Requêtes Imbriquées
• Q: Afficher les numéros des voitures dont le prix est inférieur au prix
moyen de toutes les voitures de la base de données.
123ABC92
WHERE price <
698KLM45
(SELECT AVG(price) FROM car);
156AMN86
AVG = 8625
76
Prédicats
Requêtes Imbriquées
77
Exemple avec Prédicats
Requêtes Imbriquées
Car
78
À vous de jouer!
Requêtes Imbriquées
79
DML: Data Manipulation Language
OPÉRATEURS ENSEMBLISTES
80
Opérateurs Ensemblistes: Définition
Opérateurs Ensemblistes
81
INTERSECT
Opérateurs Ensemblistes
82
UNION
Opérateurs Ensemblistes
83
EXCEPT
Opérateurs Ensemblistes
84
Opérateurs Ensemblistes : Exemple
Opérateurs Ensemblistes
Car
• Considérons les tables ci-après: Registration Brand Color Power Price
• Q: Afficher tous les Tuples de la table CAR dont la puissance est égale à 5 ou 7
chevaux.
Registration Brand Color Power Price
SELECT * FROM car WHERE power = 5;
UNION
123ABC75 Renault Red 7 10 000
SELECT * FROM car WHERE power = 7;
123ABC92 Peugeot Black 5 2 500
85
Opérateurs Ensemblistes : Exemple (2)
Opérateurs Ensemblistes
Car
• Considérons les tables ci-après: Registration Brand Color Power Price
• Q: Afficher les QG des marques qui produisent des voitures Rouges et Vertes.
{
SELECT headquarters FROM car, brands
E1 WHERE [Link] = [Link] AND color=“Red”
Headquarters
INTERSECT
{
Paris SELECT headquarters FROM car, brands
E2 WHERE [Link] = [Link] AND color=“Green”;
86
Opérateurs Ensemblistes : Solution
Opérateurs Ensemblistes
87
À vous de jouer!
Opérateurs Ensemblistes
• Donner les noms (uniques, sans redondance) des produits qui ont été
commandés en février 2003 ou en juillet 2004:
88
Chp3 - Le Langage SQL
89
DDL: Définition
DDL: Data Definition Language
• C’est l’ensemble des commandes SQL qui peuvent être utilisées pour définir le schéma de la
base de données
• Utilisé pour créer et modifier la structure des objets de la base de données
▪ On parle ici de la structure, pas des données.
▪ Un objet de la base peut être: une table, un indexe, une fonction, une vue, une procédure
stockée ou un déclencheur
• Commandes DDL:
▪ CREATE : Créer la base de données ou ses objets.
▪ DROP : Supprimer des objets de la base de données.
▪ ALTER : Modifier la structure de la base de données.
▪ TRUNCATE : Supprimer tous les enregistrements d'une table, y compris tous les espaces alloués
aux enregistrements.
▪ COMMENT : Ajouter des commentaires au dictionnaire de données.
▪ RENAME : Renommer un objet existant dans la base de données.
90
DDL: Data Description Language
COMMANDES DE BASE
91
Structure d’une Table
Commandes de Base
• Les tables peuvent êtres créées à n’importe quel moment, même lorsque
des utilisateurs utilisent la base de données.
• Vous n’avez pas besoin de spécifier la taille de la table. Cette taille est
limitée par l’espace alloué à la base de données.
92
Règles de Nommage d’une Table
Commandes de Base
• Les noms des tables et des colonnes doivent suivre les règles de
nommage suivantes :
▪ Commencer par une lettre
▪ Avoir une taille entre 1 et 30 caractères
▪ Contenir uniquement les caractères : A-Z, a-z, 0-9, _, $ et #
▪ Ne pas avoir un nom d’un mot réservé par le SGBD (select par exemple)
▪ Pas de duplication de nom pour un autre objet du même utilisateur
• Remarques :
▪ Les noms ne sont pas sensibles à la casse.
▪ Les noms devraient être significatifs.
93
SHOW, USE & DESCRIBE
Commandes de Base
• La commande SHOW DATABASES; permet d’afficher la
liste des bases de données existantes dans votre
serveur MySQL.
▪ Elle va afficher un résultat semblable au suivant dans
MySQL Workbench
94
CREATE DATABASE
Commandes de Base
• La commande CREATE DATABASE permet de créer une nouvelle base de données dans MySQL.
nom_col type_col
[NOT NULL | NULL]
[DEFAULT {literal | (expr)} ]
[AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY]
…
• Syntaxe des colonnes:
97
Exemple de Création (1)
Commandes de Base
98
Exemple de Création (2)
Commandes de Base
Registration Brand Color Power Price
• Considérons la table Car ci-après:
123ABC75 Renault Red 7 10 000
123ABC92 Peugeot Black 5 2 500
123ATT77 Rover Blue 6 13 000
698KLM45 Citroën Green 5 5 000
956BZD59 Peugeot Yellow 5 16 000
156AMN86 Renault Blue 7 5 250
• Q2: Créer la table car, en spécifiant que “registration” représente la clef primaire, et que
le prix doit être non nul et supérieur à 1000.
99
ALTER TABLE
Commandes de Base
• La commande ALTER TABLE permet de changer la structure d’une table en:
▪ Ajoutant ou supprimant des colonnes
▪ Créant ou détruisant des indexes
▪ Changeant le type de colonnes existantes
▪ Renommant la table ou des colonnes
▪ Changeant le moteur de stockage
▪ etc.
• Syntaxe simplifiée * :
101
Exemple de Modification (2)
Commandes de Base
102
l
DROP, TRUNCATE et RENAME
Commandes de Base
• La commande DROP <OBJET> <nom_obj> permet de supprimer un objet :
▪ DROP DATABASE <nom_db>: supprime une base de données et tout son contenu.
▪ DROP TABLE <nom_table>: supprime une table et tous ses enregistrements.
▪ DROP VIEW <nom_view>: supprime une vue.
▪ Etc.
• La commande TRUNCATE TABLE <nom_table> permet de vider une table de tout son
contenu.
▪ Similaire à DELETE, mais est classée comme commande DDL plutôt que DML, car elle
supprime la table et la recrée, plutôt que de supprimer les lignes une par une, ce qui est
plus rapide.
• La commande RENAME TABLE <nom_table> permet de renommer une table
▪ Similaire à ALTER <table> RENAME TO <nouv_nom_table>
103
Exemple de DROP, TRUNCATE et RENAME
Commandes de Base
104
Exemple de DROP, TRUNCATE et RENAME (2)
Commandes de Base
105
À vous de jouer!
Commandes DDL de base
2. Créer la table Car, en spécifiant que Registration représente la clef primaire, et que le prix doit être non
nul et supérieur à 1000.
3. Insérer quelques enregistrements en vérifiant que les contraintes sont bien respectées
106
DDL: Data Description Language
CLEFS ÉTRANGÈRES
107
Clefs Étrangères: Définition
Clefs Étrangères
• Une clef étrangère (Foreign Keys) permet d'établir des références croisées entre des données
connexes entre les tables
• Les contraintes de clé étrangère (Foreign Key Constraints), aident à maintenir la cohérence des
données connexes.
• Une relation de clé étrangère implique une table parent, qui détient les valeurs initiales de la
colonne, et une table enfant dont les valeurs de colonne font référence aux valeurs de la colonne
parent.
▪ Une contrainte de clé étrangère est définie sur la table enfant.
<ref
RESTRICT | CASCADE | SET NULL | NO ACTION
108
>
:
.
.
.
Actions Référentielles
Clefs Étrangères
• Lorsqu'une opération UPDATE ou DELETE affecte une valeur de clé dans la table
parent qui a des lignes correspondantes dans la table enfant, le résultat dépend
de l'action référentielle spécifiée par les sous-clauses ON UPDATE et ON DELETE de
la clause FOREIGN KEY.
▪ CASCADE: supprime ou met à jour automatiquement les rangées correspondantes
dans la table enfant
▪ SET NULL: définit la ou les colonnes de la clé étrangère dans la table enfant à NULL
▪ RESTRICT | NO ACTION: Rejette l'opération de suppression ou de mise à jour pour la
table parente. (Par défaut)
• MySQL rejette toute opération INSERT ou UPDATE qui tente de créer une valeur de clé
étrangère dans une table enfant s'il n'existe aucune valeur de clé candidate
correspondante dans la table parent.
109
Restrictions
Clefs Étrangères
• Nous listons ci-après les restrictions les plus communes des clefs
étrangères:
▪ Les tables parent et enfant doivent utiliser le même moteur de
stockage.
▪ Les colonnes correspondantes de la clef étrangère et de la clef
référencée doivent avoir des types de données similaires (de même
taille!).
▪ Une colonne ne peut pas avoir une référence de clef étrangère vers elle-
même.
▪ MySQL requiert des index sur les clefs étrangères et les clefs
référencées afin que les vérifications des clefs étrangères soient
rapides et ne nécessitent pas de balayage de la table.
110
Exemple de Clefs Étrangères
Clefs Étrangères
Car
• Considérons les tables ci-après: Registration Brand Color Power Price
111
Exemple de Clefs Étrangères
Clefs Étrangères
Car
• Considérons les tables ci-après: Registration Brand Color Power Price
• Q2: En supposant que les deux tables sont déjà créées, ajouter la contrainte de
clef étrangère adéquate, en vous assurant que la suppression d’une marque de
la table Brands supprimera automatiquement toutes les voitures appartenant à
cette marque.
112
À vous de jouer!
Commandes DDL de base
• Modifier la table Car pour créer la relation entre les deux tables.
113