Cours SQL ORACLE – 02 : Les requêtes DML (SELECT, INSERT, UPDATE et DELETE).
Dans ce cours nous allons voir les différentes requêtes qui manipulent les données. Ces requêtes s’appellent les DML (Data Manipulation Language).
Ils existent deux types de DML :
– Les requêtes de sélection (SELECT)
– Les requêtes de modification (INSERT, UPDATE et DELETE)
SELECT
SELECT est le mot clé utilisé pour sélectionner les données des colonnes depuis une ou plusieurs tables (FROM) selon des critères de recherche (WHERE) et selon un ordre précis (ORDER BY).
Reprenons notre table employe du cours précèdent. Nous voulons afficher son contenu sans aucun critère de recherche :
SELECT id, nom, prenom, date_embauche, solde_conge FROM employe;
Traduisant cette phrase en français: sélectionner le contenu des champs id, nom, prénom, date_embauche et solde_conge depuis la table employe.
Nous avons sélectionné dans cet exemple toutes les colonnes de la table employe. Nous pouvons donc réécrire cette requête en remplaçant le nom de toutes les colonnes par *
SELECT * FROM employe;
Dans ce cas, l’ordre d’affichage des colonnes est le même que lors de la création de la table.
Dans ce deuxième exemple, nous avons besoin des prénoms, nom et du solde de congé de toutes les personnes qui ont été embauchées avant 2015. Nous désirons que le résultat soit trié par le nom, d’une manière croissante, et par solde de congé d’une maniéré décroissante:
SELECT prenom, nom, solde_conge FROM employe WHERE date_embauche < '01/01/2015' ORDER BY nom ASC, solde_conge DESC;
Ce qu’il faut retenir de ces exemples:
– Si on désire afficher toutes les colonnes nous pouvons utiliser *
– Les conditions de filtre sont ajoutées après le mot clé WHERE. Seules les données qui respectent ces conditions vont être affichées.
– Le mot clé ASC, qui signifie ascendant, est facultatif. Le tri sera toujours ascendant même si on ne le met pas. Par contre si on désire faire un tri descendant, il faut absolument ajouter le mot clé DESC.
Prenons notre dernier exemple, mais nous voulons ajouter une autre condition. En plus de la date d’embauche, nous souhaitons afficher les employé dont le prénom commence par un A ou par un B
SELECT prenom, nom, solde_conge FROM employe WHERE date_embauche < '01/01/2015' AND (prenom LIKE 'A%' OR prenom LIKE 'B%') ORDER BY nom ASC, solde_conge DESC;
Nous pouvons ajouter dans la clause WHERE les opérateurs logiques pour appliquer le filtre. L’opérateur AND vérifie que les deux conditions sont vraies, alors que l’opérateur OR ne vérifie que l’une des deux conditions.
Nous utilisons les parenthèses pour prioriser les conditions. Dans l’exemple ci-dessus, les conditions du filtre sont touts les employés qui sont embauchés avant le 01/01/2015 et que leurs prénoms commencent par un A ou bien les employés qui sont embauchés avant le 01/01/2015 et que leurs prénoms commencent par un B.
Il existe d’autre opérateur logique qu’on utilise dans la clause WHERE qu’on va voir en détails dans d’autre cours.
On va voir aussi dans d’autre cours la sélection de plusieurs tables et les jointures.
INSERT, UPDATE et DELETE
Pour modifier les données d’une table nous utilisons ces trois requêtes :
INSERT : Pour insérer une nouvelle ligne dans une table.
La syntaxe est comme suit :
INSERT INTO nom_de_la_table (col_1, col_2, … col_n) VALUES (val_1, val_2, … val_n);
nom_de_la_table : est le nom de la table dont on va insérer les données.
col_n : le nom de la nième colonne de la table. Les noms des colonnes sont facultatifs. L’ordre peut ne pas être le même que celui lors de la création de la table.
val_n : la valeur de la colonne col_n. Cette valeur doit être du même type que la colonne correspondante.
Au cas où nous voulons insérer une ligne en spécifiant toute les colonnes, nous pouvons écrire directement :
INSERT INTO nom_de_la_table VALUES (val_1, val_1, … val_n);
Passons aux exemples, insérons une nouvelle ligne dans la table emp :
INSERT INTO emp VALUES (1, 'Nom 1', 'Travail', 1234, '01/01/2015', 1500.20, NULL, NULL);
Nous avons insérer dans cette table une ligne qui comporte:
EMPNO : 1
ENAME : Nom 1
JOB : Travail
MGR : 1234
HIREDATE : 01/01/2015
SAL : 1500,20
COMM : Vide
DEPTNO : Vide
Dans le deuxième exemple nous allons insérer un autre employé mais nous ne disposons que de son matricule et son nom :
INSERT INTO emp (EMPNO, ENAME) VALUES (2, 'Nom 2');
Les autres colonnes seront insérées comme vide.
UPDATE : Pour modifier les informations d’une table.
La syntaxe est comme suit :
UPDATE nom_de_la_table SET col_1 = val_1, col_2 = val_2, … col_n = val_n WHERE condition;
nom_de_la_table : est le nom de la table dont on va insérer les données.
col_n : le nom de la nième colonne de la table. L’ordre peut ne pas être le même que celui lors de la création de la table.
val_n : la nouvelle valeur de la colonne col_n. Cette valeur doit être du même type que la colonne correspondante.
Exemple :
UPDATE emp SET sal = 2000, hiredate = '01/02/2015' WHERE empno = 2;
Dans cet exemple nous avons modifié les données “sal” et “hiredate” par 2000 et 01/02/2015 pour l’employé numéro 2.
DELETE : Pour supprimer des lignes d’une table.
La syntaxe est comme suit :
DELETE FROM nom_de_la_table WHERE condition;
Exemple : Nous allons supprimer l’employé 2
DELETE FROM emp WHERE empno = 2;
NB: Si vous ne spécifier pas le WHERE dans les requêtes DELETE et UPDATE, alors toutes les lignes de la table seront impactées par la MAJ.
Pour valider une MAJ dans la table il faut exécuter la requête COMMIT
COMMIT;
Dans le cas ou on veut annuler la MAJ, on exécute la requête ROLLBACK
ROLLBACK;