Pages web et SQL
Prérequis
Vous avez un serveur local qui fonctionne, avec PhPMyAdmin
Vous avez au moins une base de données créée dans PhP MyAdmin (voir cours Créer une base de données avec PhPMyAdmin )
Introduction
Nous allons voir comment réaliser plusieurs requêtes en SQL, d'abord effectuées dans l'onglet SQL de PhPMyAdmin (pour voir si elles fonctionnent par exemple), puis directement depuis une page web.
Vous pouvez suivre ce cours avec la base de données vue dans le cours sur le fait d'héberger un site web (Filiere-2.sql), pour laquelle sont fournies les corrections. Vous pouvez également le faire avec votre propre base de données.
Ce cours propose un aperçu des fonctionnalités et des instructions de SQL. Pour plus d'instruction SQL dans la documentation: https://sql.sh
Sommaire
Se connecter à une base de données dans une page web
La première étape pour utiliser une base de données directement dans votre page web, c'est de vous y connecter via votre page web.
Pour cela, nous allons utiliser PDO
Si vous utiliser votre site en ligne, cette étape doit déjà fonctionner suite au cours Deployer son site web.
Pour établir une connexion avec une base de données en local, voici la procédure:
Sur votre serveur web (MAMP, XAMMP...), verifier que votre serveur web est activé.
Télécharger le fichier suivant si vous souhaitez utiliser la base de données Filiere pour ce cour, et importer dans PhPMyAdmin. En important le fichier suivant dans PhPMyAdmin, cela vous permet de télécharger les tables et les occurences de la base de données Filiere utilisée dans le cours Créer une base de données avec PhPMyAdmin :
Fichier Filière-2.sql à importer pour créer les tables de la base de données Filiere
Maintenant, vous devez avoir une base de données dans PhPMyAdmin avec laquel vous allez vous connecter en local via votre site web.
Instruction PhP à mettre dans votre page pour vous connecter
Nous allons utiliser l'instruction suivante pour se connecter sur votre base de données, avec en gras les éléments à modifier selon votre cas.
Pour vous connecter, il vous faut les droits, vous vous authentifiez donc avec un login et un mot de passe.
Voici plus de détails, partie par partie:
$bdd = : l'accès à la base de données, une fois la connexion faite, est stocké dans une variable (ici, le nom de cette variable PhP est bdd)
new PDO( : demande de l'initialisation de l'accès
" : (premier paramètre composé de:)
mysql:host=localhost; : nom de la source des données
dbname=mabase; : nom de la base de données
charset=utf8 : encodage
", (fin du premier paramètre)
"mabase_login", login de l'utilisateur de la base
"mabase_mdp", mot de passe de l'utilisateur
array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); enregistremebt des erreurs si la connexion ne fonctionne pas.
<?php
$bdd = new PDO( "mysql:host=localhost;dbname=mabase;charset=utf8", "mabase_login", "mabase_mdp", array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
?>
A ce stade, nous récuperons l'erreur, mais nous ne l'affichons pas si la connexion échoue. Nous allons donc mettre cette instruction dans un bloc Try Catch (c'est à dire Essayer, si ça ne fonctionne pas Intercepter l'erreur), ci-contre en italique:
<?php try {
$bdd = new PDO( "mysql:host=localhost;dbname=mabase;charset=utf8", "mabase_login", "mabase_mdp", array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e) {
die('Erreur fatale : ' . $e->getMessage());
}
?>
Si vous avez téléchargé et importé le fichier Filiere-2.sql, , vous utiliserez mysql:host=localhost;dbname=Filiere. Sinon, utiliser les nom de votre base de données à la place de Filiere.
Il ne reste donc qu'à obtenir un login et un mot de passe pour la base de données
Nous allons maintenant créer un identifiant et un mot de passe pour la base de données via PhPmyAdmin, afin de nous connecter
<?php try {
$bdd = new PDO( "mysql:host=localhost;dbname=Filiere;charset=utf8", "mabase_login", "mabase_mdp", array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e) {
die('Erreur fatale : ' . $e->getMessage());
}
Créer votre compte utilisateur dans PhPMyAdmin
Sur la page PhPMyAdmin, aller sur l'accueil en cliquant sur l'icone de la maison en haut à gauche.
Dans l'onglet Compte utilisateur, vous voyez la liste des utilisateurs.
En dessous de la liste des comptes, cliquer sur Ajouter un compte d'utilisateur
Saisissez un nom utilisateur (celui que vous mettrez dans l'instruction vue précédemment), dans mon cas, j'ai mis lauren en minuscules.
Sélectionner Local à Nom d'hôte
Choisissez un mot de passe (celui que vous mettrez dans l'instruction vue précédemment). Pour la suite de l'exemple, j'ai renseigné un mot de passe particulièrement mauvais: admin
Afin de pouvoir réaliser l'ensemble des requêtes SQL, j'ai choisi dans Editer les privilièges, de Tout cocher.
Attention: pour votre site web, cela est déconseillé, car il serait alors possible d'effacer des données, des tables etc.
Cliquer sur Exécuter en bas à droite.
Le nouveau compte a été créé:
Connectez-vous à votre base de données avec votre compte utilisateur nouvellement créé
Retournez à votre code source PhP.
Remplacer, dans l'instruction, "mabase_login", "mabase_mdp" par votre login utilisateur et votre mot de passe nouvellement créé.
Dans mons cas, j'écrirais:
<?php try {
$bdd=new PDO("mysql:host=localhost;dbname=Filiere;charset=utf8", "lauren", "admin",
array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e) {
die('Erreur fatale : ' . $e->getMessage());
}
<?php try {
$bdd = new PDO( "mysql:host=localhost;dbname=Filiere;charset=utf8", "mabase_login", "mabase_mdp", array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
}
catch (Exception $e) {
die('Erreur fatale : ' . $e->getMessage());
}
Vous pouvez intégrer cette instruction dans une page, afin de voir si la page s'affiche (connexion réussie) ou s'il y a une Erreur Fatale, dans quel cas la connexion n'a pas marché.
Veillez à ouvrir votre page web via votre serveur web, sinon cela ne fonctionnera pas
CAS 1: la page s'affiche, la connexion à la base de données a réussi
CAS 2: une erreur s'affiche, la connexion à la base de données n'a pas abouti
Fonctionnement général
Vous êtes connecté.e.s à votre base de données, maintenant il reste à effectuer les requêtes depuis votre page web.
Le principe est très simple:
vous tapez votre requête dans une chaine de caractère en PhP
vous exécuter la requête en utilisant la variable utilisée pour la connexion avec votre base de données ($bdd dans la section précédente) ave query
Vous voulez faire la requête "SELECT * FROM Cours" ? ll vous suffit d'utiliser cette chaine de caractère avec query() et votre variable $bdd. Vous verrez dans les section suivante comment afficher les resultats pour les requêtes SELECT.
<?php
$instructions = "SELECT * FROM Cours";
$requete = $bdd -> query ($instructions);
?>
Le cas des requêtes préparées
Imaginons que l'on souhaite changer faire un SELECT mais que l'on puisse changer le nom du champ (ou attribut ou colonne) et de la table à afficher. On fait un référence à la base de donnée ($bdd) avec prepare, puis on remplace, dans la requête, les valeurs par un marqueur avec un nom précédé de deux points. On associe dans bindValue le nom du marqueur et la valeur qui remplace le marqueur, puis on exécute.
Attention, ces marqueurs ne peuvent remplacer que des paramètres, après le mot clef WHERE par exemple. Par exemple, dans le deuxième exemple, la valeur de l'idCours pourra être modifié en fonction du contexte (utilisateur, formulaire, etc.)
Exemple de requêtes préparées SANS marqueurs
<?php
$requete = $bdd->prepare("SELECT * FROM Cours");
$requete->execute();
?>
Exemple de requêtes préparées AVEC marqueurs
<?php
$requete = $bdd->prepare("SELECT * FROM Cours WHERE idCours=:monID");
$laValeurdeID= "3";
$requete->bindValue('monID',$laValeurdeID,PDO::PARAM_STR );
$requete->execute();
?>
Utiliser les résultats d'un SELECT
La variable $requete (après le exécute), est d'un type un peu particulier. Pour récupérer les résultats, nous allons "aller chercher" (litteralement: fetch) les résultats ligne par ligne. Pour cela, on utilise une boucle while qui s'arrête quand il n'y a plus de résultat à traiter. La ligne est un tableau associatif, où on récupère la valeur de la cellule en fonction du nom de la colonne dans la base de données. Par exemple, pour récupérer la valeur dans la colonne Nom pour tous les resultats, on utilise, en plus de la requête précédente:
<?php
while ( $ligne = $requete->fetch() ) {
echo "<p> Valeur du champ:". $ligne['NomDeLaColonne']."</p>";
}
?>
Ajouter et supprimer une occurrence (une ligne)
Pour créer une nouvelle occurrence où attribut1 vaut valeur1Attribut1, où attribut2 vaut valeur1Attribut2 et où attribut3 vaut valeur1Attribut3 dans une table maTable, si vous avez les droits, la requête est composée du mot clef INSERT INTO, du nom de la table, et entre parenthèses le nom des attributs de cette table, suivi du mot clef VALUES puis entre parenthèses les valeurs de ces attributs dans le même ordre que déclaré avant VALUES:
INSERT INTO maTable ( attribut1, attribut2, attribut3) VALUES (valeur1Attribut1, valeur1Attribut2, valeur1Attribut3)
Après VALUES, on peut rajouter plusieurs occurrences, en mettant entre parenthèses toutes les valeurs des occurrences, et en séparant les occurrences par des virgules:
INSERT INTO maTable ( attribut1, attribut2, attribut3) VALUES (valeur1Attribut1, valeur1Attribut2, valeur1Attribut3), (valeur2Attribut1, valeur2Attribut2, valeur2Attribut3), (valeur3Attribut1, valeur3Attribut2, valeur3Attribut3),
Pour supprimer une occurrence dans une table maTable, si vous avez les droits, la requête est composée du mot clef DELETE FROM puis du nom de la table, du mot clef WHERE, suivi de l'attribut de la clef primaire et de sa valeur pour l'occurrence à supprimmer:
DELETE FROM maTable WHERE maClefPrimaire = valeurDeClefPrimaire
On peut également utiliser n'importe quelle condition avec WHERE . Un certain nombre de conditions utilisé avec WHERE sont détaillées dans la section suivant (SELECT).
Rappel Ajout
Aller dans PhPMyAdmin, puis sur l'onglet SQL
Ecrivez la requête pour créer une nouvelle UE:
Votre occurrence a été ajouté dans votre table:
Exercice 1. Faites une requête pour ajouter une UE, mais depuis votre page web au lieu d'utiliser PhPMyAdmin
<?php
$requeteInsert= "INSERT INTO UE (idUE, Nom, CreditECTS) VALUES (NULL, 'Analyse de donnée', '4')";
$insertion=$bdd -> query($requeteInsert);
?>
Exercice 2. Faites une requête préparée pour ajouter une UE, mais depuis votre page web
<? php
$requeteInsert= $bdd -> prepare("INSERT INTO UE (idUE, Nom, CreditECTS) VALUES (NULL, :nom,:credits)");
$leNom= "Environnement numerique";
$lesCredits = "4";
$requeteInsert->bindValue('credits', $lesCredits,PDO::PARAM_STR );
$requeteInsert->bindValue('nom',$leNom,PDO::PARAM_STR );
$requeteInsert->execute();
?>
Rappel Suppression
Aller dans PhPMyAdmin, puis sur l'onglet SQL
Ecrivez la requête pour supprimer la dernière UE créée.
Votre occurrence a été supprimée de votre table:
Exercice 3. Faites une requête pour supprimer l'UE, mais depuis votre page web au lieu d'utiliser PhPMyAdmin
<?php
$requeteDelete= "DELETE FROM UE WHERE idUE='10'";
$insertion=$bdd -> query($requeteDelete);
?>
Exercice 4. Faites une requête préparée pour supprimer une UE, mais depuis votre page web
<?php
$requeteDelete=$bdd -> prepare("DELETE FROM UE WHERE idUE=:id");
$leID="11";
$requeteDelete->bindValue('id',$leID,PDO::PARAM_STR );
$requeteDelete->execute();
?>
Requêtes SQL pour interroger une table
Selectionner tout le contenu d'une table
Si une table s'appelle MATABLE dans une base de données, on peut sélectionner toutes les données de la table avec l'instruction suivante:
SELECT * FROM MATABLE
Si on regarde cette instruction en détail:
SELECT : instruction SQL pour sélectionner les données correspondantes aux contraintes données par la suite
* : permet de sélectionner toutes les colonnes (= tous les attributs) de la table spécifiée par la suite
FROM : instruction SQL pour indiquer la table (= la relation) que l'on utilise pour sélectionner les données
MATABLE : nom de la table que l'on utiliser pour sélectionner les données
Exemple dans PhPMyAdmin
Dans PhPMyAdmin, selectionner une base de données (ici, Filiere) dans l'aborescence à gauche.
Aller dans l'onglet SQL. Nous allons tenter de sélectionner toutes les évaluations enregistrées dans la base de données.
Nous souhaitons donc "sélectionner" + "tous les attributs" des occurrences + "de la table Evaluation".
La requête correspondante est donc:
SELECT * FROM Evaluation
Ecrivez cette requête dans l'encadré dédié et cliquez sur Exécuter
Une fois exécutée, l'ensemble des occurences de la table (il y en a 4 ici) et l'ensemble des attributs (idEvaluation, Modalites, Debut, Fin, Sujet et idCours) est affiché
Exercice 5. Dans une base de données, par exemple Filiere, récupérer l'ensemble des données d'une autre relation, par exemple Cours via PhPMyAdmin
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Cours dans l'encadré
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Exercice 6. Faites la même chose dans votre page web avec et afficher les resultats avec fetch()
La première chose est de récupérer les résultats dans une variable. Pour cela on peut utiliser une requête ou une requête préparé
Si on a choisi de faire une requête traditionnelle:
$instructions= "SELECT * FROM Cours";
$requete=$bdd -> query($instructions);
Si on a choisi de faire une requête préparée (attention, le nom de la table n'est PAS un paramètre):
$requete=$bdd -> prepare("SELECT * FROM Cours");
$requete->execute();
Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:
while ( $ligne = $requete->fetch() ) {
echo "<p> idCours: ". $ligne['idCours'].", Nom du cours: ". $ligne['NomCours'].", UE asociée au cours: ". $ligne['idUE']."</p>";
}
Selectionner le contenu de certains attributs d'une table
Si une table s'appelle MATABLE dans une base de données et a trois attributs Colonne1, Colonne2 et Colonne3, on peut sélectionner les données de certaines colonnes de la table en remplaçant "*" vu précédemment par les noms des attributs séparés par des virgules.
Seulement une des colonnes:
Pour Colonne1:
SELECT Colonne1 FROM MATABLE
Pour Colonne2:
SELECT Colonne2 FROM MATABLE
Pour Colonne3:
SELECT Colonne3 FROM MATABLE
Seulement deux des colonnes:
Pour Colonne1 et Colonne2:
SELECT Colonne1, Colonne2 FROM MATABLE
Pour Colonne2 et Colonne3:
SELECT Colonne2, Colonne3 FROM MATABLE
Pour Colonne1 et Colonne3:
SELECT Colonne1,Colonne3 FROM MATABLE
Exemple dans PhPMyAdmin
Dans PhPMyAdmin, selectionner une base de données (ici, Filiere) et ller dans l'onglet SQL.
Nous souhaitons donc "sélectionner" + "les modalités, la fin et le sujet" des occurrences + "de la table Evaluation".
La requête correspondante est donc:
SELECT Modalites, Fin, Sujet FROM Evaluation
Ecrivez cette requête dans l'encadré dédié et cliquez sur Exécuter.
Seuls ces trois attributs sont affichés.
Exercice 7
Question 1. Dans une base de données, par exemple Filiere, récupérer un seul des attributs des données d'une autre relation, par exemple NomCours dans Cours
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT NomCours FROM Cours dans l'encadré
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Question 2. Faites la même chose dans votre page web avec et afficher les resultats avec fetch()
La première chose est de récupérer les résultats dans une variable. Pour cela on peut utiliser une requête ou une requête préparé
Si on a choisi de faire une requête traditionnelle:
$instructions= "SELECT NomCours FROM Cours";
$requete=$bdd -> query($instructions);
Si on a choisi de faire une requête préparée:
$requete=$bdd -> prepare("SELECT NomCours FROM Cours");
$requete->execute();
Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:
while ( $ligne = $requete->fetch() ) {
echo "<p> "Nom du cours ". $ligne['NomCours']."</p>";
}
Question 3. Dans une base de données, par exemple Filiere, récupérer deux des attributs des données d'une autre relation, par exemple NomPersonne et PrenomPersonne dans Personne
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT NomPersonne,PrenomPersonne FROM Personne
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Question 4. Faites la même chose dans votre page web avec et afficher les resultats avec fetch()
La première chose est de récupérer les résultats dans une variable. Pour cela on peut utiliser une requête ou une requête préparé
Si on a choisi de faire une requête traditionnelle:
$instructions= "SELECT NomPersonne,PrenomPersonne FROM Personne";
$requete=$bdd -> query($instructions);
Si on a choisi de faire une requête préparée:
$requete=$bdd -> prepare("SELECT NomPersonne,PrenomPersonne FROM Personne");
$requete->execute();
Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:
while ( $ligne = $requete->fetch() ) {
echo "<p>Nom :". $ligne['NomPersonne'].", prénom: ". $ligne['PrenomPersonne']."</p>";
}
Selectionner les occurences d'une table respectant certaines contraintes
Imaginons table qui s'appelle MATABLE dans une base de données et a trois attributs Colonne1, Colonne2 et Colonne3. On peut sélectionner les lignes (=occurences) respectant certaines condition (ou contraintes). Pour cela on rajoute le mot clef WHERE à la fin de la requête SELECT suivi de la contrainte.
Cela est indépendant de la première partie de la requête, où on choisit les attributs à retourner par la requête
Seulement les lignes où un attribut a une valeur donnée:
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont la valeur maValeur dans la colonne Colonne1 :
SELECT * FROM MATABLE Colonne1="maValeur"
Si on veut sélectionner les colonnes Colonne2 et Colonne3 et afficher toutes les lignes qui ont la valeur maValeur dans la colonne Colonne1 :
SELECT Colonne1, Colonne3 FROM MATABLE Colonne1="maValeur"
Exemple dans PhPMyAdmin avec la table Filière:
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Evaluation pour le cours de base de données (idCours=2)
SELECT * FROM Evaluation WHERE idCours="2"
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons les modalités et le sujet de la table Evaluation pour le cours de base de données (idCours=2)
SELECT Modalites, Sujet FROM Evaluation WHERE idCours="2"
Exercice 8. Dans une base de données, par exemple Filiere, récupérer la liste des occurrences d'une relation ayant une certaine valeur pour un attribut donné, par exemple la liste des occurrences de Personne ayant comme nom de famille Monster.
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Personne WHERE NomPersonne="Monster"
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Exercice 9. Faites la même chose dans votre page web avec et afficher les resultats avec fetch()
La première chose est de récupérer les résultats dans une variable. Pour cela on peut utiliser une requête ou une requête préparé
Si on a choisi de faire une requête traditionnelle:
$instructions= " SELECT * FROM Personne WHERE NomPersonne='Monster' ";
$requete=$bdd -> query($instructions);
Si on a choisi de faire une requête préparée:
$requete=$bdd -> prepare(" SELECT * FROM Personne WHERE NomPersonne=:nom");
$laValeur='Monster';
$requete->bindValue('nom',$laValeur,PDO::PARAM_STR );
$requete->execute();
Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:
while ( $ligne = $requete->fetch() ) {
echo "<p>Nom :". $ligne['NomPersonne'].", prénom: ". $ligne['PrenomPersonne']."</p>";
}
Seulement les lignes où un attribut prend une des valeurs d'une liste:
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont les valeurs maValeur1 ou maValeur2 dans la colonne Colonne1 :
SELECT * FROM MATABLE WHERE Colonne1 IN ( "maValeur1", "maValeur2" )
Si on veut sélectionner les colonnes Colonne2 et Colonne3 et afficher toutes les lignes qui ont la valeur maValeur dans la colonne Colonne1 :
SELECT Colonne1, Colonne3 FROM MATABLE WHERE Colonne1 IN ( "maValeur1", "maValeur2" )
Exemple dans PhPMyAdmin avec la table Filière:
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Evaluation qui sont soit des projets, soit des dossiers
SELECT * FROM Evaluation WHERE Modalites IN ("Dossier", "Projet")
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons le sujet et la date de fin de la table Evaluation pour le cours de base de données (idCours=2)
SELECT Sujet, Fin FROM Evaluation WHERE Modalites IN ("Dossier", "Projet")
Exercice 10
Dans une base de données, par exemple Filiere, récupérer la liste des occurrences d'une relation ayant un attribut dans une liste de trois valeurs, par exemple la liste des occurrences de Personne ayant comme nom de famille Monster, Thevin ou JadorelUCO
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Personne WHERE NomPersonne IN ("Monster", "Thevin", "JadorelUCO") dans l'encadré
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Exercice 11. Faites la même chose dans votre page web avec et afficher les resultats avec fetch()
La première chose est de récupérer les résultats dans une variable. Pour cela on peut utiliser une requête ou une requête préparé
Si on a choisi de faire une requête traditionnelle:
$instructions= "SELECT * FROM Personne WHERE NomPersonne IN ('Monster', 'Thevin', 'JadorelUCO') ";
$requete=$bdd -> query($instructions);
Si on a choisi de faire une requête préparée:
$requete=$bdd -> prepare("SELECT * FROM Personne WHERE NomPersonne IN (:valeur1, :valeur2, :valeur3)");
$laValeur1="Monster";
$laValeur2="Thevin";
$laValeur3= "JadorelUCO";
$requete->bindValue('valeur1',$laValeur1,PDO::PARAM_STR );
$requete->bindValue('valeur2',$laValeur2,PDO::PARAM_STR );
$requete->bindValue('valeur3',$laValeur3,PDO::PARAM_STR );
$requete->execute();
Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:
while ( $ligne = $requete->fetch() ) {
echo "<p>Nom :". $ligne['NomPersonne'].", prénom: ". $ligne['PrenomPersonne']."</p>";
}
Seulement les lignes où un attribut est inférieur, supérieur ou entre deux valeurs:
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont les valeurs inférieures à maValeur1 dans la colonne Colonne1 :
SELECT * FROM MATABLE WHERE Colonne1 < "maValeur1"
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont les valeurs supérieures à maValeur2 dans la colonne Colonne1 :
SELECT * FROM MATABLE WHERE Colonne1 > "maValeur2"
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont les valeurs entre maValeur1 et maValeur2 dans la colonne Colonne1 :
SELECT * FROM MATABLE WHERE Colonne1 BETWEEN "maValeur1" AND "maValeur2"
Exemple dans PhPMyAdmin avec la table Filière:
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Evaluation qui ont un rendu avant Noël 2020
SELECT * FROM Evaluation WHERE Fin < '2020-12-24 23:59:00'
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Evaluation qui ont un rendu après le premier de l'an 2021
SELECT * FROM Evaluation WHERE Fin > '2021-01-01 00:00:01'
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Evaluation qui ont un rendu après Noël et avant le premier de l'an 2021
SELECT * FROM Evaluation WHERE Fin BETWEEN '2020-12-24 23:59:00' AND '2021-01-01 00:00:01'
Exercice 12. Dans une base de données, par exemple Filiere, récupérer la liste des occurrences d'une relation ayant un attribut dans un intervalle, par exemple la liste des occurrences de Personne ayant un idPersonne entre 4 et 25
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Personne WHERE idPersonne BETWEEN "4" AND "25" dans l'encadré
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Exercice 13. Faites la même chose dans votre page web avec et afficher les resultats avec fetch()
La première chose est de récupérer les résultats dans une variable. Pour cela on peut utiliser une requête ou une requête préparé
Si on a choisi de faire une requête traditionnelle:
$instructions= "SELECT * FROM Personne WHERE idPersonne BETWEEN '4' AND '25' ";
$requete=$bdd -> query($instructions);
Si on a choisi de faire une requête préparée:
$requete=$bdd -> prepare("SELECT * FROM Personne WHERE idPersonne BETWEEN :valeurUn AND :valeurDeux");
$laValeurUn="4";
$laValeurDeux="25";
$requete->bindValue('valeurUn',$laValeurUn,PDO::PARAM_STR );
$requete->bindValue('valeurDeux',$laValeurDeux,PDO::PARAM_STR );
$requete->execute();
Il reste maintenant à afficher les éléments des resultats avec fetch, en affichant chacune des valeurs des colonnes:
while ( $ligne = $requete->fetch() ) {
echo "<p>Nom :". $ligne['NomPersonne'].", prénom: ". $ligne['PrenomPersonne']."</p>";
}
Seulement les lignes où un attribut contient une séquence:
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont les valeurs commence par maValeur1 dans la colonne Colonne1, on ajoute le caractère "%" à la fin de maValeur:
SELECT * FROM MATABLE WHERE Colonne1 LIKE "maValeur1%"
Si on veut sélectionner toutes colonnes et afficher les lignes qui ont les valeurs finissent par maValeur2 dans la colonne Colonne1, on ajoute le caractère "%" au début de maValeur:
SELECT * FROM MATABLE WHERE Colonne1 LIKE "%maValeur2"
Si on veut sélectionner toutes colonnes et afficher les lignes qui contiennent maValeur3 dans la colonne Colonne1, on ajoute le caractère "%" au début et à la fin de maValeur
SELECT * FROM MATABLE WHERE Colonne1 LIKE "%maValeur3%"
Si on veut sélectionner toutes colonnes et afficher les lignes qui contiennent maValeur1, maValeur2 puis maValeur3 (dans cet ordre) dans la colonne Colonne1 , on intercale de % entre les valeurs:
SELECT * FROM MATABLE WHERE Colonne1 LIKE "%maValeur1%maValeur2%maValeur3%"
Exemple dans PhPMyAdmin avec la table Filière:
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne qui ont un prénom qui commence par Li
SELECT * FROM Personne WHERE PrenomPersonne LIKE "Li%"
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne qui ont un prénom qui fini par un w
SELECT * FROM Personne WHERE PrenomPersonne LIKE "%w"
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne qui ont un prénom qui contient un a
SELECT * FROM Personne WHERE PrenomPersonne LIKE "%a%"
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne qui ont un prénom qui contient un l puis un i puis un a dans cet ordre.
Nous considérons que vous savez utiliser prepare, query, execute et fetch. La suite est un rappel sur les types de requêtes, que vous pouvez effectuer dans PhPMyAdmin afin de verifier leur exactitude
Dans une base de données, par exemple Filiere, récupérer la liste des occurrences d'une relation ayant un attribut contenant une certaine valeur, par exemple la liste des occurrences de Cours ayant un nom contenant web
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Cours WHERE nomCours LIKE "%web%"
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Dans une base de données, par exemple Filiere, récupérer la liste des occurrences d'une relation ayant un attribut contenant une plusieurs fois une certaine valeur, par exemple la liste des occurrences de Cours ayant un nom contenant au moins deux e
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Cours WHERE nomCours LIKE "%e%e%"
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Trier les données selon une colonne
Tri Ascendant (alphabétique, du plus petit au plus grand)
Si une table s'appelle MATABLE dans une base de données et a trois attributs Colonne1, Colonne2 et Colonne3, on peut trier les données récupérées avec l'instruction ORDER BY suivi du nom de la colonne qui sert pour le tri
SELECT * FROM MATABLE ORDER BY Colonne1
Cela est équivalent à (ASC pour ascendant):
SELECT * FROM MATABLE ORDER BY Colonne1 ASC
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne triées en fonction du prénom
SELECT * FROM Personne ORDER BY PrenomPersonne
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons les prénoms de la table Personne triées en fonction du nom de famille par ordre alphabétique
SELECT PrenomPersonne FROM Personne ORDER BY NomPersonne
Dans une base de données, par exemple Filiere, trier la liste des occurrences d'une relation en fonction d'un attribut, par exemple la liste des Cours en fonction du numéro de l'idUE
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Cours ORDER BY idUE
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Dans une base de données, par exemple Filiere, trier la liste des occurrences d'une relation en fonction d'un attribut en en affichant qu'une partie, par exemple afficher le numéro étudiant NEtudiant de Etude trié en fonction de idPersonne (qui lui n'est pas affiché)
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT NEtudiant FROM Etude ORDER BY idPersonne
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Tri descendant (du plus grand au plus petit)
Si une table s'appelle MATABLE dans une base de données et a trois attributs Colonne1, Colonne2 et Colonne3, on peut trier les données récupérées avec l'instruction ORDER BY suivi du nom de la colonne qui sert pour le tri, puis de DESC (pour descendant)
SELECT * FROM MATABLE ORDER BY Colonne1 DESC
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne triées en fonction du prénom à l'inverse de l'ordre alphabétique
SELECT * FROM Personne ORDER BY PrenomPersonne DESC
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons les prénoms de la table Personne triées en fonction du nom de famille par ordre alphabétique
SELECT PrenomPersonne FROM Personne ORDER BY NomPersonne DESC
Dans une base de données, par exemple Filiere, trier la liste des occurrences d'une relation en fonction d'un attribut, par exemple la liste des Cours en fonction du numéro de l'idUE
PAR ORDRE DESCENDANT
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Cours ORDER BY idUE DESC
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Dans une base de données, par exemple Filiere, trier la liste des occurrences d'une relation en fonction d'un attribut en en affichant qu'une partie, par exemple afficher le numéro étudiant NEtudiant de Etude trié en fonction de idPersonne (qui lui n'est pas affiché)
PAR ORDRE DESCENDANT
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT NEtudiant FROM Etude ORDER BY idPersonne DESC
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Trier les données selon plusieurs colonnes
Tri ascendant sur toutes les colonnes
Si une table s'appelle MATABLE dans une base de données et a trois attributs Colonne1, Colonne2 et Colonne3, on peut trier les données récupérées avec l'instruction ORDER BY suivi du nom de la colonne qui sert pour le tri en premier, puis celle qui sert en deuxième etc.
SELECT * FROM MATABLE ORDER BY Colonne1, Colonne2
Cela est équivalent à (ASC pour ascendant):
SELECT * FROM MATABLE ORDER BY Colonne1 ASC, Colonne2 ASC,
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne triées en fonction du prénom d'abord, puis en fonction du nom de famille s'il y a des prénoms identiques
SELECT * FROM Personne ORDER BY PrenomPersonne, NomPersonne
Tri descendant sur certaines colonnes
Il faut rajouter le suffixe DESC et ASC à la suite des colonnes selon si le tri est descendant ou ascendant sur cette colonne. Pour trier par ordre descendant sur la colonne1, puis ascendant sur la colonne2 puis 3 et descendant sur la colonne 4:
SELECT * FROM MATABLE ORDER BY Colonne1 DESC, Colonne2 ASC, Colonne3 ASC, Colonne4 DESC
Voici un exemple avec la base de données Filiere que vous pouvez essayer. Nous affichons toutes les informations de la table Personne triées en fonction du prénom d'abord à l'inverse de l'ordre alphabétique, puis en fonction du nom de famille dans l'ordre alphabétique s'il y a des prénoms identiques
SELECT * FROM Personne ORDER BY PrenomPersonne DESC, NomPersonne ASC
Dans une base de données, par exemple Filiere, trier la liste des occurrences d'une relation en fonction de plusieurs attribut,s par exemple la liste des Enseignant en fonction du numéro de l'idPersonne d'abord (croissant), puis par nombre d'heures CM (décroissant), puis par nombre d'heures TD (croissant)
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Enseignant ORDER BY idPersonne ASC, HeuresCM DESC, HeuresTD ASC
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Jointures: recréer une seule table à partir des clefs étrangère
Une jointure permet de recréer une seule table en associant les clefs étrangères à une clef primaire. On va faire "virtuellement" des nouvelles occurrences d'une "nouvelle" table combinant les valeurs dans une table 1 et 2.
Une jointure permet d'associer une clef étrangère de l'attribut clefEtrangere dans une table maTable1 avec les valeurs de l'occurrence correspondant sont les clefs primaires clefPrimaire dans la table maTable2
Inner join
Inner join est une jointure qui ne garde que les occurrences qui sont à la fois une valeur présente en tant que clef étrangère dans la table 1 et à la fois clef primaire dans la table 2 (cf illustration ci-après):
SELECT * FROM maTable1 INNER JOIN maTable2 ON maTable1.clefEtrangere =maTable2.clefPrimaire
Voici une exemple de la base Filière, où la table Cours est liée à une UE via une clef étrangère. On peut lier les occurrences ce cours (ex: base de données) avec le nom de l'UE à laquelle il est rattaché (ex: UE Programmation) qui est dans une autre table. Vous avez l'illustration juste en dessous.
SELECT * FROM Cours INNER JOIN UE ON cours.idUE=UE.idUE
Occurrences de la table Cours
idUE est une clef étrangère
Occurrences de la table UE
idUE est une clef primaire
Mise en lien via INNER JOIN
On ne garde que les cours qui ont des idUE existants dans les deux tables
Dans une base de données, par exemple Filiere, faire la jointe dans Enseignant pour associer la Personne qui enseigne
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Enseignant INNER JOIN Personne ON Enseignant.idPersonne= Personne.idPersonne
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Right join
Right join est une jointure qui garde, comme INNER JOIN, les occurrences qui sont à la fois une valeur présente en tant que clef étrangère dans la table 1 et à la fois clef primaire dans la table 2, mais qui en plus ajoute les occurrences qui sont dans la table à droite de joint (cf illustration ci-après)
SELECT * FROM maTable1 RIGHT JOIN maTable2 ON maTable1.clefEtrangere =maTable2.clefPrimaire
Voici une exemple de la base Filière, où la table Cours est liée à une UE via une clef étrangère. On peut lier les occurrences ce cours (ex: base de données) avec le nom de l'UE à laquelle il est rattaché (ex: UE Programmation) qui est dans une autre table. Vous avez l'illustration juste en dessous.
SELECT * FROM Cours RIGHT JOIN UE ON Cours.idUE=UE.idUE
Left join
Left join est une jointure qui garde, comme INNER JOIN, les occurrences qui sont à la fois une valeur présente en tant que clef étrangère dans la table 1 et à la fois clef primaire dans la table 2, mais qui en plus ajoute les occurrences qui sont dans la table à gauche de joint (cf illustration ci-après)
SELECT * FROM maTable1 LEFT JOIN maTable2 ON maTable1.clefEtrangere =maTable2.clefPrimaire
En général, on échange alors l'ordre des tables, car avec la vérification sur les valeurs des clefs étrangères, en principe vous ne deviez pas avoir de clef étrangère qui n'existe pas en tant que clef primaire:
SELECT * FROM maTable1 LEFT JOIN maTable2 ON maTable1.clefEtrangere =maTable2.clefPrimaire
Voici une exemple de la base Filière, où la table Cours est liée à une UE via une clef étrangère. On peut lier les occurrences ce cours (ex: base de données) avec le nom de l'UE à laquelle il est rattaché (ex: UE Programmation) qui est dans une autre table. Vous avez l'illustration juste en dessous.
SELECT * FROM UE LEFT JOIN Cours ON Cours.idUE=UE.idUE
Occurrences de la table Cours
idUE est une clef étrangère
Occurrences de la table UE
idUE est une clef primaire
Mise en lien via
Cours RIGHT JOIN UE
On garde que les cours qui ont des idUE existants dans les deux tables, plus ceux dans la table de droite de JOIN
Occurrences de la table Cours
idUE est une clef étrangère
Occurrences de la table UE
idUE est une clef primaire
Mise en lien via
UE LEFT JOIN Cours
On garde que les cours qui ont des idUE existants dans les deux tables, plus ceux dans la table de gauche de JOIN
Dans une base de données, par exemple Filiere, faire la jointure RIGHT JOIN dans Enseignant pour associer la Personne qui enseigne et afficher tous les enseignants
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Enseignant RIGHT JOIN Personne ON Enseignant.idPersonne= Personne.idPersonne
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent
Dans une base de données, par exemple Filiere, faire la jointure LEFT JOIN dans Enseignant pour associer la Personne qui enseigne et afficher tous les enseignants
Dans PhPMyAdmin, en étant dans la bonne base de données:
Etape 1: cliquer sur l'onglet SQL
Etape 2: taper SELECT * FROM Personne LEFT JOIN Enseignant ON Enseignant.idPersonne= Personne.idPersonne
Etape 3: cliquer sur Exécuter
Etape 4: les résultats apparaissent