Implémentation d’une BD 
sur MySQL 
et initiation au SQL 
UCAD/FST/DMI/LPCM 
M. DIENG Abdoulaye Mars 2011
Sommaire 
1. Qu’est ce que MySQL? 
2. Qu’est ce que SQL? 
3. Création et sélection d’une BD 
4. Création d’une table 
Les types de données MySQL 
5. Maintenance d’une table 
6. Insertion de données 
7. Mise à jour et suppression de données 
8. Consultation de données 
9. Droits d’accès aux données
MySQL 
késako? 
• Système de gestion de base de données relationnelles. 
• Logiciel permettant de créer des bases de données, de les 
exploiter (en y effectuant notamment des recherches des 
modifications ou des tris) et de contrôler l’accès aux données. 
• Ses principaux concurrents sont PostgreSQL, MS SQL Server, 
DB2 et Oracle mais ses atouts majeurs sont: 
 performances élevées; 
 coût réduit et accessibilité du code source; 
 simplicité de configuration et d’apprentissage; 
 portabilité; 
 communication aisée avec la plupart des langages de 
programmation (C, C++, VB, C#, PHP, Python, Java, Perl, ...) 
 Wikipedia, Google, Yahoo!, Youtube, Adobe, Airbus, AFP, 
Reuters, BBC News, Alcatel-Lucent utilisent tous MySQL.
MySQL 
historique 
• 1994 : l’entreprise australienne Hugues Technologies développe 
le SGBD mSQL (mini-SQL). 
• Mai 1995 : la société suédoise MySQL AB crée la 1ère version de 
MySQL à partir de mSQL. 
• Juin 2000 : MySQL passe en licence GPL avec sa version 3. 
• Mars 2003 : stabilisation de la version 4 avec le moteur 
transactionnel InnoDB 
• Octobre 2005 : stabilisation de la version 5 et rachat du moteur 
transactionnel InnoDB par Oracle Corporation. 
• Avril 2007 : première version alpha de la version 6 avec 
intégration du moteur transactionnel Falcon (alternative libre 
d’innoDB) 
• Janvier 2008 : rachat de MySQL AB par Sun Microsystems 
• Avril 2009 : rachat de Sun Microsystems par Oracle Corporation 
approuvé en janvier 2010 par la commission européenne.
MySQL 
connexion au serveur 
• MySQL fonctionne en mode client-serveur. 
• Avec EasyPHP, il y a +ieurs manières de se connecter au serveur: 
 en ligne de commande 
1) Lancer la console DOS en cliquant sur exécuter du menu démarrer. 
2) Se mettre sur le répertoire des exécutables de mysql : 
cd C:Program FilesEasyPHP1-8mysqlbin 
3) Taper mysql –u root –h localhost 
pour que le client mysql se connecte au serveur mysql local 
(localhost) avec l’utilisateur root (administrateur) sans mot de passe 
 avec l’interface graphique PhPMyAdmin 
click droit sur l’icône d’EasyPHP>administration>Gestion BDD 
 avec des scripts (écrit en PHP par exemple) 
