Les BASES de DONNEES dans WampServer 1 Définitions Générales Une base de données (BDD) permet d'enregistrer, de stocker, de ranger des données de façon organisée et hiérarchisée. SQL est le langage qui permet de manipuler les bases de données. Les SGBD (Systèmes de Gestion de Base de Données) sont les programmes qui vous permettent de gérer vos données directement sans utiliser de script PHP. Les plus connus sont : MySQL : libre et gratuit, c'est probablement le SGBD le plus connu. Nous l'utiliserons PostgreSQL : libre et gratuit comme MySQL, avec plus de fonctionnalités mais un peu moins connu. SQLite: libre et gratuit, très limité en fonctionnalités. Oracle : utilisé par les entreprises, un des SGBD les plus complets mais payant. Microsoft SQL Server : le SGBD de Microsoft. 1.1 Structure de la base de données La base dans le langage SQL, permet de classer les informations contenues dans les tables. Une table contient des données différentes. Une base contient au maximum 256 tables. C'est là que sont enregistrées les données, sous la forme d'un tableau. Dans ce tableau, les colonnes sont appelées des champs, et les lignes sont appelées des entrées. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 1/31
1.2 Gestion des Bases de Données La base de données gère les informations sous forme de tableaux, MySQL enregistre des informations, les écrit et les enregistre dans des fichiers! Ces fichiers sont quelque part sur votre disque dur. Il faut toujours utiliser MySQL qui va se charger d'extraire et de modifier les informations dans ces fichiers. Chaque SGBD a sa propre façon d'enregistrer les données Par exemple, avec MySQL sous Windows si vous utilisez WAMP, vous devriez trouver les fichiers où sont stockées les informations dans C:\wamp\mysql\data. On va devoir communiquer avec la BDD pour lui donner l'ordre de récupérer ou d'enregistrer des données. Pour "parler" avec le BDD, on utilise le langage SQL (Structured Query Language). Le langage SQL permet de construire de puissantes BDD relationnelles, quelque soit la BDD utilisée. 2 UTILISATION avec PHPMyADMIN Nous allons donc utiliser MySQL qui est fourni dans WampServer. PhpMyAdmin est l interface d utilisation de MYSQL, basé sur le PHP et le HTML, de WampServer Lorsque nous lançons WampServer nous avons l icône dans notre barre des tâches. Si nous cliquons sur cette icône nous ouvrons une fenêtre de commande dans laquelle nous pouvons cliquer sur «phpmyadmin». TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 2/31
Nous ouvrons alors la fenêtre suivante : 2.1 CREER UNE BASE DE DONNEES Lancer Wamp server et ouvrir phpmyadmin nous avons alors dans la fenêtre (1) un champ (2) Créer une base de donnés : Donner un nom à la base : «base_essai» et cliquer sur créer TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 3/31
Nous avons alors confirmation de la création dans un cadre entouré de vert et juste dessous la ligne de code SQL qui a été générée pour effectuer cette opération. Cette information est très importante car elle nous permettra par la suite de «copier/coller» du code sans avoir à le retaper intégralement! Dans la colonne gauche en bleu nous avons notre base avec entre parenthèses le nombre de table incorporées ; 0 pour l instant puisque nous n en avons encore créée aucune! Nb : le champ «Interclassement» concerne divers langages ; exemple : Nous laissons WampServer gérer cela. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 4/31
2.2 Créer et Gérer des Tables Pour cela nous sélectionnons notre base en cliquant dessus : Nous nommons la table et définissons le nombre de colonnes souhaité (champs) ici table_nom et 2 colonnes. L écran suivant s ouvre : On remplit chaque champ Un index Id, type entier INT qui servira de clé primaire, taille/valeur 4 chiffres, dans index mettre INDEX et cocher la case AUTO_INCREMENT. Un champ Nom qui pourra contenir une chaîne de caractères avec le type VARCHAR de 30 caractères dans le champ taille/valeur On ignore les autres champs. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 5/31
Puis on SAUVEGARDE (si on exécute on crée un nouveau champ) la table est enregistrée et apparaît dans la liste L instruction SQL apparaît bien sous le message encadré de vert de confirmation d exécution. Remarquons que la colonne NULL indique l information Non ce qui ce traduit dans les lignes de code SQL par NOT NULL et signifie qui les champs ne doivent pas être vide. Si nous avions voulu accepter des champs vides il aurait fallu cocher la case NULL (ligne en vert) dans l écran de création des colonnes. De la même façon créons une deuxième table «table_activites» avec 3 colonnes «tennis» «petanque» «bridge» : Nous avons maintenant notre base de données avec deux tables. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 6/31
2.3 Les Onglets de gestion Nous voyons en haut de l écran des onglets de navigation. Chaque onglet a une fonction. Celui sur lequel nous sommes, Structure: affiche les divers champs ci-dessus. SQL : permet de lancer une instruction directement en SQL Rechercher : un enregistrement, divers paramètres, permet de faire des «Requêtes» (une recherche croisée entre les champs de différentes tables) nous verrons cela plus en détail. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 7/31
Insérer : cette commande sert à insérer des données dans une table de notre base. Il convient d ouvrir la table et de cliquer sur l onglet «Insérer» Notez : si notre table est vide nous ne pouvons l afficher et nous avons cet écran : Une fenêtre de saisie des données s ouvre. Elle nous propose deux champs de saisie dans lesquels nous pouvons inscrire des données. Le champ «Id» n est pas à renseigner puisqu il «s auto-incrémente». Il faut ensuite cliquer sur «Exécuter» pour insérer les données dans la table. ATTENTION, si on ne rentre des données que dans le deuxième champ et que l on clique sur exécuter les deux champs seront implémentés dans la table, le premier étant vide. Une fois exécutée la saisie nous obtenons cet écran et la table n étant plus vide nous pouvons l afficher. Nous voyons alors nos saisies et l «Id» a été incrémenté automatiquement, là il commence à 5 car nous avons fait des essais auparavant et les avons effacés.. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 8/31
Exporter : la base, équivaut à «enregistrer sous» pour sauvegarder Il faut vérifier que toutes les tables sont bien sélectionnées et que le choix est bien sur SQL puis cliquer sur Exécuter. Une fenêtre s ouvre et l on choisi l emplacement pour enregistrer le fichier en.sql! TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 9/31
Importer : une base, sert à «ouvrir» et à implémenter dans WampServer une ou des tables dans une base, existante ou à créer avant l importation,à partir d un fichier en.sql (ou autre s il était besoin comme.zip par ex.) Choisir le fichier dans l emplacement avec cette commande et cliquer sur Exécuter. Opérations : permet de créer, modifier, renomer, vider les bases et les tables. L onglet Privilèges permet la gestion des utilisateurs. Généralement l on travaille sous Root mais il peut être utile de créer plusieurs utilisateurs quand on gère plusieurs bases surtout à partir d un site Web!. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 10/31
Pour cela il faut cliquer sur Ajouter un utilisateur et renseigner les champs puis cliquer sur Exécuter. L utilisation du bouton Générer un mot de passe est déconseillée car le mot de passe généré est très long! Enfin l onglet Supprimer sert à effacer complétement une table ou une base. A utiliser avec prudence! TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 11/31
3 MANIPULATION des données dans WampServer Avant de manipuler les données rentrées dans notre table nous allons préciser un certain nombre de caractéristiques possibles utilisées par MySQL. 3.1 Les types de champs MySQL Allons dans l onglet «Structure» de notre table et ajoutons une «colonne» en fin de table. Lorsque l on clique sur «Exécuter» nous ouvrons cette fenêtre : Déroulons la liste des types que vous propose MySQL sur la ligne «Type» : Alors que PHP ne propose que quelques types de données (int, string, bool...), MySQL propose une quantité très importante de types de données. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 12/31
En fait, ceux-ci sont classés par catégories : NUMERIC : ce sont les nombres. On y trouve des types dédiés aux petits nombres entiers (TINYINT), aux gros nombres entiers (BIGINT), aux nombres décimaux (DOUBLE), etc. DATE and TIME : ce sont les dates et les heures. De nombreux types différents permettent de stocker une date, une heure, ou les deux à la fois. STRING : ce sont les chaînes de caractères. Là encore, il y a des types adaptés à toutes les tailles. SPATIAL : cela concerne les bases de données spatiales, utile pour ceux qui font de la cartographie. Ce ne sera pas notre cas, donc nous n'en parlerons pas ici. Attention : si dans un champ numérique le 0 est en premier il ne sera pas pris en compte. Il faut donc utiliser un champ caractère pour par exemple stocker des numéros de téléphone. En fait, phpmyadmin a eu la bonne idée de proposer au tout début de cette liste les 4 types de données les plus courants : INT : nombre entier. VARCHAR : court texte (entre 1 et 255 caractères). TEXT : long texte (on peut y stocker un roman sans problème). DATE : date (jour, mois, année). Nous n'aurons besoin de jongler qu'entre ces 4 types, donc ce sont eux qu'il faut retenir. Cela couvrira 99% des besoins. Vous pouvez aussi garder en tête le type DOUBLE qui permet de stocker des nombres décimaux. Une petite remarque à propos de VARCHAR : c'est un type adapté aux courts textes, vous devez indiquer la taille maximale du champ (entre 1 et 255). Si vous ne le faites pas, vous ne pourrez pas créer la table. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 13/31
3.2 Les clés primaires Toute table doit posséder un champ qui joue le rôle de clé primaire. La clé primaire permet d'identifier de manière unique une entrée dans la table. En général, on utilise le champ "Id" comme clé primaire par défaut. Chaque enregistrement de votre site doit pouvoir être identifié de manière unique. Le moyen le plus simple pour cela est de lui donner un numéro unique, dans un champ nommé "Id". Il ne peut pas y avoir deux enregistrements avec le même Id dans la même table ou dans deux tables d une même base de données! Il est vital que chaque table possède sa clé primaire. Des tables sans clé primaire auront leurs performances extrêmement réduites. Créer à chaque fois ce champ "Id" en lui donnant l'index PRIMARY, ce qui aura pour effet d'en faire une clé primaire, cocher la case AUTO_INCREMENT afin que ce champ gère lui-même les nouvelles valeurs automatiquement à chaque nouvelle saisie. 3.3 Les REQUÊTES Nous avons vu que l onglet «Rechercher» nous permet de faire des requêtes dans nos tables. Une requête SQL est un texte qui donne un ordre à exécuter à un moteur de base de données sur une base de données. On utilise la commande SELECT. Elle peut concerner un enregistrement ou plusieurs, elle peut mettre en jeu une table ou plusieurs. La requête est composée de mots clés, les commandes SQL (qui sont pour l instant générées automatiquement par WampServer). Reprécisons également que les commandes SQL ne sont pas sensibles à la casse ni à l'écriture mais les champs sont sensibles à la syntaxe. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 14/31
Pour cet exemple nous importons une nouvelle table, «jeu_video», dans notre «base_essai» afin de disposer de données plus nombreuses et plus variées pour que notre démonstration soit plus significative. Cette table possède 50 «Entrées» qui ont chacune 7 colonnes, elle a cet aspect : Nous allons donc dans l onglet «Rechercher» et nous obtenons cette vue : Nous voyons que toutes les colonnes de la structure de notre table sont affichées et que pour chacune d elles nous avons un choix possible d «Opérateur». TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 15/31
Ce choix est différent suivant le TYPE de données de notre colonne. Les TYPE numériques (int, double, ) et les TYPE alphanumériques (varchar, text, ).. Les opérateurs de comparaison permettent de confronter deux valeurs, et renvoient un résultat selon que celles-ci sont identiques (true) ou pas (false). MySQL propose quelques options en plus des opérateurs habituels. Attention : tous ne sont pas proposés par WampServer en automatique et tous ne s utilise pas avec tous les types de données; on ne va pas utiliser une comparaison de chaine de caractère comme REGEXP avec une valeur numérique par exemple. Exemple de requêtes : Recherchons dans notre table tous les jeux fonctionnant sur PC : TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 16/31
Qui nous donnera le résultat suivant : Recherchons maintenant si «Michel» a testé des jeux sous PC : Voici le résultat : Notez le code SQL généré par WampServer : SELECT * FROM `jeux_video WHERE`possesseur`='michel' AND `console` LIKE 'PC' LIMIT 0, 30 TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 17/31
Enfin dernier exemple recherchons dans les commentaires le mot «meilleur» : Et voyons le résultat : Il existe également d autres opérateurs permettant d autre fonction s utilisant toujours avec la commande SELECT, comme par exemple ORDER BY qui permet de trier une liste de résultats nous verrons tout cela dans la section suivante consacrée à la syntaxe du langage SQL! TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 18/31
4 Le LANGAGE SQL N oublions pas que le but est d accéder aux données de la base de données afin de les manipuler pour obtenir le résultat qui nous intéresse. Nous avons donc appris à créer, implémenter et manipuler des bases de données avec SQL par l intermédiaire du SGBD MySQL fourni dans WampServer. Nous allons maintenant étudier un peu plus en détail le langage SQL lui-même afin de pouvoir plus tard manipuler nos bases de données à l aide de script PHP inclus dans des pages HTML via notre site. Une commande SQL est aussi appelée instruction SQL ou requête SQL. SQL fournit un ensemble de commandes pour une variété de tâches, dont: la création et la modification du schéma de la BDD, l interrogation de la base de données, l insertion, la mise à jour et la suppression des données dans la base de données, la définition de vues, le contrôle de l accès aux données, la création d'index pour accélérer les interrogations Nous allons donc taper directement des instructions SQL depuis une fenêtre de commande en ligne telle celle proposée par WampServer via l onglet «SQL» : L ensemble des commandes SQL étant en anglais nous allons avant cela faire un petit rappel des principales définitions, commandes et du vocabulaire à notre disposition. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 19/31
4.1 Les Définitions Abréviation anglaise Signification anglaise Abréviation française Signification française Remarque DB Data Base BD ou BDD Base de Données DBMS Data Base Management System SGBD Système de Gestion de Base de Données SQL Structured Query Language SQL Langage Structuré de Données Langage d Extraction de Données DDL Data Definition Language DDL Langage de Définition des Données Les Commandes Principales DML Data Manipulation Language DML Langage de Manipulation des Données Les Commandes d Opérations sur les Données TABLE Table ROW Ligne COLUMN Colonne DATATYPE Type de Données 4.2 Le Vocabulaire de Commande Commande Définition Syntaxe Exemple CREATE Création d une entité SQL CREATE «entité» «nom» CREATE DATABASE ma_base SELECT Interrogation de la Base de Données SELECT «titre de colonne» FROM «table» WHERE «valeur choisie» SELECT console, prix FROM jeux_video WHERE prix<20 DROP Supprimer une entité DROP «entit黫nom» DROP TABLE ma_table DELETE Effacer des données DELETE FROM «entité» WHERE «champ»=«valeur à effacer» DELETE FROM ma_table WHERE id=1 TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 20/31
INSERT Insertion de données INSERT INTO «entité» ( champ1, champ2 ) values ( valeur1, valeur2 ) INSERT INTO ma_table ( nom, prénom ) values ( Gaudin, Daniel ) UPDATE Mise à jour de données UPDATE «entité» SET «champ»=«nouvelle valeur» WHERE «champ» = «valeur» UPDATE ma_table SET nom= Jules WHERE nom= Gaudin ALTER «entité» ADD ALTER Modification d une entité Ou CHANGE Ou MODIFY Ou DROP Ou RENAME «action à mener» ALTER TABLE `ma_table` ADD `Age` INT(2) NOT NULL USE Sélectionne la base de travail USE «base de données» «Commande» USE ma_base SELECT Nota : l utilisation de * avec SELECT dans la forme «SELECT *» entraîne l affichage de toutes les colonnes de toutes les tables citées après «FROM». 4.3 Les Opérateurs de comparaisons Opérateur(s) Renvoi "true" si... <> ou!=...les deux valeurs ne sont pas égales <...la valeur de gauche est strictement inférieure à celle de droite >...la valeur de gauche est strictement supérieure à celle de droite <=...la valeur de gauche est strictement inférieure ou égale à celle de droite >=...la valeur de gauche est strictement supérieure ou égale à celle de droite BETWEEN AND IN NOT IN...la valeur testée est située entre deux valeurs données...la valeur testée se situe dans une liste valeurs données...la valeur testée ne se situe pas dans une liste de valeurs données TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 21/31
LIKE NOT LIKE REGEXP ou RLIKE NOT REGEXP IS NULL IS NOT NULL...la valeur de gauche correspond à celle de droite (celle de droite peux utiliser le caractère % pour simuler n'importe quel nombre de caractère, et _ pour un seul caractère...les deux valeurs ne correspondent pas...la valeur de gauche correspond à l'expression régulière donnée...la valeur de gauche ne correspond pas à l'expression régulière donnée...la valeur testée est nulle...la valeur testée n est pas nulle 4.4 La syntaxe des lignes de commandes Il est d usage pour se retrouver plus facilement dans la ligne de code, certaines peuvent être très longues, de mettre en majuscules les COMMANDES et en minuscules les informations. Mais MySQL est insensible à la casse. Les noms de base et de table ne peuvent contenir d espaces ou des caractères spéciaux, c est pourquoi nous y insérons des tirets bas «_». Bien qu ils soient acceptés on évitera les caractères accentués dans les noms de base et de tables. Par contre nous pouvons les utiliser sans problème dans les titres de colonnes. Les noms donnés aux bases, tables, colonnes, champs, doivent être mis entre (simple cote) dans la plupart des instructions. Les valeurs crées ou données dans une instruction le sont entre «( )» et séparées par des virgules «,». Chaque instruction doit se terminer par un point-virgule «;». TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 22/31
Cela nous donne les commandes de base suivantes : Pour créer une base : CREATE DATABASE base_essai ; Pour créer une table dans notre base : Il faut sélectionner la base avec : USE base_essai ; Créer en nommant la table : CREATE TABLE nom_de_table (pas de «;» là car les attributs entre parenthèses suivent directement cette commande) Y mettre au minimum une ligne pour pouvoir créer la table : (nom_ligne VARCHAR(25)); (là nous précisons que cette ligne sera de type caractères variés de 25 champs) Notre ligne de commande aura donc cette structure : CREATE TABLE nom_de_table (nom_ligne VARCHAR(25)); Maintenant il va falloir étoffer notre table en y rajoutant lignes et structures! Rajoutons une colonne : ALTER table table_test ADD ref varchar(10) ; Insérons-y des données : INSERT INTO table_test VALUES ( valeur1, valeur2 ) ; Et faisons une requête : SELECT ref FROM table_test ; TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 23/31
5 Exemples de codes SQL* 5.1 Base de Données à une table Créons notre base : CREATE DATABASE employees ; Créons une table à 3 colonnes : CREATE TABLE personal_info (first_name char(20) not null, last_name char(20) not null, employeeid int not null) ; Ajoutons une colonne : ALTER TABLE personal_info ADD salary DOUBLE NULL ; Incrémentons nos premières valeurs dans la table : INSERT INTO personal_info values('bart','simpson',1000,45000) ; Insérons maintenant plusieurs valeurs en même temps : INSERT INTO `employees`.`personal_info` (`first_name`, `last_name`, `employeeid`, `salary`) VALUES ('mickey', 'mouse', '1001', '32000'), ('donald', 'duck', '1002', '26000'), ('peter', 'pan', '1003', '64000'), ('fritz', 'the cat', '1004', '33000'); Si nous voulons trier la liste et l afficher suivant un ordre précis : ALTER TABLE `personal_info` ORDER BY `employeeid` ; Pour afficher une colonne : SELECT last_name FROM personal_info ; Pour afficher les valeurs d une colonne avec une condition : SELECT * FROM personal_info WHERE salary > 40000 ; Pour mettre à jour toutes les valeurs d une colonne : UPDATE personal_info SET salary = salary * 1.03 ; TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 24/31
Pour modifier une valeur dans une colonne : UPDATE personal_info SET salary = salary + 5000 WHERE employeeid = 1002 ; Pour supprimer des données : DELETE FROM personal_info WHERE employeeid = 1003 ; Pour vider une table de tout son contenu : TRUNCATE TABLE `personal_info` ; Pour supprimer une table : DROP TABLE personal_info ; Pour supprimer une base de données : DROP DATABASE employees ; TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 25/31
5.2 Base de données à plusieurs tables* Nous allons utiliser l exemple précédent en y créant une table supplémentaire : (si vous avez écrasé la base «employees», recréez-la en utilisant les codes de l exemple précédent) CREATE TABLE disciplinary_action (action_id int not null, employeeid int not null, comments char(255)) ; Nous allons maintenant y mettre des données : INSERT INTO `employees`.`disciplinary_action` (`action_id`, `employeeid`, `comments`) VALUES ('1', '1002', 'absence irrégulière'), ('2', '1004', 'mise à pied'), ('3', '1000', 'ivresse à son poste'); Recherchons maintenant quel(s) employés ont eu une sanction : SELECT personal_info.first_name, personal_info.last_name, disciplinary_action.comments FROM personal_info, disciplinary_action WHERE personal_info.employeeid = disciplinary_action.employeeid ; Pour cela il faut bien être dans la base «employees» et sur l onglet SQL. Lorsqu on exécute l instruction SQL nous renvoi bien TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 26/31
une liste avec les Noms et Prénoms des employés avec la sanction subie. Si nous voulons rajouter un critère supplémentaire à notre requête nous utilisons l opérateur complémentaire AND comme ceci «AND personal_info.salary > 40000» ce qui nous donnera : SELECT personal_info.first_name, personal_info.last_name, disciplinary_action.comments FROM personal_info, disciplinary_action WHERE personal_info.employeeid = disciplinary_action.employeeid AND personal_info.salary > 40000 ; Et nous renvoi : Remarquez bien la syntaxe utilisée pour indiquer à MySQL que nous voulons rechercher dans deux tables : SELECT nom_table1.nom_colonne, nom_table2.nom_colonne FROM nom_table1, nom_table2 WHERE nom_table1.nom_colonne = ; A chaque instruction dans la requête la table pointée est rajoutée devant le nom de colonne avec un point de liaison. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 27/31
Ajoutons maintenant un champ à notre table personal_info : ALTER TABLE personal_info ADD (reportsto INTEGER NULL); Et remplissons les : UPDATE `personal_info` SET `reportsto` = '220000' WHERE `employeeid` = '1000' ; UPDATE `personal_info` SET `reportsto` = '300000' WHERE `employeeid` = '1001' ; UPDATE `personal_info` SET `reportsto` = '180000' WHERE `employeeid` = '1002' ; UPDATE `personal_info` SET `reportsto` = '130000' WHERE `employeeid` = '1003' ; UPDATE `personal_info` SET `reportsto` = '230000' WHERE `employeeid` = '1004' ; Créons une troisième table : CREATE TABLE employeeterritories (employeeid INTEGER NOT NULL, territoryid INTEGER NOT NULL, state VARCHAR(5), city TINYTEXT); Nous obtenons : TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 28/31
Remplissons maintenant notre table : INSERT INTO `employeeterritories` (`employeeid`, `territoryid`, `state`, `city`) VALUES ('1000', '100', 'CA', 'Sacramento'), ('1001', '200', 'AZ', 'Phoenix'), ('1002', '300', 'TX', 'Austin'), ('1003', '400', 'GE', 'Atlanta'), ('1004', '500', 'FL', 'Tallahassee'); Nous obtenons : Nous allons maintenant faire une requête sur nos trois tables qui peut s exprimer ainsi : Quels sont les employés (nom et prénom) travaillant dans quel endroit (ville et état) qui font un chiffre d affaire supérieur à 200 000$ et qui ont subi une sanction disciplinaire? SELECT DISTINCT personal_info.first_name, personal_info.last_name, employeeterritories.city, employeeterritories.state, personal_info.reportsto, disciplinary_action.comments FROM personal_info, employeeterritories, disciplinary_action WHERE personal_info.reportsto >200000 AND personal_info.employeeid = employeeterritories.employeeid AND personal_info.employeeid = disciplinary_action. employeeid ; A vous de trouver de nouveaux exemples! TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 29/31
5.3 La jointure Introduisons maintenant une nouvelle commande, la JOINTURE, commande «JOIN»! Toujours avec notre base «employees» essayons cette instruction : SELECT first_name, last_name, city, reportsto FROM personal_info JOIN employeeterritories ON personal_info.employeeid = employeeterritories.employeeid WHERE reportsto >200000 ; Nous obtenons : Faisons une requête sur nos trois tables : SELECT first_name, last_name, city, reportsto, comments FROM personal_info JOIN employeeterritories ON personal_info.employeeid = employeeterritories.employeeid JOIN disciplinary_action ON personal_info.employeeid = disciplinary_action.employeeid WHERE reportsto >200000 Nous obtenons bien le même résultat qu à la page précédente : TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 30/31
* : vous pouvez copier-coller les codes utilisés dans ces exemples mais en faisant attention de ne pas copier les puces de début de ligne! De même il peut arriver que la police soit mal interprétée par WampServer et que vous soyez obligé de retaper toute l instruction. TIC UIAD Création de site internet 2 ème année Daniel Gaudin Jean Claude Chêne page 31/31