|
Site |
Cours VB.net |
|
|
|
SQL. |
|
|
Comment adresser une requête vers une Base de données de ADO.NET? Avec SQL
Généralités:
SQL veut dire Structured Query Language : Langage d'interrogation structurée
SQL grâce au couplage avec un
SGBD relationnelle permet un
traitement interactif des requêtes.
SQL est le langage unique qui permet de décrire, manipuler,
contrôler l'accès et interroger les bases de données relationnelles.
C'est un langage déclaratif, qui est régi par une norme (ANSI/ISO) qui assure la
portabilité du langage sur différentes plates-formes aussi bien matérielles que
logicielles. Une commande SQL écrite dans un environnement Windows sous ACCESS
peut, souvent sans modification, être utilisée directement dans un environnement
ORACLE sous Unix...
SQL est utilisé dans ADO.NET pour manipuler toutes les bases de données.
Les commandes SQL
| Catégorie | Commandes SQL | |
|---|---|---|
|
Manipulation des tables
|
CREATE | Création de tables |
| ALTER | Modification de tables | |
| DROP | Suppression de tables | |
|
Manipulation des données
|
INSERT | Insertion de lignes dans une table |
| UPDATE | Mise à jour de lignes dans une table | |
| DELETE | Suppression de lignes dans une table | |
|
Contrôle des données
|
GRANT | Attribution de droits d'accès |
| REVOKE | Suppression de droits d'accès | |
| COMMIT | Prise en compte des mises à jour | |
| ROLLBACK | Suppression des mises à jour | |
|
Interrogation des données
|
SELECT | Interrogations diverses |
A - SELECT: interrogation.
Permet d'extraire ,de sélectionner des données.
Syntaxe simplifiée:
SELECT champ FROM table WHERE condition
Dans la table 'table' sélectionner les enregistrements vérifiant la condition 'condition' et en afficher les champs 'champs'
Exemple
| SELECT | Précise les colonnes qui vont apparaître dans la réponse |
| FROM | Précise la (ou les) table intervenant dans l'interrogation |
| WHERE | Précise les conditions à appliquer sur les enregistrements.
On peut utiliser : - Des comparateurs : =, >, <, >=, <=,<> - Des opérateurs logiques : AND, OR, NOT - Les prédicats : IN, LIKE, NULL, ALL, SOME, ANY, EXISTS... |
| GROUP BY | Précise la (ou les) colonne de regroupement |
| HAVING | Précise la (ou les) conditions associées à un regroupement |
| ORDER BY | Précise l'ordre dans lequel vont apparaître les lignes de la
réponse : - ASC : En ordre ascendant (par défaut) - DESC: En ordre descendant |
Exemple:
Soit la table patient:
| Champs 'Civilité' | Champ 'Nom' | Champ 'Prénom' | Champ Num Int | Datenais | Sexe |
| M. | Durand | Luc | 1 | 12/02/1952 | M |
| Mme | Dupont | Josette | 2 | 06/04/1936 | F |
| M. | Thomas | Guy | 3 | 08/02/1980 | M |
SELECT Nom FROM Patient
Cela signifie: dans la table Patient extraire les champs 'nom'
On obtient:
| Durand |
| Dupont |
| Thomas |
SELECT Nom FROM Patient WHERE Prenom='Luc'
WHERE ajoute un critère de sélection.
Cela signifie: dans la table Patient extraire le champ Nom de tous les enregistrements dont le prénom est "Luc" .
Dans l'exemple on obtient :
| Durand |
SELECT Nom, Prenom FROM Patient WHERE Sexe='F'
Cela signifie: dans la table Patient extraire le champ Nom et prénom de tous les enregistrements dont le champ sexe est "F"( F comme féminin) .
Dans l'exemple on obtient :
| Dupont | Josette |
SELECT * FROM Patient WHERE Datenais>=#01/01/1950#
Cela signifie: dans la table Patient extraire tous les champs de tous les enregistrements dont le champ date de naissance est supérieur ou égal à 01/01/1950 .
Dans l'exemple on obtient
| M. | Durand | Luc | 1 | 12/02/1952 | M |
| M. | Thomas | Guy | 3 | 08/02/1980 | M |
On remarque que
* signifie : extraire tous les champs.
Pour utiliser les dates , il faut les entourer de "#".
Les dates sont au format mm/jj/aaaa
SELECT * FROM Patient WHERE Datenais>= #01/01/1950# AND Datenais<= #01/01/1980#
Cela signifie: dans la table Patient extraire tous les champs de tous les enregistrements dont le champ date de naissance est supérieur ou égal à 01/01/1950 et inférieur ou égal à 01/01/1980 .
On remarque que on peut utiliser avec Where, les opérandes
AND OR NOT.
Il est bien sur possible de combiner des conditions sur des champs différents:
Sexe='M' AND Prenom='Luc"
SELECT * FROM Patient WHERE BETWEEN #01/01/1950# AND #01/01/1980#
Même signification que le précèdent mais en utilisant BETWEN AND qui est plus performant.
SELECT Nom FROM Patient WHERE Prenom IN ('Luc' , 'Pierre', 'Paul')
Cela signifie qu'il faut extraire les enregistrements dont le prénom est Luc, Pierre ou Paul .
SELECT Nom FROM Patient WHERE Prenom LIKE 'D%'
Cela signifie qu'il faut extraire les enregistrements dont le prénom commence par un 'D'.
LIKE recherche des chaînes de caractères avec l'aide de caractères génériques:
% représente une chaîne de caractères même vide.
_ représente un caractère.
On peut spécifier une série de caractères en les mettant entre ""
Exemple :
LIKE 'D%' commence par D
LIKE '%D%' contient D
LIKE '[DF]%' commence par D ou F
LIKE '___' contient 3 caractères
SELECT Nom FROM Patient WHERE SEXE IS NULL
Cela signifie qu'il faut extraire les enregistrements dont le sexe n'a pas été enregistré.
SELECT DISTINCT Nom FROM Patient WHERE SEXE IS NULL
DISTINCT permet d'éviter les doublons
Si dans les Noms extraits il y a 2 fois le même (2 membres d'une même famille) , il n'en est gardé qu'un.
TRI des enregistrements:
ORDER BY sert à trier les enregistrements.
Il est placé à la fin.
DESC sert à trier par ordre décroissant.
SELECT Nom, Prenom , Sexe, DateNais FROM Patient WHERE Sexe='F' ORDER BY DateNais
Trie les enregistrements de sexe 'F' par date de naissance
SELECT Nom, Prenom, DatNais, NumInt FROM Patient WHERE Sexe='F' ORDER BY DateNais DESC, NumInt
Trie les enregistrements de sexe 'F' par date de naissance mais décroissante et pour une même date de naissance par numéro interne croissant.
Statistiques:
SELECT COUNT(*) AS NombrePatient FROM Patient
Compte le nombre total d'enregistrement dans la table Patient et met le résultat dans le champ NombrePatient
On peut aussi utiliser:
MIN retourner la plus petite valeur.
MAX retourner la plus grande valeur.
SUM retourner la somme.
AVG retourner la moyenne.
VAR retourner la variance
STDEV retourner l'écart type.
SELECT Prenom ,COUNT(*) AS NombrePrenom FROM Patient GROUP BY Prenom
Extrait la liste des prénom avec le nombre de fois que le prénom est utilisé.
GROUP BY regroupe les enregistrements par valeur.
SELECT Prenom ,COUNT(*) AS NombrePrenom FROM Patient GROUP BY Prenom HAVING CONT(*)>3
Extrait la liste des prénoms avec le nombre de fois que le prénom est utilisé. S'il est utilisé plus de 3 fois..
HAVING rajoute un critère au regroupement.
Extraction de données sur plusieurs tables:
Parfois on a besoin d'extraire des champs de plusieurs tables différentes, mais ayant une relation (un champ commun); pour cela on utilise une jointure.
Pour chaque enregistrement de la première table, on affiche en regard les enregistrements de la 2eme table qui ont la même valeur de jointure.
Exemple:
Soit la table patient:
| Champs 'Civilité' | Champ 'Nom' | Champ 'Prénom' | Numéro Ville | Datenais | Sexe |
| M. | Durand | Luc | 1 | 12/02/1952 | M |
| Mme | Dupont | Josette | 2 | 06/04/1936 | F |
| M. | Thomas | Guy | 3 | 08/02/1980 | M |
Soit la table Ville:
| Nom ville | Numéro ville |
| Paris | 1 |
| Lyon | 2 |
| Marseille | 3 |
Comment récupérer nom et ville (en clair, pas son numéro)
SELECT Patient.Nom, Ville.NomVille From Patient INNER JOIN Ville ON Patient.NuméroVille= Ville.NuméroVille
On obtient:
| Durand | Paris |
| Dupont | Lyon |
| Thomas | Paris |
En ADO.Net, on verra qu'on passe la chaîne SQL à un objet Command.
Ces données extraites à partir d'une base de données grâce à l'instruction SQL vont se retrouver dans un DataSet (sorte de Bd en local, en mémoire).
B - Ajout, suppression, modification d'enregistrement:
Il est impossible d'insérer, de modifier ou de supprimer dans plusieurs tables simultanément
Une requête de mise à jour (INSERT, UPDATE ou SELECT) est une transaction ,tout doit être réalisé, sinon rien ne se passe (en particulier si une seule donnée viole une contrainte, toutes les opérations sont annulées )
Insertion d'enregistrement:
|
|
|
|
Mise à jour d'enregistrement:
|
En Ado.Net on verra qu'il y a 2 méthodes pour modifier ajouter, supprimer un enregistrement:
C - Ajout de table:
On utilise CREATE TABLE puis le nom de la table, on ajoute les différents champs (entre parenthèses et séparés par des virgules)avec pour chaque champ les conditions (NOT NULL..) et le type.
CREATE TABLE PARENT (CLI_ID INTEGER NOT NULL PRIMARY KEY, CLI_NOM CHAR(32) NOT NULL, CLI_PRENOM VARCHAR(32))
En Ado.Net on verra qu'on exécute ces commandes par la méthode ExecuteNoQuery d'un objet Command.
Pour aller plus loin:
Série d'articles sur SQL chez developpez.com:
|
|
|
|
|