SlideShare une entreprise Scribd logo
1  sur  77
Module Base de données
Travaux Pratiques
Yahya Benkaouz
y.benkaouz@um5r.ac.ma
Departement Informatique
Objectifs
• Maitriser les concepts de base du langage SQL.
• Se familiariser avec le SGBDR MySQL.
• Etudier en détail les instructions de base de SQL.
• Maitriser la déclaration, la manipulation, et l’interrogation des tables.
2
Plan
• Concepts de base
• Définition de données
• Evolution d’un schéma
• Manipulation de données
• Interrogation des données
3
CONCEPTS DE BASE
4
Base de données
• Une collection d’informations organisées
• afin d’être facilement consultables, gérables et mises à jour.
• Elles sont utilisées dans un grand nombre d’entreprises pour
• stocker, manipuler et analyser les données.
• Au sein d’une BD relationnelle,
• l'information est organisée dans des tableaux à deux dimensions appelés des relations ou tables.
• Une BD relationnelle consiste en une ou plusieurs relations.
• Les lignes de ces relations sont appelées des nuplets ou enregistrements.
• Les colonnes sont appelées des attributs.
5
Base de données
• Les BD sont utilisées par de nombreuses entreprises dans toutes les industries.
• Compagnies aériennes pour gérer les réservations.
• Les enregistrements médicaux dans les hôpitaux.
• Les agences gouvernementales.
• Les universités.
• …
6
SGBD
• SGBD:
• Un système de gestion de base de données.
• Un ensemble de logiciels qui manipulent le contenu des bases de données.
• Ex: IBM DB2, Oracle Database, MySQL, PostgreSQL et Microsoft SQL Server
• Objectif: Garantir la cohérence du contenu de le BD
BD
SGBD
• Assure un accès facile aux données
• Accès simultanés de plusieurs utilisateurs
• Manipulation de données faciles
SGBDR: SGBD implémentant la théorie des BD relationnelles => Garantir l’intégrité des données
7
SGBD
• MySQL:
• L’un des SGBD les plus populaires.
• Il est distribué sous double licence, une licence publique générale GNU et une propriétaire.
• Il est développé, distribué et pris en charge par Oracle Corporation.
• Les bases de données MySQL sont des bases de données relationnelles.
8
SQL
• SQL: Structured Query Language.
• “Un langage informatique normalisé servant à exploiter des bases de données
relationnelles”. wikipedia
9
SQL
Langage de manipulation des données
(INSERT, UPDATE, DELETE)
Langage de contrôle
Langage de définition des données
(CREATE, ALTER, DROP)
de données
(GRANT, REVOKE)
de transactions
(COMMIT, DRAWBACK)
SQL
• Il comprend trois domaines :
• Langage de définition des données
• permet de créer et de modifier l'organisation des données dans la base de données
• Langage de manipulation des données
• permet de rechercher, d'ajouter, de modifier ou de supprimer des données dans les bases de
données relationnelles.
• Langage de contrôle
• Contrôle de transaction: commencer et terminer des transactions
• Contrôle de donnée: autoriser ou interdire l'accès à certaines données à certaines personnes
10
SQL
Insertion des commentaires:
• Sur une ligne en utilisant --
• Sur plusieurs lignes entre /* et */
• Nomenclature:
• Tous les noms d’objets (Table, attributs,….) doivent respecter les règles suivantes:
• Commencer par une lettre
• Ne pas contenir un espace
• Ne pas dépasser 128 caractères parmi: Lettres non accentués, chiffres, @, $, #, _
11
DEFINITION DES DONNEES
12
Définitions de données
Base de
données
Création
Suppression
Tables
Création
Modification
Suppression
13
Création d’une base de données
• Pour créer une base de données qui sera appelé “ma_base” il suffit d’utiliser la requête suivante
qui est très simple:
• Avec MySQL, si une base de données porte déjà ce nom, la requête retournera une erreur. Pour
éviter d’avoir cette erreur, il convient d’utiliser la requête suivante pour MySQL:
• L’option IF NOT EXISTS permet juste de ne pas retourner d’erreur si une base du même nom existe
déjà. La base de données ne sera pas écrasée.
CREATE DATABASE ma_base;
CREATE DATABASE IF NOT EXISTS ma_base;
14
• En SQL, la commande DROP DATABASE permet de supprimer totalement une base de données et tout ce
qu’elle contient.
• Pour supprimer la base de données “ma_base”, la requête est la suivante:
• Par défaut, si le nom de base utilisé n’existe pas, la requête retournera une erreur. Pour éviter d’obtenir cette
erreur si vous n’êtes pas sûr du nom, il est possible d’utiliser l’option IF EXISTS.
• La syntaxe sera alors la suivante:
Suppression d’une base de données
DROP DATABASE ma_base;
DROP DATABASE IF EXISTS ma_base;
15
Création de tables
• Une table est une entité qui est contenu dans une base de données pour stocker des données ordonnées
dans des colonnes.
• La création d’une table sert à définir les colonnes et le type de données qui seront contenus dans chacun
des colonne (entier, chaîne de caractères, date, valeur binaire …).
• La syntaxe générale pour créer une table est la suivante :
CREATE TABLE nom_de_la_table (
colonne1 type_donnees,
colonne2 type_donnees,
colonne3 type_donnees,
colonne4 type_donnees
);
16
Création de tables
• La syntaxe générale pour créer une table est la suivante :
• Type de données:
17
CREATE TABLE nom_de_la_table (
colonne1 type_donnees,
colonne2 type_donnees,
colonne3 type_donnees,
colonne4 type_donnees
);
Numériques Textuelles Temporelles
TINY INT, SMALL INT, INT,
BIGINT, INTEGER
FLOAT, REAL, DOUBLE
DECIMAL
CHAR(n)
VARCHAR(n)
TEXT
ENUM
SET
DATE
TIME
DATETIME
YEAR
Création de tables
• Nombres entiers:
18
Numériques Nombre d’octets Minimum Maximum
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 9223372036854775807
Création de tables
• Nombres entiers:
• Possibilité d’indiquer qu’un entire est UNSIGNED
- Pour les TINYINT, on pourra par exemple aller de 0 à 255
• Limiter la taille à l’affichage et l’attribut ZEROFILL
- Préciser le nombre de chiffres minimum à l'affichage d'une colonne de type INT
- Ex: INT(3)
- Même avec un INT(3), nous pouvons avoir la valeur 29003
- Le caractère ajouté par défaut est espace
- L’attribut ZEROFILL ajoute des zéros à gauche
du nombre lors de l’affichage
19
INT(4) ZEROFILL
Nombre stocké Nombre affiché
45 0045
4156 4156
785164 785164
Création de tables
• Nombres décimaux :
• Cinq mots-clés permettent de stocker des nombres décimaux dans une
colonne: DECIMAL, NUMERIC, FLOAT, REAL et DOUBLE
• NUMERIC et DECIMAL sont équivalents et acceptent deux paramètres : la précision et l'échelle.
• La précision définit le nombre de chiffres significatifs stockés, donc les 0 à gauche ne comptent pas.
• En effet, 0024 est équivalent à 24. Il n'y a donc que deux chiffres significatifs dans 0024.
• L'échelle définit le nombre de chiffres après la virgule.
• Dans un champ DECIMAL(5,3), on peut donc stocker des nombres de 5 chiffres significatifs au maximum, dont 3
chiffres sont après la virgule.
• Par exemple : 12.354, -54.258, 89.2 ou -56.
• DECIMAL(4) est DECIMAL(4, 0) sont deux écritures équivalentes.
• MySQL ne respecte pas toujours cette règle, et utilise parfois l’octet du signe (-) pour stocker les chiffres.
20
Création de tables
• Nombres décimaux :
• FLOAT, DOUBLE et REAL:
• Le mot-clé FLOAT peut s'utiliser sans paramètres, auquel cas quatre octets sont utilisés pour
stocker les valeurs de la colonne.
• Il est possible de spécifier une précision et une echelle d’un FLOAT.
• Quant à REAL et DOUBLE, ils ne supportent pas de paramètres.
• DOUBLE est normalement plus précis que REAL (stockage dans 8 octets, contre stockage
dans 4 octets)
• Mais ce n'est pas le cas avec MySQL qui utilise 8 octets dans les deux cas
21
Création de tables
• Nombres décimaux :
• Valeurs exactes vs valeurs approchées:
• Les nombres stockés en tant que NUMERIC ou DECIMAL sont stockés sous forme de chaînes
de caractères. => Valeurs exactes qui sont stockées
• Les types FLOAT,DOUBLE et REAL sont stockés sous forme de nombres. => Valeurs
approchées qui sont stockées (56,678900000000000001 au lieu de 56,6789)
• S'il est nécessaire de conserver la précision exacte de vos données (données bancaires),
• il est donc conseillé d'utiliser un type numérique à valeur exacte
22
Création de tables
• Données textuelles:
• CHAR vs VARCHAR:
• Pour stocker un texte relativement court (moins de 255 caractères), vous pouvez utiliser les
types CHAR et VARCHAR.
• Ces deux types s'utilisent avec un paramètre qui précise la taille que peut prendre votre texte (entre 1
et 255).
• Un CHAR(x) stockera toujours x caractères, en remplissant si nécessaire le texte avec des espaces vides
pour le completer.
• Un VARCHAR(x) stockera jusqu'à x caractères (entre 0 et x), et stockera en plus en mémoire la taille du
texte stocké.
23
Création de tables
• Données textuelles:
• CHAR vs VARCHAR:
• Les caractères accentués occupent deux octets en mémoire.
• Il est donc possible, pour un CHAR(5), d'occuper plus de 5 octets en mémoire (mais impossible d'y stocker plus que 5
caractères).
24
Texte CHAR(5)
Mémoire
requise
VARCHAR(5)
Mémoire
requise
'' ' ' 5 octets '' 1 octet
'tex' 'tex ' 5 octets 'tex' 4 octets
'texte' 'texte' 5 octets 'texte' 6 octets
'texte trop long' 'texte' 5 octets 'texte' 6 octets
Création de tables
• Données textuelles:
• TEXT :
• On peut utiliser le type TEXT, ou un de ses dérivés TINYTEXT, MEDIUMTEXT ou LONGTEXT pour stocker
des textes de plus de 255 caractères.
25
Type Longueur maximale Mémoire occupée
TINYTEXT 28 octets Longueur de la chaîne + 1 octet
TEXT 216 octets Longueur de la chaîne + 2 octet
MEDIUMTEXT 224 octets Longueur de la chaîne + 3 octet
LONGTEXT 232 octets Longueur de la chaîne + 4 octet
Création de tables
• Données textuelles:
• ENUM :
• Une colonne de type ENUM est une colonne pour laquelle on définit un certain nombre de
valeurs autorisées, de type "chaîne de caractères”
• Si vous essayez d'introduire une chaîne non autorisée, MySQL stockera une chaîne vide ’’ dans le
champ.
• Pour remplir un champ de type ENUM, deux possibilités s'offrent à vous :
• soit remplir directement avec la valeur choisie (ex. "chat”) ;
• soit utiliser l'index de la valeur
26
espece ENUM('chat', 'chien')
Valeurs NULL ‘’ ‘chat’ ‘chien’
Index NULL 0 1 2
Création de tables
• Données textuelles:
• SET :
• Une colonne SET est en effet une colonne qui permet de stocker une chaîne de caractères
dont les valeurs possibles sont prédéfinies par l'utilisateur.
• La différence avec ENUM, c'est que l'on peut stocker dans la colonne plusieurs valeurs.
• On pourra stocker dans cette colonne :
• '' (chaîne vide ) ;
• 'chat';
• ‘chien' ;
• 'chat,chien’;
27
espece SET('chat', 'chien')
SET et ENUM sont des types propres à MySQL.
Création de tables
• Données temporelles:
• Quelques types temporels de MySQL : DATE, DATETIME, TIME et YEAR.
• Les vérifications faites par MySQL sont des verifications de base : le jour doit être compris entre 1 et 31
et le mois entre 1 et 12. NB: la date 30 Février est aussi acceptable.
• Date:
• Pour entrer une date, l'ordre des données est la seule contrainte.
• Il faut donner d'abord l'année (2 ou 4 chiffres), ensuite le mois (2 chiffres) , et, pour finir, le jour (2
chiffres), sous forme de nombre ou de chaîne de caractères.
• S'il s'agit d'une chaîne de caractères, n'importe quelle ponctuation peut être utilisée comme délimiteur.
28
• 'AAAA%MM%JJ'
• AAAAMMJJ (nombre)
• AAMMJJ (nombre)
• 'AAAA-MM-JJ' (c'est sous ce format-ci qu'une DATE est stockée dans MySQL)
• 'AAMMJJ'
• 'AAAA/MM/JJ'
• 'AA+MM+JJ'
Création de tables
• Données temporelles:
• DateTime :
• Ce type permet de stocker une heure, en plus d'une date.
• Pour la date, année-mois-jour, et pour l'heure, il faut donner d'abord l'heure, ensuite les
minutes, puis les secondes.
• Si l'on utilise une chaîne de caractères, il faut séparer la date et l'heure par une espace.
• Quelques exemples corrects :
29
• 'AAAA-MM-JJ HH:MM:SS' (c'est sous ce format-ci qu'un DATETIME est stocké dans
MySQL)
• 'AA*MM*JJ HH+MM+SS'
• AAAAMMJJHHMMSS (nombre)
Création de tables
• Données temporelles:
• Time :
• Il faut d'abord donner l'heure, puis les minutes, puis les seconds
• Chaque partie pouvant être séparée des autres par le caractère :
• Exemples:
30
• 'HH:MM:SS'
• 'HHH:MM:SS'
• 'MM:SS'
• 'HHMMSS'
• HHMMSS
Création de tables
• Données temporelles:
• Year :
• Un type à utiliser si besoin de stocker juste l’année.
• Il ne prend qu'un seul octet en mémoire.
• On ne peut y stocker que des années entre 1901 et 2155.
• On peut entrer une donnée de type YEAR sous forme de chaîne de caractères ou d'entiers,
avec 2 ou 4 chiffres.
31
Création de tables
• La syntaxe générale pour créer une table est la suivante :
• Pour chaque colonne, il est également possible de définir des options telles que :
• NOT NULL : empêche d’enregistrer une valeur nulle pour une colonne.
• DEFAULT : attribuer une valeur par défaut si aucune données n’est indiquée pour cette
colonne lors de l’ajout d’une ligne dans la table.
• PRIMARY KEY : indiquer si cette colonne est considérée comme clé primaire pour un index.
32
CREATE TABLE nom_de_la_table (
colonne1 type_donnees PRIMARY KEY,
colonne2 type_donnees NOT NULL,
colonne3 type_donnees DEFAULT valeur,
colonne4 type_donnees
);
Création de tables
• Exemple:
33
CREATE TABLE utilisateur (
id INT PRIMARY KEY NOT NULL,
nom VARCHAR(100),
prenom VARCHAR(100),
email VARCHAR(255),
date_naissance DATE
);
CREATE TABLE nom_de_la_table (
colonne1 type_donnees PRIMARY KEY,
colonne2 type_donnees NOT NULL,
colonne3 type_donnees DEFAULT valeur,
colonne4 type_donnees
);
Création de tables
• Clé Primaire :
• La clé primaire d'une table est une contrainte d'unicité, composée d'une ou plusieurs
colonnes.
• La clé primaire d'une ligne permet d'identifier de manière unique cette ligne dans la table.
34
CREATE TABLE nom_de_la_table (
colonne1 type_donnees,
colonne2 type_donnees,
colonne3 type_donnees,
colonne4 type_donnees,
PRIMARY KEY(colonne1) ou PRIMARY KEY(colonne1, colonne2)
);
Création de tables
• Auto-incrémentation:
• Il est possible de declarer que les valeurs d’une colonne s’auto-incrémente en utilisant le mot
clé AUTO_INCREMENT.
35
CREATE TABLE nom_de_la_table (
colonne1 type_donnees PRIMARY KEY AUTO_INCREMENT,
colonne2 type_donnees,
colonne3 type_donnees,
colonne4 type_donnees,
);
Création de tables
• Clé Etrangère :
• Les clés étrangères ont pour fonction principale la vérification de l'intégrité de votre base.
• Il est possible de declarer des clés étrangères composites.
36
CREATE TABLE nom_de_la_table (
colonne1 type_donnees,
colonne2 type_donnees,
colonne3 type_donnees,
CONSTRAINT nom_ctr FOREIGN KEY(colonne2) REFERENCES table2(colonneX)
);
Conditions:
• ColonneX doit être une clé primaire ou un index
• ColonneX et colonne2 doivent être exactement du même type
• Pour supprimer une table:
• Pour verification:
• SHOW DATABASES;
• SHOW TABLES;
• DESCRIBE ma_table;
• Autre possibilité de création de table:
Suppression d’une table
DROP TABLE ma_table;
37
CREATE TABLE ma_table LIKE autre_table ;
CREATE TABLE ma_table AS SELECT * FROM autre_table ;
Copie la structure uniquement
Copie Structure et Contenu
EVOLUTION D’UN SCHEMA
38
• Différents types de modifications sont possibles sur :
• La table
• Les Colonnes
• Les Contraintes
Modification d’une table
ALTER TABLE nom_table
Instructions;
39
Table Renommer
Colonne Ajouter / Supprimer / Modifier / Renommer
Contraintes Ajouter / Supprimer
Modification d’une table
ALTER TABLE nom_table RENAME ………; -- Renommer une table
ALTER TABLE nom_table ADD ………; -- Ajouter une colonne ou une contrainte
ALTER TABLE nom_table DROP ………; -- Supprimer une colonne ou une contrainte
ALTER TABLE nom_table CHANGE ………; -- Remplacer une colonne par une autre
ALTER TABLE nom_table MODIFY ………; -- Modifier la description d’une colonne
40
Renommer une table
• La commande à utiliser pour changer le nom d’une table est la suivante:
• Il y a plusieurs formes d’écriture de cet instruction:
41
ALTER TABLE nom_table
RENAME TO nouveau_nom;
ALTER TABLE nom_table RENAME nouveau_nom;
RENAME TABLE nom_table TO nouveau_nom;
RENAME TABLE table_1 TO nouveau_nom_1 ,
table_2 TO nouveau_nom_2 ;
Ajout et Suppression d’une colonne
• Pour l’ajout d’une colonne, on utilise la syntaxe:
• Pour la suppression d’une colonne:
• Le mot ”Column” est facultatif
42
ALTER TABLE nom_table
ADD [Column] nom_colonne type options;
ALTER TABLE nom_table
DROP [Column] nom_colonne;
Modification d’une colonne
• Pour renommer une colonne:
• Pour modifier la description d’une colonne:
43
ALTER TABLE nom_table
RENAME COLUMN nom_colonne TO nouveau_nom;
ALTER TABLE nom_table
CHANGE nom_colonne nouveau_nom Type Options;
ALTER TABLE nom_table
MODIFY nom_colonne nouveau_Type Options;
RENAME Change le nom d’une colonne uniquement
CHANGE Change le nom et/ou la définition d’une colonne
MODIFY Change la définition de la colonne et pas le nom
Manipulation des contraintes
• Pour ajouter une contrainte:
• Clé étrangère:
• Clé primaire:
44
ALTER TABLE nom_table
ADD [CONSTRAINT nom_contrainte] definition_contrainte;
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte FOREIGN KEY(…) REFERENCES …(…) ;
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte PRIMARY KEY(…); /*Le nom est inutile*/
ALTER TABLE nom_table
ADD PRIMARY KEY(…);
Le nom de la contrainte est très utile lors de la suppression de la clé étrangère
Manipulation des contraintes
• Pour supprimer une contrainte:
• Clé étrangère:
• Clé primaire:
45
ALTER TABLE nom_table
DROP CONSTRAINT nom_contrainte;
ALTER TABLE nom_table
DROP CONSTRAINT nom_contrainte;
ALTER TABLE nom_table
DROP PRIMARY KEY;
ALTER TABLE nom_table
DROP KEY nom_contrainte;
Manipulation des contraintes
• CHECK:
• Valeur par défaut:
46
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte CHECK(expr);
ALTER TABLE nom_table
ALTER nom_colonne
SET DEFAULT valeur;
ALTER TABLE nom_table
DROP CONSTRAINT nom_contrainte;
ALTER TABLE nom_table
ALTER nom_colonne
DROP DEFAULT;
MANIPULATION DES DONNEES
47
Manipulation des Données
• Opérations possibles sur les données:
• Insertion
• Suppression
• Modification
48
INSERT INTO……;
DELETE FROM……;
UPDATE ……;
Manipulation des Données
• Insertion d’enregistrements :
• Insertion en précisant une valeur pour chaque colonne de la ligne.
• Insertion en précisant les valeurs de certaines colonnes de la ligne.
49
INSERT INTO nom_table [(colonne1, colonne2,…)]
VALUES (valeur1, valeur2,…);
INSERT INTO nom_table
VALUES (valeur1, valeur2,…); /* NULL et DEFAULT sont aussi des valeurs
INSERT INTO nom_table (colonne3, colonne5)
VALUES (valeur3, valeur5);
Manipulation des Données
• Insertion d’enregistrements :
• Insertion multiple:
• Syntaxe propre à MySQL (Ne fait pas partie du langage SQL):
• + : Plus lisible
• - : Ne permet pas une insertion multiple
• - : Si on migre vers un autre SGBD, requête INSERT doivent être réecrites.
50
INSERT INTO nom_table [(colonne1, colonne2,…)]
VALUES (valeur1, valeur2,…),
(valeur1_1, valeur2_1,…),
(valeur1_2, valeur2_2,…);
INSERT INTO nom_table
SET colonne3 = valeur3, colonne5 = valeur5,…;
Manipulation des Données
• Suppression d’enregistrements :
• L’instruction permet de supprimer toutes les lignes satisfaisant la condition.
• Si aucune condition n’est spécifiée, toutes les lignes seront supprimés.
• Opérateurs supportées :
51
DELETE FROM nom_table
WHERE condition;
= <> != <
> <= >= IN
BETWEEN…AND LIKE ’…’ IS NULL IS NOT NULL
AND OR NOT XOR
Manipulation des Données
• Modification d’enregistrements :
• La modification est apportée à toutes les lignes satisfaisant la condition.
• Si aucune condition n’est spécifiée, toutes les lignes seront modifiées.
52
UPDATE nom_table
SET colonneA = valeurA, colonneB = valeurB,…
WHERE condition;
Manipulation des Données
• Importation et Exportation d’une Base de donnée:
• Exportation d’une Base de donnée:
• Importation d’une Base de donnée:
Il faut que la base de données soit créée avant l’éxecution de la commande shell.
• Execution d’un script SQL:
53
$ mysqldump –u username –p DBname > DBfilename.sql
$ mysql –u username –p DBname < DBfilename.sql
SOURCE path/DBfilename.sql
INTERROGATION DES DONNEES
54
Interrogation des Données
• Syntaxe du SELECT :
• Permet d’afficher les données de la table.
• Pour récupérer toutes les colonnes d’une table, on peut utiliser un *.
• Permet aussi d’afficher le résultat de quelques opérations.
• Les opérations peuvent être effectuées sur les données d’une table.
55
SELECT colonne1, colonne2,……
FROM nom_table;
SELECT ‘Bonjour à tous';
SELECT 1+4;
Interrogation des Données
• Syntaxe du SELECT :
• Pour éliminer les doublons:
• Restreindre les résultats à l’aide de LIMIT; Elle admet deux options:
• le nombre de lignes que l'on veut récupérer ;
• le decalage qui indique à partir de quelle ligne on récupère les résultats.
56
SELECT colonne1, colonne2,……
FROM nom_table
LIMIT nombre_de_lignes [OFFSET decalage];
SELECT DISTINCT colonne1
FROM nom_table;
SELECT *
FROM etudiant
LIMIT 10;
Interrogation des Données
• Syntaxe du SELECT :
• Pour éliminer les doublons:
• La clause ORDER BY permet d’ordonner le résultat à l’affichage.
57
SELECT colonne1, colonne2,……
FROM nom_table
ORDER BY colonne1 [DESC], colonne2 [ASC];
SELECT DISTINCT colonne1
FROM nom_table;
Interrogation des Données
• Fonctions d’agrégation :
• Ces fonctions agissent sur une colonne et renvoient un résultat unique pour toutes les lignes
sélectionnées
• Il existe plusieurs fonctions d’agrégation:
• COUNT()
• MIN()
• MAX()
• SUM()
• AVG()
• GROUP_CONCAT()
58
SELECT fct1(colonne1), fct2(colonne),…
FROM nom_table;
Interrogation des Données
• Regroupement :
• Calculer les fonctions d’agrégations selon les valeurs d’une colonne.
• Il est très utile de renommer les colonnes résultantes à l’affichage
59
SELECT fct1(colonne)
FROM nom_table
GROUP BY colonne;
SELECT colonne, fct1(colonne) AS nom_Affiché
FROM nom_table
GROUP BY colonne;
Interrogation des Données
• Regroupement :
• Pour appliquer des conditions sur le résultat d’un Regroupement.
• Il est conseillé d’utiliser la clause WHERE autant que possible.
• L’ordre des différents clauses est important.
60
SELECT fct1(colonne)
FROM nom_table
GROUP BY colonne
HAVING condition;
SELECT …
FROM …
WHERE …
GROUP BY …
HAVING …
ORDER BY …;
Interrogation des Données
• Jointure :
• Les jointures permettent d’utiliser plusieurs tables dans la même requête.
• Etant donné les deux tables :
Etudiant(CNE, nom, code_filiere*)
Filiere(Code, Intitulé, NoDept)
Quel est le résultat de la requête?
61
SELECT *
FROM Etudiant, Filiere;
Interrogation des Données
62
SELECT *
FROM Etudiant, Filiere;
CNE Nom Code_filiere
1234567 Ahmed SMI
8901234 Ali SMI
5678912 Mohammed SMA
Code Intitule NoDept
SMI Math Info 1
SMA Math Application 2
SMP Physique 3
Etudiant Filiere
CNE Nom Code_filiere Code Intitule NoDept
1234567 Ahmed SMI SMI Math Info 1
1234567 Ahmed SMI SMA Math Application 2
1234567 Ahmed SMI SMP Physique 3
8901234 Ali SMI SMI Math Info 1
8901234 Ali SMI SMA Math Application 2
8901234 Ali SMI SMP Physique 3
5678912 Mohammed SMA SMI Math Info 1
5678912 Mohammed SMA SMA Math Application 2
5678912 Mohammed SMA SMP Physique 3
Que faut il modifier dans cette requête
pour avoir des informations cohérentes ?
Interrogation des Données
63
SELECT *
FROM Etudiant, Filiere
WHERE Code_filiere = Code;
CNE Nom Code_filiere
1234567 Ahmed SMI
8901234 Ali SMI
5678912 Mohammed SMA
Code Intitule NoDept
SMI Math Info 1
SMA Math Application 2
SMP Physique 3
Etudiant Filiere
CNE Nom Code_filiere Code Intitule NoDept
1234567 Ahmed SMI SMI Math Info 1
1234567 Ahmed SMI SMA Math Application 2
1234567 Ahmed SMI SMP Physique 3
8901234 Ali SMI SMI Math Info 1
8901234 Ali SMI SMA Math Application 2
8901234 Ali SMI SMP Physique 3
5678912 Mohammed SMA SMI Math Info 1
5678912 Mohammed SMA SMA Math Application 2
5678912 Mohammed SMA SMP Physique 3
Interrogation des Données
• Jointure :
• Syntaxe:
• Colonne_A, Colonne_B sont les colonnes sur lesquelles se fait la jointure.
• Les clauses habituelles tel que GROUP BY, ORDER BY,…. sont toujours utilisables.
• Une autre syntaxe possible est la suivante:
• INNER indique le fait qu'il s'agit d'une jointure interne, mais c'est facultative.
• La clause ON sert à préciser la condition de la jointure 64
SELECT colonne,…,… ou * ou fct(…)
FROM TableA, TableB
WHERE ColonneA = ColonneB;
SELECT colonne,…,… ou * ou fct(…)
FROM TableA INNER JOIN TableB ON ColonneA = ColonneB;
Interrogation des Données
• Jointure :
• Il est possible d’utiliser plusieurs conditions pour lier les deux tables et aussi différentes opérateurs.
• Il est possible de faire plusieurs jointures dans la même requête. Dans ce cas il faudra spécifier les
conditions pour les tables deux à deux.
65
SELECT colonne,…,… ou * ou fct(…)
FROM TableA, TableB
WHERE ColonneA=ColonneB (logicOp) ColonneA2 (=,>,<,…) ColonneB2;
SELECT colonne,…,… ou * ou fct(…)
FROM TableA, TableB, TableC
WHERE ColonneA = ColonneB AND ColonneB2 = ColonneC;
SELECT colonne,…,… ou * ou fct(…)
FROM TableA
JOIN TableB ON ColonneA = ColonneB
JOIN TableC ON ColonneB2 = ColonneC;
Interrogation des Données
• Jointure :
• Il se peut qu’on a des colonnes portant le même nom dans les deux tables.
• Dans une telle situation, il faut indiquer d’où provient chaque colonne.
66
SELECT colonne,…,… ou * ou fct(…)
FROM TableA, TableB
WHERE TableA.Colonne = TableB.Colonne;
Interrogation des Données
• Jointure :
• Si la requête est trop longue, utiliser des alias.
67
SELECT …
FROM TableA AS TA, TableB TB
WHERE TA.Colonne = TB.Colonne;
SELECT …
FROM TableA JOIN TableB USING(Colonne);
SELECT …
FROM TableA NATURAL JOIN TableB ;
Interrogation des Données
• Jointure interne et Jointure externe :
• Les jointures que nous avons vu jusqu’à maintenant sont des jointures internes.
• Une jointure interne exige de ne retourner que les lignes respectant la condition de jointure.
• Une jointure externe permet de retourner également les enregistrements pour lesquelles il n’y a pas de
correspondence dans l’autre table.
• Le mot clé OUTER, comme le INNER est facultatif.
68
SELECT …
FROM TableA LEFT OUTER JOIN TableB ON ColonneA = ColonneB;
SELECT …
FROM TableA RIGHT OUTER JOIN TableB ON ColonneA = ColonneB;
Interrogation des Données
• Jointure interne et Jointure externe :
69
INNER JOIN
FULL JOIN
LEFT JOIN
RIGHT JOIN
SELECT *
FROM A CROSS JOIN B;
CROSS JOIN
SELECT *
FROM A, B;
Interrogation des Données
• Auto-Jointure :
• Il est parfois utile de faire une jointure de la table avec elle même
70
SELECT …
FROM TableA JOIN TableA
ON ColonneA = ColonneB;
SELECT …
FROM TableA A1, TableA A2
WHERE A1.ColonneA = A2.ColonneB;
Interrogation des Données
• Sous requêtes :
• Le langage SQL supporte l’imbrication des requêtes sur plusieurs niveaux.
• Une sous-requête: une requête executée à l’intérieur d’une autre.
• L’imbrication est supportée au niveau des requêtes de type:
• SELECT
• INSERT
• UPDATE
• DELETE
• …
• Nous allons traiter l’imbrication au niveau des requêtes de type SELECT.
71
Interrogation des Données
• Sous requêtes :
• Au niveau d’une requête SELECT, il est possible d’imbriquer une sous requêtes au niveau des
clauses:
• FROM
• WHERE
• HAVING
• Imbrication au niveau du FROM:
72
SELECT …
FROM (SELECT …
FROM …
…) AS nom_table_intermediaire
WHERE …
GROUP BY …
HAVING …
ORDER BY …;
Le résultat d’un SELECT est une table
sur laquelle nous pouvons exécuter des
requêtes.
Règles:
- Parenthèses et Alias obligatoires
Interrogation des Données
• Sous requêtes :
• Imbrication au niveau du WHERE et du HAVING:
• Les sous requêtes auxquels nous pouvons faire appel au niveau d’une condition doivent
renvoyées soit:
• Une ligne, ou
• Une colonne, ou
• Une valeur
• Les sous requêtes renvoyés
Une table ne peuvent être imbriqués
qu’au niveau de la clause FROM.
73
SELECT …
FROM …
WHERE … (SELECT …
FROM …
…)
GROUP BY …
HAVING …(SELECT …
FROM …
…)
ORDER BY …;
Interrogation des Données
• Sous requêtes :
• Imbrication au niveau du WHERE et du HAVING:
74
SELECT …
FROM …
WHERE colonne = (SELECT id_Colonne
FROM …);
Ex: Requête renvoyant une valeur
Opérateurs: =, <, >, <=, >=, <>, !=, <=>
SELECT …
FROM …
WHERE (col1, col2) = (SELECT (ColA, ColB)
FROM …);
Ex: Requête renvoyant une ligne
Opérateurs: =, <>, !=
SELECT …
FROM …
WHERE col1 IN (SELECT ColA
FROM …);
Ex: Requête renvoyant une colonne
Opérateurs: IN , NOT IN, < ANY, < ALL,
> ANY, > ALL, <> ALL
Interrogation des Données
• Sous requêtes :
• Sous requêtes corrélées:
• Une sous-requête corrélée est une sous-requête qui fait référence à une colonne (ou une table) qui
n'est pas définie dans sa clause FROM, mais bien ailleurs dans la requête dont elle fait partie.
• Si MySQL rencontre une table inconnue dans une sous-requête, il va aller chercher dans
les niveaux supérieurs uniquement si cette table existe.
75
SELECT col1
FROM table1
WHERE col1 = (SELECT col2
FROM table2
WHERE table1.col1 = col2);
Interrogation des Données
• Sous requêtes :
• EXISTS et NOT EXISTS:
• Syntaxe:
• La condition EXISTS est vraie si la sous requête renvoie une résultat différent de NULL.
• La condition NOT EXISTS est vraie si la sous requête renvoie NULL.
76
SELECT …
FROM tables
WHERE EXISTS (sous requête);
Interrogation des Données
• Sous requêtes :
• L’imbrication est supportée au niveau des requêtes : INSERT, UPDATE, DELETE
77
INSERT INTO nom_table (colonne1, colonne2, ...)
SELECT colonne1, colonne2, ...
FROM nom_table2 …;
UPDATE nom_table
SET colonne1 = (sous requête)
WHERE colonne2 = (sous requête);
DELETE FROM nom_table
WHERE colonne2 = (sous requête);

Contenu connexe

Similaire à 4-TP BD.pptx

c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdftepoha4848
 
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS
 
Création et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL OracleCréation et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL Oraclewebreaker
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQLLilia Sfaxi
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants SmartnSkilled
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de donnéesAbdoulaye Dieng
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech
 
analysez-des-donnees-avec-excel documen.pdf
analysez-des-donnees-avec-excel documen.pdfanalysez-des-donnees-avec-excel documen.pdf
analysez-des-donnees-avec-excel documen.pdfLeonLovensky
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreMICHRAFY MUSTAFA
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?Benoit Fillon
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerMicrosoft
 
Formation access
Formation accessFormation access
Formation accessbouyahia76
 

Similaire à 4-TP BD.pptx (20)

Base donnee MYSQL
Base donnee MYSQLBase donnee MYSQL
Base donnee MYSQL
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
 
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
 
Création et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL OracleCréation et Gestion de Tables | SQL Oracle
Création et Gestion de Tables | SQL Oracle
 
introduction à MongoDB
introduction à MongoDBintroduction à MongoDB
introduction à MongoDB
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants Support formation vidéo : SQL pour les (grands) débutants
Support formation vidéo : SQL pour les (grands) débutants
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
 
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
Valtech - NoSQL, solution alternative ou complémentaire aux bases de données ...
 
analysez-des-donnees-avec-excel documen.pdf
analysez-des-donnees-avec-excel documen.pdfanalysez-des-donnees-avec-excel documen.pdf
analysez-des-donnees-avec-excel documen.pdf
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvre
 
SQL.pdf
SQL.pdfSQL.pdf
SQL.pdf
 
Cours access
Cours accessCours access
Cours access
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
 
Deep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL ServerDeep Dive Performance , le In-Memory dans SQL Server
Deep Dive Performance , le In-Memory dans SQL Server
 
Oracle : Foctionnement
Oracle : FoctionnementOracle : Foctionnement
Oracle : Foctionnement
 
coursaccess.pdf
coursaccess.pdfcoursaccess.pdf
coursaccess.pdf
 
09coursaccess
09coursaccess09coursaccess
09coursaccess
 
Sql
SqlSql
Sql
 
Formation access
Formation accessFormation access
Formation access
 

Dernier

Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne FontaineTxaruka
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptssusercbaa22
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxssusercbaa22
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertChristianMbip
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxlamourfrantz
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptxSAID MASHATE
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptxMalikaIdseaid1
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxpopzair
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptxTxaruka
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.Franck Apolis
 
Guide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeGuide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeBenamraneMarwa
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...Faga1939
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipM2i Formation
 

Dernier (15)

Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
MaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.pptMaintenanceLa Maintenance Corrective.ppt
MaintenanceLa Maintenance Corrective.ppt
 
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptxApproche-des-risques-par-l’analyse-des-accidents-1.pptx
Approche-des-risques-par-l’analyse-des-accidents-1.pptx
 
systeme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expertsysteme expert_systeme expert_systeme expert
systeme expert_systeme expert_systeme expert
 
Cours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptxCours-irrigation_et_drainage_cours1.pptx
Cours-irrigation_et_drainage_cours1.pptx
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
666148532-Formation-Habilitation-ELECTRIQUE-ENTREPRISE-MARS-2017.pptx
 
presentation l'interactionnisme symbolique finale.pptx
presentation l'interactionnisme symbolique  finale.pptxpresentation l'interactionnisme symbolique  finale.pptx
presentation l'interactionnisme symbolique finale.pptx
 
Présentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptxPrésentation de cartes d'extension zhr..pptx
Présentation de cartes d'extension zhr..pptx
 
Fondation Louis Vuitton. pptx
Fondation      Louis      Vuitton.   pptxFondation      Louis      Vuitton.   pptx
Fondation Louis Vuitton. pptx
 
A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.A3iFormations, organisme de formations certifié qualiopi.
A3iFormations, organisme de formations certifié qualiopi.
 
Guide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étudeGuide Final de rédaction de mémoire de fin d'étude
Guide Final de rédaction de mémoire de fin d'étude
 
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
LA MONTÉE DE L'ÉDUCATION DANS LE MONDE DE LA PRÉHISTOIRE À L'ÈRE CONTEMPORAIN...
 
Pâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie PelletierPâques de Sainte Marie-Euphrasie Pelletier
Pâques de Sainte Marie-Euphrasie Pelletier
 
Formation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadershipFormation M2i - Comprendre les neurosciences pour développer son leadership
Formation M2i - Comprendre les neurosciences pour développer son leadership
 

4-TP BD.pptx

  • 1. Module Base de données Travaux Pratiques Yahya Benkaouz y.benkaouz@um5r.ac.ma Departement Informatique
  • 2. Objectifs • Maitriser les concepts de base du langage SQL. • Se familiariser avec le SGBDR MySQL. • Etudier en détail les instructions de base de SQL. • Maitriser la déclaration, la manipulation, et l’interrogation des tables. 2
  • 3. Plan • Concepts de base • Définition de données • Evolution d’un schéma • Manipulation de données • Interrogation des données 3
  • 5. Base de données • Une collection d’informations organisées • afin d’être facilement consultables, gérables et mises à jour. • Elles sont utilisées dans un grand nombre d’entreprises pour • stocker, manipuler et analyser les données. • Au sein d’une BD relationnelle, • l'information est organisée dans des tableaux à deux dimensions appelés des relations ou tables. • Une BD relationnelle consiste en une ou plusieurs relations. • Les lignes de ces relations sont appelées des nuplets ou enregistrements. • Les colonnes sont appelées des attributs. 5
  • 6. Base de données • Les BD sont utilisées par de nombreuses entreprises dans toutes les industries. • Compagnies aériennes pour gérer les réservations. • Les enregistrements médicaux dans les hôpitaux. • Les agences gouvernementales. • Les universités. • … 6
  • 7. SGBD • SGBD: • Un système de gestion de base de données. • Un ensemble de logiciels qui manipulent le contenu des bases de données. • Ex: IBM DB2, Oracle Database, MySQL, PostgreSQL et Microsoft SQL Server • Objectif: Garantir la cohérence du contenu de le BD BD SGBD • Assure un accès facile aux données • Accès simultanés de plusieurs utilisateurs • Manipulation de données faciles SGBDR: SGBD implémentant la théorie des BD relationnelles => Garantir l’intégrité des données 7
  • 8. SGBD • MySQL: • L’un des SGBD les plus populaires. • Il est distribué sous double licence, une licence publique générale GNU et une propriétaire. • Il est développé, distribué et pris en charge par Oracle Corporation. • Les bases de données MySQL sont des bases de données relationnelles. 8
  • 9. SQL • SQL: Structured Query Language. • “Un langage informatique normalisé servant à exploiter des bases de données relationnelles”. wikipedia 9 SQL Langage de manipulation des données (INSERT, UPDATE, DELETE) Langage de contrôle Langage de définition des données (CREATE, ALTER, DROP) de données (GRANT, REVOKE) de transactions (COMMIT, DRAWBACK)
  • 10. SQL • Il comprend trois domaines : • Langage de définition des données • permet de créer et de modifier l'organisation des données dans la base de données • Langage de manipulation des données • permet de rechercher, d'ajouter, de modifier ou de supprimer des données dans les bases de données relationnelles. • Langage de contrôle • Contrôle de transaction: commencer et terminer des transactions • Contrôle de donnée: autoriser ou interdire l'accès à certaines données à certaines personnes 10
  • 11. SQL Insertion des commentaires: • Sur une ligne en utilisant -- • Sur plusieurs lignes entre /* et */ • Nomenclature: • Tous les noms d’objets (Table, attributs,….) doivent respecter les règles suivantes: • Commencer par une lettre • Ne pas contenir un espace • Ne pas dépasser 128 caractères parmi: Lettres non accentués, chiffres, @, $, #, _ 11
  • 13. Définitions de données Base de données Création Suppression Tables Création Modification Suppression 13
  • 14. Création d’une base de données • Pour créer une base de données qui sera appelé “ma_base” il suffit d’utiliser la requête suivante qui est très simple: • Avec MySQL, si une base de données porte déjà ce nom, la requête retournera une erreur. Pour éviter d’avoir cette erreur, il convient d’utiliser la requête suivante pour MySQL: • L’option IF NOT EXISTS permet juste de ne pas retourner d’erreur si une base du même nom existe déjà. La base de données ne sera pas écrasée. CREATE DATABASE ma_base; CREATE DATABASE IF NOT EXISTS ma_base; 14
  • 15. • En SQL, la commande DROP DATABASE permet de supprimer totalement une base de données et tout ce qu’elle contient. • Pour supprimer la base de données “ma_base”, la requête est la suivante: • Par défaut, si le nom de base utilisé n’existe pas, la requête retournera une erreur. Pour éviter d’obtenir cette erreur si vous n’êtes pas sûr du nom, il est possible d’utiliser l’option IF EXISTS. • La syntaxe sera alors la suivante: Suppression d’une base de données DROP DATABASE ma_base; DROP DATABASE IF EXISTS ma_base; 15
  • 16. Création de tables • Une table est une entité qui est contenu dans une base de données pour stocker des données ordonnées dans des colonnes. • La création d’une table sert à définir les colonnes et le type de données qui seront contenus dans chacun des colonne (entier, chaîne de caractères, date, valeur binaire …). • La syntaxe générale pour créer une table est la suivante : CREATE TABLE nom_de_la_table ( colonne1 type_donnees, colonne2 type_donnees, colonne3 type_donnees, colonne4 type_donnees ); 16
  • 17. Création de tables • La syntaxe générale pour créer une table est la suivante : • Type de données: 17 CREATE TABLE nom_de_la_table ( colonne1 type_donnees, colonne2 type_donnees, colonne3 type_donnees, colonne4 type_donnees ); Numériques Textuelles Temporelles TINY INT, SMALL INT, INT, BIGINT, INTEGER FLOAT, REAL, DOUBLE DECIMAL CHAR(n) VARCHAR(n) TEXT ENUM SET DATE TIME DATETIME YEAR
  • 18. Création de tables • Nombres entiers: 18 Numériques Nombre d’octets Minimum Maximum TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807
  • 19. Création de tables • Nombres entiers: • Possibilité d’indiquer qu’un entire est UNSIGNED - Pour les TINYINT, on pourra par exemple aller de 0 à 255 • Limiter la taille à l’affichage et l’attribut ZEROFILL - Préciser le nombre de chiffres minimum à l'affichage d'une colonne de type INT - Ex: INT(3) - Même avec un INT(3), nous pouvons avoir la valeur 29003 - Le caractère ajouté par défaut est espace - L’attribut ZEROFILL ajoute des zéros à gauche du nombre lors de l’affichage 19 INT(4) ZEROFILL Nombre stocké Nombre affiché 45 0045 4156 4156 785164 785164
  • 20. Création de tables • Nombres décimaux : • Cinq mots-clés permettent de stocker des nombres décimaux dans une colonne: DECIMAL, NUMERIC, FLOAT, REAL et DOUBLE • NUMERIC et DECIMAL sont équivalents et acceptent deux paramètres : la précision et l'échelle. • La précision définit le nombre de chiffres significatifs stockés, donc les 0 à gauche ne comptent pas. • En effet, 0024 est équivalent à 24. Il n'y a donc que deux chiffres significatifs dans 0024. • L'échelle définit le nombre de chiffres après la virgule. • Dans un champ DECIMAL(5,3), on peut donc stocker des nombres de 5 chiffres significatifs au maximum, dont 3 chiffres sont après la virgule. • Par exemple : 12.354, -54.258, 89.2 ou -56. • DECIMAL(4) est DECIMAL(4, 0) sont deux écritures équivalentes. • MySQL ne respecte pas toujours cette règle, et utilise parfois l’octet du signe (-) pour stocker les chiffres. 20
  • 21. Création de tables • Nombres décimaux : • FLOAT, DOUBLE et REAL: • Le mot-clé FLOAT peut s'utiliser sans paramètres, auquel cas quatre octets sont utilisés pour stocker les valeurs de la colonne. • Il est possible de spécifier une précision et une echelle d’un FLOAT. • Quant à REAL et DOUBLE, ils ne supportent pas de paramètres. • DOUBLE est normalement plus précis que REAL (stockage dans 8 octets, contre stockage dans 4 octets) • Mais ce n'est pas le cas avec MySQL qui utilise 8 octets dans les deux cas 21
  • 22. Création de tables • Nombres décimaux : • Valeurs exactes vs valeurs approchées: • Les nombres stockés en tant que NUMERIC ou DECIMAL sont stockés sous forme de chaînes de caractères. => Valeurs exactes qui sont stockées • Les types FLOAT,DOUBLE et REAL sont stockés sous forme de nombres. => Valeurs approchées qui sont stockées (56,678900000000000001 au lieu de 56,6789) • S'il est nécessaire de conserver la précision exacte de vos données (données bancaires), • il est donc conseillé d'utiliser un type numérique à valeur exacte 22
  • 23. Création de tables • Données textuelles: • CHAR vs VARCHAR: • Pour stocker un texte relativement court (moins de 255 caractères), vous pouvez utiliser les types CHAR et VARCHAR. • Ces deux types s'utilisent avec un paramètre qui précise la taille que peut prendre votre texte (entre 1 et 255). • Un CHAR(x) stockera toujours x caractères, en remplissant si nécessaire le texte avec des espaces vides pour le completer. • Un VARCHAR(x) stockera jusqu'à x caractères (entre 0 et x), et stockera en plus en mémoire la taille du texte stocké. 23
  • 24. Création de tables • Données textuelles: • CHAR vs VARCHAR: • Les caractères accentués occupent deux octets en mémoire. • Il est donc possible, pour un CHAR(5), d'occuper plus de 5 octets en mémoire (mais impossible d'y stocker plus que 5 caractères). 24 Texte CHAR(5) Mémoire requise VARCHAR(5) Mémoire requise '' ' ' 5 octets '' 1 octet 'tex' 'tex ' 5 octets 'tex' 4 octets 'texte' 'texte' 5 octets 'texte' 6 octets 'texte trop long' 'texte' 5 octets 'texte' 6 octets
  • 25. Création de tables • Données textuelles: • TEXT : • On peut utiliser le type TEXT, ou un de ses dérivés TINYTEXT, MEDIUMTEXT ou LONGTEXT pour stocker des textes de plus de 255 caractères. 25 Type Longueur maximale Mémoire occupée TINYTEXT 28 octets Longueur de la chaîne + 1 octet TEXT 216 octets Longueur de la chaîne + 2 octet MEDIUMTEXT 224 octets Longueur de la chaîne + 3 octet LONGTEXT 232 octets Longueur de la chaîne + 4 octet
  • 26. Création de tables • Données textuelles: • ENUM : • Une colonne de type ENUM est une colonne pour laquelle on définit un certain nombre de valeurs autorisées, de type "chaîne de caractères” • Si vous essayez d'introduire une chaîne non autorisée, MySQL stockera une chaîne vide ’’ dans le champ. • Pour remplir un champ de type ENUM, deux possibilités s'offrent à vous : • soit remplir directement avec la valeur choisie (ex. "chat”) ; • soit utiliser l'index de la valeur 26 espece ENUM('chat', 'chien') Valeurs NULL ‘’ ‘chat’ ‘chien’ Index NULL 0 1 2
  • 27. Création de tables • Données textuelles: • SET : • Une colonne SET est en effet une colonne qui permet de stocker une chaîne de caractères dont les valeurs possibles sont prédéfinies par l'utilisateur. • La différence avec ENUM, c'est que l'on peut stocker dans la colonne plusieurs valeurs. • On pourra stocker dans cette colonne : • '' (chaîne vide ) ; • 'chat'; • ‘chien' ; • 'chat,chien’; 27 espece SET('chat', 'chien') SET et ENUM sont des types propres à MySQL.
  • 28. Création de tables • Données temporelles: • Quelques types temporels de MySQL : DATE, DATETIME, TIME et YEAR. • Les vérifications faites par MySQL sont des verifications de base : le jour doit être compris entre 1 et 31 et le mois entre 1 et 12. NB: la date 30 Février est aussi acceptable. • Date: • Pour entrer une date, l'ordre des données est la seule contrainte. • Il faut donner d'abord l'année (2 ou 4 chiffres), ensuite le mois (2 chiffres) , et, pour finir, le jour (2 chiffres), sous forme de nombre ou de chaîne de caractères. • S'il s'agit d'une chaîne de caractères, n'importe quelle ponctuation peut être utilisée comme délimiteur. 28 • 'AAAA%MM%JJ' • AAAAMMJJ (nombre) • AAMMJJ (nombre) • 'AAAA-MM-JJ' (c'est sous ce format-ci qu'une DATE est stockée dans MySQL) • 'AAMMJJ' • 'AAAA/MM/JJ' • 'AA+MM+JJ'
  • 29. Création de tables • Données temporelles: • DateTime : • Ce type permet de stocker une heure, en plus d'une date. • Pour la date, année-mois-jour, et pour l'heure, il faut donner d'abord l'heure, ensuite les minutes, puis les secondes. • Si l'on utilise une chaîne de caractères, il faut séparer la date et l'heure par une espace. • Quelques exemples corrects : 29 • 'AAAA-MM-JJ HH:MM:SS' (c'est sous ce format-ci qu'un DATETIME est stocké dans MySQL) • 'AA*MM*JJ HH+MM+SS' • AAAAMMJJHHMMSS (nombre)
  • 30. Création de tables • Données temporelles: • Time : • Il faut d'abord donner l'heure, puis les minutes, puis les seconds • Chaque partie pouvant être séparée des autres par le caractère : • Exemples: 30 • 'HH:MM:SS' • 'HHH:MM:SS' • 'MM:SS' • 'HHMMSS' • HHMMSS
  • 31. Création de tables • Données temporelles: • Year : • Un type à utiliser si besoin de stocker juste l’année. • Il ne prend qu'un seul octet en mémoire. • On ne peut y stocker que des années entre 1901 et 2155. • On peut entrer une donnée de type YEAR sous forme de chaîne de caractères ou d'entiers, avec 2 ou 4 chiffres. 31
  • 32. Création de tables • La syntaxe générale pour créer une table est la suivante : • Pour chaque colonne, il est également possible de définir des options telles que : • NOT NULL : empêche d’enregistrer une valeur nulle pour une colonne. • DEFAULT : attribuer une valeur par défaut si aucune données n’est indiquée pour cette colonne lors de l’ajout d’une ligne dans la table. • PRIMARY KEY : indiquer si cette colonne est considérée comme clé primaire pour un index. 32 CREATE TABLE nom_de_la_table ( colonne1 type_donnees PRIMARY KEY, colonne2 type_donnees NOT NULL, colonne3 type_donnees DEFAULT valeur, colonne4 type_donnees );
  • 33. Création de tables • Exemple: 33 CREATE TABLE utilisateur ( id INT PRIMARY KEY NOT NULL, nom VARCHAR(100), prenom VARCHAR(100), email VARCHAR(255), date_naissance DATE ); CREATE TABLE nom_de_la_table ( colonne1 type_donnees PRIMARY KEY, colonne2 type_donnees NOT NULL, colonne3 type_donnees DEFAULT valeur, colonne4 type_donnees );
  • 34. Création de tables • Clé Primaire : • La clé primaire d'une table est une contrainte d'unicité, composée d'une ou plusieurs colonnes. • La clé primaire d'une ligne permet d'identifier de manière unique cette ligne dans la table. 34 CREATE TABLE nom_de_la_table ( colonne1 type_donnees, colonne2 type_donnees, colonne3 type_donnees, colonne4 type_donnees, PRIMARY KEY(colonne1) ou PRIMARY KEY(colonne1, colonne2) );
  • 35. Création de tables • Auto-incrémentation: • Il est possible de declarer que les valeurs d’une colonne s’auto-incrémente en utilisant le mot clé AUTO_INCREMENT. 35 CREATE TABLE nom_de_la_table ( colonne1 type_donnees PRIMARY KEY AUTO_INCREMENT, colonne2 type_donnees, colonne3 type_donnees, colonne4 type_donnees, );
  • 36. Création de tables • Clé Etrangère : • Les clés étrangères ont pour fonction principale la vérification de l'intégrité de votre base. • Il est possible de declarer des clés étrangères composites. 36 CREATE TABLE nom_de_la_table ( colonne1 type_donnees, colonne2 type_donnees, colonne3 type_donnees, CONSTRAINT nom_ctr FOREIGN KEY(colonne2) REFERENCES table2(colonneX) ); Conditions: • ColonneX doit être une clé primaire ou un index • ColonneX et colonne2 doivent être exactement du même type
  • 37. • Pour supprimer une table: • Pour verification: • SHOW DATABASES; • SHOW TABLES; • DESCRIBE ma_table; • Autre possibilité de création de table: Suppression d’une table DROP TABLE ma_table; 37 CREATE TABLE ma_table LIKE autre_table ; CREATE TABLE ma_table AS SELECT * FROM autre_table ; Copie la structure uniquement Copie Structure et Contenu
  • 39. • Différents types de modifications sont possibles sur : • La table • Les Colonnes • Les Contraintes Modification d’une table ALTER TABLE nom_table Instructions; 39 Table Renommer Colonne Ajouter / Supprimer / Modifier / Renommer Contraintes Ajouter / Supprimer
  • 40. Modification d’une table ALTER TABLE nom_table RENAME ………; -- Renommer une table ALTER TABLE nom_table ADD ………; -- Ajouter une colonne ou une contrainte ALTER TABLE nom_table DROP ………; -- Supprimer une colonne ou une contrainte ALTER TABLE nom_table CHANGE ………; -- Remplacer une colonne par une autre ALTER TABLE nom_table MODIFY ………; -- Modifier la description d’une colonne 40
  • 41. Renommer une table • La commande à utiliser pour changer le nom d’une table est la suivante: • Il y a plusieurs formes d’écriture de cet instruction: 41 ALTER TABLE nom_table RENAME TO nouveau_nom; ALTER TABLE nom_table RENAME nouveau_nom; RENAME TABLE nom_table TO nouveau_nom; RENAME TABLE table_1 TO nouveau_nom_1 , table_2 TO nouveau_nom_2 ;
  • 42. Ajout et Suppression d’une colonne • Pour l’ajout d’une colonne, on utilise la syntaxe: • Pour la suppression d’une colonne: • Le mot ”Column” est facultatif 42 ALTER TABLE nom_table ADD [Column] nom_colonne type options; ALTER TABLE nom_table DROP [Column] nom_colonne;
  • 43. Modification d’une colonne • Pour renommer une colonne: • Pour modifier la description d’une colonne: 43 ALTER TABLE nom_table RENAME COLUMN nom_colonne TO nouveau_nom; ALTER TABLE nom_table CHANGE nom_colonne nouveau_nom Type Options; ALTER TABLE nom_table MODIFY nom_colonne nouveau_Type Options; RENAME Change le nom d’une colonne uniquement CHANGE Change le nom et/ou la définition d’une colonne MODIFY Change la définition de la colonne et pas le nom
  • 44. Manipulation des contraintes • Pour ajouter une contrainte: • Clé étrangère: • Clé primaire: 44 ALTER TABLE nom_table ADD [CONSTRAINT nom_contrainte] definition_contrainte; ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte FOREIGN KEY(…) REFERENCES …(…) ; ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte PRIMARY KEY(…); /*Le nom est inutile*/ ALTER TABLE nom_table ADD PRIMARY KEY(…); Le nom de la contrainte est très utile lors de la suppression de la clé étrangère
  • 45. Manipulation des contraintes • Pour supprimer une contrainte: • Clé étrangère: • Clé primaire: 45 ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte; ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte; ALTER TABLE nom_table DROP PRIMARY KEY; ALTER TABLE nom_table DROP KEY nom_contrainte;
  • 46. Manipulation des contraintes • CHECK: • Valeur par défaut: 46 ALTER TABLE nom_table ADD CONSTRAINT nom_contrainte CHECK(expr); ALTER TABLE nom_table ALTER nom_colonne SET DEFAULT valeur; ALTER TABLE nom_table DROP CONSTRAINT nom_contrainte; ALTER TABLE nom_table ALTER nom_colonne DROP DEFAULT;
  • 48. Manipulation des Données • Opérations possibles sur les données: • Insertion • Suppression • Modification 48 INSERT INTO……; DELETE FROM……; UPDATE ……;
  • 49. Manipulation des Données • Insertion d’enregistrements : • Insertion en précisant une valeur pour chaque colonne de la ligne. • Insertion en précisant les valeurs de certaines colonnes de la ligne. 49 INSERT INTO nom_table [(colonne1, colonne2,…)] VALUES (valeur1, valeur2,…); INSERT INTO nom_table VALUES (valeur1, valeur2,…); /* NULL et DEFAULT sont aussi des valeurs INSERT INTO nom_table (colonne3, colonne5) VALUES (valeur3, valeur5);
  • 50. Manipulation des Données • Insertion d’enregistrements : • Insertion multiple: • Syntaxe propre à MySQL (Ne fait pas partie du langage SQL): • + : Plus lisible • - : Ne permet pas une insertion multiple • - : Si on migre vers un autre SGBD, requête INSERT doivent être réecrites. 50 INSERT INTO nom_table [(colonne1, colonne2,…)] VALUES (valeur1, valeur2,…), (valeur1_1, valeur2_1,…), (valeur1_2, valeur2_2,…); INSERT INTO nom_table SET colonne3 = valeur3, colonne5 = valeur5,…;
  • 51. Manipulation des Données • Suppression d’enregistrements : • L’instruction permet de supprimer toutes les lignes satisfaisant la condition. • Si aucune condition n’est spécifiée, toutes les lignes seront supprimés. • Opérateurs supportées : 51 DELETE FROM nom_table WHERE condition; = <> != < > <= >= IN BETWEEN…AND LIKE ’…’ IS NULL IS NOT NULL AND OR NOT XOR
  • 52. Manipulation des Données • Modification d’enregistrements : • La modification est apportée à toutes les lignes satisfaisant la condition. • Si aucune condition n’est spécifiée, toutes les lignes seront modifiées. 52 UPDATE nom_table SET colonneA = valeurA, colonneB = valeurB,… WHERE condition;
  • 53. Manipulation des Données • Importation et Exportation d’une Base de donnée: • Exportation d’une Base de donnée: • Importation d’une Base de donnée: Il faut que la base de données soit créée avant l’éxecution de la commande shell. • Execution d’un script SQL: 53 $ mysqldump –u username –p DBname > DBfilename.sql $ mysql –u username –p DBname < DBfilename.sql SOURCE path/DBfilename.sql
  • 55. Interrogation des Données • Syntaxe du SELECT : • Permet d’afficher les données de la table. • Pour récupérer toutes les colonnes d’une table, on peut utiliser un *. • Permet aussi d’afficher le résultat de quelques opérations. • Les opérations peuvent être effectuées sur les données d’une table. 55 SELECT colonne1, colonne2,…… FROM nom_table; SELECT ‘Bonjour à tous'; SELECT 1+4;
  • 56. Interrogation des Données • Syntaxe du SELECT : • Pour éliminer les doublons: • Restreindre les résultats à l’aide de LIMIT; Elle admet deux options: • le nombre de lignes que l'on veut récupérer ; • le decalage qui indique à partir de quelle ligne on récupère les résultats. 56 SELECT colonne1, colonne2,…… FROM nom_table LIMIT nombre_de_lignes [OFFSET decalage]; SELECT DISTINCT colonne1 FROM nom_table; SELECT * FROM etudiant LIMIT 10;
  • 57. Interrogation des Données • Syntaxe du SELECT : • Pour éliminer les doublons: • La clause ORDER BY permet d’ordonner le résultat à l’affichage. 57 SELECT colonne1, colonne2,…… FROM nom_table ORDER BY colonne1 [DESC], colonne2 [ASC]; SELECT DISTINCT colonne1 FROM nom_table;
  • 58. Interrogation des Données • Fonctions d’agrégation : • Ces fonctions agissent sur une colonne et renvoient un résultat unique pour toutes les lignes sélectionnées • Il existe plusieurs fonctions d’agrégation: • COUNT() • MIN() • MAX() • SUM() • AVG() • GROUP_CONCAT() 58 SELECT fct1(colonne1), fct2(colonne),… FROM nom_table;
  • 59. Interrogation des Données • Regroupement : • Calculer les fonctions d’agrégations selon les valeurs d’une colonne. • Il est très utile de renommer les colonnes résultantes à l’affichage 59 SELECT fct1(colonne) FROM nom_table GROUP BY colonne; SELECT colonne, fct1(colonne) AS nom_Affiché FROM nom_table GROUP BY colonne;
  • 60. Interrogation des Données • Regroupement : • Pour appliquer des conditions sur le résultat d’un Regroupement. • Il est conseillé d’utiliser la clause WHERE autant que possible. • L’ordre des différents clauses est important. 60 SELECT fct1(colonne) FROM nom_table GROUP BY colonne HAVING condition; SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …;
  • 61. Interrogation des Données • Jointure : • Les jointures permettent d’utiliser plusieurs tables dans la même requête. • Etant donné les deux tables : Etudiant(CNE, nom, code_filiere*) Filiere(Code, Intitulé, NoDept) Quel est le résultat de la requête? 61 SELECT * FROM Etudiant, Filiere;
  • 62. Interrogation des Données 62 SELECT * FROM Etudiant, Filiere; CNE Nom Code_filiere 1234567 Ahmed SMI 8901234 Ali SMI 5678912 Mohammed SMA Code Intitule NoDept SMI Math Info 1 SMA Math Application 2 SMP Physique 3 Etudiant Filiere CNE Nom Code_filiere Code Intitule NoDept 1234567 Ahmed SMI SMI Math Info 1 1234567 Ahmed SMI SMA Math Application 2 1234567 Ahmed SMI SMP Physique 3 8901234 Ali SMI SMI Math Info 1 8901234 Ali SMI SMA Math Application 2 8901234 Ali SMI SMP Physique 3 5678912 Mohammed SMA SMI Math Info 1 5678912 Mohammed SMA SMA Math Application 2 5678912 Mohammed SMA SMP Physique 3 Que faut il modifier dans cette requête pour avoir des informations cohérentes ?
  • 63. Interrogation des Données 63 SELECT * FROM Etudiant, Filiere WHERE Code_filiere = Code; CNE Nom Code_filiere 1234567 Ahmed SMI 8901234 Ali SMI 5678912 Mohammed SMA Code Intitule NoDept SMI Math Info 1 SMA Math Application 2 SMP Physique 3 Etudiant Filiere CNE Nom Code_filiere Code Intitule NoDept 1234567 Ahmed SMI SMI Math Info 1 1234567 Ahmed SMI SMA Math Application 2 1234567 Ahmed SMI SMP Physique 3 8901234 Ali SMI SMI Math Info 1 8901234 Ali SMI SMA Math Application 2 8901234 Ali SMI SMP Physique 3 5678912 Mohammed SMA SMI Math Info 1 5678912 Mohammed SMA SMA Math Application 2 5678912 Mohammed SMA SMP Physique 3
  • 64. Interrogation des Données • Jointure : • Syntaxe: • Colonne_A, Colonne_B sont les colonnes sur lesquelles se fait la jointure. • Les clauses habituelles tel que GROUP BY, ORDER BY,…. sont toujours utilisables. • Une autre syntaxe possible est la suivante: • INNER indique le fait qu'il s'agit d'une jointure interne, mais c'est facultative. • La clause ON sert à préciser la condition de la jointure 64 SELECT colonne,…,… ou * ou fct(…) FROM TableA, TableB WHERE ColonneA = ColonneB; SELECT colonne,…,… ou * ou fct(…) FROM TableA INNER JOIN TableB ON ColonneA = ColonneB;
  • 65. Interrogation des Données • Jointure : • Il est possible d’utiliser plusieurs conditions pour lier les deux tables et aussi différentes opérateurs. • Il est possible de faire plusieurs jointures dans la même requête. Dans ce cas il faudra spécifier les conditions pour les tables deux à deux. 65 SELECT colonne,…,… ou * ou fct(…) FROM TableA, TableB WHERE ColonneA=ColonneB (logicOp) ColonneA2 (=,>,<,…) ColonneB2; SELECT colonne,…,… ou * ou fct(…) FROM TableA, TableB, TableC WHERE ColonneA = ColonneB AND ColonneB2 = ColonneC; SELECT colonne,…,… ou * ou fct(…) FROM TableA JOIN TableB ON ColonneA = ColonneB JOIN TableC ON ColonneB2 = ColonneC;
  • 66. Interrogation des Données • Jointure : • Il se peut qu’on a des colonnes portant le même nom dans les deux tables. • Dans une telle situation, il faut indiquer d’où provient chaque colonne. 66 SELECT colonne,…,… ou * ou fct(…) FROM TableA, TableB WHERE TableA.Colonne = TableB.Colonne;
  • 67. Interrogation des Données • Jointure : • Si la requête est trop longue, utiliser des alias. 67 SELECT … FROM TableA AS TA, TableB TB WHERE TA.Colonne = TB.Colonne; SELECT … FROM TableA JOIN TableB USING(Colonne); SELECT … FROM TableA NATURAL JOIN TableB ;
  • 68. Interrogation des Données • Jointure interne et Jointure externe : • Les jointures que nous avons vu jusqu’à maintenant sont des jointures internes. • Une jointure interne exige de ne retourner que les lignes respectant la condition de jointure. • Une jointure externe permet de retourner également les enregistrements pour lesquelles il n’y a pas de correspondence dans l’autre table. • Le mot clé OUTER, comme le INNER est facultatif. 68 SELECT … FROM TableA LEFT OUTER JOIN TableB ON ColonneA = ColonneB; SELECT … FROM TableA RIGHT OUTER JOIN TableB ON ColonneA = ColonneB;
  • 69. Interrogation des Données • Jointure interne et Jointure externe : 69 INNER JOIN FULL JOIN LEFT JOIN RIGHT JOIN SELECT * FROM A CROSS JOIN B; CROSS JOIN SELECT * FROM A, B;
  • 70. Interrogation des Données • Auto-Jointure : • Il est parfois utile de faire une jointure de la table avec elle même 70 SELECT … FROM TableA JOIN TableA ON ColonneA = ColonneB; SELECT … FROM TableA A1, TableA A2 WHERE A1.ColonneA = A2.ColonneB;
  • 71. Interrogation des Données • Sous requêtes : • Le langage SQL supporte l’imbrication des requêtes sur plusieurs niveaux. • Une sous-requête: une requête executée à l’intérieur d’une autre. • L’imbrication est supportée au niveau des requêtes de type: • SELECT • INSERT • UPDATE • DELETE • … • Nous allons traiter l’imbrication au niveau des requêtes de type SELECT. 71
  • 72. Interrogation des Données • Sous requêtes : • Au niveau d’une requête SELECT, il est possible d’imbriquer une sous requêtes au niveau des clauses: • FROM • WHERE • HAVING • Imbrication au niveau du FROM: 72 SELECT … FROM (SELECT … FROM … …) AS nom_table_intermediaire WHERE … GROUP BY … HAVING … ORDER BY …; Le résultat d’un SELECT est une table sur laquelle nous pouvons exécuter des requêtes. Règles: - Parenthèses et Alias obligatoires
  • 73. Interrogation des Données • Sous requêtes : • Imbrication au niveau du WHERE et du HAVING: • Les sous requêtes auxquels nous pouvons faire appel au niveau d’une condition doivent renvoyées soit: • Une ligne, ou • Une colonne, ou • Une valeur • Les sous requêtes renvoyés Une table ne peuvent être imbriqués qu’au niveau de la clause FROM. 73 SELECT … FROM … WHERE … (SELECT … FROM … …) GROUP BY … HAVING …(SELECT … FROM … …) ORDER BY …;
  • 74. Interrogation des Données • Sous requêtes : • Imbrication au niveau du WHERE et du HAVING: 74 SELECT … FROM … WHERE colonne = (SELECT id_Colonne FROM …); Ex: Requête renvoyant une valeur Opérateurs: =, <, >, <=, >=, <>, !=, <=> SELECT … FROM … WHERE (col1, col2) = (SELECT (ColA, ColB) FROM …); Ex: Requête renvoyant une ligne Opérateurs: =, <>, != SELECT … FROM … WHERE col1 IN (SELECT ColA FROM …); Ex: Requête renvoyant une colonne Opérateurs: IN , NOT IN, < ANY, < ALL, > ANY, > ALL, <> ALL
  • 75. Interrogation des Données • Sous requêtes : • Sous requêtes corrélées: • Une sous-requête corrélée est une sous-requête qui fait référence à une colonne (ou une table) qui n'est pas définie dans sa clause FROM, mais bien ailleurs dans la requête dont elle fait partie. • Si MySQL rencontre une table inconnue dans une sous-requête, il va aller chercher dans les niveaux supérieurs uniquement si cette table existe. 75 SELECT col1 FROM table1 WHERE col1 = (SELECT col2 FROM table2 WHERE table1.col1 = col2);
  • 76. Interrogation des Données • Sous requêtes : • EXISTS et NOT EXISTS: • Syntaxe: • La condition EXISTS est vraie si la sous requête renvoie une résultat différent de NULL. • La condition NOT EXISTS est vraie si la sous requête renvoie NULL. 76 SELECT … FROM tables WHERE EXISTS (sous requête);
  • 77. Interrogation des Données • Sous requêtes : • L’imbrication est supportée au niveau des requêtes : INSERT, UPDATE, DELETE 77 INSERT INTO nom_table (colonne1, colonne2, ...) SELECT colonne1, colonne2, ... FROM nom_table2 …; UPDATE nom_table SET colonne1 = (sous requête) WHERE colonne2 = (sous requête); DELETE FROM nom_table WHERE colonne2 = (sous requête);