Vous êtes sur la page 1sur 24

Cours base de données

CHAPITRE 3
LANGAGE SQL:LMD

3A
Mme Hkimi Jihène

Année universitaire : 2012/2013


PLAN DU CHAPITRE
Manipuler des données :

1.INSERT
2.UPDATE
3.DELETE
4.MERGE

2
OBJECTIFS
 Décrire chaque instruction du langage de manipulation des
données (LMD).
 Insérer des lignes dans une table.
 Mettre à jour des lignes dans une table.
 Supprimer des lignes d’une table.
 Fusionner les données .
 Gérer les transactions.

3
LANGAGE DE MANIPULATION DE
DONNÉES
 Une instruction LMD??
Une instruction LMD est exécutée pour :
 Ajouter de nouvelles lignes dans une table.
 Modifier des lignes existantes d’une table.
 Supprimer des lignes existantes d’une table.
 Fusionner les données des tables.

 Une transaction??
Une transaction est un ensemble cohérant des
modifications faites sur les données. Elle débute lorsqu’on
se connecte à la base ou lorsque la transaction précédente
se termine.

4
AJOUTER UNE NOUVELLE LIGNE À
UNE TABLE
Nouvelle
DEPARTMENTS ligne

Insérer la nouvelle ligne


dans la table
DEPARTMENTS

5
SYNTAXE DE L’INSTRUCTION
INSERT
 Ajouter de nouvelles lignes à une table à l’aide de
l’instruction INSERT.

INSERT INTO table [(column [, column...])]


VALUES (value [, value...]);

 Avec cette syntaxe, une seule ligne est insérée à la fois.

6
INSÉRER DE NOUVELLES LIGNES
 Insérez une nouvelle ligne contenant des valeurs pour
chaque colonne.
 Répertoriez les valeurs dans l’ordre par défaut des colonnes
de la table.
 Vous pouvez également indiquer les colonnes de la clause
INSERT.

