MySQL : Requêtes SQL
Sommaire
1. Qu'est-ce qu'une requête SQL ?
2. Requêtes les plus usuelles : SELECT, INSERT, DELETE, UPDATE
1. Qu'est-ce qu'une requête SQL ?
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. 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 (que j'écrirai
arbitrairement en majuscules). Je reprécise également que les commandes SQL ne sont pas sensibles
à la casse (différence majuscules/minuscules) ni à l'écriture mais les champs sont sensibles ; pour
plus de clarté j'écrirai mes requêtes sur plusieurs lignes, permettant d'individualiser les blocs de
données. les commandes SQL seront écrites en majuscules et les noms des champs intégralement en
minuscules (sauf indication contraire).
2. Requêtes les plus usuelles : SELECT, INSERT, DELETE, UPDATE
Pour les exemples qui vont suivre, je supposerai cet exemple de base de données sur 2 tables :
-- TABLE : contacts
id nom prenom ville cp id_pays
-----------------------------------------------------------
1 Alpha Alain Paris 75000 1
2 Beta Benjamin Lyon 69000 1
3 Beta Benjamin Lyon 69000 1
4 Gamma Gaëlle London 1234 2
-- TABLE : pays
id pays
-----------
1 FRANCE
2 UNITED KINGDOM
Le SELECT : choix d'enregistrements
La requête SELECT permet de choisir des enregistrements suivant une certaine condition. Sa
syntaxe est la suivante :
SELECT
champ1,
champ2,
... champX
FROM
nom_de_la_table
WHERE
{ condition };
Le SELECT retournera ainsi un jeu de données ("dataset") qui sera une sorte de table virtuelle
contenant tous les enregistrements qui remplissent la condition (si existante) organisés selon les
champs choisis.
ATTENTION : Les programmeurs du dimanche ont vite fait d'utiliser la syntaxe SELECT * FROM
... qui permet de rapatrier tous les champs. Très pratique pour être sûr d'avoir l'information désirée,
le SELECT * est à éviter pour 3 raisons :
1. Problème de poids : la plupart du temps, on n'a pas besoin de tous les champs, mais
seulement des principaux. Si le résultat du SELECT retourne un enregistrement dont la
totalité des champs pèse 5 kilo octets, imaginez alors si dans quelques jours cette réponse
renvoie 1000 enregistrements ... Cela fait 5 mille kilo octets soit 5 mega octets ... Juste pour
avoir l'ID et le prénom ...
2. Problème de sécurité : supposons que notre enregistrement soit un contact et que figure
dans sa "fiche" son numéro de compte, ou son mot de passe. Un SELECT * va rapatrier le
numéro de compte ou le mot de passe, même s'il n'est pas utilisé dans le script ; l'information
sera rapatriée en mémoire, donc potentiellement utilisable (imaginons - au pire - le cas d'une
faille de sécurité ...)
3. Problème d'évolutivité : (indirectement lié au problème de taille) aujourd'hui la table
comporte 3 champs. Dans quelques jours, j'aurai ajouté 3 autres champs, ce qui en fera 6 au
total. Or dans la partie du script où est fait ce SELECT *, je n'ai pas forcément besoin des 6
champs, dont je rapatrie de l'information en trop : consommation inutile de ressources.
Bref, j'espère que ces raisons vous auront convaincu de ne pas utiliser le SELECT *. Le SELECT
permet de rapatrier les champs tels qu'indiqués, mais par simplicité, il est possible de les manipuler
un peu. Voici quelques exemples (exemple simple pour le premier, pour comparer) :
SELECT
nom,
prenom,
ville,
cp
FROM
contacts;
Renvoie :
nom prenom ville cp
----------------------------------
Alpha Alain Paris 75000
Beta Benjamin Lyon 69000
Beta Benjamin Lyon 69000
Gamma Gaëlle London 1234
Exemple de renommage des champs à la volée :
SELECT
nom AS nom_de_famille,
prenom AS prenom_contact,
ville,
cp
FROM
contacts;
Renvoie :
nom_de_famille prenom_contact ville cp
----------------------------------------------------
Alpha Alain Paris 75000
Beta Benjamin Lyon 69000
Beta Benjamin Lyon 69000
Gamma Gaëlle London 1234
Exemple de concaténation :
SELECT
CONCAT('[ ', nom, '] ', prenom) AS employe,
ville,
cp
FROM
contacts;
Renvoie :
employe ville cp
------------------------------------
[ Alpha ] Alain Paris 75000
[ Beta ] Benjamin Lyon 69000
[ Beta ] Benjamin Lyon 69000
[ Gamma ] Gaëlle London 1234
On peut faire encore bien d'autres manipulations, la documentation de MySQL en donne beaucoup
d'autres.
L'INSERT : ajout d'enregistrements
L'INSERT ajoute des valeurs suivant des champs.
INSERT INTO
la_table
(champ1, champ2, ... champX)
VALUES
('valeur1', 'valeur2, ... 'valeurX');
-- ou bien
INSERT INTO la_table
SET champ1='valeur1', champ2=‘valeur2’, ...,champX=‘valeurX’ ;
LETE : suppression d'enregistrements
Cette commande supprime des enregistrements répondant à une condition. Elle ne renvoie pas de
dataset.
Sa syntaxe est la suivante :
DELETE FROM
la_table
WHERE
{ condition };
Supposons mes contacts affichés plus haut. La requête qui correspond à effacer tous les contacts en
France :
DELETE FROM
contacts
WHERE
ID_PAYS = 1;
Modifiera la table comme ceci :
-- TABLE : contacts
id nom prenom ville cp id_pays
-----------------------------------------------------------
4 Gamma Gaëlle London 1234 2
L'UPDATE : mise à jour d'enregistrements
Mettre à jour un ou des enregistrements, c'est changer le contenu de certains champs. Pour effectuer
la mise à jour, le moteur de la base de données va d'abord examiner la condition puis sélectionner
les enregistrements qui la vérifient; ensuite il met à jour ceux-ci. Attention, si la condition est mal
formulée, il est possible de mettre à jour beaucoup plus d'enregistrements que prévu ...
L'UPDATE a pour syntaxe :
UPDATE
la_table
SET
champ1 = 'nouvelle_valeur_1',
champ2 = 'nouvelle_valeur_2',
champX = 'nouvelle_valeur_X'
WHERE
{ CONDITION };
(On n'est pas obligé de mettre à jour tous les champs systématiquement). Je prends toujours mes
contacts, je souhaite renommer la ville "Lyon" en "Toulouse", et changer le code postal vers "31000"
:
UPDATE
contacts
SET
ville = 'Toulouse',
cp = '31000'
WHERE
ville = 'Lyon';
Une fois exécutée, la table devient :
-- TABLE : contacts
id nom prenom ville cp id_pays
-----------------------------------------------------------
1 Alpha Alain Paris 75000 1
2 Beta Benjamin Toulouse 31000 1
3 Beta Benjamin Toulouse 31000 1
4 Gamma Gaëlle London 1234 2
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !