Tout d'abord, il faut que je vous explique ce que c'est que ce langage de requête et à quoi est-ce qu'il
sert.
Eh bien, SQL("Structured Query Language" ou pour les francophones, "Langage de Requête Structuré") est
un langage qui a été créé dans le but de communiquer avec une
base de données relationnelle.
Pour ceux qui ne le savent pas, une base de données relationnelle est une base de données où les données
sont stockées dans des
tables. Ces dernières sont en interaction les unes et les autres.
ATTENTION:
veuillez noter que le langage SQL peut varier d'un constructeur à l'autre. Dans
ce cas, il vous faut consulter la documentation qui lui est propre.
Le langage SQL abordé ici, est
le langage standard et peut ne pas être compatible avec votre base de données. Si vous constatez que les
codes qui suivent ne fonctionnent pas, eh bien, ça veut dire qu'il n'est pas compatible avec votre base.
SQL permet d'interroger une base de données, d'insérer de nouvelles données mais aussi mettre à jour vos
données existantes.
A présent voyons cela de plus près.
1.1 La syntaxe
L'instruction utilisée pour effectuer une recherche dans une base de données est
SELECT.
Elle sert à interroger une base et de retourner si elles existent, les données que vous recherchez.
La syntaxe de l'instruction
SELECT est la suivante:
SELECT [ *|ALL|DISTINCT ] [ TOP X [PERCENT] ] Colonne1,Colonne2 |
FROM Tables |
WHERE (Critère de recherche)|(Critère de jointure) |
AND|OR [ (Critère de recherche) ] |
GROUP BY [ ALL ] Colonne1, Colonne2 |
HAVING (Critère de recherche) |
ORDER BY Colonnes [ ASC|DESC ] |
Je sais, à première vue d'oeil, ça peut paraître compliqué. Mais il n'en est rien en réalité. En observant
de plus près, vous verrez que c'est très abordable. Bon, je vous explique en détail cette syntaxe.
- L'instruction SELECT permet de sélectionner les données à partir d'une ou plusieurs colonnes d'une
table.
- L'argument * permet de faire une recherche dans toutes les colonnes de la table donnée.
- L'argument ALL sert à indiquer de retourner toutes les valeurs recherchées même ceux qui sont en
double. Par exemple, dans une base de données contenant une liste de tous les
clients d'une société, il est parfaitement possible qu'il y ait 2 clients ayant le même nom de
famille ou le même prénom. Eh bien, cet argument indique de retourner les données de ces 2 clients.
Cet argument est celui par défaut. Il est facultatif.
- L'argument DISTINCT est le contraire de ALL. Il sert à indiquer de ne retourner que les données
uniques. Il est facultatif.
- L'argument TOP permet de préciser le nombre d'enregistrements que vous souhaitez recevoir en réponse
à votre requête à partir du premier enregistrement. PERCENT indique le pourcentage X d'enregistrements
que vous souhaitez retournez. Il est facultatif.
- Les mots Colonne1,Colonne2 Indiquent dans quel(les) colonne(s) de la
table ou des tables vous souhaitez effectuez votre recherche. N'oubliez pas la virgule si vous
effectuez votre recherche dans plusieurs colonnes.
- La clause FROM sert à indiquer à partir de quel(les) table(s) les données doivent être
extraites. Cette clause est indispensable pour toute requête
- Tables représente le nom des différentes tables dans lesquelles vous
désirez faire des recherches.
- La clause WHERE permet d'insérer des critères de recherche dans votre requête. Il est facultatif.
- Le mot Critère de recherche représente les critères de recherche.
Par exemple: "WHERE Client = 'Alphonse'" ou bien "WHERE Prix < '1500'".
- Le mot Critère de jointure permet d'effectuer une recherche dans une
colonne présente dans 2 tables différentes.
- Les opérateurs AND et OR permettent d'insérer un autre
critère de recherche. Ils sont facultatifs.
- Le mot Critère de recherche représente aussi des critères de recherche.
Par exemple: "WHERE Client='Alphonse' OR Client='Jean'".
- La clause GROUP BY permet de regrouper des données. Il est facultatif.
- Pour le mot ALLVoir précédemment.
- La clause HAVING permet d'insérer un critère de recherche pour les données
regroupées avec la clause GROUP BY. Il est facultatif.
- Pour le mot Critère de recherche, voir précédemment.
- Enfin, la clause ORDER BY permet de trier les données par colonnes. Il est facultatif.
- Le mot Colonnes représente le nom des colonnes dans lesquelles sont
triées les données.
- L'argument ASCPermet de trier les données par ordre croissant. C'est
l'ordre par défaut. Il est facultatif.
- L'argument DESC permet de trier les données par ordre décroissant. Il est facultatif.
C'est pas très évident mais avec de la pratique, tout vous paraîtra clair. De plus,
vous n'êtes pas obligé d'utiliser tous les clauses et arguments montrés ci-dessus.
Voici un exemple simple sur la façon d'utiliser les requêtes avec SQL en s'appuyant sur le contrôle
Data qui vous permet de visualiser les données:
Data.RecordSource="SELECT * FROM Fichier WHERE Prix<'1500' AND Prix>'3000' ORDER BY Prix"
|
Il vous suffit de placer ce code dans un bouton de commande pour qu'il fasse apparaître la liste de tous les prix
compris entre 1500 et 3000 de la table "Fichier". La clause
ORDER BY permet de
ranger le résultat de votre recherche par ordre croissant(ordre par défaut).
1.2 Les opérateurs
Vous pouvez aussi faire appel à des opérateurs pour spécifier des conditions dans une instruction
SQL ou servir de conjonction à plusieurs conditions. Vous vous rappelez, vous en avez déjà vu 2 opérateurs
avant: ce sont AND et OR. Ces deux là, sont des opérateurs conjonctifs. Il existe 5 types d'opérateur en tout:
- Les opérateurs de comparaisons servent à vérifier les conditions d'égalité, de non-égalité, les
valeurs supérieures à et les valeurs inférieures à. Les voici: =,<>,<,>,<=,>=.
- Les opérateurs conjonctifs permettent d'effectuer plusieurs conditions à la fois. Les voici:
AND et OR.
- Les opérateurs logiques servent à effectuer des comparaisons. Les voici: IN, NOT IN, BETWEEN,
NOT BETWEEN, LIKE, NOT LIKE, IS NULL, IS NOT NULL, EXISTS, NOT EXISTS, ALL
et ANY.
- Les opérateurs arithmétiques servent à effectuer des opérations de calcul. Les voici: +,-,* et /.
Le tableau suivant vous montre comment utiliser tous ces opérateurs.
Opérateur | Exemple | Interprétation |
= | WHERE Prix='1500' | Retourne les valeurs dont le prix est égal à 1500 |
<> | WHERE Prix<>'1500' | Retourne les valeurs dont le prix est différent de 1500 |
< | WHERE Prix<'1500' | Retourne les valeurs dont le prix est strictement inférieur à 1500 |
> | WHERE Prix>'1500' | Retourne les valeurs dont le prix est strictement supérieur à 1500 |
<= | WHERE Prix<='1500' | Retourne les valeurs dont le prix est inférieur ou égal à 1500 |
>= | WHERE Prix>='1500' | Retourne les valeurs dont le prix est supérieur ou égal à 1500 |
AND | WHERE Prix>'1500' AND Prix<'2000' | Retourne les valeurs dont le prix est compris entre 1500 et 2000 non inclus. |
OR | WHERE Prix='1500' OR Prix='2000' | Retourne les valeurs dont le prix est égal à 1500 ou 2000 |
IN | WHERE Prix IN('1500','2000') | Retourne les valeurs dont le prix est égal à 1500 ou 2000 |
NOT IN | WHERE Prix NOT IN('1500','2000') | Retourne les valeurs dont le prix est différent de 1500 ou de 2000 |
BETWEEN | WHERE Prix BETWEEN '1500' AND '2000' | Retourne les valeurs dont le prix est compris entre 1500 et 2000 non inclus. |
NOT BETWEEN | WHERE Prix NOT BETWEEN '1500' AND '2000' | Retourne les valeurs dont le prix n'est pas compris entre 1000 et 1500 non inclus.
|
LIKE | WHERE Nom LIKE 'c*' or LIKE '*a' | Retourne les valeurs dont le nom du client commence par un "c" ou se terminant par un "a" |
NOT LIKE | WHERE Nom NOT LIKE '*k*' | Retourne les valeurs dont le nom du client ne contient pas la lettre "k" |
IS NULL | WHERE Prix IS NULL | Retourne les valeurs dont aucun prix n'a été fixé |
IS NOT NULL | WHERE Prix IS NOT NULL | Retourne les valeurs dont le prix a été fixé |
EXISTS | WHERE EXISTS (SELECT Prix FROM Fichier WHERE Prix='1500') | Teste pour vérifier s'il y a des prix égaux à 1500 |
NOT EXISTS | WHERE NOT EXISTS (SELECT Prix FROM Fichier WHERE Prix='1500') | Teste pour vérifier s'il y a des prix différent à 1500 |
ALL | WHERE Prix > ALL (SELECT Prix FROM Fichier_concurrent WHERE Lieu='Marseille') | teste pour vérifier s'il y a des produits concurrent se trouvant à Marseille qui coûtent moins cher que le vôtre |
ANY | WHERE Prix < ANY (SELECT Prix FROM Fichier_concurrent WHERE Lieu='Marseille') | Teste le prix du produit pour savoir s'il est plus bas que celui du concurrent se trouvant dans à Marseille |
1.3 Les fonctions mathématiques
Il est aussi possible avec le langage SQL d'effectuer des calculs directement à partir des données. Cela
se fait à l'aide des fonctions mathématiques suivantes:
Fonction | Utilisation |
COUNT() | Comptabilise le nombre d'enregistrements retourné |
SUM() | Calcule la somme des valeurs retournées |
AVG() | Calcule la moyenne des valeurs retournées |
MAX() | Retourne la plus haute des valeurs trouvées |
MIN() | Retourne la plus petite des valeurs trouvées |
Prenons quelques exemples pour mieux comprendre:
Plaçons ce bout de code dans un champs de texte.
Data.RecordSource="SELECT COUNT(Produit) FROM Fichier |
Ce code permet de voir combien est-ce qu'il y a de produits vendu dans un magasin.
Les autres fonctions fonctionnent de la même manière que cette dernière.
2.1 Ajout de données
Pour ajouter des données dans une base de données, on utilise l'instruction
INSERT.
La syntaxe pour ajouter de nouvelles données avec SQL est la suivante:
INSERT INTO Table (Colonnes) |
VALUES (valeurs1,valeurs2) |
- L'instruction INSERT permet d'insérer de nouvelles données.
- Le mot-clé INTO est spécifique à une base Access. Ne la mettez que que si
vous utilisez Access.
- Le mot Table représente la table où doit être inséré ces nouvelles données.
- Le mot Colonnes représente les colonnes dans lesquelles sont placées ces nouvelles données.
- La clause VALUES vous permet d'insérer de nouvelles données. C'est ici qu'il faut placer les
nouvelles valeurs.
- Les mots valeurs1, valeurs2 représentent les données qui vont être entrées dans la base.
Par exemple:
INSERT INTO Fichier_client(Nom,Prénom,Id) VALUES ('Dupont','Jean','568') |
Le client Dupont Jean, numéro d'identification 568, a été ajouté dans la base de données.
2.2 Suppression de données
La suppression de données se fait à l'aide de l'instruction
DELETE.
La syntaxe pour supprimer des données à l'aide de SQL est la suivante:
DELETE FROM table WHERE (Critère de recherche) |
- L'instruction DELETE permet d'effacer des données d'une base.
- La clause FROM sert à indiquer à partir de quel table les
données doivent être détruites.
- Le mot table représente le nom de la table.
- La clause WHERE permet d'introduire un critère de recherche.
- Le mot Critère de recherche permet d'effectuer une recherche afin de déterminer quelles données doivent être effacé de la base.
Par exemple:
DELETE FROM Fichier_client WHERE Client='Dupont' |
Le client Dupont a été supprimé dans la base de données.
La mise à jour de vos données se fait à l'aide de l'instruction
UPDATE.
La syntaxe est la suivante:
UPDATE table SET Colonne='valeur' |
WHERE (Critère de recherche) |
- L'instruction UPDATE permet de mettre à jour vos données.
- Le mot table représente le nom de la table dans lequel vont être mis à jour des données.
- La clause SET permet d'introduire un critère de recherche.
- Le mot Colonne représente le nom de la colonne dans lequel vont être mis à jour des données.
- Le mot valeur représente la nouvelle valeur.
- La clause WHERE permet d'introduire un critère de recherche.
- Le mot Critère de recherche permet d'effectuer une recherche afin de déterminer quelles données doivent être effacé de la base.
Par exemple:
UPDATE Fichier SET date='20/05/01' WHERE Produit='Lait' |
Tous les enregistrements de la colonne date vont être modifié par '20/05/01'. Mais avec la clause
WHERE, seul les produits laitiers seront concerné.
4. Les transactions
Les transactions permettent de grouper une série d'instruction SQL. Ne croyez pas
que ça sert à rien. Cette méthode de regroupement peut s'avérer être très utile lorsque vous manipulez des
données sensibles. En effet, lorsque qu'une instruction SQL échoue, vous avez la possibilité d'annuler la
transaction et de revenir en arrière c'est-à-dire avant que les données soient modifiées.
Cette transaction se fait à l'aide des commandes suivantes:
- BEGINTRANS marque le début d'une transaction.
- COMMITTRANS marque la fin d'une transaction.
- ROLLBACK annule la transaction et vous retrouvez vos données initiales.
Voici la syntaxe d'une transaction:
On Error GoTo Erreur |
BeginTrans |
Série d'instruction |
CommitTrans |
Exit Sub |
Erreur: |
MsgBox Error$ |
RollBack |
exit Sub |
Vous avez dû remarqué qu'une routine de traitement d'erreur a été placé dans ce code. C'est dans le cas
où la transaction échouerait. Sinon, je pense que vous avez compris son fonctionnement en voyant la
syntaxe. C'est pas dur à comprendre.
Voici comment faire pour effectuer une recherche à partir d'un mot tapé dans un champ de texte.
Voilà, il faut que vous placiez un champ de texte nommé par exemple, "Text1" et un bouton de commande
appelé par exemple, "Chercher".
Placez le bout de code suivant dans la procédure du bouton:
valeur = "SELECT * FROM Liste WHERE Produit LIKE " + " ' " + Text1.Text + " ' " |
Data.RecordSource = valeur |
Data.refresh |
Voilà, c'est tout! Si vous ne comprenez pas quelque chose, n'hésitez pas à poser votre question sur le
forum.