INSERT INTO departments(department_id,


department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
1 row created.

 Incluez les valeurs de type caractère et de type date entre


apostrophes.

7
INSÉRER DES LIGNES AVEC DES
VALEURS NULL
 Méthode implicite : omettez la colonne dans la liste.

INSERT INTO departments (department_id,


department_name )
VALUES (30, 'Purchasing');
1 row created.

 Méthode explicite : indiquez le mot-clé NULL dans la clause


VALUES.

INSERT INTO departments


VALUES (100, 'Finance', NULL, NULL);
1 row created.

8
INSÉRER DES VALEURS SPÉCIALES
 La fonction qui enregistre la date et l’heure??
 La fonction SYSDATE

INSERT INTO employees (employee_id,


first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 100);
1 row created.

9
INSÉRER DES VALEURS DE DATE
SPÉCIFIQUES
 Ajouter un nouvel employé.
INSERT INTO employees
VALUES (114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE(‘03/02/1999’, ‘DD/MM/YYYY’),
'AC_ACCOUNT', 11000, NULL, 100, 30);
1 row created.

 Vérifiez l’ajout.

10
INSÉRER PLUSIEURS LIGNES
 Vous pouvez également créer des ordres SQL INSERT à
l'aide de sous-requêtes.
 En plaçant un "select" dans l'instruction INSERT SQL, vous
pouvez réaliser des insertions multiples rapidement.

INSERT INTO emp (emp_id, emp_name)


SELECT employee_id, last_name FROM employees
WHERE job_id= 'Clerk';
8 row created.

11
MODIFIER DES DONNÉES DANS
UNE TABLE
EMPLOYEES

Mise à jour des lignes dans la table EMPLOYEES

12
SYNTAXE DE L’INSTRUCTION UPDATE
 Modifier des lignes existantes à l’aide de l’instruction
UPDATE:

UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

 Mettre à jour plusieurs lignes à la fois (si nécessaire).

13
METTRE À JOUR DES LIGNES
DANS UNE TABLE
 Des lignes spécifiques sont modifiées si vous indiquez la clause
WHERE :

UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
1 row updated.

 Toutes les lignes de la table sont modifiées si vous omettez la


clause WHERE:

UPDATE copy_emp
SET department_id = 110;
22 rows updated.
METTRE À JOUR DES COLONNES
AVEC UNE SOUS-INTERROGATION
 Mettez à jour le poste et le salaire de l’employé 114 afin
qu’ils correspondent à ceux de l’employé 205.

UPDATE employees
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 114;
1 row updated.

15
METTRE À JOUR DES LIGNES EN
FONCTION D’UNE AUTRE TABLE
 Utilisez des sous-interrogations dans les instructions
UPDATE pour mettre à jour des lignes d’une table en
fonction des valeurs d’une autre table.

UPDATE copy_emp
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.

16
SUPPRIMER UNE LIGNE D’UNE TABLE

DEPARTMENTS

Delete a row from the DEPARTMENTS table:

17
INSTRUCTION DELETE
 Vous pouvez supprimer des lignes existantes d’une table à
l’aide de l’instruction DELETE:
DELETE [FROM] table
[WHERE condition];

 Des lignes spécifiques sont supprimées si vous indiquez la


clause WHERE:
DELETE FROM departments
WHERE department_name = 'Finance';
1 row deleted.

 Toutes les lignes de la table sont supprimées si vous omettez


la clause WHERE:
DELETE FROM copy_emp;
22 rows deleted.
18
SUPPRIMER DES LIGNES EN
FONCTION D’UNE AUTRE TABLE
 Utilisez des sous-interrogation dans les instructions DELETE
afin de supprimer des lignes d’une table en fonction des
valeurs d’une autre table :

DELETE FROM employees


WHERE department_id in
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Finance%');
1 row deleted.

19
L’INSTRUCTION MERGE (LA FUSION)
 permet soit de mettre à jour (UPDATE ou DELETE), soit
d’insérer (INSERT), soit d’effectuer les trois types
d’opération sur des données dans une table cible. Cela
évite d’écrire des insertions ou des mises à jour ou
suppressions multiples en plusieurs commandes.

MERGE INTO [schéma.] nomTableCible [alias]


USING [schéma.] { nomTableSource | nomVue |
requête } [alias]
ON (condition)
[WHEN MATCHED THEN
UPDATE SET col1 = {expression1 | DEFAULT}
[,col2 = {expression2 | DEFAULT}]...
[WHERE condition]
[WHEN NOT MATCHED THEN
INSERT [ (col1 [, col2]...) ]
VALUES ( {expression1 [,expression2]... |
DEFAULT } )
[WHERE condition] ] ;

20
L’INSTRUCTION MERGE ( LA FUSION)
 Le choix de l’opération dans la table cible est toujours
conditionné par la clause ON. Pour chaque enregistrement
de la table cible qui vérifie la condition, l’enregistrement
correspondant de la table source est modifié. Les données
de la table cible qui ne vérifient pas la condition
déclenchent une insertion dans la table cible, basée sur
des valeurs d’enregistrements de la table source.
 La clause WHERE… de l’instruction INSERT filtre les
insertions par une condition sur la table.

NB : Il n’est pas possible de modifier une colonne référencée


dans la clause de jointure ON.

21
L’INSTRUCTION MERGE (EXEMPLE 1)

La table AUGMENTATION contient le montant des augmentations des


employés.
ajoutez la valeur de la colonne Montant de la table AUGMENTATION
à la colonne SAL de la table EMP.

MERGE into emp E using augmentation A


on (a.empno=e.empno) WHEN MATCHED
THEN UPDATE set sal=sal+Montant WHEN
NOT MATCHED THEN insert (empno) values
(null)

22
L’INSTRUCTION MERGE (EXEMPLE 2)
Supposons qu’on désire ajouter à la paye de chaque pilote de
grade ‘CDB’ un bonus. Si un bonus est donné à un pilote
n’ayant pas encore eu de prime, il faudra ajouter ce pilote en
affectant sa paye au bonus reçu. On désire aussi supprimer
les primes des pilotes modifiés si la valeur de leur paye est
inférieure à 90. La figure suivante illustre cet exemple qui,
sans l’utilisation de l’instruction MERGE, requiert l’utilisation
d’une instruction UPDATE , DELETE et INSERT (qui serait
multiligne si plusieurs pilotes n’étaient pas référencés dans la
table Primes).

23
L’INSTRUCTION MERGE (EXEMPLE 2)
Résultat

24

Vous aimerez peut-être aussi