Matière : Base de Données 2
Chap. 0 : Introduction aux SGDBs
Ouadï Belmokhtar EMSI-Rabat
[email protected]Donnée vs Information
Une information est une donnée que l’on sait
interpréter.
Objectif: prise de décision
Base de données (BD)
Ensemble de données structurées et organisées,
reliées entre elles, mémorisées sur un support
permanent.
Modélise un univers réel: enregistrer des faits, des
opérations au sein d'un organisme.
Permet le stockage de grande quantité
d’information
SGBD: définition
Système de Gestion de Bases de Données (SGBD)
ou Data Base Management System (Dbms) :
Système qui permet de gérer une BD partagée par
plusieurs utilisateurs simultanément
Logiciel
qui prend en charge la structuration, le
stockage et la maintenance des données.
SGBD: Objectifs
La non-redondance
Gestion des pannes
Indépendance
Physique
Langage de
Concurrence d’accès manipulation
BD
Gestion de la
Gestion de la
confidentialité
cohérence
Partage de données
SGBD: Objectifs
Décrire les données indépendamment des applications
Manipuler les données: interroger et mettre à jour les données
Contrôler les données: assurer l’intégrité et la confidentialité des données
Performances d'accès: assurer un accès rapide au données
Concurrence des accès: l'accès simultané à la base de données par
plusieurs utilisateurs
Sécurité : reprise après panne, journalisation
Indépendance physique: Pouvoir modifier les structures de stockage sans
répercutions sur les applications
Indépendance logique: l'administrateur de la base doit pouvoir la faire
évoluer sans que cela gêne les utilisateurs
SGBD: Structure
Application, outils, terminaux…s
Schéma Schéma
Niveau externe externe ou externe ou
Vue 1 Vue 2
Schéma Conceptuel
Niveau conceptuel
ou /et
ou logique
schéma logique
Schéma Physique
Niveau interne
Ou
Schéma interne
SGBD: Structure
SGBD: Indépendance entre niveaux
L’indépendance entre niveaux existe si une
modification à un niveau ne nécessite pas une
modification du niveau supérieur.
On parle aussi d’indépendance logique et
d’indépendance physique.
SGBD: Indépendance entre niveaux
Indépendance physique : entre niveaux physique et
conceptuel. Permet de modifier l’organisation
physique sans modifier le schéma conceptuel ou les
programmes d’applications.
Indépendance logique: entre niveaux conceptuel et
vue . Permet de modifier le schéma conceptuel sans
modifier les programmes d’applications non
concernés par cet modification
SGBD: les utilisateurs
L’administrateur (une personne ou une équipe) :
Il définit le schéma conceptuel de la BD et le fait évoluer.
Il fixe les paramètres de l’organisation physique de façon à optimiser
les performances.
Il gère les droits d’accès et les mécanismes de sécurité.
Les programmeurs d’application :
Ils définissent les schémas externes et construisent les programmes qui
alimentent ou exploitent la BD en vue d’applications particulières.
Ils utilisent pour cela le langage de bases de données du SGBD,
éventuellement couplé avec un langage de programmation classique.
Les utilisateurs finaux :
Ils accèdent à la BD au travers des outils construits par les
programmeurs d’applications ou pour les plus avertis au travers du
langage de requêtes
SGBD: cycle de vie d’une base de
données
Le cycle de vie d’une base de données est constitué
de cinqphases :
Conception de la base
Création de la structure de la base
Implantation des données
Utilisation (interrogation, mises à jour) : développement
des programmes d’application
Maintenance (correction, évolution)
Exemple 1
Etudiant
Filiere
Id_E
Id_F
Nom
intitule
Prenom 1..1 1..n
Effectif
CNE
Classe
Etudiant (1, ‘N1’, ‘P1’, ‘CNE1’, ‘C1’,1)
(2, ‘N2’, ‘P2’, ‘CNE2’, ‘C2’,2)
(3, ‘N3’,’ P3’, ‘CNE3’, ‘C3’,2)
Filiere (1, ‘F1’, 33)
(2, ‘F1’, 10)
SGBD – MySQL
Chap. 1 : Langage SQL
Ouadï Belmokhtar EMSI-Rabat
[email protected]Langage SQL
¨ SQL signifie ‘Structured Query Language’ c'est-à-
dire Langage d'interrogation structuré.
¨ Langage complet pour la gestion des bases de
données relationnelles.
¨ SQL est défini indépendamment des plates formes
d’utilisation (matériel , système d’exploitation)
Langage SQL
¨ Le langage SQL est à la fois
n un langage de déscription des données (LDD) via les
instructions CREATE, ALTER, DROP.
n un langage de manipulation des données (LMD) via les
commandes UPDATE, INSERT, DELETE
n un langage d’intérogation des données (LID) via
l’instruction SELECT.
n un langage de contrôle de l'accès aux données (LCD) ;
instructions GRANT, REVOKE.
Intérêt du langage SQL
¨ Le langage SQL est utilisé par les principaux
SGBDR:MS. Access, DB2, Oracle, MySQL, SQL
Server
¨ Accéder, définir, manipuler, contrôler les données
¨ Chacun des SGBDR dispose de sa propre variante
du langage:
MySQL: Définition
¨ Système de gestion de bases de données
¨ Serveur de bases de données relationnelles: stocke les données dans
des tables séparées pour améliorer le temps de réponse et la
souplesse
¨ Open Source et gratuit
¤ Community Server
¤ Entreprise Server
¨ MySQL est dérivé du langage SQL
¨ SGBD le plus utilisé pour les applications et les sites web
¨ Utilisé dans des grands projets: Facebook, Twitter,
YouTube, Flickr.
¨ En version 5.6.23 (2 Fév. 2015)
MySQL: Points forts
¨ Facile à mettre en œuvre ;
¨ Prise en main simple;
¨ Support multi-plateforme ;
¨ Robuste aux fortes charges;
¨ Rapide.
MySQL: Structure du langage
Types des attributs
q Les attributs peuvent être de types très différents :
¨ Chaîne de caractères (nom, adresse)
¨ Nombre entier signé ou non (température, quantité
commandée, âge)
¨ Nombre à virgule (prix, Montant)
¨ Date et heure (date de naissance, heure d’arrivée)
¨ Énumération (une couleur parmi une liste prédéfinie)
¨ Ensemble (une ou des monnaies parmi une liste
prédéfinie)
Mysql: Structure du langage
Les chaînes de caractère
¨ Une chaîne est une séquence de caractères,
entourée par des guillemets simples (‘une chaîne')
ou doubles(“une chaîne").
Mysql: Structure du langage
¨ Les chaines de caractère
Nom Longueur
CHAR(M) Chaîne de nombre de caractère fixée à M, où 1<M<255, complétée
avec des espaces si nécessaire
BINARY(M) Idem, mais insensible à la casse lors des tris et recherches
VARCHAR(M) Chaîne de taille variable, de nombre de caractère au maximum égal à
M, où
1<M<255.
VARBINARY(M) Idem, mais insensible à la casse lors des tris et recherches.
TINYTEXT Longueur maximale de 255 caractères.
TEXT Longueur maximale de 65535 caractères.
MEDIUMTEXT Longueur maximale de 16777215 caractères
LONGTEXT Longueur maximale de 4294967295 caractères.
Mysql: Structure du langage
Les types numériques: les entiers
.
¨ Les entiers sont représentés comme une séquence de chiffres
Type De A
TINYINT -128 127
SMALLINT -32768 32767
MEDIUMINT -8388608 8388607
INT -2147483648 2147483647
BIGINT -9223372036854775808 92233720368547758
07
Mysql: Structure du langage
Les types numériques: Les flottants
¨ Sont des nombres réels, ce sont des nombres à
virgules.
nom domaine négatif : Domaine positif :
borne inférieure borne inférieure
borne supérieure borne supérieure
FLOAT -3.402823466E+38 1.175494351E-38
-1.175494351E-38 3.402823466E+38
DOUBLE -1.7976931348623157E+308 2.2250738585072014E-308
-2.2250738585072014E-308 1.7976931348623157E+308
Mysql: Structure du langage
Les types numériques: NUMERIC et DECIMAL
¨ Les types NUMERIC et DECIMAL:
¤ considérés comme identiques par MySQL
¨ DECIMAL(M,D) Représente un nombre flottant de D
chiffres après la virgule et de M chiffres au
maximum.
¨ DECIMAL(5,2) peut stocker des valeurs allant de
-999,99 jusqu’à 999,99
Mysql: Structure du langage
Dates et heures
nom description
DATE Date au format anglophone AAAA-MM-JJ.
DATETIME Date et heure au format anglophone AAAA-MM-JJ
HH:MM:SS.
TIME Heure au format HH:MM:SS.
YEAR Année au format AAAA.
Mysql: Structure du langage
Le type Enumération
¨ Un attribut de type ENUM peut prendre une valeur
parmi celles définies lors de la création de la
table plus la chaîne vide ainsi que NULL si la
définition le permet. Ces valeurs sont exclusivement
des chaînes de caractères.
¨ Une énumération peut contenir 65535 éléments au
maximum.
¨ nom_attribut ENUM(‘’valeur 1’’,’’valeur 2’’…)
Mysql: Structure du langage
Remarques
¨ La valeur Null signifie ‘aucune information’ Cette
valeur est différente de ‘0’ est de la chaine vide.
¨ Pour une utilisation optimale des capacités de
stockage, essayez d'utiliser le type le plus optimal
dans chaque cas
Identificateurs
¨ Les noms des bases, relations, attributs, index…
¨ constitués de caractères alphanumériques et des
caractères _ et $.
¨ Un identificateur comporte au maximum 64
caractères
¨ La sensibilité à la casse est liée au système
d’exploitation
SGBD – MySQL
Chap. 2 : Langage de Définition de Données
Ouadï Belmokhtar EMSI-Rabat
[email protected]
LDD: Langage de description de
2
données
¨ Permet de décrire les objets qui contiendront les
données. Il ne sert pas à manipuler ces données
¨ Le langage de description de données (LDD) est
constitué de trois instructions SQL:
¤ CREATE
¤ DROP
¤ ALTER
Création d’une base de données
3
¨ La Syntaxe
CREATE DATABASE [IF NOT EXISTS] db_name;
crée une base de données avec le nom mentionné dans
db_name
¨ Une erreur survient si une base de données de
même nom existe déjà, si vous ne spécifiez pas
l'option IF NOT EXISTS
¨ NB: Pour se connecter à une base de données
utiliser la syntaxe
Use db_name;
Création d’une relation
4
¨ La création d’une relation utilise la commande CREATE
TABLE selon la syntaxe suivante:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name (
nom_attribut TYPE_ATTRIBUT [OPTIONS],
…
);
¨ TEMPORARY donne pour durée de vie à la table : le
temps de la connexion de l’utilisateur au serveur, après,
elle sera détruite
Les OPTIONS
5
¨ PRIMARY KEY: l’attribut est définit comme étant une
clé primaire
¨ NOT NULL: l’attribut doit obligatoirement avoir une
valeur
¨ NULL : autoriser l’absence de valeur
¨ AUTO_INCREMENT: l’attribut ayant cette option va
s’incrémenter automatiquement à chaque insertion
d’un enregistrement
¨ DEFAULT: donner une valeur par défaut à un
attribut si aucune valeur n’est donnée
Exemple
6
CREATE TABLE Personne (
cne VARCHAR(10) PRIMARY KEY,
nom VARCHAR(20),
prenom VARCHAR(20),
Ville VARCHAR(20) DEFAULT ‘rabat’
);
¨ NB: l’instruction « show columns from nom_table;» affiche les
caractéristiques des colonnes de la table nom_table
¨ DESCRIBE nom_Table;
Les indexes
7
¨ Comme l’index d’un ouvrage vous aide à atteindre les
pages concernées par un mot recherché
¨ Le but principal d’un index est d’éviter de parcourir une
table séquentiellement du premier enregistrement jusqu’a
celui visé.
¨ Avantages:
¤ Accélérer les opérations de recherche, tris et jointure
¤ Mis à jours en temps réel des enregistrements
¤ Peut empêcher la saisie des doublons…
¨ Inconvénients:
¤ Les opérations de saisie et de maintenance sont ralentis
¤ Occupe de la place en mémoire sur le disque
Création des indexes
8
¨ Création d’un index lors de la création de la table
¤ Indexnom_index (liste des attributs)
¤ Exemple
CREATE TABLE Personne (
ID int UNSIGNED PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(40),
prenom VARCHAR(40),
Index nom (nom)
);
Création des indexes
9
¨ Création d’un index indépendamment de de la
création de la table
¤ CREATE INDEX index_name ON tbl_name
(index_col_name,...)
¤ index_col_name: col_name [(length)] [ASC | DESC]
¤ Exemple:
n Create index prenom on personne (prenom(3))
n Create index nom_prenom on personne (nom, prenom)
Création des clés étrangères
10
¨ [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name
(index_col_name, ...)
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
¨ Exemple:
CREATE TABLE parent
(
id INT NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE child
(
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE ON UPDATE CASCADE
);
Modifier une relation
11
¨ Il est possible de modifier la définition d’une
relation en utilisant la commande: ALTER TABLE.
Cette commande permet de:
¤ Ajouter/supprimer un attribut
¤ Créer/supprimer une clé primaire
¤ Ajouter une contrainte d’unicité (interdire les doublons)
¤ Changer la valeur par défaut d’un attribut
¤ Changer totalement la définition d’un attribut
¤ Changer le nom de la relation
¤ Ajouter/supprimer un index
Modifier une relation
12
¨ ALTER TABLE nom_table alter_specification
¨ alter_specification:
¤ |ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
¤ | ADD INDEX [index_name] (index_col_name,...)
¤ | ADD PRIMARY KEY (index_col_name,...)
¤ | ADD UNIQUE (index_col_name,...)
¤ ADD FOREIGN KEY (index_col_name,...) [reference_definition]
¤ | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
¤ | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
¤ | MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
¤ | DROP [COLUMN] col_name
¤ | DROP PRIMARY KEY
¤ | DROP INDEX index_name
¤ | DROP FOREIGN KEY fk_symbol
¤ | RENAME [TO] new_tbl_name
¨ Remarque: pour convertir le type de moteur de base de données pour une table donnée on
utilise l’instruction: ALTER TABLE nom_table ENGINE=InnoDB
Renommer une relation
13
¨ Syntaxe:
¤ RENAME
TABLE nom_de_table TO
nouveau_nom_de_table[, nom_de_table2 TO
nouveau_nom_de_table2,...]
¨ Exemple:
¤ RENAME Table ville TO city;
Supprimer une base de données
14
¨ L’instruction qui sert à supprimer une base de
données est la suivante:
n DROP DATABASE [IF EXISTS] nom_base;
¨ DROP DATABASE détruit toutes les tables dans la
base de données et l'efface elle même
¨ Exemple
n Drop database bibliotheque;
Supprimer une relation
15
¨ DROP [TEMPORARY] TABLE [IF EXISTS]
nom_table [, tbl_name] ...
¨ DROP TABLE supprime une ou plusieurs tables.
Toutes les données et la structure de la tables seront
perdues
¨ Exemple:
¤ Drop table personne;
Supprimer index
16
¨ Syntaxe
¤ DROP INDEX nom_de_l_index ON nom_de_table
¨ Exemple:
¤ DROP INDEX nom ON personne;
Contraintes d’intégrités référentielles (1)
17
¨ Les contraintes ont pour but de programmer des règles de
gestion au niveau des colonnes des tables.
¨ Alléger un développement côté client;
¨ Les contraintes peuvent être déclarées de deux manières :
¤ En même temps que la colonne (valable pour les contraintes
monocolonnes) ; ces contraintes sont dites « en ligne » (inline
constraints).
¤ Après que la colonne est déclarée ; ces contraintes ne sont pas
limitées à une colonne et peuvent être personnalisées par un nom
(out-of-line constraints).
¨ Il est recommandé de déclarer les contraintes NOT NULL
en ligne, les autres peuvent soit être déclarées en ligne, soit
être nommées.
Contraintes d’intégrités référentielles (2)
18
¨ Les quatre types de contraintes les plus utilisées sont les suivants :
¨ CONSTRAINT nomContrainte
UNIQUE (colonne1 [,colonne2]...)
CHECK (condition)
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}]
Contraintes d’intégrités référentielles (3)
19
¨ La contrainte UNIQUE impose des valeurs distinctes au niveau de la
table.
¨ La contrainte PRIMARY KEY déclare la clé primaire de la table. Un
index est généré automatiquement sur la ou les colonnes concernées.
¨ La contrainte FOREIGN KEY déclare une clé étrangère entre une
table enfant (child) et une table père (parent).
¤ Exemple :
n ALTER TABLE T_Cible
ADD CONSTRAINT fk_T_Source_T_Cible_ColCleEtr
FOREIGN KEY (Col_Cle_Etr)
REFERENCES T_Source(Col_Cle_Prim);
¨ La contrainte CHECK impose un domaine de valeurs ou une condition
simple ou complexe entre colonnes
¤ Exemple :
n CHECK (note BETWEEN 0 AND 20),
n CHECK (grade='Copilote' OR grade='Commandant’).
Contraintes d’intégrités référentielles (4)
20
Conventions de nommage recommandées :
¨ Il est fortement recommandé d’ adoptez les
conventions d’écriture suivantes pour vos contraintes :
¨ Préfixez par pk_ le nom d’une contrainte clé primaire,
fk_ une clé étrangère, ck_ une vérification, un_ une
unicite.
¨ Pour une contrainte clé primaire, suffixez du nom de la
table la contrainte (exemple pk_Etudiant).
¨ Pour une contrainte clé étrangère, renseignez (ou
abrégez) les noms de la table source, de la clé, et de la
table cible (exemple
fk_Filiere_Etudiant_CodeFil).
SGBD – MySQL
Chap. 3 : LMD
Ouadï Belmokhtar EMSI-Rabat
[email protected]LMD: Langage de Manipulation de
Données
¨ Permet la gestion de l’utilisation des données:
écriture, modification, suppression….
¨ Le langage de manipulation de données (LMD) est
constitué de trois instructions SQL :
¤ INSERT
¤ UPDATE
¤ DELETE
Ajouter un enregistrement
¨ L’instruction INSERT sert à insérer une nouvelle ligne
dans une table existante à partir de valeurs
explicitement fournies.
¨ L’insertion se fait ligne par ligne ou globalement
par l’ emploi d’autres tables comme source
d’alimentation.
Ajouter un enregistrement
¨ Syntaxe:
¤ INSERT INTO nom_table (liste des attributs) VALUES
(liste des valeurs)
¨ Exemple
¤ INSERT
INTO personne (nom, prenom)
values (‘Nom1’, ‘Prenom1’)
Ajouter un enregistrement
¨ Il est possible d’omettre la liste des noms d’attributs.
¤ Insert into personne values (1,
‘NOM1’, Prenom1’, ‘Rabat’);
/!\ Cela impose que la liste des valeurs suivant le
mot clé VALUES soit exactement dans l’ordre
précisé lors de la définition de la table
Ajouter un enregistrement
¨ Afin d’insérer plusieurs lignes dans la table:
¤ INSERT INTO nom_table VALUES (liste des valeurs), (liste
des valeurs), (liste des valeurs), …
¤ Exemple:
¤ Insert into personne values (1, ‘Nom1’, Prenom1’,
‘Rabat’), (2, ‘Nom1’, ‘Prenom1’, ‘Casa’), (1, ‘Nom1’,
‘Prenom1’, ‘Marrakech’)
Ajouter un enregistrement
¨ Il est possible également d’alimenter une table de
la base de données à partir d’une table existante
en utilisant la syntaxe:
¨ INSERT INTO table_destination [liste des
attributs]
SELECT chps1, chps2, …
FROM tabl_source [WHERE… ]
[Group by .. [having …]] [order by ]
Modifier un enregistrement
¨ Pour modifier un enregistrement dans une table il faut
préciser:
¤ Les attributs à modifier
¤ Les nouvelles valeurs que vont prendre ces attributs
¤ les critères de sélection de l’enregistrement
¨ Syntaxe:
Update nom_table
Set champs1 =val1, champs2=val2, …
[where ]
¨ Exemple :
¨ UPDATE Personnes SET ville = ‘rabat’ WHERE nom=‘Jacquier’
AND prenom = ‘Antoine’
Modifier un enregistrement
¨ Modification d’une seule ligne
n UPDATE Personnes SET ville = ‘rabat’ WHERE id = 1
¨ Modification de plusieurs lignes
n UPDATE Personnes SET ville = ‘rabat’ WHERE id > 1
¨ Modification de plusieurs champs
n UPDATEPersonnes SET nom = ‘Deormis’, prenom = ‘bruno’
WHERE id = 3
¨ Modification de toute la table
n UPDATE Personnes SET age = age+1
Supprimer un enregistrement
¨ Syntaxe:
¤ DELETE FROM nom_table
[WHERE condition]
¨ Exemple:
¤ Supprimer un seul enregistrement
n DELETE FROM personne WHERE id = 1
¤ Supprimer plusieurs enregistrements
n DELETE FROM personne WHERE id IN(1,2,3)
¤ Supprimer tous les enregistrements de la table personne
n DELETE FROM personne
SGBD – MySQL
Chap. 4 : LID (Langage d’Interrogation de Données)
Ouadï Belmokhtar EMSI-Rabat
[email protected]
Sélectionner un enregistrement
¨ Soit la base de données suivante:
¤ OUVRAGE (id_ouvrage, titre, nb_pages, prix_ht, quantité)
¤ ETUDIANT (num_etudiant, nom_etudiant, prenom_etudiant,
date_naissance)
¤ EMPRUNTER ( #id_ouvrage, #num_etudiant, date_emprunt,
date_retour_effective)
Sélectionner un enregistrement
SELECT [ DISTINCT ] attributs => Choix des attributs souhaités
FROM relation => Nom des tables sollicitées
[ WHERE condition ] => Conditions à respecter
[ ORDER BY attributs ] => Noms des attributs sur lesquels porte l’ordre
[GROUP BY attributs]=> Permet de grouper les lignes de résultats selon un ou
des attributs.
[HAVING condition] =>Définie un ou des critères de sélection sur des
ensembles de valeurs d’attributs après groupement.
Les rubriques « WHERE » , « ORDER BY », « GROUP BY » et «HAVING »
sont optionnelles et ne sont donc utilisées qu’en cas de besoin
Sélectionner un enregistrement
¨ Pour sélectionner tous les enregistrements d’une
relation :
SELECT * FROM relation
¤ Exemple
SELECT * FROM ouvrage
¨ Pour sélectionner toutes les valeurs d’un seul attribut :
SELECT attribut FROM relation
¤ Exemple:
SELECT titre FROM ouvrage
Sélectionner un enregistrement
¨ Le nom du champs représente le titre de la colonne.
L’utilisation de l’instruction « AS » permet d’utiliser
un nouveau titre appelé alias
SELECT titre as « Titre du livre » FROM ouvrage
Sélectionner un enregistrement
¨ Afin d’éliminer les doublons, il faut utiliser le mot clé
« distinct »
¨ Syntaxe:
¤ SELECT DISTINCT attribut FROM relation
¨ Exemple:
SELECT DISTINCT num_etudiant FROM
emprunter
Sélectionner un enregistrement
¨ Il est possible de spécifier ce que l’on veut
récupérer à partir de la base de données via des
expressions dans le select:
¨ Les opérateurs et fonctions utilisés sont :
¤ Opérateurs arithmétiques : +, -, *, /
¤ Expressions type chaîne : substr, length, concaténation
¤ Fonctions de calcul …..
Sélectionner un enregistrement
¨ Opérateur arithmétique
¤ On peut avoir à la place d’un nom de champs une
expression arithmétique utilisant des noms de champs, des
constantes et des opérateurs ou fonctions arithmétiques.
¤ On parle dans ce cas de champs calculé ou champ virtuel.
Exemple
¨ Récupérer le prix TTC de tous les ouvrages
SELECT titre, prix_ht * 1,2 AS
«prix_TTC» FROM ouvrage
Sélectionner un enregistrement
¨ Expressions type chaîne de caractères
¤ Onpeut avoir à la place d’un nom de champs une
expression type chaîne de caractères utilisant des noms
de champs, des constantes et des opérateurs ou
fonctions (substr(), length).
Sélectionner un enregistrement
¨ Expressions type chaîne de caractères
n LEFT(colonne,i) : renvoie les i caractères situés à gauche de la
colonne
n RIHGT(colonne,i) : renvoie les i caractères situés à DROITE de la
colonne
n SUBSTR(str,pos,len): en commençant par le caractère <pos> dans la
chaîne <str>, sélectionne les caractères <len> suivants
L’indice du premier caractère est: 1
n Length (str): affiche la taille de la chaine de caractère
n CONCAT (str1, str2, ….): Retourne une chaîne représentant la
concaténation des arguments
n CONCAT_WS (separator, str1, str2,….): concaténation avec
séparateur ". Le premier argument est le séparateur utilisé pour
séparer le reste des arguments
Sélectionner un enregistrement
¨ Exercice:
¤ SELECT substr( nom_ville, 1,3 ) FROM ville;
¤ SELECT substr( nom_ville, 2 ) FROM ville;
¤ SELECT length(nom_ville ) FROM ville;
¤ SELECT CONCAT( id , nom_ville ) FROM ville;
¤ SELECT CONCAT_WS(',' , id , nom_ville ) FROM ville;
¤ SELECT left( nom_ville, 3 ) FROM ville;
¤ SELECT right( nom_ville, 5 ) FROM ville;
Sélectionner un enregistrement
n Exemple: pour la table ville suivante:
Id Nom_ville
1 Rabat
2 Casablanca
3 Fès
n SELECT
substr( nom_ville, 1,3 ) FROM ville;=> affiche les 3
premiers caractères de chaque chaîne
Nom_ville
Rab
Cas
fès
Sélectionner un enregistrement
¨ SELECT substr( nom_ville, 2 ) FROM ville;=> affiche les
caractères à partir de la 2ème positions
Nom_ville
abat
asablanca
ès
¨ SELECT length(nom_ville ) FROM ville;
Nom_ville
5
10
3
Sélectionner un enregistrement
¨ SELECT CONCAT( id , nom_ville ) FROM ville;
Nom_ville
1Rabat
2Casablanca
3Fès
¨ SELECT CONCAT_WS(',' , id , nom_ville ) FROM
ville;
Nom_ville
1,Rabat
2,Casablanca
3,Fès
Sélectionner un enregistrement
¨ SELECT left( nom_ville, 3 ) FROM ville;
Nom_ville
Rab
Cas
Fès
¨ SELECT right( nom_ville, 5 ) FROM ville;
Nom_ville
Rabat
lanca
Fès
Sélectionner un enregistrement
¨ Fonctions de calcul
¤ On peut avoir dans les expressions arithmétiques des
fonctions standards de calcul de type
¤ comptage de lignes : count(*)
¤ Totalisation : sum(*)
¤ Moyenne, Maximum et Minimum : AVG, MAX et MIN
Sélectionner un enregistrement
¨ Exemple:
¤ SELECT count( nom_ville ) FROM ville
=> retourne le nombre d’entrées dans la table ville.
¤ Select sum(Quantité) From ouvrage
=> retourne la somme des valeurs de la colonne
quantité de la table ouvrage
Sélectionner un enregistrement
La clause WHERE
permet de spécifier les contraintes que doivent vérifier les
données voulues.
Ces contraintes auront la forme d’une expression logique
qui sera évaluée (vrais ou faux ) pour savoir si un
enregistrement (un tuple) fera ou ne fera pas partie du
résultat.
SELECT nom champ1, champ2,..
FROM table
WHERE condition;
Sélectionner un enregistrement
La clause WHERE
¨ Exemple:
¤ Récupérer les informations sur l’ouvrage ‘mysql’
Select * from ouvrage where titre = ‘mysql’
Sélectionner un enregistrement
La clause where
¨ Pour construire une condition on dispose de plusieurs
opérateurs
§ + - / *
§ Not, or, and
§ In, not in
§ Between, not between
§ Like, not like
§ = < > <> <= >=
Sélectionner un enregistrement
La clause WHERE
Exemples:
¨ Récupérer les ouvrages dont le prixTTC est supérieur à 100
(prix_TTC = prix_HT * 1,2)
n Select * from ouvrage where prix_HT *1,2 > 100
¨ Récupérer les ouvrages dont le prix_ht est inférieur à 100
et quantité égale à 0
n Select * from ouvrage where prix_ht< 100 and quantité = 0
¨ Récupérer les ouvrages dont la quantité est égale à l’une
des valeurs suivante: 10, 12, 13, 14
n Select * from ouvrage where quantité in (10, 12, 13, 14)
Sélectionner un enregistrement
La clause where
¨ Récupérer les ouvrages dont la quantité est entre 10 et
20
n Select * from ouvrage where quantité between 10 and 20
¨ Récupérer les ouvrages dont le titre commence par ‘M’
n Select * from ouvrage where titre like ‘M%’
¨ Récupérer les ouvrages dont le titre se termine par ‘BD’
n Select * from ouvrage where titre like ‘%BD’
¨ Récupérer les ouvrages dont le titre est composé de 7
caractères et se termine par ‘e’
n Select * from ouvrage where titre like ‘%e’ and length(titre) = 7
Sélectionner un enregistrement
¨ Manipulation des dates
current_date : renvoie la date du jour
Month() : renvoie le mois d’une colonne de type date
Year() : renvoie l’année d’une colonne de type date
Day(): renvoie le jour d’une colonne de type date
Sélectionner un enregistrement
¨ Utilisation de date
Exemples
n SELECT * FROM etudiant WHERE date_naissance= current_date
n SELECT * FROM etudiant WHERE month(date_naissance) = '03‘
n SELECT * FROM etudiant WHERE year(date_naissance) = '2012‘
n SELECT * FROM etudiant WHERE day(date_naissance) = ‘09'
Sélectionner un enregistrement
La clause order by
¨ La Clause ORDER BY permet de spécifier l’ordre dans
lequel on souhaite avoir le résultat.
¨ Cet ordre peut être ascendant ou descendant (ASC
ou DESC) et peut porter sur plusieurs colonnes
¨ Exemple: récupérer la liste des ouvrages triée par
ordre alphabétique des titres
n Select * From ouvrage Order by titre
¨ Si aucun des mots clé ASC ou DES n’est spécifié
MySQL par défaut effectue un trie croissant
Sélectionner un enregistrement
La clause order by
¨ Récupérer la liste des ouvrages dont le titre
commence par ‘M’ triée par ordre décroissant des
quantités
n SELECT
* FROM ouvrage WHERE titre LIKE ‘M%’ ORDER
BY quantité DESC
¨ Récupérer la liste de tous les ouvrages en triant le
titre par ordre croissant et la quantité par ordre
décroissant
n SELECT * FROM ouvrage ORDER BY Titre, quantité DESC
Sélectionner un enregistrement
La clause order by
¨ Les champs spécifiés dans le « Order by » doivent
nécessairement figurer au niveau du select, car cette
commande porte sur le résultat de la requête.
Sélectionner un enregistrement
Clause group by
¨ Cette clause effectue des calculs sur des groupes de
lignes sélectionnées et renvoie une seule ligne par
groupe. Il faudra donc :
¤ Définir comment constituer les groupes : par quel moyen
savoir qu’une ligne fait partie d’un tel groupe (group
by)
¤ Spécifier les calculs à effectuer : emploi de fonction de
calcul portant sur un ensemble de valeurs (count, avg,
min, max)
Sélectionner un enregistrement
Clause group by
¨ Il existe deux manières afin de spécifier le critère
de sélection sur les enregistrements
¤ Where: condition sur enregistrement avant le calcul
¤ Having: condition sur enregistrement après calcul
Sélectionner un enregistrement
Clause group by
¨ Syntaxe:
Select cg1, cg2,…., calcul1, calcul2, …
From tables à utiliser
[Where sélection avant calcul]
Group by cg1, cg2, …
[Having sélection après calcul]
[Order by nom de champs, alias ou numéro relative
dans le select]
Sélectionner un enregistrement
Clause group by
¨ Exemple: soit la table « chambre » suivante
ID Num_chambre Etage capacité
1 1 RDC 2
2 2 RDC 3
3 3 1er 2
4 4 1er 1
5 5 1er 3
6 6 2ième 2
7 7 2ième 2
Sélectionner un enregistrement
Clause group by
¨ Récupérer le nombre de chambres
Select count(*) as « nombre» from chambre
¨ Récupérer le nombre de chambres par étage
Select count(*), Etage from chambre group
by Etage
¨ Récupérer la capacité de toutes les chambres de
chaque étage.
Select sum(capacité), Etage from chambre
group by Etage
Sélectionner un enregistrement
Clause group by
¨ Récupérer le nombre de chambre par étage ayant
une capacité supérieure à 1
¤ Select
count(*) , Etage from chambre where capacité
> 1 group by Etage
¨ Récupérer les étages dont la capacité est
supérieure ou égale à 5 personnes
¤ Select
sum(capacité), Etage from chambre group by
Etage having sum(capacité) >= 5
Jointure
¨ Une jointure permet de rassembler des tables qui
sont en relation.
¨ Le mécanisme de jointure permet la navigation dans
les tables du modèle relationnel en utilisant des clés
étrangères
¨ Une jointure permet donc de combiner les colonnes
de plusieurs tables.
Jointure
¨ Syntaxe:
Select A.c1, A.c2,…, B.cc1, B.cc2, … Champs à concaténer
From tab1 A, tab2 B Tables à joindre
Where A.ci = B.ccj Champs de jointure
¨ A et B constituent des alias pour tab1 et tab2 mais ne sont pas
obligatoires.
¨ Les qualificatifs A. et B. ne sont nécessaires que s’il y’a ambiguïté
¨ Si le nombre de champs de jointure est supérieur à 1, alors il suffira
de les relier par un AND.
Jointure
¨ Soit la base de données suivante
Ouvrage (id_ouvrage, titre, nb_pages, prix, #id_auteur)
Auteur(id_auteur, nom_auteur, prénom_auteur,
date_naissance…)
¨ Récupérer toutes les informations sur les auteurs et
les ouvrages
¤ Select * from ouvrage O, Auteur a where O.id_auteur=
A.id_auteur
¤ Select id_ouvrage, titre, nb_page, prix, o.id_auteur,
nom_auteur, prénom_auteur, date_naissance from
ouvrage O, Auteur A where O.id_auteur = A.id_auteur
Jointure
¨ Récupérer les titres et les prix des ouvrages écrits
par l’auteur ‘Ahmed’
Select o.titre, o.prix, a.nom_auteur, a.prénom_auteur from
ouvrage o, auteur a where o.id_auteur = a.id_auteur
and a.prénom_auteur = ‘Ahmed‘
Les sous-requêtes
¨ Appelées aussi les requêtes imbriquées ou
requêtes en cascade
¨ Une sous requête est une requête à l’intérieur d’une
autre requête
¨ Une sous-requête peut être faite dans une requête
de type SELECT, INSERT, UPDATE ou DELETE …
¨ Une sous requête peut être utilisée au niveau du
FROM et au niveau des conditions WHERE ou
HAVING
Les sous-requêtes
¨ Sous requête au niveau du FROM
¤ Exemple
Récupérer le prix minimum des livres écrits par ‘Karim’
SELECT min( prix )
FROM (
SELECT o.titre, o.prix, a.nom, a.prenom
FROM ouvrage o, auteur a
WHERE o.id_auteur = a.id_auteur
AND a.prenom = ’Karim'
) AS prix_aut
Les sous-requêtes
¨ Sous requête au niveau des conditions
¤ Exemple
La liste des ouvrages écrits par Karim
SELECT titre, prix
FROM ouvrage
WHERE id_auteur
IN (
SELECT id_auteur
FROM auteur
WHERE prenom = ’Karim'
)
Les vues
¨ Une vue est une table virtuelle dans laquelle il est
possible de rassembler les données d’une ou
plusieurs tables
¨ On parle de vue car elle représente une fenêtre
par laquelle l’utilisateur voit la base de données.
¨ La vue assure à l’utilisateur une immunité contre
l’évolution de la base de données en terme :
ü De champs nouveaux dans une table,
ü De nouvelles tables qui se créent
Les vues
¨ Intérêt des vues:
¨ Assurer la confidentialité en faisant une restriction
sur les données à afficher (restriction sur les lignes
et les colonnes)
¨ Regroupement des informations nécessaires au sein
du même objet
Les vues
¨ Syntaxe
Create view nom_vue
( [champs1, champs2, …])
As
Select …. (requêtes classiques )
¨ Exemple: création d’une vue qui contient les informations sur les employés à
l’exception du salaire
CREATE VIEW emp_info( nom,
fonction,
embauche,
telephone,
ndept
) AS
SELECT nom, fonction, embauche, telephone, ndept
FROM employé
Les vues
¨ Une fois que la vue est créée, tout se passe pour
l’utilisateur comme si la vue était une table
physique qui existait et qui contient le profile des
données décrites dans le select de la vue
SGBD – MySQL
Chap. 4 : LMD
Ouadï Belmokhtar EMSI-Rabat
[email protected]
LMD: Langage de Manipulation de
Données
¨ Permet la gestion de l’utilisation des données:
écriture, modification, suppression….
¨ Le langage de manipulation de données (LMD) est
constitué de trois instructions SQL :
¤ INSERT
¤ UPDATE
¤ DELETE
Ajouter un enregistrement
¨ L’instruction INSERT sert à insérer une nouvelle
ligne dans une table existante à partir de valeurs
explicitement fournies.
¨ L’insertion se fait ligne par ligne ou globalement
par l’ emploi d’autres tables comme source
d’alimentation.
Ajouter un enregistrement
¨ Syntaxe:
¤ INSERT INTO nom_table (liste des attributs) VALUES
(liste des valeurs)
¨ Exemple
¤ INSERTINTO personne (nom, prenom)
values (‘Nom1’, ‘Prenom1’)
Ajouter un enregistrement
¨ Il est possible d’omettre la liste des noms d’attributs.
¤ Insert into personne values (1,
‘NOM1’, ‘Prenom1’, ‘Rabat’);
/!\ Cela impose que la liste des valeurs suivant le
mot clé VALUES soit exactement dans l’ordre
précisé lors de la définition de la table
Ajouter un enregistrement
¨ Afin d’insérer plusieurs lignes dans la table:
¤ INSERT INTO nom_table VALUES (liste des valeurs), (liste
des valeurs), (liste des valeurs), …
¤ Exemple:
¤ Insert into personne values (1, ‘Nom1’, ‘Prenom1’,
‘Rabat’), (2, ‘Nom2’, ‘Prenom2’, ‘Casa’), (3, ‘Nom3’,
‘Prenom3’, ‘Marrakech’)
Ajouter un enregistrement
¨ Il est possible également d’alimenter une table de
la base de données à partir d’une table existante
en utilisant la syntaxe:
¨ INSERT INTO table_destination [liste des attributs]
SELECT chps1, chps2, …
FROM tabl_source [WHERE… ]
[Group by .. [having …]] [order by ]
Modifier un enregistrement
¨ Pour modifier un enregistrement dans une table il faut
préciser:
¤ Les attributs à modifier
¤ Les nouvelles valeurs que vont prendre ces attributs
¤ les critères de sélection de l’enregistrement
¨ Syntaxe:
Update nom_table
Set champs1 =val1, champs2=val2, …
[where ]
¨ Exemple :
¨ UPDATE Personnes SET ville = ‘rabat’ WHERE nom=‘N1’ AND
prenom = ‘P1’
Modifier un enregistrement
¨ Modification d’une seule ligne
n UPDATE Personnes SET ville = ‘rabat’ WHERE id = 1
¨ Modification de plusieurs lignes
n UPDATE Personnes SET ville = ‘rabat’ WHERE id > 1
¨ Modification de plusieurs champs
n UPDATE Personnes SET nom = ‘N1’, prenom = ‘P1’ WHERE id
=3
¨ Modification de toute la table
n UPDATE Personnes SET age = age+1
Supprimer un enregistrement
¨ Syntaxe:
¤ DELETE FROM nom_table
[WHERE condition]
¨ Exemple:
¤ Supprimer un seul enregistrement
n DELETE FROM personne WHERE id = 1;
¤ Supprimer plusieurs enregistrements
n DELETE FROM personne WHERE id IN(1,2,3) ;
¤ Supprimer tous les enregistrements de la table personne
n DELETE FROM personne ;
SGBD – MySQL
Chap. 5 : LID (Langage d’Interrogation de Données)
Ouadï Belmokhtar EMSI-Rabat
[email protected] Sélectionner un enregistrement
2
¨ Soit la base de données suivante:
¤ OUVRAGE (id_ouvrage, titre, nb_pages, prix_ht, quantité)
¤ ETUDIANT (num_etudiant, nom_etudiant, prenom_etudiant,
date_naissance)
¤ EMPRUNTER ( #id_ouvrage, #num_etudiant, date_emprunt,
date_retour_effective)
Sélectionner un enregistrement
3
SELECT [ DISTINCT ] attributs => Choix des attributs souhaités
FROM relation => Nom des tables sollicitées
[ WHERE condition ] => Conditions à respecter
[ ORDER BY attributs ] => Noms des attributs sur lesquels porte l’ordre
[GROUP BY attributs]=> Permet de grouper les lignes de résultats selon un ou
des attributs.
[HAVING condition] =>Définie un ou des critères de sélection sur des
ensembles de valeurs d’attributs après groupement.
Les rubriques « WHERE » , « ORDER BY », « GROUP BY » et «HAVING »
sont optionnelles et ne sont donc utilisées qu’en cas de besoin
Sélectionner un enregistrement
4
¨ Pour sélectionner tous les enregistrements d’une
relation :
SELECT * FROM relation
¤ Exemple
SELECT * FROM ouvrage
¨ Pour sélectionner toutes les valeurs d’un seul attribut :
SELECT attribut FROM relation
¤ Exemple:
SELECT titre FROM ouvrage
Sélectionner un enregistrement
5
¨ Le nom du champs représente le titre de la colonne.
L’utilisation de l’instruction « AS » permet d’utiliser
un nouveau titre appelé alias
SELECT titre as « Titre du livre » FROM ouvrage
Sélectionner un enregistrement
6
¨ Afin d’éliminer les doublons, il faut utiliser le mot clé
« distinct »
¨ Syntaxe:
¤ SELECT DISTINCT attribut FROM relation
¨ Exemple:
SELECT DISTINCT num_etudiant FROM
emprunter
Sélectionner un enregistrement
7
¨ Il est possible de spécifier ce que l’on veut
récupérer à partir de la base de données via des
expressions dans le select:
¨ Les opérateurs et fonctions utilisés sont :
¤ Opérateurs arithmétiques : +, -, *, /
¤ Expressions type chaîne : substr, length, concaténation
¤ Fonctions de calcul …..
Sélectionner un enregistrement
8
¨ Opérateur arithmétique
¤ On peut avoir à la place d’un nom de champs une
expression arithmétique utilisant des noms de champs, des
constantes et des opérateurs ou fonctions arithmétiques.
¤ On parle dans ce cas de champs calculé ou champ virtuel.
Exemple
¨ Récupérer le prix TTC de tous les ouvrages
SELECT titre, prix_ht * 1.2 AS
«prix_TTC» FROM ouvrage
Sélectionner un enregistrement
9
¨ Expressions type chaîne de caractères
¤ On peut avoir à la place d’un nom de champs une
expression type chaîne de caractères utilisant des noms
de champs, des constantes et des opérateurs ou
fonctions (substr(), length).
Sélectionner un enregistrement
10
¨ Expressions type chaîne de caractères
n LEFT(colonne,i) : renvoie les i caractères situés à gauche de la
colonne
n RIGHT(colonne,i) : renvoie les i caractères situés à DROITE de la
colonne
n SUBSTR(str,pos,len): en commençant par le caractère <pos> dans la
chaîne <str>, sélectionne les caractères <len> suivants
L’indice du premier caractère est: 1
n Length (str): affiche la taille de la chaine de caractère
n CONCAT (str1, str2, ….): Retourne une chaîne représentant la
concaténation des arguments
n CONCAT_WS (separator, str1, str2,….): concaténation avec
séparateur ". Le premier argument est le séparateur utilisé pour
séparer le reste des arguments
Sélectionner un enregistrement
11
¨ Exercice:
¤ SELECT substr( nom_ville, 1,3 ) FROM ville;
¤ SELECT substr( nom_ville, 2 ) FROM ville;
¤ SELECT length(nom_ville ) FROM ville;
¤ SELECT CONCAT( id , nom_ville ) FROM ville;
¤ SELECT CONCAT_WS(',' , id , nom_ville ) FROM ville;
¤ SELECT left( nom_ville, 3 ) FROM ville;
¤ SELECT right( nom_ville, 5 ) FROM ville;
Sélectionner un enregistrement
12
¨ Exercice :
¤ Afficher les trois premiers caractères des noms des
villes;
¤ Les noms des villes à partir du deuxième caractère;
¤ La longueur des noms des villes;
¤ Concaténer l’id et les noms des villes;
¤ Concaténer l’id et les noms des villes séparés par “,”
¤ Les trois premiers caractères des noms des villes
¤ Les cinq derniers caractères des noms des villes
Sélectionner un enregistrement
13
n Exemple: pour la table ville suivante:
Id Nom_ville
1 Rabat
2 Casablanca
3 Fès
n SELECT substr( nom_ville, 1,3 ) FROM ville;=> affiche les 3
premiers caractères de chaque chaîne
Nom_ville
Rab
Cas
fès
Sélectionner un enregistrement
14
¨ SELECT substr( nom_ville, 2 ) FROM ville;=> affiche les
caractères à partir de la 2ème positions
Nom_ville
abat
asablanca
ès
¨ SELECT length(nom_ville ) FROM ville;
Nom_ville
5
10
3
Sélectionner un enregistrement
15
¨ SELECT CONCAT( id , nom_ville ) FROM ville;
Nom_ville
1Rabat
2Casablanca
3Fès
¨ SELECT CONCAT_WS(',' , id , nom_ville ) FROM
ville;
Nom_ville
1,Rabat
2,Casablanca
3,Fès
Sélectionner un enregistrement
16
¨ SELECT left( nom_ville, 3 ) FROM ville;
Nom_ville
Rab
Cas
Fès
¨ SELECT right( nom_ville, 5 ) FROM ville;
Nom_ville
Rabat
lanca
Fès
Sélectionner un enregistrement
17
¨ Fonctions de calcul
¤ On peut avoir dans les expressions arithmétiques des
fonctions standards de calcul de type
¤ comptage de lignes : count(*)
¤ Totalisation : sum(*)
¤ Moyenne, Maximum et Minimum : AVG, MAX et MIN
Sélectionner un enregistrement
18
¨ Exemple:
¤ SELECT count( nom_ville ) FROM ville
=> retourne le nombre d’entrées dans la table ville.
¤ Select sum(Quantité) From ouvrage
=> retourne la somme des valeurs de la colonne
quantité de la table ouvrage
Sélectionner un enregistrement
19
La clause WHERE
permet de spécifier les contraintes que doivent vérifier les
données voulues.
Ces contraintes auront la forme d’une expression logique
qui sera évaluée (vrais ou faux ) pour savoir si un
enregistrement (un tuple) fera ou ne fera pas partie du
résultat.
SELECT nom champ1, champ2,..
FROM table
WHERE condition;
Sélectionner un enregistrement
20
La clause WHERE
¨ Exemple:
¤ Récupérer les informations sur l’ouvrage ‘mysql’
Select * from ouvrage where titre = ‘mysql’
Sélectionner un enregistrement
21
La clause where
¨ Pour construire une condition on dispose de plusieurs
opérateurs
§ + - / *
§ Not, or, and
§ In, not in
§ Between, not between
§ Like, not like
§ = < > <> <= >=
Sélectionner un enregistrement
22
¨ Exercice:
¤ Récupérer les ouvrages dont le prixTTC est supérieur à 100
¤ Récupérer les ouvrages dont le prix_ht est inférieur à 100
et quantité égale à 0
¤ Récupérer les ouvrages dont la quantité est égale à l’une
des valeurs suivante: 10, 12, 13, 14
¤ Récupérer les ouvrages dont la quantité est entre 10 et 20
¤ Récupérer les ouvrages dont le titre commence par ‘M’
¤ Récupérer les ouvrages dont le titre se termine par ‘BD’
¤ Récupérer les ouvrages dont le titre est composé de 7
caractères et se termine par ‘e’
Sélectionner un enregistrement
23
La clause WHERE
Exemples:
¨ Récupérer les ouvrages dont le prixTTC est supérieur à 100
(prix_TTC = prix_HT * 1,2)
n Select * from ouvrage where prix_HT *1,2 > 100
¨ Récupérer les ouvrages dont le prix_ht est inférieur à 100
et quantité égale à 0
n Select * from ouvrage where prix_ht< 100 and quantité = 0
¨ Récupérer les ouvrages dont la quantité est égale à l’une
des valeurs suivante: 10, 12, 13, 14
n Select * from ouvrage where quantité in (10, 12, 13, 14)
Sélectionner un enregistrement
24
La clause where
¨ Récupérer les ouvrages dont la quantité est entre 10 et
20
n Select * from ouvrage where quantité between 10 and 20
¨ Récupérer les ouvrages dont le titre commence par ‘M’
n Select * from ouvrage where titre like ‘M%’
¨ Récupérer les ouvrages dont le titre se termine par ‘BD’
n Select * from ouvrage where titre like ‘%BD’
¨ Récupérer les ouvrages dont le titre est composé de 7
caractères et se termine par ‘e’
n Select * from ouvrage where titre like ‘%e’ and length(titre) = 7
Sélectionner un enregistrement
25
¨ Manipulation des dates
current_date : renvoie la date du jour
Month() : renvoie le mois d’une colonne de type date
Year() : renvoie l’année d’une colonne de type date
Day(): renvoie le jour d’une colonne de type date
Sélectionner un enregistrement
26
¨ Utilisation de date
Exemples
n SELECT * FROM etudiant WHERE date_naissance= current_date
n SELECT * FROM etudiant WHERE month(date_naissance) = '03‘
n SELECT * FROM etudiant WHERE year(date_naissance) = '2012‘
n SELECT * FROM etudiant WHERE day(date_naissance) = ‘09'
Sélectionner un enregistrement
27
La clause order by
¨ La Clause ORDER BY permet de spécifier l’ordre dans
lequel on souhaite avoir le résultat.
¨ Cet ordre peut être ascendant ou descendant (ASC
ou DESC) et peut porter sur plusieurs colonnes
¨ Exemple: récupérer la liste des ouvrages triée par
ordre alphabétique des titres
n Select * From ouvrage Order by titre
¨ Si aucun des mots clé ASC ou DES n’est spécifié
MySQL par défaut effectue un trie croissant
Sélectionner un enregistrement
28
La clause order by
¨ Récupérer la liste des ouvrages dont le titre
commence par ‘M’ triée par ordre décroissant des
quantités
n SELECT * FROM ouvrage WHERE titre LIKE ‘M%’ ORDER
BY quantité DESC
¨ Récupérer la liste de tous les ouvrages en triant le
titre par ordre croissant et la quantité par ordre
décroissant
n SELECT * FROM ouvrage ORDER BY Titre, quantité DESC
Sélectionner un enregistrement
29
La clause order by
¨ Les champs spécifiés dans le « Order by » doivent
nécessairement figurer au niveau du select, car cette
commande porte sur le résultat de la requête.
Sélectionner un enregistrement
30
Clause group by
¨ Cette clause effectue des calculs sur des groupes de
lignes sélectionnées et renvoie une seule ligne par
groupe. Il faudra donc :
¤ Définir comment constituer les groupes : par quel moyen
savoir qu’une ligne fait partie d’un tel groupe (group
by)
¤ Spécifier les calculs à effectuer : emploi de fonction de
calcul portant sur un ensemble de valeurs (count, avg,
min, max)
Sélectionner un enregistrement
31
Clause group by
¨ Il existe deux manières afin de spécifier le critère
de sélection sur les enregistrements
¤ Where: condition sur enregistrement avant le calcul
¤ Having: condition sur enregistrement après calcul
Sélectionner un enregistrement
32
Clause group by
¨ Syntaxe:
Select cg1, cg2,…., calcul1, calcul2, …
From tables à utiliser
[Where sélection avant calcul]
Group by cg1, cg2, …
[Having sélection après calcul]
[Order by nom de champs, alias ou numéro relative
dans le select]
Sélectionner un enregistrement
33
Clause group by
¨ Exemple: soit la table « chambre » suivante
ID Num_chambre Etage capacité
1 1 RDC 2
2 2 RDC 3
3 3 1er 2
4 4 1er 1
5 5 1er 3
6 6 2ième 2
7 7 2ième 2
Sélectionner un enregistrement
34
¨ Exercice:
¨ Récupérer le nombre de chambres
¨ Récupérer le nombre de chambres par étage
¨ Récupérer la capacité de toutes les chambres de
chaque étage.
¨ Récupérer le nombre de chambre par étage ayant
une capacité supérieure à 1
¨ Récupérer les étages dont la capacité est
supérieure ou égale à 5 personnes
Sélectionner un enregistrement
35
Clause group by
¨ Récupérer le nombre de chambres
Select count(*) as « nombre» from chambre
¨ Récupérer le nombre de chambres par étage
Select count(*), Etage from chambre group
by Etage
¨ Récupérer la capacité de toutes les chambres de
chaque étage.
Select sum(capacité), Etage from chambre
group by Etage
Sélectionner un enregistrement
36
Clause group by
¨ Récupérer le nombre de chambre par étage ayant
une capacité supérieure à 1
¤ Selectcount(*) , Etage from chambre where capacité
> 1 group by Etage
¨ Récupérer les étages dont la capacité est
supérieure ou égale à 5 personnes
¤ Selectsum(capacité), Etage from chambre group by
Etage having sum(capacité) >= 5
Jointure
37
¨ Une jointure permet de rassembler des tables qui
sont en relation.
¨ Le mécanisme de jointure permet la navigation dans
les tables du modèle relationnel en utilisant des clés
étrangères
¨ Une jointure permet donc de combiner les colonnes
de plusieurs tables.
Jointure
38
¨ Syntaxe:
Select A.c1, A.c2,…, B.cc1, B.cc2, … Champs à concaténer
From tab1 A, tab2 B Tables à joindre
Where A.ci = B.ccj Champs de jointure
¨ A et B constituent des alias pour tab1 et tab2 mais ne sont pas
obligatoires.
¨ Les qualificatifs A. et B. ne sont nécessaires que s’il y’a ambiguïté
¨ Si le nombre de champs de jointure est supérieur à 1, alors il suffira
de les relier par un AND.
Jointure
39
¨ Soit la base de données suivante
Ouvrage (id_ouvrage, titre, nb_pages, prix, #id_auteur)
Auteur(id_auteur, nom_auteur, prénom_auteur,
date_naissance)
¨ Récupérer toutes les informations sur les auteurs et
les ouvrages
¤ Select * from ouvrage O, Auteur A where O.id_auteur=
A.id_auteur
¤ Select id_ouvrage, titre, nb_page, prix, o.id_auteur,
nom_auteur, prénom_auteur, date_naissance from
ouvrage O, Auteur A where O.id_auteur = A.id_auteur
Jointure
40
¨ Récupérer les titres et les prix des ouvrages écrits
par l’auteur ‘Ahmed’
Select o.titre, o.prix, a.nom_auteur, a.prénom_auteur from
ouvrage o, auteur a where o.id_auteur = a.id_auteur
and a.prénom_auteur = ‘Ahmed‘
Différence entre INNER JOIN, LEFT
41
JOIN et RIGHT JOIN
¨ On dispose de 2 tables Produits et Acheteurs contenant les enregistrements suivants :
INNER JOIN :
42
§ INNER JOIN et le virgule dans une jointure entre 2 tables table
sont équivalents
§ MySQL affiche les enregistrements de la 1ère table (acheteurs)
ayant une correspondance dans la 2ème table (produits).
LEFT JOIN :
43
¨ Dans le cas de LEFT JOIN, mysql commence par la table gauche
(acheteurs).
¨ Pour chaque enregistrement de la table acheteurs, il retourne le
nom_prod correspondant à l’id_prod dans la table acheteurs.
¨ Pour les enregistrements qui n’ont pas de correspondance dans la table
produit il leurs affecte NULL.
RIGHT JOIN :
44
¨ Dans ce cas, MySQL commence par la table droite (produit).
¨ Pour chaque enregistrement de la table produit, il cherche dans la table
gauche (acheteurs) le nom_ach et quantite dont le id_prod correspondant à
celui dans la table acheteurs.
¨ Pour les enregistrements qui n’ont pas de correspondance dans la table
acheteurs il leur affecte NULL
Exercice :
45
¨ Une gestion d’hôtel comporte, entre autres, les tables
CHAMBRE_CHB, avec le numéro des différentes
chambres existantes et PLANNING_PLN contenant 3
colonnes : le numéro de la chambre, la date et une
colonne contenant une représentation booléenne pour
indiquer si la chambre est libre ou non. L’hôtel de notre
exemple comporte 4 chambres numérotées de 1 à 4, et
la table planning ne contient que des lignes pour les
chambres réservées ou occupées. En principe, les
chambres libres à une date donnée ne sont pas
représentées dans la table PLANNING_PLN, sauf si la
colonne PLN_LIBRE est valuée à True.
JOINTURE : Exercice
46
¨ CREATE TABLE CHAMBRE_CHB (CHB_NUM
INTEGER);
¤ INSERT INTO CHAMBRE_CHB VALUES (1), (2), (3), (4) ;
¨ CREATE TABLE PLANNING_PLN (PLN_JOUR DATE,
CHB_NUM INTEGER, PLN_LIBRE CHAR(5));
¤ INSERT INTO PLANNING_PLN VALUES ('2000-01-12',
1, 'False'), ('2000-01-12', 2, 'False'), ('2000-01-13', 1,
'False'), ('2000-01-13', 2, 'False'), ('2000-01-13', 4,
'True' ) ;
JOINTURE : Exercice
47
Les sous-requêtes
48
¨ Appelées aussi les requêtes imbriquées ou
requêtes en cascade
¨ Une sous requête est une requête à l’intérieur d’une
autre requête
¨ Une sous-requête peut être faite dans une requête
de type SELECT, INSERT, UPDATE ou DELETE …
¨ Une sous requête peut être utilisée au niveau du
FROM et au niveau des conditions WHERE ou
HAVING
Les sous-requêtes
49
¨ Sous requête au niveau du FROM
¤ Exemple
Récupérer le prix minimum des livres écrits par ‘Karim’
SELECT min( prix )
FROM (
SELECT o.titre, o.prix, a.nom, a.prenom
FROM ouvrage o, auteur a
WHERE o.id_auteur = a.id_auteur
AND a.prenom = ’Karim'
) AS prix_aut
Les sous-requêtes
50
¨ Sous requête au niveau des conditions
¤ Exemple
La liste des ouvrages écrits par Karim
SELECT titre, prix
FROM ouvrage
WHERE id_auteur
IN (
SELECT id_auteur
FROM auteur
WHERE prenom = ’Karim'
)
Les vues
51
¨ Une vue est une table virtuelle dans laquelle il est
possible de rassembler les données d’une ou
plusieurs tables
¨ On parle de vue car elle représente une fenêtre
par laquelle l’utilisateur voit la base de données.
¨ La vue assure à l’utilisateur une immunité contre
l’évolution de la base de données en terme :
ü De champs nouveaux dans une table,
ü De nouvelles tables qui se créent
Les vues
52
¨ Intérêt des vues:
¨ Assurer la confidentialité en faisant une restriction
sur les données à afficher (restriction sur les lignes
et les colonnes)
¨ Regroupement des informations nécessaires au sein
du même objet
Les vues
53
¨ Syntaxe
Create view nom_vue
( [champs1, champs2, …])
As
Select …. (requêtes classiques )
¨ Exemple: création d’une vue qui contient les informations sur les employés à
l’exception du salaire
CREATE VIEW emp_info( nom,
fonction,
embauche,
telephone,
ndept
) AS
SELECT nom, fonction, embauche, telephone, ndept
FROM employé
Les vues
54
¨ Une fois que la vue est créée, tout se passe pour
l’utilisateur comme si la vue était une table
physique qui existait et qui contient le profile des
données décrites dans le select de la vue
SGBD – MySQL
Chap. 6 : LCD (Langage de Contrôle de Données)
Ouadï Belmokhtar EMSI-Rabat
[email protected] Langage de Contrôle de Données (LCD)
2
¨ Système multi-utilisateurs :
¨ l'usager de la BD doit être identifié avant de pouvoir l’utiliser ;
¨ les accès aux informations et à la base de données doivent être contrôlés à des fins
de sécurité et de cohérence ;
Définition
3
¨ Le contrôle des données signifie :
¨ la gestion des utilisateurs qui manipuleront des
bases de données dans lesquelles se trouvent des
objets (tables, vues, procédures, etc. ) ;
¨ la gestion des privilèges qui permettent de donner
des droits sur la base de données (privilèges
système) et sur les données de la base (privilèges
objet) ;
¨ la gestion des vues ;
¨ les instructions du DCL sont : GRANT, REVOKE
Gestion des utilisateurs
4
¨ Un utilisateur (user) est identifié dans un SGBD par
son nom et celui de la machine à partir de laquelle
il se connecte.
¨ Il pourra accéder à différents objets (tables, vues,
procédures, etc.) d’une ou de plusieurs bases sous
réserve d’avoir reçu un certain nombre de
privilèges.
Gestion des utilisateurs
5
Classification :
Pour chaque base de données en activité, on peut
classifier les utilisateurs de la manière suivante :
¨ Le DBA (Database Administrator) qui peut être chargé
des tâches suivantes :
¤ installation et mises à jour de la base et des éventuels outils;
¤ gestion de l’espace disque et des espaces pour les données;
¤ gestion des utilisateurs et de leurs objets;
¤ optimisation des performances ;
¤ sauvegardes, restaurations et archivages ;
Gestion des utilisateurs
6
Classification :
¨ L’administrateur réseau (qui peut être le DBA) se charge de
la configuration des couches client pour les accès distants.
¨ Les développeurs qui conçoivent et mettent à jour la base. Ils
peuvent aussi agir sur leurs objets (création et modification
des tables, etc.).
¨ Les administrateurs d’application qui gèrent les donnée s
manipulées par la ou les applications.
¨ Les utilisateurs qui se connectent et interagissent avec la
base à travers les applications ou à l’aide d’outils
(interrogations pour la génération de rapports, ajouts,
modifications ou suppressions d’enregistrements).
Gestion des utilisateurs
7
Création d’un utilisateur (CREATE USER) :
¨ La création des utilisateurs nécessite le privilège CREATE USER
CREATE USER utilisateur
[IDENTIFIED BY [PASSWORD] 'motdePasse'];
¨ Par défaut, un utilisateur crée a seulement le droit de lecture sur la BD
information_schema.
L’utilisateur root:
¨ Le root est l’administrateur de base de données qu’offre MySQL. Il permet
d’effectuer les tâc hes administratives.
Liste des utilisateurs:
¨ La table user de la BD mysql contient les informations sur les utilisateurs
connus du serveur.
¨ Pour extraire la liste des utilisateurs :
Select user, host from mysql.user;
Gestion des utilisateurs
8
Modifier un utilisateur :
¨ Pour modifier un utilisateur, il faut modifier dans la
table mysql.user la valeur du champs
Password.
¨ Exemple:
UPDATE mysql.user
SET Password = PASSWORD('eyrolles')
WHERE User = 'soutou‘ AND Host = 'localhost';
FLUSH PRIVILEGES;
Gestion des utilisateurs
9
¨ Renommer un utilisateur :
¨ Renommer les utilisateurs nécessite le privilège CREATE
USER ou celui de UPDATE sur la BD mysql.
RENAME USER utilisateur TO nouveauNom;
¨ Exemples:
¨ RENAME USER user1@localhost to user2@localhost
¨ RENAME USER user1@localhost to [email protected]
¨ RENAME USER [email protected] to user1@localhost
Gestion des utilisateurs
10
¨ Supprimer un utilisateur :
¨ La suppression des utilisateurs exige de posséder le
privilège CREATE USER ou celui de UPDATE sur la BD
mysql.
DROP USER nom_utilisateur [,utilisateur2]
¨ La suppression d’un utilisateur n’est possible que s’il n’est
pas connecté.
¨ Exemples:
¨ DROP USER user1@local
¨ Supprimer user1 en local
Gestion des Privilèges
11
¨ Un privilège est un droit d’exécuter une certaine instruction SQL (privilège système),
ou un droit relatif aux données des tables(privilège objet).
¨ Les privilèges sont attribués par la commande GRANT et retirés par REVOKE.
Niveaux de privilèges
¨ Global level : Ils s’appliquant à toutes les bases du serveur. Stockés dans la table
mysql.user
GRANT CREATE ON *.*
¨ Database level : Ils s’ appliquent à tous les objets d’une base de données en
particulier.
¨ Stockés dans mysql.db et mysql.host
GRANT SELECT ON mybd.*
¨ Table level : Ils s’appliquent à la globalité d’une table d’une base de données en
particulier.
¨ Ils sont stockés dans la table mysql.tables_priv.
GRANT INSERT ON mydb.Client
Gestion des Privilèges
12
¨ Column level : Ils s’appliquant à une des colonnes
d’une table d’une base de données en particulier.
¨ Ils sont stockés dans la table mysql.columns_priv
GRANT UPDATE (nomComp) ON Gest_etud.Etudiant
¨ Routine level : Ils s’appliquent s’appliquant aux
procédures cataloguées.
¨ Ils sont stockés dans la table mysql.procs_priv.
GRANT EXECUTE ON PROCEDURE Gest_etud.proc_AjoutEtud
Gestion des Privilèges
13
¨ Description des privilèges dans la table mysql.user
¨ Privilèges objet (LDD)
Gestion des Privilèges
14
¨ Privilèges système (LCD)
Gestion des Privilèges
15
¨ Privilèges à propos des vues
Gestion des Privilèges
16
¨ Privilèges à propos des procédures stockés
Gestion des Privilèges
17
¨ Privilèges à propos des restrictions d’utilisateurs
Gestion des Privilèges
18
¨ Attribution de privilèges (GRANT)
¨ Syntaxe:
¨ privilège : Description du privilège (select, delete,insert, ...).
¨ col : Précise les colonnes sur lesquelles portes les privilèges insert,
delete ou select.
¨ GRANT OPTIONS : Donne le droit de retransmettre les privilèges
reçus à un autre utilisateur.
Gestion des Privilèges
19
¨ Types de privilèges:
Gestion des Privilèges
20
¨ Exemple 1:
Grant Create on MyDB.* to 'user1';
¨ Privilège système Database level.
¨ Attribut le droit de création de tables dans la BD
MyDB à user1
Gestion des Privilèges
21
¨ Exemple 2:
¨ GRANT Insert, Delete, Select on
MyDB.Client to 'user1';
¨ Privilège objet Table level
¨ Attribut le droit d’insérer, de supprimer et d’extraire
de la table Client faisant partie de la BD MyDB.
Gestion des Privilèges
22
¨ Exemple 3:
¨ Grant Update(Nom), Select(NOC) on
MyDB.Client to 'user1';
¨ Privilège objet Column level
¨ Attribut le droit d’extraire de la colonne NOC et de
modifier la colonne Nom au niveau de la table
MyDB.Client.
Gestion des Privilèges
23
¨ Afficher les privilèges :
¨ Syntaxe:
SHOW GRANTS for ‘utilisateur’
¨ Exemple:
Gestion des Privilèges
24
¨ Révocation de privilèges (REVOKE) :
¨ Syntaxe:
¨ REVOKE privilège [ (col1 [, col2...])]
[,privilège2 ... ] ON [ {TABLE | FUNCTION |
PROCEDURE} ] {nomTable | * | *.* | nomBase.*}
FROM utilisateur [,utilisateur2 ... ];
Gestion des Privilèges
25
¨ Exemples:
Revoke Create on MyDB.* from 'user1';
¨ Privilège système Database level
¨ Enlève le droit de création de tables dans la BD MyDB
pour user1
Revoke Select(NOC) on MyDB.Client from 'user1';
¨ Privilège objet Column level
¨ Enlève le droit d’extraction de la colonne NOC dans la
table Client pour user1
Revoke all Privileges, Grant Option from 'user1';
¨ Enlève tous les privilèges attribués à un utilisateur.
Gestion des Privilèges
26