INDICATIONS PRELIMINAIRES
CHAPITRE 12 – REQUETES ACTION
2. REQUETES ACTION EN MODE SQL
Les requêtes action en mode SQL sont beaucoup moins utilisées que les requêtes de sélection. Leur syntaxe est aisée. Nous en donnons ci-après un aperçu.
Créer, modifier ou supprimer une table
Créer une table
En mode SQL, il est possible de créer une table, en constituant sa structure : noms et types des champs, attribution éventuelle d’une clé primaire.
La syntaxe d’une requête de création d’une table est : create table (nom de la table)
(champ1 type1, champ2 type2, …) ;
Les types de données principaux sont : - counter : Numéro automatique
- char (longueur) : Texte (nombre de caractères maximum).
Si on ne précise pas de longueur, elle est maximale (à l’origine, par défaut, une valeur de type Texte comporte au maximum 255 caractères).
- integer : Entier - float : Réel - date : Date/Heure
Pour attribuer une clé primaire à un champ, tapez primary key juste après le type du champ.
Exemple
Pour créer la table PERSONNE constituée des champs : NoPersonne, Nom, DateNaissance et Poids, exécutez la requête :
create table PERSONNE
(NoPersonne counter primary key, Nom char (20), [Date Naissance] date, Poids float) ;
Un objet table ou champ comportant un espace ou un caractère spécial, doit être placé entre crochets.
Ouvrez la table PERSONNE en mode Création. Vérifiez les éléments définis dans la requête : les types de données des champs, la taille du champ Nom ainsi que la présence de la clé primaire sur le champ NoPersonne.
Modifier une table
Modifier une table consiste à modifier sa structure, c’est-à-dire modifier, ajouter ou supprimer des champs.
Fermez la table (clic droit sur son onglet > Fermer), avant d’effectuer toute modification de ses champs.
Modifier un champ
On ne peut modifier qu’un seul champ à la fois. La modification peut porter sur le type du champ ou sur l’attribution d’une clé primaire.
La syntaxe d’une requête de modification d’un champ est : alter table (Nom de la table)
alter column champ type ;
(alter signifie changer)
Si on change le type d’un champ, le nouveau type doit être compatible avec les valeurs contenues dans le champ.
Exemple : si le champ contient des nos de téléphone de type integer, on peut lui attribuer le type char. Par contre, si un champ contient du texte, on ne peut pas lui attribuer le type integer, ni le type float.
Exemple
Dans la table PERSONNE, le champ Nom a une longueur maximale de 20 caractères.
Attribuons-lui une nouvelle longueur maximale de 50 caractères : alter table PERSONNE
alter column Nom char (50) ;
Ouvrez la table PERSONNE en mode Création, et vérifiez la nouvelle taille du champ.
Ajouter un champ
On peut ajouter plusieurs champs à la fois, également définir une clé primaire en tapant l’expression primary key juste après le type du champ.
La syntaxe d’ajout d’un champ est : alter table (nom de la table)
add column champ1 type1, champ2 type2 … ;
(add signifie ajouter)
Exemple
Ajoutez le champ Ville et le champ Nombre d’enfants à la table PERSONNE : alter table PERSONNE
add column Ville char (30), [Nombre d’enfants] integer ;
Ouvrez la table PERSONNE en mode Création, et vérifiez la présence et les types des deux nouveaux champs.
Supprimer un champ
On ne peut supprimer qu’un seul champ à la fois.
La syntaxe de la requête de suppression d’un champ est : alter table (nom de la table)
drop column champ ;
(drop signifie laisser tomber)
Exemple
Supprimez le champ Poids de la table PERSONNE : alter table PERSONNE
drop column Poids ;
Ouvrez la table PERSONNE en mode Création, et vérifiez que le champ Poids a bien été supprimé.
Suppression d’une table
Fermez la table (clic droit sur son onglet > Fermer), avant de la supprimer.
La syntaxe de la requête de suppression d’une table est : drop table (nom de la table) ;
Exemple
Supprimez la table PERSONNE : drop table PERSONNE ;
Vérifiez que son nom n’est plus affiché dans le Volet de navigation.
Ajouter, modifier ou supprimer des enregistrements
Ajout d’un enregistrement
La syntaxe d’ajout d’un enregistrement est :
insert into (nom de la table) (champ1, champ2, …) values (valeur1, valeur2, …) ;
Les valeurs doivent être saisies dans l’ordre des champs et correspondre chacune au type de données du champ.
Les valeurs de type Texte sont saisies entre guillemets.
Les valeurs de type Date/Heure sont saisies entre signes dièses # : #nb1/nb2/aaaa#
Si le nombre nb1 est inférieur ou égal à 12, la date sera saisie au format américain : mm/jj/aaaa (cf. chapitre 11 § 5, « Dates et heures, format français et format américain »).
Une absence de valeur dans un champ est indiquée par la valeur Null.
On n’indique pas un champ de type Numéro automatique, Access saisissant automatiquement une valeur dans ce champ.
Exemple
Créez une nouvelle table PERSONNE : create table PERSONNE
(NoPersonne counter primary key, Nom char (20), [Date Naissance] date, Poids float, Tel char (10)) ;
Ajoutez-lui l’enregistrement suivant :
insert into PERSONNE (Nom, [Date Naissance], Poids, Tel) values ("Eric", #05/12/1985#, 72.5, 0202020202) ;
Eric est né le 12 mai 1985. La date est entourée de dièses et le jour est inférieur à 12, donc la date doit être saisie au format américain (mm/jj/aaaa).
Le séparateur de décimales est le point (72.5), la virgule servant de séparateur de champs.
Ajoutez un second enregistrement à la table PERSONNE :
insert into PERSONNE (Nom, [Date Naissance], Poids, Tel) values ("Fred", #21/09/1986#, Null, 0808080808) ;
Fred est né le 21 septembre 1986. Le jour est supérieur à 12, donc la date doit être saisie au format français (jj/mm/aaaa). Son poids est ignoré, donc la valeur du champ est Null.
Ajout de plusieurs enregistrements
Pour ajouter plusieurs enregistrements à une table, on utilise une sous-requête.
La syntaxe d’une requête d’ajout d’enregistrements est : insert into (nom de la table) (champ1, champ2, …) (sous-requête) ;
Les mêmes champs doivent figurer à la ligne « insert into » de la requête et à la clause select de la sous-requête.
Remarque : la requête action contient une requête sélection.
Exemple : Ajout d’enregistrements à la table PERSONNE
Au préalable, créons une table avec des enregistrements. Avec une requête de sélection en sous-requête de la requête action, on puisera dans cette table pour ajouter des enregistrements à la table PERSONNE.
Création d’une table nommée CONTACT et saisie d’enregistrements dans cette table :
Création de la table CONTACT : create table CONTACT
(NoPersonne counter, Nom char (20), [date naissance] date, Tel char (10)) ;
Ajout de trois enregistrements à la table CONTACT :
insert into CONTACT (Nom, [date naissance], Tel) values ("Tina", #03/04/1990#, 0102030405) ;
(Tina est née le 4 mars 1990)
insert into CONTACT (Nom, [date naissance], Tel) values ("Karine", #21/04/1980#, Null) ;
(Karine est née le 21 avril 1980)
insert into CONTACT (Nom, [date naissance], Tel) values ("Fanny", #15/02/1970#, 1011121314) ;
Ajout d’enregistrements à la table PERSONNE en utilisant la table CONTACT :
Ajoutons dans la table PERSONNE les enregistrements de la table CONTACT dont un numéro de téléphone est précisé.
insert into PERSONNE (Nom, [date naissance], Tel)
select Nom, [date naissance], Tel from CONTACT where Tel <> Null ;
Modifier des enregistrements
On peut modifier des enregistrements, y compris des enregistrements dont les valeurs de champs appartiennent à des tables différentes (la requête contiendra alors des jointures).
La syntaxe d’une requête de modification d’enregistrements est : update table1, table2, …
set champ1 = valeur1, champ2 = valeur2, … where …
Exemple
On utilisera les tables PEINTRE et TABLEAU définies au chapitre 7.
Attribuons le prénom « Sandro » au peintre Botticelli et modifions la date de réalisation du tableau « Le Printemps » :
update PEINTRE P, TABLEAU T
set PrenomPeintre = "Sandro", DateTab = 1479
where P.NoPeintre = T.NoPeintre and NomPeintre = "Botticelli"
and NomTab = "Le Printemps" ;
Remarque : un seul tableau de Botticelli étant présent dans la table TABLEAU, les modifications seraient également effectuées sans la précision NomTab = "Le Printemps".
Suppression d’enregistrements
La syntaxe d’une requête de suppression d’enregistrements est : delete
from (nom de la table) where … ;
(delete signifie effacer)
Si la requête n’a pas de clause where, tous les enregistrements de la table sont effacés.
Exemple
Supprimons les enregistrements précédemment ajoutés à la table PERSONNE : delete
from PERSONNE
where Nom in ("Tina", "Fanny") ;