$id_cnx=mysql_connect('localhost', 'root', '') 
• Dans tous les cas, une fois la connexion au serveur établie, la 
communication se fait avec un langage appelé SQL (Structured 
Query Language)
SQL 
késako? 
• SQL (Structured query language ou langage structuré de 
requêtes) est un pseudo-langage informatique (de type 
requête) standard et normalisé (documenté). 
• SQL est destiné à créer, à manipuler et à contrôler une base 
de données relationnelle avec : 
– un langage de définition de données (LDD); 
– un langage de manipulation de donnée (LMD); 
– un langage de contrôle de données (LCD); 
– un langage de contrôle des transactions (LCT). 
• Ce cours se focalisera sur les trois premiers langages. 
• SQL est adopté par les principaux SGBDR (DB2, Microsoft 
Access, MySQL, PostgreSQL, Oracle, …)
SQL 
historique 
• 1970 : Edgar Codd d’IBM crée le modèle relationnel qui inspira 
le développement du langage SEQUEL (Structured English Query 
Language ou langage d'interrogation structuré en anglais). 
• 1975 : Donald Chamberlain et Raymond Boyce d’IBM 
contractent le SEQUEL en SQL 
• 1986 : première norme SQL1 
• 1992 : SQL2 = SQL1 + de nouvelles instructions (ex : JOIN) 
• 1999 : SQL3 = SQL2 + approche orienté objet 
• 2003 : SQL2003 = SQL3 + quelques modifications mineures 
(ex: SQL/XML) 
• 2008 : SQL2008 = SQL2003 + quelques modifications mineures 
(ex: limitation du nbr de lignes sélectionnées OFFSET/FETCH)
Les identificateurs de MySQL 
• Un identificateur est un nom donné à une base de données, 
une table, un attribut ou un alias. 
• Un identificateur est formé de lettres alphabétiques et de 
chiffres ainsi que du caractère _ (espace souligné) permettant 
une plus grande lisibilité. 
• Il comporte au maximum 64 caractères donc doit être explicite 
• Les bases de données et les tables sont codées directement 
dans le système de fichiers : Windows n’est pas sensible à la 
casse de MySQL, tandis que Unix l’est. 
• Le point « . » est un caractère réservé utilisé comme séparateur 
entre le nom d’une base et celui d’une table ou entre le nom 
d’une table et celui d’un attribut. 
• Eviter d’utiliser les mots réservés du SQL ou du MySQL comme 
identificateur
Création et sélection d’une BD 
• Avec MySQL, les bases de données sont implémentées 
comme des répertoires contenant des fichiers qui 
correspondent aux tables dans les bases de données. 
• Une base de données se crée avec : 
CREATE DATABASE [IF NOT EXISTS] nom_de_la_base; 
• La création d'une base de données ne la sélectionne pas pour 
l'utilisation ; il faut le faire explicitement avec: 
USE nom_de_la_base; 
• Une base de données est détruite par: 
DROP DATABASE [IF EXISTS] nom_de_la_base;
Création d’une table 
syntaxe 
CREATE TABLE [IF NOT EXISTS] nomTable( 
nomAttribut1 typeAttribut1 [NOT NULL][AUTO_INCREMENT], 
nomAttribut2 typeAttribut2 [NOT NULL], 
… 
PRIMARY KEY(nomattribut1[,nomattribut2, …]) ); 
• NOT NULL force l’attribut à prendre une valeur de son domaine. 
• AUTO_INCREMENT s’applique à un entier qui sera augmenté de 
1 à chaque nouvelle insertion. 
• PRIMARY KEY : précise la ou les colonnes composant la clef 
primaire (identifiant unique) de la table. 
ATTENTION : nécessite que chaque colonne concourant à la clef 
soit NOT NULL.
Création d’une table 
avec une clé étrangère 
• On appelle « clé étrangère » (foreign key) une colonne ou une 
combinaison de colonnes utilisée pour établir et conserver une 
liaison entre les données de deux tables. 
• Avec MySQL, les deux tables doivent être de type InnoDB. 
• Exemple : 
CREATE TABLE parent(id_p INT NOT NULL, nom_p VARCHAR(20) 
prenom_p VARCHAR(20),PRIMARY KEY(id_p)) TYPE=INNODB; 
CREATE TABLE fille(id_f INT, parent_id INT, prenom_f VARCHAR(20) 
PRIMARY KEY (id_f), FOREIGN KEY (parent_id) REFERENCES parent(id_p) 
ON DELETE CASCADE ON UPDATE CASCADE 
) TYPE=INNODB; 
• ON DELETE CASCADE (resp. ON UPDATE CASCADE) indique qu'en 
cas de suppression (resp. modification) d'une ligne de la table 
parente, InnoDB va automatiquement effacer (resp. modifier) 
toute les lignes de la table fille qui sont liées à cette ligne.
Création d’une table 
Types de données MySQL (les petits entiers) 
• TINYINT[(M)] [UNSIGNED] [ZEROFILL] 1 octet 
Très petits entiers signés [ -128 ; 127] 
ou non-signés [ 0 ; 255] 
• SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 2 octets 
Petits entiers signés [ -32 768 ; 32 767] 
ou non-signés [ 0 ; 65 535] 
M indique la taille de l’affichage. 
UNSIGNED accepte uniquement des nombres positif. 
ZEROFILL permet d'ajouter éventuellement des zéros (à 
gauche) à l'affichage pour avoir le nombre de caractères 
spécifié par M. 
En spécifiant ZEROFILL pour une colonne, MySQL ajoutera 
automatiquement l'attribut UNSIGNED à la colonne.
Création d’une table 
Types de données MySQL (les entiers) 
• MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 3 octets 
Entiers signés [-8 388 608 ; 8 388 607] 
ou non-signés [ 0 ; 16 777 215] 
• INT[(M)] [UNSIGNED] [ZEROFILL] 4 octets 
Grands entiers signés [-2 147 483 648 ; 2 147 483 647] 
ou non-signés [ 0 ; 4 294 967 295] 
• BIGINT[(M)] [UNSIGNED] [ZEROFILL] 8 octets 
Très grands entiers 
signés [-9 223 372 036 854 775 808 ; 
9 223 372 036 854 775 807 ] 
ou non-signés [ 0 ; 18 446 744 073 709 551 615 ]
Création d’une table 
Types de données MySQL (les réels) 
• FLOAT(précision) [ZEROFILL] 4 ou 8 oct 
Nombre à virgule flottante avec 
simple précision (si précision <=24) 
ou double précision (si précision est entre 25 et 53). 
• FLOAT[(M,D)] [ZEROFILL] 4 octets 
Nombre à virgule flottante, en précision simple. 
Les valeurs possibles vont de 
-3.402823466E+38 à 3.402823466E+38. 
M indique la taille de l'affichage 
D est le nombre de décimales.
Création d’une table 
Types de données MySQL (les réels) 
• DOUBLE[(M,D)] [ZEROFILL] 8 octets 
Nombre à virgule flottante, en précision double. 
Les valeurs possibles vont de 
-1.7976931348623157E+308 à 1.7976931348623157E+308. 
• DECIMAL[(M[,D])] [ZEROFILL] 
Nombres à virgule flottante stockés comme des chaînes de 
caractères. 
Occupe M+2 octets si D > 0, M+1 octets si D = 0
Création d’une table 
Types de données MySQL (le temps) 
• DATE 3 octets 
Stocke une date au format 'AAAA-MM-JJ' 
allant de '1000-01-01' à '9999-12-31‘ 
• DATETIME 8 octets 
Stocke une date et une heure au format 
'AAAA-MM-JJ HH:MM:SS' allant de 
'1000-01-01 00:00:00' à '9999-12-31 23:59:59'
Création d’une table 
Types de données MySQL (le temps) 
• TIMESTAMP [M] 4 octets 
Stocke une date sous forme numérique allant de 
'1970-01-01 00:00:00' à l'année 2037. 
L'affichage dépend des valeurs de M : AAAAMMJJHHMMSS, 
AAMMJJHHMMSS, AAAAMMJJ, ou AAMMJJ pour M égal 
respectivement à 14 (ou absent), 12, 8, et 6 
• TIME 3 octets 
Stocke l'heure au format 'HH:MM:SS', 
allant de '-838:59:59' à '838:59:59‘ 
• YEAR[(4|2)] 1 octet 
Stocke l’année à 4 (par défaut) ou 2 chiffres allant de 1901 à 
2155 ( 4 chiffres) et de 1970-2069 (2 chiffres).
Création d’une table 
Types de données MySQL (les caractères) 
• CHAR (M) [BINARY] 
Stocke une chaîne de caractère de taille fixe M (de 0 à 255). 
BINARY permet de tenir compte de la casse. 
• VARCHAR (M) [BINARY] 
Stocke des chaînes de 255 caractères maximum. 
Économise de l’espace mémoire mais ralentit la recherche. 
• TINYBLOB et TINYTEXT 
Stockent des fichiers ou du texte de 255 caractères maximum. 
Le 1er aura un contenu de type binaire (sensible à la casse) 
Le 2nd aura un contenu de type ASCII (insensible à la casse) 
• BLOB et TEXT 
Stockent des fichiers ou du texte de 65 535 caractères 
maximum.
Création d’une table 
Types de données MySQL (les caractères) 
• MEDIUMBLOB et MEDIUMTEXT 
Stockent des fichiers ou du texte de 16 777 215 caractères 
maximum. 
• LONGBLOB et LONGTEXT 
Stockent des fichiers ou du texte de 4 294 967 295 caractères 
maximum. 
• ENUM('valeur_possible1','valeur_possible2', ...) 
Énumération de valeurs. Une valeur parmi 65535. 
• SET('valeur_possible1','valeur_possible2', ...) 
Ensemble de valeurs. Une ou plusieurs valeurs parmi 64. 
• NB 1 : On peut donc associer ENUM aux champs de 
type radio , et SET aux champs de type checkbox; 
• NB 2 : Ces deux types peuvent contenir des valeurs null.
Maintenance d’une table 
• Suppression de table : 
DROP TABLE nom_table; 
• Ajouter un attribut : 
ALTER TABLE nom_table ADD definition [First|After attribut] 
• Supprimer un attribut : 
ALTER TABLE nom_table DROP attribut 
• Modifier la définition d’un attribut: 
ALTER TABLE nom_table ALTER attribut nouvelle_definiton 
• Changer la valeur par défaut d’un attribut: 
ALTER TABLE nom_table ALTER attribut {SET DEFAULT valeur} 
• Créer une clé primaire : 
ALTER TABLE nom_table ADD PRIMARY KEY (attribut) 
• Supprimer une clé primaire : 
ALTER TABLE nom_table DROP PRIMARY KEY
Insertion de données 
INSERT INTO nom_table 
[(nomattribut1,...,nomattributN)] 
VALUES (valeur1,...,valeurN), 
[(autre_valeur1,...,autre_valeurN)]; 
• Les attributs qui ne sont pas mentionnés prendront 
leur valeur par défaut. 
• Si les noms d’attributs sont omis il faut fournir une 
valeur pour toute les colonnes dans l'ordre dans 
lequel elle ont été spécifiées lors de la création de la 
table. 
• Les valeurs chaînes de caractère sont entre '…'.
Màj et suppression de données 
• Syntaxe de mise à jour de données: 
UPDATE nom_table 
SET nom_col1=new_valeur1, nom_col2=new_valeur2, … 
[WHERE prédicat] 
• Syntaxe de suppression de données 
DELETE FROM nom_table 
[WHERE prédicat] 
• WHERE ,clause de filtre, introduit un prédicat (1 ou +sieurs 
expressions conditionnelles) pour spécifier les enregistrements 
à modifier ou à supprimer. 
• ATTENTION : Si WHERE est omise, les modif. ou suppressions 
sont appliquées à la totalité des enregistrements de la table.
consultation de données 
syntaxe 
SELECT [DISTINCT] * ou liste_de_champs (séparés par ,) 
FROM nom_table [WHERE prédicat] 
[GROUP BY critère_de_regroupement 
HAVING prédicat] 
[ORDER BY liste_de_colonnes (séparés par ,)] 
[LIMIT nbr_de_lignes_à_retourner [OFFSET nbr_lignes_à_ignorer]] 
• * sélectionne tous les champs de la table 
• DISTINCT élimine les doublons dans le résultat 
• WHERE introduit un prédicat pour spécifier les enregistrements 
à sélectionner. 
• GROUP BY permet de définir des regroupements 
d’enregistrements afin d’effectuer des calculs statistiques. 
• HAVING (filtre après sélection) spécifie un prédicat sur des 
groupes d'enregistrements générés par la clause GROUP BY ou 
des fonctions d’agrégat.
consultation de données 
syntaxe(suite et fin) 
• ORDER BY permet de trier (ASC par défaut ou DESC) les lignes du 
résultat en fonction d’une ou ide +sieurs colonne(s) listée(s) dans 
la SELECT. 
• LIMIT et OFFSET permettent de ne récupérer qu'une partie des 
lignes engendrées par le reste de la requête. 
• LIMIT spécifie le nombre de lignes à retourner depuis le début du 
jeu de résultat. 
• OFFSET indique le nombre de lignes à ignorer depuis le début du 
jeu de résultat. 
• Lors de l'utilisation de LIMIT, il est nécessaire d'utiliser une 
clause ORDER BY contraignant les lignes résultantes dans un 
ordre unique. 
• LIMIT et OFFSET sont très utiles pour afficher un catalogue 
volumineux en plusieurs pages.
consultation de données 
prédicat (1/2) 
Pour exprimer un prédicat on peut utiliser: 
• les opérateurs arithmétiques : +,-,*,/,% ; 
• les opérateurs booléens : AND, OR, NOT ; 
• les opérateurs de comparaison : =, != (ou < >), <, >, <=, >= ; 
• IS [ NOT ] NULL pour tester si la valeur est NULL (vide) ou 
non; 
• [ NOT ] EXIST ( SELECT ... ) pour tester si la sélection renvoi 
quelque chose ou non; 
• [ NOT ] BETWEEN val_1 AND val_2 pour tester si la valeur est 
entre val_1 et val_2 (incluses)
consultation de données 
prédicat (2/2) 
• [ NOT ] IN (var_1, var_2, ...) / [ NOT ] IN ( SELECT ... ) pour 
tester si la variable est dans la liste/sous-requête 
• operateur ALL (var_1, var_2, ...) / operateur ALL ( SELECT ... ) 
pour tester si la valeur est <, >, <=, >= à toutes les valeurs de la 
liste/sous-requête 
• operateur ANY (var_1, var_2, ...) / operateur ANY ( SELECT ... ) 
pour tester si la valeur est <, >, <=, >= à au moins une valeur de 
la liste/sous-requête 
• [ NOT ] LIKE '%chaîne_%' pour tester si la variable ressemble 
ou non à la chaîne 
– '%' remplace une chaîne 
– '_' remplace un caractère
consultation de données 
fonctions d’agrégat 
• SELECT COUNT(*) FROM nom_table 
Compte le nombre d’enregistrement de nom_table 
– count(*) : compte aussi les valeurs NULL (vide) ; 
– count(attribut) : compte seulement les valeurs non NULL ; 
– count(distinct attribut) : une valeur est comptée une seule fois 
• SELECT MAX(attribut) FROM nom_table 
Renvoie La valeur la plus grande de l’attribut spécifié 
• SELECT MIN(attribut) FROM nom_table 
Renvoie La valeur la plus petite de l’attribut spécifié 
• SELECT AVG(attribut) FROM nom_table 
Renvoie la moyenne sur toutes les valeurs de l’attribut spécifié 
• SELECT SUM(attribut) FROM nom_table 
Renvoie la somme de toutes les valeurs de l’attribut spécifié.
consultation de données 
jointure 
• Une jointure consiste à faire une sélection de données sur 
plusieurs tables. 
• Les tables concernées doivent avoir chacune au moins une 
colonne contenant un même type d’information 
• Syntaxe: 
SELECT col1, t1.col2 [AS] alias1col2, 
t2.col2 [AS] alias2col2, col3, col4, ... 
FROM table1 [AS] t1, table2 [AS] t2, ... 
WHERE prédicat_de_jointure 
• La condition de jointure est de la forme : 
table1.colX = table2.colY ou t1.colX=t2.colY 
dans laquelle colX et colY contiennent des données 
représentant la même information 
• Utiliser éventuellement et optionnellement le mot clé AS 
pour renommer des colonnes ou des tables lors de la 
sélection.
consultation de données 
jointure avec JOIN 
• Un prédicat de jointure faite dans la clause WHERE ne permet 
pas de faire la distinction entre ce qui relève du filtrage 
(restriction) et ce qui relève de la jointure (extension). 
• D’où une autre syntaxe de la jointure : 
SELECT col1, t1.col2 [AS] alias1col2, 
t2.col2 [AS] alias2col2, col3, col4, … 
FROM table1 [AS] t1 
[INNER]JOIN table2 [AS] t2, … 
ON prédicat_de_jointure ou bien USING (colonne(s) de jointure) 
WHERE prédicat_de_filtre 
• Le mot clef INNER (facultatif) désigne que seules les lignes 
comportant une valeur qui existe dans toutes les tables jointes 
seront incluses dans les opérations de la requête.
consultation de données 
jointure externe 
• La jointure externe permet de prendre aussi en compte, dans 
le résultat, les lignes qui n’ont pas de valeur sur les colonnes 
de jointure. 
• Syntaxe: 
SELECT col1, t1.col2 [AS] alias1col2, 
t2.col2 [AS] alias2col2, col3, col4, … 
FROM table1 [AS] t1 
LEFT | RIGHT | FULL [OUTER] JOIN table2 [AS] t2, … 
ON prédicat_de_jointure ou USING (colonne(s) de jointure) 
WHERE prédicat_de_filtre 
• Les mots clefs LEFT, RIGHT et FULL indiquent la manière dont 
le moteur de requête doit effectuer la jointure externe. 
• LEFT/RIGHT -> la table située à gauche/droite du mot 
clef JOIN 
• FULL indique que la jointure externe est bilatérale.
consultation de données 
jointure externe (exemple) 
• Supposons qu’on rajoute les ethnies « Soussou » et 
« Bambara » dans la table « ethnies » et que l’on souhaite 
afficher les ethnies qui n’ont pas de membre dans la table 
« personnes ». 
• On rappelle que les tables « ethnies » et « personnes » sont 
liées 
• La requête à exécuter est la suivante : 
SELECT e.nom AS ethnies_pas_representees 
FROM ethnies AS e 
LEFT JOIN personnes AS p 
USING (id_eth) 
WHERE p.id_eth is NULL
Droits d’accès aux données 
• Syntaxe pour donner des privilèges : 
GRANT droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] 
ON {nom_de_table | * | nom_base.*} 
TO nom_utilisateur1 [IDENTIFIED BY 'password'] 
[, nom_utilisateur2 [IDENTIFIED BY 'password'] ...] 
[WITH GRANT OPTION]; 
• Les droits sur une table sont SELECT , INSERT , UPDATE , DELETE , 
CREATE , DROP , GRANT OPTION , INDEX et ALTER . 
• Les droits sur une colonne sont SELECT , INSERT et UPDATE . 
• Si une base est sélectionnée, ON * donne des droits sur elle. 
• Si aucune base n’est sélectionnée, ON * affecte les droits sur le serveur 
• nom_utilisateur est généralement sous la forme user@'host' 
• La clause WITH GRANT OPTION, est utilisée pour autoriser la 
transmission des droits. 
• Syntaxe pour supprimer des privilèges : 
REVOKE droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] 
ON {nom_de_table | * |nom_base.*} 
FROM nom_utilisateur1 [, nom_utilisateur2 ...]

