Quantcast

COMMANDES SQL DML-LMD

Samedi 16 juin 2012 6 16 /06 /Juin /2012 15:25

 

DELETE FROM.

Comment supprimer des lignes dans une table avec la commande SQL DELETE.
Comment utiliser la commande SQL DELETE sur une table Oracle.
Comment supprimer des doublons dans une table avec DELETE.

L'instruction sql delete from est utilisée pour supprimer des lignes existantes dans une table.
DELETE supprime une ou plusieurs lignes dans une table ou vue Oracle.

Vous pouvez supprimer des lignes dans une table, si cette table est dans votre schéma ou si vous avez reçu le privilège objet DELETE sur la table.
Si vous avez le privilège system DELETE ANY TABLE, vous pouvez alors supprimer des lignes de tables dans toutes les tables des schéma.

Respectez les contraintes définies sur la table sous peine d'échec avec l'instruction DELETE.

Syntaxe SQL DELETE FROM TABLE.

 
DELETE [FROM] [schéma.]Nom_Table [@DBLink] [WHERE (conditions)] ;

sql-delete-from

Table de test pour les suppressions avec l'instruction DELETE.

SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------------- ---- ---------- ---------- ---------- ----------
         1 SMITH      CLERK                                800,5                    10
         2 ALLEN      SALESMAN           4 20/02/1985       1600        300         30
         3 WARD       SALESMAN           4 22/02/1983       1250     500,56         30
         4 JONES      MANAGER              02/04/1981       2975                    30
         5 MARTIN     SALESMAN           4 28/09/1987       1250       1400         40

SQL>

 

Supprimer toutes les lignes d'une table avec DELETE FROM.

Nous ne mettons pas de clause WHERE avec des conditions pour supprimer toutes les lignes d'une table Oracle.
Toules les lignes de la table emp seront supprimées.
Vous pouvez aussi utiliser la commande sql TRUNCATE TABLE pour vider une table de tous ses enregistrements.

 
SQL> DELETE emp;
5 ligne(s) supprimée(s).

ou

SQL> DELETE FROM emp;
5 ligne(s) supprimée(s).


SQL> SELECT * FROM emp;
aucune ligne sélectionnée

SQL>

 


 

DELETE FROM avec la clause WHERE de conditions.

 
SQL> DELETE FROM emp WHERE deptno=30;

3 ligne(s) supprimée(s).


SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------------- ---- ---------- ---------- ---------- ----------
         1 SMITH      CLERK                                800,5                    10
         5 MARTIN     SALESMAN           4 28/09/1987       1250       1400         40

SQL>

 


 

DELETE FROM avec une sous-requête dans clause WHERE.

Utilisation de sous-requête pour établir la condition de suppression dans la clause WHERE.
Ici nous supprimons les lignes de la table dont le salaire est supérieure à la moyenne de tous les salaires de la table emp.

 
SQL> DELETE FROM emp
           WHERE sal > (SELECT AVG(sal)
                          FROM emp);

2 ligne(s) supprimée(s).

SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------------- ---- ---------- ---------- ---------- ----------
         1 SMITH      CLERK                                800,5                    10
         3 WARD       SALESMAN           4 22/02/1983       1250     500,56         30
         5 MARTIN     SALESMAN           4 28/09/1987       1250       1400         40

SQL>

 


 

DELETE FROM avec une liste dans la clause WHERE.

Utilisation d'une liste pour effectuer la suppression de lignes dans une table.
Ici nous supprimons toutes les lignes de la table dont le numéro DEPTNO est 10 ou 20 ou 30.

 
SQL> DELETE FROM emp WHERE deptno IN(10, 20, 30);

4 ligne(s) supprimée(s).


SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------------- ---- ---------- ---------- ---------- ----------
         5 MARTIN     SALESMAN           4 28/09/1987       1250       1400         40

SQL>

 


 

