REQUÊTES SQL


Les requêtes SQL sont un ensemble de commandes permettant d'interagir avec la base de données. Elles permettent de créer, gérer, interroger les tables... Ci-dessous sont considérées celles qui représentent le minimum nécessaire pour démarrer. On pourra par la suite se documenter plus largement sur le sujet.


UTILISATION DE PHPMYADMIN POUR RÉALISER LES REQUÊTES

PhpMyAdmin possède des fonctionnalités permettant de réaliser des requêtes sans poser leur formulation, c'est ce que nous avons fait pour créer une table. Néanmoins, pour d'autres opérations dans le cadre de la programmation PHP, nous serons amenés à poser ces formules. PhpmyAdmin nous y aidera grâce à son module SQL. Cliquez sur l'onglet SQL après avoir ouvert la table relation créée précédemment. Au-dessous de la fenêtre s'inscrivent les principales requêtes que nous allons manipuler. En cliquant sur chacune, vous verrez apparaître sa formulation.


LES REQUÊTES D'INTERROGATION SELECT

Elles permettent d'obtenir le contenu d'une table selon certains critères sélectifs. Vous pourrez les tester en les copiant-collant dans l'espace SQL de PhpMyAdmin à partir des exemples ci-dessous. Le résultat vous apparaîtra avec indication du nombre d'enregistrements concernés. Vous remarquez que la première ligne se nomme 0, elle correspond au premier enreigstrement dont l'id est 1. Les signes ` (touche 7+AltGr) - que l'on ne confondra pas avec des apostrophes - sont rarement nécessaires, vous pouvez généralement vous en dispenser.

-Nombre d'enregistrements

Le nombre d'enregistrements (ou lignes) de la table est donné par la requête:

SELECT COUNT(*) FROM matable

-Requête globale

Elle fournit la liste exhaustive de tous les enregistrements (tous les membres) de la table.

SELECT * FROM relation

-Requêtes sélectives les plus courantes

Elle fournissent un échantillonnage selon les conditions précisées. L'exemple ci-dessous permet d'obtenir par ordre d'année de naissance les membres de la table relation qui habitent la ville d'Aurillac et dont l'année de naissance est inférieure à 1990.

SELECT * FROM relation WHERE ville='Aurillac' AND annee<1990 ORDER BY annee DESC

DESC indique un ordre d'affichage descendant, au contraire de ASC. La mention * implique tous les champs. Elle peut être remplacé par un ou plusieurs champs précis, ce qui évite d'alourdir inutilement la requête si on ne désire que ces champs, par exemple

SELECT nom,prenom FROM relation

Traquenard Cette limitation du nombre de champs est souvent génératrice d'erreur lorsque l'on veut obtenir un champ non listé et que l'on a oublié la restriction posée. Si la table est d'étendue limitée, il est plutôt conseillé de laisser toujours la mention *.

-Autres options courantes de SELECT

Vous risquez d'utiliser souvent l'option LIKE ou son inverse NOT LIKE de la manière suivante, par exemple.

SELECT * FROM relation WHERE nom LIKE 'A%'

Cela sélectionnera tous les noms commençant par A. De même l'expression '%on%' sélectionnerait tous les noms comportant la séquence on. Et NOT LIKE %x% éviterait tous les noms comportant la lettre x.

Traquenard L'ordre des options entraîne souvent des erreurs. Verifier si les options FROM, ORDER BY, ASC, DESC sont bien dans l'ordre correct.


REQUÊTES DE GESTION DES ENREGISTREMENTS

-insert

Exemple: insertion d'un novueau membre dans la table

INSERT INTO relation(id, nom, prenom, ville, ae, annee) VALUES ('DULAC','Marina','Agen','mdulacm@monmail',1979)

Remarque: il est possible de laisser des champs non renseignés s'ils ne sont pas cités. Ils sont alors remplacés par un champ vide ou une autre expression selon le paramétrage de la table.

-update

Exemple: modification partielle de l'enregistrement de nom DURAND et prénom Lionel qui change de ville et d'adresse électronique:

UPDATE relation SET ville='Limoges',ae=durandl@mail.com WHERE nom='DURAND' AND prenom='Lionel'

Traquenard Attention, un débutant peut facilement confondre insert et update. Évidemment, on ne peut pas modifier un enregistrement existant avec un insert.

Traquenard Une erreur fatale peut être commise si on oublie la clause WHERE car dans ce cas tous les enregistrements se trouvent affectés par la modification. Il importe de sauvegarder ses tables avant toute modifications car l'erreur est irrécupérable.

-delete

Par exemple, nous pouvons supprimer le membre DUPONT Nadia:

DELETE FROM `relation` WHERE nom='DUPONT' AND prenom='Nadia'

Traquenard Même remarque que pour update. Si vous oubliez la clause where, vous videz entièrement la table.

Remarque: Si vous supprimez un enregistrement et que vous en ajoutiez un autre, vous observerez que le numéro id incrémenté n'est jamais réutilisé, de sorte que votre champ id, après une série de modification, ne comporte pas une suite régulièrement incrémentée.

Remarque: Supprimer tous les enregistrements d'une table ne réinitialise pas à 1 les numéros incrémentés. Pour cela, il faut utiliser la requête: TRUNCATE TABLE matable


EXPORTATION

La fonction d'exportation (onglet exportation) permet de récupérer la table (structure et contenu) sous la forme d'un code SQL. Cette sauvegarde peut être alors restituée par copie-collé dans la fenêtre SQL de phpmyAdmin.
Exemple avec notre table relation:

--
-- Structure de la table `relation`
--

CREATE TABLE IF NOT EXISTS `relation` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(50) NOT NULL,
`prenom` varchar(40) NOT NULL,
`ville` varchar(50) NOT NULL,
`ae` varchar(50) NOT NULL,
`annee` smallint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Contenu de la table `relation`
--

INSERT INTO `relation` (`id`, `nom`, `prenom`, `ville`, `ae`, `annee`) VALUES (1, 'DUPONT', 'Nadia', 'Aurillac', 'dupontnadia@monmail.com', 1985), (2, 'DURAND', 'Lionel', 'Moulins', 'durandlionel@monmail.com', 1996);


Traquenard Si la table est trop volumineuse, phpMyAdmin rejette l'opération. Il est nécessaire de fractionner le contenu pour l'importer. Une autre solution consiste à enregistrer directement la table (ou la base) pour la sauvegarder, puis à la restituer en la collant dans son répertoire d'origine (répertoire /opt/lampp/var/mysql si le serveur est xampp). Attention cependant aux droits pour cette opération. Et attention de bien fermer le serveur auparavant.

SOMMAIRE