Contenu connexe

PDF
Support Web Services SOAP et RESTful Mr YOUSSFI
PPTX
Introduction aux bases de données
PDF
Cours bases de données partie 1 Prof. Khalifa MANSOURI
PDF
Bases de données réparties par la pratique
PDF
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
PDF
BigData_Chp4: NOSQL
PDF
Cours Big Data Chap6
PDF
Telecharger Exercices corrigés PL/SQL
Support Web Services SOAP et RESTful Mr YOUSSFI
Introduction aux bases de données
Cours bases de données partie 1 Prof. Khalifa MANSOURI
Bases de données réparties par la pratique
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
BigData_Chp4: NOSQL
Cours Big Data Chap6
Telecharger Exercices corrigés PL/SQL

Tendances (20)

PDF
Cours design pattern m youssfi partie 3 decorateur
PDF
Support de cours technologie et application m.youssfi
PDF
Jp perez correction quizz oracle mairie de paris acma 2007 2008
PDF
Introduction aux SGBD
PPTX
Chp1 - Introduction à l'Informatique Décisionnelle
PDF
Cours Big Data Chap5
PDF
Introduction au web cours.pdf
PPTX
Chp2 - Vers les Architectures Orientées Services
PDF
Support JEE Servlet Jsp MVC M.Youssfi
PDF
Un exemple élémentaire d'application MVC en PHP
PPTX
DataWarehouse
PDF
Support JEE Spring Inversion de Controle IOC et Spring MVC
PDF
Support POO Java première partie
PPTX
Chp1- Introduction aux Technologies Web et SOA
PPSX
introduction à la modélisation objet
PDF
Systèmes d'Exploitation - chp5-gestion fichiers
PDF
Support de cours angular
PDF
Cours c#
 
PDF
Examen sybase - Administration base de donnees
PDF
Support de cours entrepise java beans ejb m.youssfi
Cours design pattern m youssfi partie 3 decorateur
Support de cours technologie et application m.youssfi
Jp perez correction quizz oracle mairie de paris acma 2007 2008
Introduction aux SGBD
Chp1 - Introduction à l'Informatique Décisionnelle
Cours Big Data Chap5
Introduction au web cours.pdf
Chp2 - Vers les Architectures Orientées Services
Support JEE Servlet Jsp MVC M.Youssfi
Un exemple élémentaire d'application MVC en PHP
DataWarehouse
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support POO Java première partie
Chp1- Introduction aux Technologies Web et SOA
introduction à la modélisation objet
Systèmes d'Exploitation - chp5-gestion fichiers
Support de cours angular
Cours c#
 
Examen sybase - Administration base de donnees
Support de cours entrepise java beans ejb m.youssfi
Publicité

En vedette (20)

PPTX
Le sql pour les nuls
KEY
HTML5 - Sémantique, structure et nouveaux éléments
PDF
Merise exercices-mcd_corriges
PDF
SQL Server
PPTX
Formation MySQL Workbench
PDF
L'art de la typographie, d'illustrator à InDesign
PPTX
Création d’application facile en html via node-webkit
PDF
NOSQL- Presentation on NoSQL
PDF
Panorama des offres NoSQL disponibles dans Azure
PPT
T P
PPTX
Initiation au C++
PDF
Quand partager sur les réseaux sociaux ?
PDF
Stratégie de réseaux sociaux pour les entrepreneurs
PDF
Test unitaire
ODP
SGBDR - MySQL
PDF
Communication et le luxe
PDF
Dynamiser son identité numérique sur les réseaux sociaux
PDF
Cours Base de Données
PDF
Personnal branding et profil LinkedIn
PDF
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Le sql pour les nuls
HTML5 - Sémantique, structure et nouveaux éléments
Merise exercices-mcd_corriges
SQL Server
Formation MySQL Workbench
L'art de la typographie, d'illustrator à InDesign
Création d’application facile en html via node-webkit
NOSQL- Presentation on NoSQL
Panorama des offres NoSQL disponibles dans Azure
T P
Initiation au C++
Quand partager sur les réseaux sociaux ?
Stratégie de réseaux sociaux pour les entrepreneurs
Test unitaire
SGBDR - MySQL
Communication et le luxe
Dynamiser son identité numérique sur les réseaux sociaux
Cours Base de Données
Personnal branding et profil LinkedIn
Qu'est-ce que LinkedIn ? Comment l'utiliser ?
Publicité