SUPPRESSION DE DOUBLONS AVEC DELETE FROM

Utilisation d'une sous-requête pour supprimer les lignes en doublons sur le numéro DEPTNO.
Ici nous avions 3 lignes dont le DEPTNO etait égale à 30, aprés exécution de l'instruction DELETE suivante, nous avons maintenant une ligne unique dont le numéro DEPTNO est égale à 30.

 
SQL> DELETE emp
      WHERE rowid NOT IN (SELECT MAX(rowid)
                            FROM emp
                        GROUP BY deptno);

2 ligne(s) supprimée(s).

SQL> SELECT * FROM emp;

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
---------- ---------- --------------- ---- ---------- ---------- ---------- ----------
         1 SMITH      CLERK                                800,5                    10
         4 JONES      MANAGER              02/04/1981       2975                    30
         5 MARTIN     SALESMAN           4 28/09/1987       1250       1400         40

SQL>

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article qui sont susceptibles de vous intéresser
• TRUNCATE TABLE ORACLE
Par Oracle SQL - Publié dans : COMMANDES SQL DML-LMD
Ecrire un commentaire - Voir les 0 commentaires
Dimanche 13 mai 2012 7 13 /05 /Mai /2012 14:40

 

SQL UPDATE.

Comment utiliser la commande sql UPDATE.
Comment changer des valeurs dans des tables Oracle.
Comment modifier et mettre à jour des données dans Oracle.

L'instruction SQL UPDATE est utilisée pour modifier les lignes existantes dans une table.
UPDATE modifie les valeurs des colonnes spécifiées dans une ou plusieurs lignes d'une table ou vue Oracle.

Vous pouvez modifier des colonnes dans une table, si elle est dans votre schéma ou si vous avez reçu le privilège UPDATE sur la table.
Si vous avez le privilège UPDATE ANY TABLE, vous pouvez alors modifier les colonnes des lignes de toutes les tables des schéma.

Respectez les CONTRAINTES (Unicité, Not NULL, Check,...) définies sur la table sous peine d'échec avec l'instruction UPDATE.

Syntaxe UPDATE table SET.

 
UPDATE [schéma.] Nom_Table [@DBLink]
   SET  column = expression | (subquery) 
       (column1, column2,...) = (subquery)
[WHERE (conditions)];

sql-update-table

La table de test pour mise à jour avec la commande UPDATE.

SQL> SELECT * FROM scott.emp;

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     1 SMITH      CLERK                                 800,5                    10
     2 ALLEN      SALESMAN            4 20/02/1985       1600        300         30
     3 WARD       SALESMAN            4 22/02/1983       1250     500,56         30
     4 JONES      MANAGER               02/04/1981       2975                    30
     5 MARTIN     SALESMAN            4 28/09/1987       1250       1400         40

SQL>

 

 

SQL UPDATE sur une colonne.

Update d'une colonne avec une valeur numérique.
On oubliera pas la condition de mise à jour dans la clause WHERE, sinon toutes les lignes de la table EMP seront mises à jour avec la nouvelle valeur.

 
SQL> UPDATE emp
        SET sal   = 800
      WHERE empno = 1;

1 ligne mise à jour.

SQL> COMMIT;

Validation effectuée.

SQL> SELECT * FROM emp WHERE empno = 1;

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     1 SMITH      CLERK                                   800                    10

SQL>

 


 

SQL UPDATE sur plusieurs colonnes.

Update sur plusieurs colonnes de table, elles sont séparées par des virgules dans la clause SET.
Dans la commande SQL UPDATE, il est possible d’affecter explicitement à une colonne la valeur par défaut définie sur cette colonne.

 
SQL> UPDATE emp
        SET sal   = 800,
            comm  = DEFAULT
      WHERE empno = 1;

1 ligne mise à jour.

SQL> COMMIT;

Validation effectuée.

