170 likes | 273 Views
Mise à jour de tables. Les commandes de mise à jour. CREATE TABLE DROP TABLE ALTER TABLE INSERT UPDATE DELETE SELECT interrogation. structure. Instruction de mise à jour. Insertion de données. INSERT INTO Table [ ( Nom_Colonne [ , Nom_Colonne ] ...) ]
E N D
Les commandes de mise à jour • CREATE TABLE • DROP TABLE • ALTER TABLE • INSERT • UPDATE • DELETE • SELECT interrogation structure Instruction de mise à jour
Insertion de données • INSERT INTO Table [ ( Nom_Colonne [ , Nom_Colonne ] ...) ] VALUES { (Valeur | Requête) [ ,(Valeur | Requête) ... } • Exemple: On désire insérer un nouveau département dans la table departement INSERT INTO departement (id, nom,ville) VALUES(50,‘Ingénierie',‘Québec'); • ou bien INSERT INTO departement VALUES (50,‘Ingénierie',‘Québec');
Insertion d’une valeur provenant d’une requête • Exemple, on désire insérer un nouvel employé travaillant à Québec: INSERT INTO employe(id, nom, id_departement) VALUES (7777, ‘Toto’, (SELECT id FROM departement WHERE ville = ‘Québec’));
Insertion de rangées d'une autre table • Pour insérer les employés des départements 10,20,30 et 40 de la table ancien_empdans la table employe INSERT INTO employe( id, nom, id_departement) SELECT id, nom, id_departement FROM ancien_emp WHERE id_departementIN (10,20,30,40);
Insertion de valeurs nulles • Lorsqu'une colonne est omise dans un énoncé INSERT, elle prend la valeur NULL.
Insertion de dates • Format d'une date: ‘DD/MM/YYYY‘ INSERT INTO employe(id, nom, date_embauche) VALUES ( 7963 , ‘Marion' , TO_DATE('07/03/1999‘ ,‘DD/MM/YYYY’); • Pour avoir la date du jour : SYSDATE INSERT INTO employe (id, nom, date_embauche) VALUES (7600, ‘Jacques’, SYSDATE);
Les séquences en SQL • Il s'agit d'un objet de la base de données que l'on utilise pour générer des nombres entiers qui se suivent • Pour créer une séquence: CREATE SEQUENCE Nom_Séquence [ INCREMENT BY n ] [ START WITH n ] [ MAXVALUE n | NOMAXVALUE ] [ MINVALUE n | NOMINVALUE ] [ CYCLE | NOCYCLE ] [CACHE n | NOCACHE] • Exemple: CREATE SEQUENCE seq_employe INCREMENT BY 1 START WITH 1; • Pour détruire une séquence: DROP SEQUENCE Nom_Séquence;
Les caches des séquences • S’iln’y a pas de cache pour la séquence, alorsàchaquefoisquel’onveutavoirnombresuivant de la séquence, il y a uneopérationsur le disquedur pour allerchercher et incrémenter la séquence. • En utilisant CACHE 100, par exemple, les 100 prochainsnuméroserontimmédiatementincrémentésdans la séquence. Ceux-cipourrontensuiteêtreutilisé sans avoirà faire d’accès au disquedur. • Cecipermetunemeilleur performance de la base de donnéeslorsd’insertion en “batch”.
Utilisation d'une séquencegénération d'un nombre • Pour générer le nombre suivant d'une séquence. Nom_Séquence.NEXTVAL • Exemple: On désire que les numéros d'employé soit générés automatiquement lors de la création d'un employé. 1) on crée la séquence "matricule" CREATE SEQUENCE seq_matricule INCREMENT BY 1 START WITH 1000; 2) Lors de la création d'un employé, on utilise cette séquence. INSERT INTO employe (id, nom, poste) VALUES (seq_matricule.nextval, ‘Morin’, ‘technicien’);
Utilisation d'une séquenceréférence au dernier nombre généré • Pour utiliser le dernier nombre généré par une séquence. Nom_Séquence.CURRVAL • Exemple: On désire afficher le dossier d'un employé qui vient d'être ajouté à la BD. INSERT INTO EMP (id, nom) VALUES (seq_matricule.nextval, ‘castagne’); SELECT id, nom FROM employe WHERE id = seq_matricule.currval;
Mise à jour de table : UPDATE • Syntaxe: UPDATE Table SET Nom_Colonne = Expression [,…] [ WHERE Condition ] ou UPDATE Table SET (Nom_Colonne [,Nom_Ccolonne]...) = ( Requête ) [,...] [ WHERE condition ] • Si on utilise une requête elle doit retourner aucune ou au maximum une rangée. • Note :la requête est évaluée pour chaque rangée mise à jour.
UPDATE - Mise à jour de plusieurs rangées • Pour changer tous les vendeurs en représentants UPDATE employe SET poste = ‘Représentant' WHERE poste = ‘Vendeur‘ ;
UPDATEmise à jour de plusieurs colonnes • Pour changer les vendeurs en représentants et les transférer au département 40 UPDATE employe SET id_departement= 40 , poste = 'représentant‘ WHERE poste = 'vendeur‘ ;
UPDATE la mise à jour de champs • Exemple: transférer tous les employés travaillant dans un département situé à Otttawa ou Toronto dans le département situé à Montréal de plus, mettre la commission pour ces employés à zéro UPDATE employe SET id_departement = (SELECT id FROM departement WHERE Ville= ’Montréal'), commission = 0 WHERE id_departementIN (SELECT id FROM departement WHERE Ville=’Ottawa‘ OR Ville= ’Toronto');
DELETEsuppression de rangées • La clause WHERE détermine les rangées qui seront supprimées. • Si la clause WHERE est absente, toutes les rangées sont supprimées. Exemple: L'employé Martin a démissionné. Pour le rayer de la liste des employés: DELETE FROM employe WHERE id = 7654 ; • Pour détruire tous les employés: DELETE FROM employe;