Similaire à introduction au SQL et MySQL (20)

PPTX
4-TP BD.pptx
PDF
SQLcouredesqlapplicationSQLcmdes-LDD.pdf
PDF
resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
PDF
MariaDB une base de donnees NewSQL
PDF
INF240 - Bases de données DUT SRC1 - Cours 3
PDF
Le langage sql
PDF
Le langage sql
PPTX
Base donnee MYSQL
PDF
Sql
PPTX
Système de gestion des bases de données sous Oracleptx
PDF
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
PDF
Cours_1_MySQLen c++ trés interessant.pdf
PDF
presentationatelierphpprt2-140314143938-phpapp02.pdf
PPTX
La 2ème partie de la présentation PHP
PDF
PPT
Apprendre le Langage SQL support de cours ppt
PPTX
Administration des bases de données Licence 2
PPT
Les05.ppt
PPTX
Deep Dive Performance , le In-Memory dans SQL Server
PDF
Mariadb une base de données NewSQL
4-TP BD.pptx
SQLcouredesqlapplicationSQLcmdes-LDD.pdf
resume-theorique-m106-partie3-0903-1-622f07613b825.pdf
MariaDB une base de donnees NewSQL
INF240 - Bases de données DUT SRC1 - Cours 3
Le langage sql
Le langage sql
Base donnee MYSQL
Sql
Système de gestion des bases de données sous Oracleptx
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
Cours_1_MySQLen c++ trés interessant.pdf
presentationatelierphpprt2-140314143938-phpapp02.pdf
La 2ème partie de la présentation PHP
Apprendre le Langage SQL support de cours ppt
Administration des bases de données Licence 2
Les05.ppt
Deep Dive Performance , le In-Memory dans SQL Server
Mariadb une base de données NewSQL

Plus de Abdoulaye Dieng (20)

PPTX
Introduction à React
PPTX
Fondamentaux du Référencement naturel
PPTX
Introduction à Symfony
PPTX
Panorama des Technologies mobiles
PPTX
Prise en main de WordPress
PPTX
Initiation à Bootstrap
PPTX
Introduction à Laravel
PPTX
Fondamentaux d’une API REST
PPTX
Introduction à Angular
PPTX
Introduction à JavaScript
PPTX
Introduction à l’orienté objet en Python
PPTX
Introduction à Python
PPTX
Introduction à React JS
PPTX
Initiation à l'algorithmique
PPTX
Introduction à Symfony
PPTX
Initiation à Bootstrap
PPTX
Requêtes HTTP synchrones et asynchrones
PPTX
Introduction à jQuery
PPT
Introduction à JavaScript
PPTX
Initiation à l'algorithmique
Introduction à React
Fondamentaux du Référencement naturel
Introduction à Symfony
Panorama des Technologies mobiles
Prise en main de WordPress
Initiation à Bootstrap
Introduction à Laravel
Fondamentaux d’une API REST
Introduction à Angular
Introduction à JavaScript
Introduction à l’orienté objet en Python
Introduction à Python
Introduction à React JS
Initiation à l'algorithmique
Introduction à Symfony
Initiation à Bootstrap
Requêtes HTTP synchrones et asynchrones
Introduction à jQuery
Introduction à JavaScript
Initiation à l'algorithmique