SQL> SELECT * FROM emp WHERE empno = 1;

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     1 SMITH      CLERK                                   800          0         10

SQL>

 


 

SQL UPDATE avec des fonctions et opérateurs.

Utilisation de fonctions et opérateurs dans la clause SET de la commande sql UPDATE.

 
SQL> UPDATE emp
        SET ename = INITCAP(ename),
              job = LOWER(job),
             comm = (sal/2)*1.1
      WHERE empno = 1;

1 ligne mise à jour.

SQL> COMMIT;

Validation effectuée.

SQL> SELECT * FROM emp WHERE empno = 1;

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     1 Smith      clerk                                 800,5     440,28         10

SQL>

 


 

SQL UPDATE avec des valeurs provenant d'une autre table.

Utilisation d'une sous-interrogation pour mettre à jour les départements à partir de la table DEPT, la sous-requête devra impérativement ramener une ligne unique sinon échec de l'instruction UPDATE avec l'erreur ORA-01427.

 
SQL> UPDATE emp
        SET deptno = (SELECT deptno
                        FROM dept
                       WHERE dname = 'SALES')
      WHERE job    = 'SALESMAN';

3 ligne(s) mise(s) à jour.

SQL> COMMIT;

Validation effectuée.

SQL> SELECT * FROM emp WHERE job = 'SALESMAN';

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     2 ALLEN      SALESMAN            4 20/02/1985       1600        300         30
     3 WARD       SALESMAN            4 22/02/1983       1250     500,56         30
     5 MARTIN     SALESMAN            4 28/09/1987       1250       1400         30

SQL>

SQL> UPDATE emp
        SET deptno = (SELECT deptno
                        FROM dept)
      WHERE job    = 'SALESMAN';
   SET deptno = (SELECT deptno
                 *
ERREUR à la ligne 2 :
ORA-01427: sous-interrogation ramenant un enregistrement de plus d'une ligne

SQL>

 


 

SQL UPDATE avec des sous-requêtes.

Les sous-requêtes ou sous-interrogation peuvent être utilisées avec la commande UPDATE pour modifier les valeurs d'une ou plusieurs colonnes de tables Oracle.

 
SQL> UPDATE emp e1
        SET comm = (SELECT AVG(NVL(comm,0))
                      FROM emp e2
                     WHERE e1.deptno = e2.deptno);

5 ligne(s) mise(s) à jour.

SQL> SELECT * FROM emp ;

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     1 SMITH      CLERK                                 800,5          0         10
     2 ALLEN      SALESMAN            4 20/02/1985       1600     266,85         30
     3 WARD       SALESMAN            4 22/02/1983       1250     266,85         30
     4 JONES      MANAGER               02/04/1981       2975     266,85         30
     5 MARTIN     SALESMAN            4 28/09/1987       1250       1400         40

SQL>
SQL> UPDATE emp e1
        SET (comm,sal) = (SELECT AVG(NVL(comm,0)),
                                 MAX(sal)
                            FROM emp e2
                           WHERE e1.deptno = e2.deptno);

5 ligne(s) mise(s) à jour.

SQL> SELECT * FROM emp ;

 EMPNO ENAME      JOB               MGR HIREDATE          SAL       COMM     DEPTNO
------ ---------- --------------- ----- ---------- ---------- ---------- ----------
     1 SMITH      CLERK                                 800,5          0         10
     2 ALLEN      SALESMAN            4 20/02/1985       2975     266,85         30
     3 WARD       SALESMAN            4 22/02/1983       2975     266,85         30
     4 JONES      MANAGER               02/04/1981       2975     266,85         30
     5 MARTIN     SALESMAN            4 28/09/1987       1250       1400         40

SQL>

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Update Table avec MERGE INTO
Par Oracle SQL - Publié dans : COMMANDES SQL DML-LMD
Ecrire un commentaire - Voir les 2 commentaires

Oracle Sql et administration

Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus - Articles les plus commentés