introduction au SQL et MySQL

  • 1. Implémentation d’une BD sur MySQL et initiation au SQL UCAD/FST/DMI/LPCM M. DIENG Abdoulaye Mars 2011
  • 2. Sommaire 1. Qu’est ce que MySQL? 2. Qu’est ce que SQL? 3. Création et sélection d’une BD 4. Création d’une table Les types de données MySQL 5. Maintenance d’une table 6. Insertion de données 7. Mise à jour et suppression de données 8. Consultation de données 9. Droits d’accès aux données
  • 3. MySQL késako? • Système de gestion de base de données relationnelles. • Logiciel permettant de créer des bases de données, de les exploiter (en y effectuant notamment des recherches des modifications ou des tris) et de contrôler l’accès aux données. • Ses principaux concurrents sont PostgreSQL, MS SQL Server, DB2 et Oracle mais ses atouts majeurs sont:  performances élevées;  coût réduit et accessibilité du code source;  simplicité de configuration et d’apprentissage;  portabilité;  communication aisée avec la plupart des langages de programmation (C, C++, VB, C#, PHP, Python, Java, Perl, ...)  Wikipedia, Google, Yahoo!, Youtube, Adobe, Airbus, AFP, Reuters, BBC News, Alcatel-Lucent utilisent tous MySQL.
  • 4. MySQL historique • 1994 : l’entreprise australienne Hugues Technologies développe le SGBD mSQL (mini-SQL). • Mai 1995 : la société suédoise MySQL AB crée la 1ère version de MySQL à partir de mSQL. • Juin 2000 : MySQL passe en licence GPL avec sa version 3. • Mars 2003 : stabilisation de la version 4 avec le moteur transactionnel InnoDB • Octobre 2005 : stabilisation de la version 5 et rachat du moteur transactionnel InnoDB par Oracle Corporation. • Avril 2007 : première version alpha de la version 6 avec intégration du moteur transactionnel Falcon (alternative libre d’innoDB) • Janvier 2008 : rachat de MySQL AB par Sun Microsystems • Avril 2009 : rachat de Sun Microsystems par Oracle Corporation approuvé en janvier 2010 par la commission européenne.
  • 5. MySQL connexion au serveur • MySQL fonctionne en mode client-serveur. • Avec EasyPHP, il y a +ieurs manières de se connecter au serveur:  en ligne de commande 1) Lancer la console DOS en cliquant sur exécuter du menu démarrer. 2) Se mettre sur le répertoire des exécutables de mysql : cd C:Program FilesEasyPHP1-8mysqlbin 3) Taper mysql –u root –h localhost pour que le client mysql se connecte au serveur mysql local (localhost) avec l’utilisateur root (administrateur) sans mot de passe  avec l’interface graphique PhPMyAdmin click droit sur l’icône d’EasyPHP>administration>Gestion BDD  avec des scripts (écrit en PHP par exemple) $id_cnx=mysql_connect('localhost', 'root', '') • Dans tous les cas, une fois la connexion au serveur établie, la communication se fait avec un langage appelé SQL (Structured Query Language)
  • 6. SQL késako? • SQL (Structured query language ou langage structuré de requêtes) est un pseudo-langage informatique (de type requête) standard et normalisé (documenté). • SQL est destiné à créer, à manipuler et à contrôler une base de données relationnelle avec : – un langage de définition de données (LDD); – un langage de manipulation de donnée (LMD); – un langage de contrôle de données (LCD); – un langage de contrôle des transactions (LCT). • Ce cours se focalisera sur les trois premiers langages. • SQL est adopté par les principaux SGBDR (DB2, Microsoft Access, MySQL, PostgreSQL, Oracle, …)
  • 7. SQL historique • 1970 : Edgar Codd d’IBM crée le modèle relationnel qui inspira le développement du langage SEQUEL (Structured English Query Language ou langage d'interrogation structuré en anglais). • 1975 : Donald Chamberlain et Raymond Boyce d’IBM contractent le SEQUEL en SQL • 1986 : première norme SQL1 • 1992 : SQL2 = SQL1 + de nouvelles instructions (ex : JOIN) • 1999 : SQL3 = SQL2 + approche orienté objet • 2003 : SQL2003 = SQL3 + quelques modifications mineures (ex: SQL/XML) • 2008 : SQL2008 = SQL2003 + quelques modifications mineures (ex: limitation du nbr de lignes sélectionnées OFFSET/FETCH)
  • 8. Les identificateurs de MySQL • Un identificateur est un nom donné à une base de données, une table, un attribut ou un alias. • Un identificateur est formé de lettres alphabétiques et de chiffres ainsi que du caractère _ (espace souligné) permettant une plus grande lisibilité. • Il comporte au maximum 64 caractères donc doit être explicite • Les bases de données et les tables sont codées directement dans le système de fichiers : Windows n’est pas sensible à la casse de MySQL, tandis que Unix l’est. • Le point « . » est un caractère réservé utilisé comme séparateur entre le nom d’une base et celui d’une table ou entre le nom d’une table et celui d’un attribut. • Eviter d’utiliser les mots réservés du SQL ou du MySQL comme identificateur
  • 9. Création et sélection d’une BD • Avec MySQL, les bases de données sont implémentées comme des répertoires contenant des fichiers qui correspondent aux tables dans les bases de données. • Une base de données se crée avec : CREATE DATABASE [IF NOT EXISTS] nom_de_la_base; • La création d'une base de données ne la sélectionne pas pour l'utilisation ; il faut le faire explicitement avec: USE nom_de_la_base; • Une base de données est détruite par: DROP DATABASE [IF EXISTS] nom_de_la_base;
  • 10. Création d’une table syntaxe CREATE TABLE [IF NOT EXISTS] nomTable( nomAttribut1 typeAttribut1 [NOT NULL][AUTO_INCREMENT], nomAttribut2 typeAttribut2 [NOT NULL], … PRIMARY KEY(nomattribut1[,nomattribut2, …]) ); • NOT NULL force l’attribut à prendre une valeur de son domaine. • AUTO_INCREMENT s’applique à un entier qui sera augmenté de 1 à chaque nouvelle insertion. • PRIMARY KEY : précise la ou les colonnes composant la clef primaire (identifiant unique) de la table. ATTENTION : nécessite que chaque colonne concourant à la clef soit NOT NULL.
  • 11. Création d’une table avec une clé étrangère • On appelle « clé étrangère » (foreign key) une colonne ou une combinaison de colonnes utilisée pour établir et conserver une liaison entre les données de deux tables. • Avec MySQL, les deux tables doivent être de type InnoDB. • Exemple : CREATE TABLE parent(id_p INT NOT NULL, nom_p VARCHAR(20) prenom_p VARCHAR(20),PRIMARY KEY(id_p)) TYPE=INNODB; CREATE TABLE fille(id_f INT, parent_id INT, prenom_f VARCHAR(20) PRIMARY KEY (id_f), FOREIGN KEY (parent_id) REFERENCES parent(id_p) ON DELETE CASCADE ON UPDATE CASCADE ) TYPE=INNODB; • ON DELETE CASCADE (resp. ON UPDATE CASCADE) indique qu'en cas de suppression (resp. modification) d'une ligne de la table parente, InnoDB va automatiquement effacer (resp. modifier) toute les lignes de la table fille qui sont liées à cette ligne.
  • 12. Création d’une table Types de données MySQL (les petits entiers) • TINYINT[(M)] [UNSIGNED] [ZEROFILL] 1 octet Très petits entiers signés [ -128 ; 127] ou non-signés [ 0 ; 255] • SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 2 octets Petits entiers signés [ -32 768 ; 32 767] ou non-signés [ 0 ; 65 535] M indique la taille de l’affichage. UNSIGNED accepte uniquement des nombres positif. ZEROFILL permet d'ajouter éventuellement des zéros (à gauche) à l'affichage pour avoir le nombre de caractères spécifié par M. En spécifiant ZEROFILL pour une colonne, MySQL ajoutera automatiquement l'attribut UNSIGNED à la colonne.
  • 13. Création d’une table Types de données MySQL (les entiers) • MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 3 octets Entiers signés [-8 388 608 ; 8 388 607] ou non-signés [ 0 ; 16 777 215] • INT[(M)] [UNSIGNED] [ZEROFILL] 4 octets Grands entiers signés [-2 147 483 648 ; 2 147 483 647] ou non-signés [ 0 ; 4 294 967 295] • BIGINT[(M)] [UNSIGNED] [ZEROFILL] 8 octets Très grands entiers signés [-9 223 372 036 854 775 808 ; 9 223 372 036 854 775 807 ] ou non-signés [ 0 ; 18 446 744 073 709 551 615 ]
  • 14. Création d’une table Types de données MySQL (les réels) • FLOAT(précision) [ZEROFILL] 4 ou 8 oct Nombre à virgule flottante avec simple précision (si précision <=24) ou double précision (si précision est entre 25 et 53). • FLOAT[(M,D)] [ZEROFILL] 4 octets Nombre à virgule flottante, en précision simple. Les valeurs possibles vont de -3.402823466E+38 à 3.402823466E+38. M indique la taille de l'affichage D est le nombre de décimales.
  • 15. Création d’une table Types de données MySQL (les réels) • DOUBLE[(M,D)] [ZEROFILL] 8 octets Nombre à virgule flottante, en précision double. Les valeurs possibles vont de -1.7976931348623157E+308 à 1.7976931348623157E+308. • DECIMAL[(M[,D])] [ZEROFILL] Nombres à virgule flottante stockés comme des chaînes de caractères. Occupe M+2 octets si D > 0, M+1 octets si D = 0
  • 16. Création d’une table Types de données MySQL (le temps) • DATE 3 octets Stocke une date au format 'AAAA-MM-JJ' allant de '1000-01-01' à '9999-12-31‘ • DATETIME 8 octets Stocke une date et une heure au format 'AAAA-MM-JJ HH:MM:SS' allant de '1000-01-01 00:00:00' à '9999-12-31 23:59:59'
  • 17. Création d’une table Types de données MySQL (le temps) • TIMESTAMP [M] 4 octets Stocke une date sous forme numérique allant de '1970-01-01 00:00:00' à l'année 2037. L'affichage dépend des valeurs de M : AAAAMMJJHHMMSS, AAMMJJHHMMSS, AAAAMMJJ, ou AAMMJJ pour M égal respectivement à 14 (ou absent), 12, 8, et 6 • TIME 3 octets Stocke l'heure au format 'HH:MM:SS', allant de '-838:59:59' à '838:59:59‘ • YEAR[(4|2)] 1 octet Stocke l’année à 4 (par défaut) ou 2 chiffres allant de 1901 à 2155 ( 4 chiffres) et de 1970-2069 (2 chiffres).
  • 18. Création d’une table Types de données MySQL (les caractères) • CHAR (M) [BINARY] Stocke une chaîne de caractère de taille fixe M (de 0 à 255). BINARY permet de tenir compte de la casse. • VARCHAR (M) [BINARY] Stocke des chaînes de 255 caractères maximum. Économise de l’espace mémoire mais ralentit la recherche. • TINYBLOB et TINYTEXT Stockent des fichiers ou du texte de 255 caractères maximum. Le 1er aura un contenu de type binaire (sensible à la casse) Le 2nd aura un contenu de type ASCII (insensible à la casse) • BLOB et TEXT Stockent des fichiers ou du texte de 65 535 caractères maximum.
  • 19. Création d’une table Types de données MySQL (les caractères) • MEDIUMBLOB et MEDIUMTEXT Stockent des fichiers ou du texte de 16 777 215 caractères maximum. • LONGBLOB et LONGTEXT Stockent des fichiers ou du texte de 4 294 967 295 caractères maximum. • ENUM('valeur_possible1','valeur_possible2', ...) Énumération de valeurs. Une valeur parmi 65535. • SET('valeur_possible1','valeur_possible2', ...) Ensemble de valeurs. Une ou plusieurs valeurs parmi 64. • NB 1 : On peut donc associer ENUM aux champs de type radio , et SET aux champs de type checkbox; • NB 2 : Ces deux types peuvent contenir des valeurs null.
  • 20. Maintenance d’une table • Suppression de table : DROP TABLE nom_table; • Ajouter un attribut : ALTER TABLE nom_table ADD definition [First|After attribut] • Supprimer un attribut : ALTER TABLE nom_table DROP attribut • Modifier la définition d’un attribut: ALTER TABLE nom_table ALTER attribut nouvelle_definiton • Changer la valeur par défaut d’un attribut: ALTER TABLE nom_table ALTER attribut {SET DEFAULT valeur} • Créer une clé primaire : ALTER TABLE nom_table ADD PRIMARY KEY (attribut) • Supprimer une clé primaire : ALTER TABLE nom_table DROP PRIMARY KEY
  • 21. Insertion de données INSERT INTO nom_table [(nomattribut1,...,nomattributN)] VALUES (valeur1,...,valeurN), [(autre_valeur1,...,autre_valeurN)]; • Les attributs qui ne sont pas mentionnés prendront leur valeur par défaut. • Si les noms d’attributs sont omis il faut fournir une valeur pour toute les colonnes dans l'ordre dans lequel elle ont été spécifiées lors de la création de la table. • Les valeurs chaînes de caractère sont entre '…'.
  • 22. Màj et suppression de données • Syntaxe de mise à jour de données: UPDATE nom_table SET nom_col1=new_valeur1, nom_col2=new_valeur2, … [WHERE prédicat] • Syntaxe de suppression de données DELETE FROM nom_table [WHERE prédicat] • WHERE ,clause de filtre, introduit un prédicat (1 ou +sieurs expressions conditionnelles) pour spécifier les enregistrements à modifier ou à supprimer. • ATTENTION : Si WHERE est omise, les modif. ou suppressions sont appliquées à la totalité des enregistrements de la table.
  • 23. consultation de données syntaxe SELECT [DISTINCT] * ou liste_de_champs (séparés par ,) FROM nom_table [WHERE prédicat] [GROUP BY critère_de_regroupement HAVING prédicat] [ORDER BY liste_de_colonnes (séparés par ,)] [LIMIT nbr_de_lignes_à_retourner [OFFSET nbr_lignes_à_ignorer]] • * sélectionne tous les champs de la table • DISTINCT élimine les doublons dans le résultat • WHERE introduit un prédicat pour spécifier les enregistrements à sélectionner. • GROUP BY permet de définir des regroupements d’enregistrements afin d’effectuer des calculs statistiques. • HAVING (filtre après sélection) spécifie un prédicat sur des groupes d'enregistrements générés par la clause GROUP BY ou des fonctions d’agrégat.
  • 24. consultation de données syntaxe(suite et fin) • ORDER BY permet de trier (ASC par défaut ou DESC) les lignes du résultat en fonction d’une ou ide +sieurs colonne(s) listée(s) dans la SELECT. • LIMIT et OFFSET permettent de ne récupérer qu'une partie des lignes engendrées par le reste de la requête. • LIMIT spécifie le nombre de lignes à retourner depuis le début du jeu de résultat. • OFFSET indique le nombre de lignes à ignorer depuis le début du jeu de résultat. • Lors de l'utilisation de LIMIT, il est nécessaire d'utiliser une clause ORDER BY contraignant les lignes résultantes dans un ordre unique. • LIMIT et OFFSET sont très utiles pour afficher un catalogue volumineux en plusieurs pages.
  • 25. consultation de données prédicat (1/2) Pour exprimer un prédicat on peut utiliser: • les opérateurs arithmétiques : +,-,*,/,% ; • les opérateurs booléens : AND, OR, NOT ; • les opérateurs de comparaison : =, != (ou < >), <, >, <=, >= ; • IS [ NOT ] NULL pour tester si la valeur est NULL (vide) ou non; • [ NOT ] EXIST ( SELECT ... ) pour tester si la sélection renvoi quelque chose ou non; • [ NOT ] BETWEEN val_1 AND val_2 pour tester si la valeur est entre val_1 et val_2 (incluses)
  • 26. consultation de données prédicat (2/2) • [ NOT ] IN (var_1, var_2, ...) / [ NOT ] IN ( SELECT ... ) pour tester si la variable est dans la liste/sous-requête • operateur ALL (var_1, var_2, ...) / operateur ALL ( SELECT ... ) pour tester si la valeur est <, >, <=, >= à toutes les valeurs de la liste/sous-requête • operateur ANY (var_1, var_2, ...) / operateur ANY ( SELECT ... ) pour tester si la valeur est <, >, <=, >= à au moins une valeur de la liste/sous-requête • [ NOT ] LIKE '%chaîne_%' pour tester si la variable ressemble ou non à la chaîne – '%' remplace une chaîne – '_' remplace un caractère
  • 27. consultation de données fonctions d’agrégat • SELECT COUNT(*) FROM nom_table Compte le nombre d’enregistrement de nom_table – count(*) : compte aussi les valeurs NULL (vide) ; – count(attribut) : compte seulement les valeurs non NULL ; – count(distinct attribut) : une valeur est comptée une seule fois • SELECT MAX(attribut) FROM nom_table Renvoie La valeur la plus grande de l’attribut spécifié • SELECT MIN(attribut) FROM nom_table Renvoie La valeur la plus petite de l’attribut spécifié • SELECT AVG(attribut) FROM nom_table Renvoie la moyenne sur toutes les valeurs de l’attribut spécifié • SELECT SUM(attribut) FROM nom_table Renvoie la somme de toutes les valeurs de l’attribut spécifié.
  • 28. consultation de données jointure • Une jointure consiste à faire une sélection de données sur plusieurs tables. • Les tables concernées doivent avoir chacune au moins une colonne contenant un même type d’information • Syntaxe: SELECT col1, t1.col2 [AS] alias1col2, t2.col2 [AS] alias2col2, col3, col4, ... FROM table1 [AS] t1, table2 [AS] t2, ... WHERE prédicat_de_jointure • La condition de jointure est de la forme : table1.colX = table2.colY ou t1.colX=t2.colY dans laquelle colX et colY contiennent des données représentant la même information • Utiliser éventuellement et optionnellement le mot clé AS pour renommer des colonnes ou des tables lors de la sélection.
  • 29. consultation de données jointure avec JOIN • Un prédicat de jointure faite dans la clause WHERE ne permet pas de faire la distinction entre ce qui relève du filtrage (restriction) et ce qui relève de la jointure (extension). • D’où une autre syntaxe de la jointure : SELECT col1, t1.col2 [AS] alias1col2, t2.col2 [AS] alias2col2, col3, col4, … FROM table1 [AS] t1 [INNER]JOIN table2 [AS] t2, … ON prédicat_de_jointure ou bien USING (colonne(s) de jointure) WHERE prédicat_de_filtre • Le mot clef INNER (facultatif) désigne que seules les lignes comportant une valeur qui existe dans toutes les tables jointes seront incluses dans les opérations de la requête.
  • 30. consultation de données jointure externe • La jointure externe permet de prendre aussi en compte, dans le résultat, les lignes qui n’ont pas de valeur sur les colonnes de jointure. • Syntaxe: SELECT col1, t1.col2 [AS] alias1col2, t2.col2 [AS] alias2col2, col3, col4, … FROM table1 [AS] t1 LEFT | RIGHT | FULL [OUTER] JOIN table2 [AS] t2, … ON prédicat_de_jointure ou USING (colonne(s) de jointure) WHERE prédicat_de_filtre • Les mots clefs LEFT, RIGHT et FULL indiquent la manière dont le moteur de requête doit effectuer la jointure externe. • LEFT/RIGHT -> la table située à gauche/droite du mot clef JOIN • FULL indique que la jointure externe est bilatérale.
  • 31. consultation de données jointure externe (exemple) • Supposons qu’on rajoute les ethnies « Soussou » et « Bambara » dans la table « ethnies » et que l’on souhaite afficher les ethnies qui n’ont pas de membre dans la table « personnes ». • On rappelle que les tables « ethnies » et « personnes » sont liées • La requête à exécuter est la suivante : SELECT e.nom AS ethnies_pas_representees FROM ethnies AS e LEFT JOIN personnes AS p USING (id_eth) WHERE p.id_eth is NULL
  • 32. Droits d’accès aux données • Syntaxe pour donner des privilèges : GRANT droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] ON {nom_de_table | * | nom_base.*} TO nom_utilisateur1 [IDENTIFIED BY 'password'] [, nom_utilisateur2 [IDENTIFIED BY 'password'] ...] [WITH GRANT OPTION]; • Les droits sur une table sont SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , GRANT OPTION , INDEX et ALTER . • Les droits sur une colonne sont SELECT , INSERT et UPDATE . • Si une base est sélectionnée, ON * donne des droits sur elle. • Si aucune base n’est sélectionnée, ON * affecte les droits sur le serveur • nom_utilisateur est généralement sous la forme user@'host' • La clause WITH GRANT OPTION, est utilisée pour autoriser la transmission des droits. • Syntaxe pour supprimer des privilèges : REVOKE droit1 [(liste_colonnes)] [, droit2 [(liste_colonnes)] ...] ON {nom_de_table | * |nom_base.*} FROM nom_utilisateur1 [, nom_utilisateur2 ...]