Vous êtes sur la page 1sur 126

Prsent Par : Mlle fatema zahra BENCHARA Mlle Amina EL OUAZZANI

Encadr Par : Mr Mohammed QBADOU

Plan
Quest ce que cest le langage SQL? Ecrire des instructions SQL SELECT lmentaires. Limiter et trier des donnes. Fonctions monoligne. Afficher des donnes issues de plusieurs tables. Agrger des donnes. Sous interrogations. Commandes SQL: LMD, LDD, LCD. Contraintes dIntgrit. Crer des Vues. Objets de Base de Donnes. Contrler les accs utilisateurs.
ORACLE_SQL
2

Quest ce que cest le langage SQL?

Structured Query Language (SQL): langage de programmation interactif standard permettant dextraire et mettre jour les informations dune base de donnes. Le langage SQL offre des instructions pour un large ventail de tache sur la base de donnes:

Interrogation des donnes. Insrer , mettre jour, supprimer des lignes dans une table. Crer, remplacer, modifier et supprimer des objets. Contrler laccs la base de donnes et ses objets. Garantir la cohrence et lintgrit de la base de donnes.
ORACLE_SQL
3

Ecrire des instructions SQL SELECT lmentaires


Diffrentes fonctions des instructions SQL SELECT
Projection Slection

Table 1 Jointure

Table 1

Table 1

Table 2
ORACLE_SQL
4

Ecrire des instructions SQL SELECT lmentaires


Instruction SELECT lmentaire

SELECT FROM

*|{[DISTINCT] column|expression [alias],...} table;

SELECT indique quelles colonnes renvoyer FROM indique dans quelle table rechercher
ORACLE_SQL
5

Ecrire des instructions SQL SELECT lmentaires


Instruction SELECT lmentaire
Slectionner toutes les colonnes:
SELECT FROM * nom_table;

Slectionner des colonnes spcifiques:


SELECT FROM nom_column1, nom_column2, nom_table;

ORACLE_SQL
6

Ecrire des instructions SQL SELECT lmentaires


Ecrire des instructions SQL
Les instructions SQL peuvent tre crites indiffremment en majuscules et/ou minuscules. Les instructions SQL peuvent tre crites sur une ou plusieurs lignes. Les mots-cls ne doivent pas tre abrgs, ni scinds sur plusieurs lignes. Les clauses sont gnralement places sur des lignes distinctes. Les indentations permettent une meilleure lisibilit.
ORACLE_SQL
7

Ecrire des instructions SQL SELECT lmentaires


Priorit des oprateurs

SELECT last_name, salary, 12*salary+100 FROM employees;

SELECT last_name, salary, 12*(salary+100) FROM employees;

ORACLE_SQL
8

Ecrire des instructions SQL SELECT lmentaires


Utiliser des alias de colonne
SELECT last_name AS name, commission_pct comm FROM employees;

SELECT last_name Name, 12*SALARY Annual Salary FROM employees;

ORACLE_SQL
9

Ecrire des instructions SQL SELECT lmentaires


Utiliser la concatnation et des chanes de caractres littrales
SELECT last_name ||' is a '||job_id AS "Employee Details" FROM employees;

ORACLE_SQL

Limiter et trier des donnes


Limiter le nombre de lignes slectionnes
SELECT FROM [WHERE *|{[DISTINCT] column|expression [alias],...} table condition(s)];

Limitez le nombre de lignes renvoyes l'aide de la clause WHERE. La clause WHERE se place aprs la clause FROM.
ORACLE_SQL
11

Limiter et trier des donnes


[WHERE condition(s)]; Exemples WHERE last_name = 'Whalen'; WHERE salary+1000=10000; WHERE salary <= 3000; WHERE manager_id IN (100, 101, 201); WHERE first_name LIKE 'S%'; WHERE salary BETWEEN 2500 AND 3500; WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP'); WHERE salary >=10000 AND job_id LIKE '%MAN%'; WHERE salary >= 10000 OR job_id LIKE '%MAN%'; ORACLE_SQL
12

Oprations dans la clause WHERE Chaine de caractres & date Oprateur arithmtique Condition de comparaison IS [NOT] NULL, LIKE,[NOT]IN [NOT] BETWEEN Condition logique NOT Condition logique AND Condition logique OR

Limiter et trier des donnes


Triez les lignes slectionnes
SELECT *|{[DISTINCT] column|expression [alias],...} FROM table [WHERE condition(s)]; [ORDER BY {column, expr, alias} [ASC|DESC]];

Triez les lignes renvoyes l'aide de la clause ORDER BY. La clause ORDER BY se place la fin de linstruction SELECT.
ORACLE_SQL
13

Fonctions monoligne
AlphaAlphanumrique

Gnrale Fonctions monoligne

Numrique

Conversion

Date

ORACLE_SQL
14

Fonctions monoligne
Fonctions alpha_numrique
Fonction CONCAT('Hello', 'World') SUBSTR('HelloWorld',1,5) LENGTH('HelloWorld') INSTR('HelloWorld', 'W') LPAD(salary,10,'*') RPAD(salary, 10, '*') TRIM('H' FROM 'HelloWorld') Rsultat HelloWorld Hello 10 6 *****24000 24000***** elloWorld
ORACLE_SQL

Fonctions monoligne
Fonctions numrique
Fonction ROUND(45.926,2) TRUNC(45.926,2) MOD(1600,300) Rsultat 45.93 45.92 100

ORACLE_SQL

Fonctions monoligne
Fonctions de date
Fonction MONTHS_BETWEEN ADD_MONTHS NEXT_DAY LAST_DAY Description Nombre de mois entre deux dates Ajout de mois calendaires une date Jour suivant la date indique Dernier jour du mois
ORACLE_SQL

Fonctions monoligne
Utiliser les fonctions de date
MONTHS_BETWEEN ('01-SEP-95','11-JAN-94') 19.6774194 ADD_MONTHS ('11-JAN-94',6) '11-JUL-94'

NEXT_DAY ('01-SEP-95','FRIDAY') '08-SEP-95' LAST_DAY('01-FEB-95') '28-FEB-95'


ORACLE_SQL

Fonctions monoligne
Conversion explicite des types de donnes
TO_NUMBER TO_DATE

NUMBER

CHARACTER

DATE

TO_CHAR

TO_CHAR
ORACLE_SQL

Fonctions monoligne

select last_name,to_char(hire_date,'DD-MON-YYYY') HIRE_DATE,TO_CHAR(salary, '$99,999.00') SALARY from employees;

ORACLE_SQL
20

Fonctions monoligne
Fonctions gnrales
Ces fonctions, qui se rapportent l'utilisation de valeurs NULL, s'utilisent avec tous les types de donnes.

NVL (expr1, expr2) NVL2 (expr1, expr2, expr3) NULLIF (expr1, expr2) COALESCE (expr1, expr2, ..., exprn)

ORACLE_SQL

Fonctions monoligne
Expressions conditionnelles
Cette expression, qui fonctionne comme une instruction IF-THEN-ELSE, facilite les interrogations conditionnelles :
SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY" FROM employees;

ORACLE_SQL
22

Fonctions monoligne

SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARY FROM employees;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


EMPLOYEES DEPARTMENTS

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Jointure propritaires syntaxe Oracle:
Equi-Jointures Non-Equijointures Auto-Jointures Jointures Externes

Jointures conformes la norme SQL:1999:


Equi-Jointures Non-Equijointures Auto-Jointures Jointures Externes Jointures Naturelles Clause Using Jointures croises ORACLE_SQL
25

Afficher des donnes issues de plusieurs tables


Jointure syntaxe Oracle
SELECT FROM WHERE table1.column, table2.column table1, table2 table1.column1 = table2.column2;

Ecrivez la condition de jointure dans la clause WHERE. Placez le nom de la table avant le nom de la colonne lorsque celui-ci figure dans plusieurs tables.

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Equijointure
SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id;

Utilisation des alias pour les noms des tables


SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e , departments d WHERE e.department_id = d.department_id;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Non-quijointures
SELECT e.last_name, e.salary, j.grade_level FROM employees e, job_grades j WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Jointures externes
SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id(+) = d.department_id ;

SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id = d.department_id (+) ;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Auto-Jointures
SELECT worker.last_name || ' works for ' || manager.last_name FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id ;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Auto-Jointures
EMPLOYEES (WORKER) EMPLOYEES (MANAGER)

MANAGER_ID dans la table

WORKER est gale au EMPLOYEE_ID dans la table MANAGER.


ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Jointure syntaxe SQL:1999
SELECT table1.column, table2.column FROM table1 [NATURAL JOIN table2] | [JOIN table2 USING (column_name)] | [JOIN table2 ON (table1.column_name = table2.column_name)]| [LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)]| [CROSS JOIN table2];

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Equi-Jointures
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON (e.department_id = d.department_id);

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Auto-Jointures
SELECT e.last_name emp, m.last_name mgr FROM employees e JOIN employees m ON (e.manager_id = m.employee_id);

Non-Equijointures
SELECT e.last_name, e.salary, j.grade_level FROM employees e JOIN job_grades j ON e.salary BETWEEN j.lowest_sal AND j.highest_sal;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


LEFT OUTER JOIN
SELECT e.last_name, e.department_id, d.department_name FROM employees e LEFT OUTER JOIN departments d ON (e.department_id = d.department_id) ;

RIGHT OUTER JOIN


SELECT e.last_name, e.department_id, d.department_name FROM employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id) ;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


FULL OUTER JOIN
SELECT e.last_name, d.department_id, d.department_name FROM employees e FULL OUTER JOIN departments d ON (e.department_id = d.department_id) ;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Natural Joins
SELECT department_id, department_name, location_id, city FROM departments NATURAL JOIN locations ;

Using Joins
SELECT employees.employee_id, employees.last_name, departments.location_id, department_id FROM employees JOIN departments USING (department_id) ;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Produit Cartsien
EMPLOYEES (20 rows) DEPARTMENTS (8 rows)

Cartesian product: 20 x 8 = 160 rows

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Cross Joins
SELECT last_name, department_name FROM employees CROSS JOIN departments ;

ORACLE_SQL

Afficher des donnes issues de plusieurs tables


Joindre plus de deux tables
EMPLOYEES DEPARTMENTS LOCATIONS

Pour joindre n tables entre elles, il faut au minimum n-1 conditions de jointure. Par exemple, deux jointures au moins sont ncessaires pour joindre trois tables.
ORACLE_SQL

Agrger des donnes


Les fonctions de groupe agissent sur des groupes de lignes et donnent un rsultat par groupe.
EMPLOYEES

Salaire maximum dans la table EMPLOYEES.

ORACLE_SQL

Agrger des donnes


Fonction AVG([DISTINCT|ALL]n)
COUNT({*|[DISTINCT|ALL]expr})

Description
Valeur moyenne de n, ignore les valeurs NULL Nombre de lignes o la valeur de expr n'est pas NULL (* permet de compter toutes les lignes slectionnes, y compris les doublons et les lignes contenant des valeurs NULL) Valeur maximale de expr, ignore les valeurs NULL Valeur minimale de expr, ignore les valeurs NULL Ecart type de n, ignore les valeurs NULL

MAX([DISTINCT|ALL]expr) MIN([DISTINCT|ALL]expr) STDDEV([DISTINCT|ALL]x) SUM([DISTINCT|ALL]n) VARIANCE([DISTINCT|ALL]x)

Somme des valeurs de n, ignore les valeurs NULL Variance de n, ignore les valeurs NULL

ORACLE_SQL

Agrger des donnes Syntaxe des fonctions de groupe

SELECT FROM [WHERE [GROUP BY [ORDER BY

[column,] group_function(column), ... table condition] column] column];

ORACLE_SQL

Agrger des donnes


Fonction AVG et SUM
SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary) FROM employees WHERE job_id LIKE '%REP%';

Fonction MINet MAX


SELECT MIN(hire_date), MAX(hire_date) FROM employees;

ORACLE_SQL

Agrger des donnes


Utiliser la fonction NVL avec les fonctions de groupe
La fonction NVL contraint les fonctions de groupe intgrer des valeurs NULL.
SELECT AVG(NVL(commission_pct, 0)) FROM employees;

ORACLE_SQL

Agrger des donnes


Crer des groupes de donnes
EMPLOYEES
4400 9500

Salaire moyen 3500 par service dans 6400 la table EMPLOYEES.


10033

ORACLE_SQL

Agrger des donnes


Crer des groupes de donnes : syntaxe de la clause GROUP BY
SELECT FROM [WHERE [GROUP BY [ORDER BY column, group_function(column) table condition] group_by_expression] column];

La clause GROUP BY permet d'organiser les lignes d'une table en groupes restreints.
ORACLE_SQL

Agrger des donnes


Utiliser la clause GROUP BY
La colonne GROUP BY ne doit pas ncessairement figurer dans la liste SELECT.
SELECT AVG(salary) FROM employees GROUP BY department_id ;

ORACLE_SQL

Agrger des donnes


Utiliser la clause GROUP BY sur plusieurs colonnes
SELECT department_id dept_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id ;

ORACLE_SQL

Agrger des donnes


Exclure des groupes de rsultats : clause HAVING
SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY SELECT FROM GROUP BY HAVING column, group_function table condition] group_by_expression] group_condition] column]; department_id, MAX(salary) employees department_id MAX(salary)>10000 ;

ORACLE_SQL

Agrger des donnes


Imbriquer des fonctions de groupe
Affichez le salaire moyen maximum.
SELECT MAX(AVG(salary)) FROM employees GROUP BY department_id;

ORACLE_SQL

Sous interrogations
Rsoudre un problme l'aide d'une sous-interrogation
Qui touche un salaire suprieur celui d'Abel ?
Interrogation principale :

Quels employs touchent un salaire suprieur celui d'Abel ?


Sous-interrogation :

Quel est le salaire d'Abel ?

ORACLE_SQL

Sous interrogations
Syntaxe des sous-interrogations
SELECT FROM WHERE select_list table expr operator (SELECT FROM

select_list table);

La sous-interrogation (interrogation interne) s'excute une fois avant l'interrogation principale. L'interrogation principale (interrogation externe) utilise le rsultat de la sous-interrogation.
ORACLE_SQL

Sous interrogations
Utiliser une sous-interrogation
SELECT last_name 11000 FROM employees WHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

ORACLE_SQL

Sous interrogations
Rgles d'utilisation des sous-interrogations
Placez les sous-interrogations entre parenthses. Placez les sous-interrogations dans la partie droite de la condition de comparaison. La clause ORDER BY de la sous-interrogation n'est requise que si vous effectuez une analyse de type n-premiers. Utilisez des oprateurs monolignes dans les sousinterrogations monolignes et des oprateurs multilignes dans les sous-interrogations multilignes.
ORACLE_SQL

Sous interrogations
Sous-interrogations monolignes
Oprateur Signification = > >= < <= <> Egal Suprieur Suprieur ou gal Infrieur Infrieur ou gal Diffrent de

Renvoient une seule ligne. Utilisent des oprateurs de comparaison monolignes.


ORACLE_SQL

Sous interrogations
Excuter des sous-interrogations monolignes
SELECT last_name, job_id, salary FROM employees ST_CLERK WHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141) 2600 AND salary > (SELECT salary FROM employees WHERE employee_id = 143);

ORACLE_SQL

Sous interrogations
Sous-interrogations multilignes
Oprateur IN ANY Signification Egal n'importe quel membre de la liste Compare la valeur chaque valeur renvoye par la sous-interrogation Compare la valeur toutes les valeurs renvoyes par la sous-interrogation

ALL

Renvoient plusieurs lignes Utilisent des oprateurs de comparaison multilignes


ORACLE_SQL

Sous interrogations
Utiliser l'oprateur ANY dans les sous-interrogations multilignes
SELECT employee_id, last_name, job_id, salary 9000, 6000, 4200 FROM employees WHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

ORACLE_SQL

Sous interrogations
Utiliser l'oprateur ALL dans les sous-interrogations multilignes
SELECT employee_id, last_name, job_id, salary FROM employees 9000, 6000, 4200 WHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG') AND job_id <> 'IT_PROG';

ORACLE_SQL

Commandes SQL
Langage de manipulation de donnes LMD Une instruction LMD est excute lorsque vous :
ajoutez des lignes une table, modifiez des lignes existantes dans une table, supprimez des lignes d'une table.

Une transaction est un ensemble d'instructions LMD formant une unit de travail logique.

ORACLE_SQL

Commandes SQL
Syntaxe de l'instruction INSERT
L'instruction INSERT permet d'ajouter de nouvelles lignes dans une table.
INSERT INTO VALUES table [(column [, column...])] (value [, value...]);

Cette syntaxe n'insre qu'une seule ligne la fois.

ORACLE_SQL

Commandes SQL
Insrer de nouvelles lignes
Insrez une nouvelle ligne en prcisant une valeur pour chaque colonne. Indiquez les valeurs dans l'ordre par dfaut des colonnes dans la table. Indiquez ventuellement les colonnes dans la clause INSERT. Placez les valeurs de type caractre et date entre apostrophes.
INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700); 1 row created. ORACLE_SQL

Commandes SQL
Copier des lignes d'une autre table
Ecrivez votre instruction INSERT en prcisant une sous-interrogation.
INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%'; 4 rows created.

N'utilisez pas la clause VALUES. Le nombre de colonnes de la clause INSERT doit correspondre celui de la sous-interrogation.
ORACLE_SQL

Commandes SQL
Utiliser une sous-interrogation dans une instruction INSERT
INSERT INTO (SELECT employee_id, last_name, email, hire_date, job_id, salary, department_id FROM employees WHERE department_id = 50) VALUES (99999, 'Taylor', 'DTAYLOR', TO_DATE('07-JUN-99', 'DD-MON-RR'), 'ST_CLERK', 5000, 50); 1 row created. ORACLE_SQL

Commandes SQL
Syntaxe de l'instruction UPDATE
UPDATE table SET column = value [, column = value, ...] [WHERE condition]; UPDATE SET employees 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. ORACLE_SQL

Commandes SQL
Supprimer des lignes d'une table
Instruction DELETE
table condition]; DELETE [FROM] [WHERE

La clause WHERE permet de supprimer des lignes spcifiques.


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

En cas d'absence de la clause WHERE, toutes les lignes sont supprimes.


DELETE FROM copy_emp; 22 rows deleted. ORACLE_SQL

Commandes SQL
Utiliser des valeurs explicites par dfaut
DEFAULT avec INSERT :
INSERT INTO departments (department_id, department_name, manager_id) VALUES (300, 'Engineering', DEFAULT);

DEFAULT avec UPDATE :


UPDATE departments SET manager_id = DEFAULT WHERE department_id = 10; ORACLE_SQL

Commandes SQL
Syntaxe de l'instruction MERGE
L'instruction MERGE vous permet de mettre jour ou d'insrer des lignes dans une table de faon conditionnelle.
MERGE INTO table_name table_alias USING (table|view|sub_query) alias ON (join condition) WHEN MATCHED THEN UPDATE SET col1 = col_val1, col2 = col2_val WHEN NOT MATCHED THEN INSERT (column_list) VALUES (column_values); ORACLE_SQL

Commandes SQL
Fusionner des lignes
Insrez ou mettez jour des lignes dans la table COPY_EMP pour qu'elle corresponde la table EMPLOYEES.
MERGE INTO copy_emp c USING employees e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name, c.last_name = e.last_name, ... c.department_id = e.department_id WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, e.last_name, e.email, e.phone_number, e.hire_date, e.job_id, e.salary, e.commission_pct, e.manager_id, e.department_id);

ORACLE_SQL

Commandes SQL Transactions de la base de donnes

Commence l'excution de la premire instruction LMD SQL. Se termine par l'un des vnements suivants :
Une instruction COMMIT ou ROLLBACK est lance. Une instruction LDD ou LCD (validation automatique) est excute. L'utilisateur quitte iSQL*Plus. Le systme tombe en panne.
ORACLE_SQL

Commandes SQL
Temps

COMMIT

Contrler les transactions

Transaction DELETE

SAVEPOINT A
INSERT

UPDATE

SAVEPOINT B
INSERT ROLLBACK to SAVEPOINT B ROLLBACK ROLLBACK to SAVEPOINT A ORACLE_SQL

Commandes SQL
Utilisateur A

Implmenter la cohrence en lecture


UPDATE employees SET salary = 7000 WHERE last_name = 'Goyal';

Blocs de donnes
Segments
d'annulation Donnes modifies et non modifies avant modification des "anciennes" donnes

SELECT * FROM userA.employees; Image

cohrente en lecture

Utilisateur B

ORACLE_SQL

Commandes SQL Verrouillage implicite


Deux modes de verrouillage :
Verrou de type Exclusive : Verrouille l'accs tous les autres utilisateurs Verrou de type Share : Permet aux autres utilisateurs d'accder galement aux donnes

Haut niveau de simultanit d'accs aux donnes


LMD : Partage des tables, row exclusive Interrogations : Aucun verrou requis LDD : Protge les dfinitions d'objet

Verrouillage maintenu jusqu' validation ou annulation


ORACLE_SQL

Commandes SQL Rgles d'appellation


Les noms de table et de colonne : Doivent commencer par une lettre. Peuvent comporter de 1 30 caractres. Ne peuvent contenir que les caractres A Z, a z, 0 9, _, $, et #. Ne doivent pas tre identiques ceux d'un autre objet appartenant au mme utilisateur. Ne doivent pas correspondre des mots rservs du serveur Oracle.
ORACLE_SQL

Commandes SQL
Language de dfinition des donnes
Instruction CREATE TABLE

Vous devez disposer :


du privilge CREATE TABLE, d'un espace de stockage
CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]);

Vous devez indiquer :


le nom de la table, le nom, le type de donnes et la taille des colonnes.
ORACLE_SQL

Commandes SQL
Tables de la base de donnes Oracle
Les tables utilisateur :
constituent un ensemble de tables cres et gres par l'utilisateur, contiennent des informations relatives l'utilisateur.

Le dictionnaire de donnes :
constitue un ensemble de tables cres et gres par le serveur Oracle, contient des informations relatives la base de donnes.
ORACLE_SQL

Commandes SQL
Crer une table l'aide d'une sousinterrogation
CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80; Table created. DESCRIBE dept80

ORACLE_SQL

Commandes SQL
Instruction ALTER TABLE
L'instruction ALTER TABLE permet d'ajouter, de modifier ou de supprimer des colonnes.
ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...); ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype]...);

ALTER TABLE table DROP (column); ORACLE_SQL

Commandes SQL
Option SET UNUSED
L'option SET UNUSED permet d'identifier une ou plusieurs colonnes comme non utilises. L'option DROP UNUSED COLUMNS permet de supprimer les colonnes identifies comme non utilises.
ALTER TABLE table SET UNUSED (column);

OR
ALTER TABLE table SET UNUSED COLUMN column; ALTER TABLE table DROP UNUSED COLUMNS; ORACLE_SQL

Commandes SQL

Supprimer une table


La structure et l'ensemble des donnes de la table sont supprimes. Toutes les transactions en cours sont valides. Tous les index sont supprims. Vous ne pouvez pas annuler une instruction DROP TABLE.
DROP TABLE dept80; Table dropped.

ORACLE_SQL

Commandes SQL
Renommer un objet
L'instruction RENAME permet de renommer une table, une vue, une squence ou un synonyme. Pour effectuer cette opration, vous devez tre propritaire de l'objet.
RENAME dept TO detail_dept; Table renamed.

ORACLE_SQL

Commandes SQL
Vider une table L'instruction TRUNCATE TABLE :
supprime toutes les lignes d'une table, libre l'espace de stockage utilis par la table Vous ne pouvez pas annuler une instruction TRUNCATE. Vous pouvez galement supprimer des lignes l'aide de l'instruction DELETE.
TRUNCATE TABLE detail_dept; Table truncated.

ORACLE_SQL

Commandes SQL
Ajouter des commentaires une table
L'instruction COMMENT permet d'ajouter des commentaires une table ou une colonne.
COMMENT ON TABLE employees IS 'Employee Information'; Comment created.

Vous pouvez visualiser les commentaires grce aux vues suivantes du dictionnaire de donnes : ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS
ORACLE_SQL

Commandes SQL
Langage de Contrle des donnes LCD

Instruction GRANT Instruction REVOKE

ORACLE_SQL

Contraintes dintgrit
Qu'est-ce qu'une contrainte ?
Les contraintes appliquent des rgles au niveau d'une table. Les contraintes empchent la suppression d'une table lorsqu'il existe des dpendances. Les types de contrainte suivants sont utiliss :
NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK
ORACLE_SQL

Contraintes dintgrit

Dfinir des contraintes


Contrainte au niveau colonne
column [CONSTRAINT constraint_name] constraint_type,

Contrainte au niveau table


column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

ORACLE_SQL

Contraintes dintgrit
Contrainte NOT NULL
Cette contrainte est dfinie au niveau colonne :
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL, ... Nom attribu par le systme Nom attribu par l'utilisateur

ORACLE_SQL

Contraintes dintgrit
Contrainte UNIQUE
Cette contrainte est dfinie au niveau table ou colonne :
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL, ... CONSTRAINT emp_email_uk UNIQUE(email)); ORACLE_SQL

Contraintes dintgrit
Contrainte PRIMARY KEY
Cette contrainte est dfinie au niveau table ou colonne :
CREATE TABLE departments( department_id NUMBER(4), department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL, manager_id NUMBER(6), location_id NUMBER(4), CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

ORACLE_SQL

Contraintes dintgrit

Contrainte FOREIGN KEY


Cette contrainte est dfinie au niveau table ou colonne :
CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL, ... department_id NUMBER(4), CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email)); ORACLE_SQL

Contraintes dintgrit
Contrainte CHECK
Dfinit une condition que chaque ligne doit satisfaire. Les expressions suivantes ne sont pas autorises :
Rfrences aux pseudo-colonnes CURRVAL, NEXTVAL, LEVEL et ROWNUM Appels des fonctions SYSDATE, UID, USER et USERENV Interrogations faisant rfrence d'autres valeurs dans d'autres lignes
..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),... ORACLE_SQL

Contraintes dintgrit
Ajouter une syntaxe de contrainte
Utilisez l'instruction ALTER TABLE pour : ajouter ou supprimer une contrainte sans modifier sa structure, activer ou dsactiver des contraintes, ajouter une contrainte NOT NULL l'aide de la clause MODIFY.
ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

ORACLE_SQL

Contraintes dintgrit
Supprimer une contrainte
Supprimez de la table EMPLOYEES la contrainte relative au manager.
ALTER TABLE DROP CONSTRAINT Table altered. employees emp_manager_fk;

Supprimez la contrainte PRIMARY KEY de la table DEPARTMENTS, ainsi que la contrainte FOREIGN KEY associe dfinie sur la colonne EMPLOYEES.DEPARTMENT_ID.
ALTER TABLE departments DROP PRIMARY KEY CASCADE; Table altered. ORACLE_SQL

Contraintes dintgrit
Activer des contraintes
ALTER TABLE ENABLE CONSTRAINT Table altered. employees emp_emp_id_pk;

Si vous activez une contrainte de cl UNIQUE ou PRIMARY KEY, un index correspondant est automatiquement cr.

Dsactiver des contraintes


ALTER TABLE DISABLE CONSTRAINT Table altered. employees emp_emp_id_pk CASCADE;

ORACLE_SQL

Contraintes dintgrit

Contraintes en cascade
Exemple :
ALTER TABLE test1 DROP (pk) CASCADE CONSTRAINTS; Table altered. ALTER TABLE test1 DROP (pk, fk, col1) CASCADE CONSTRAINTS; Table altered.

ORACLE_SQL

Crer des Vues


Crer une vue
Imbriquez une sous-interrogation dans l'instruction CREATE VIEW.
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY [CONSTRAINT constraint]];

La sous-interrogation peut contenir une syntaxe SELECT complexe.


ORACLE_SQL

Crer des Vues


Crer une vue complexe
Crez une vue complexe contenant des fonctions de groupe pour afficher des valeurs provenant de deux tables.
CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name; View created.

ORACLE_SQL

Crer des Vues


Utiliser la clause WITH CHECK OPTION
Vous pouvez vous assurer que les oprations LMD effectues sur la vue restent dans le domaine de la vue l'aide de la clause WITH CHECK OPTION.
CREATE OR REPLACE VIEW empvu20 AS SELECT * FROM employees WHERE department_id = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck ; View created.

Toute tentative de modification du numro de service dans une ligne de la vue chouera, car elle transgresse la contrainte WITH CHECK OPTION.
ORACLE_SQL

Crer des Vues


Refuser des oprations LMD
CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title) AS SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 10 WITH READ ONLY; View created.

ORACLE_SQL

Crer des Vues

Raliser une analyse de type n-premiers


La structure de haut niveau d'une analyse de type n-premiers se prsente comme suit :
SELECT [column_list], ROWNUM FROM (SELECT [column_list] FROM table ORDER BY Top-N_column) WHERE ROWNUM <= N;

ORACLE_SQL

Crer des Vues

Exemple danalyse de type n-premier


1 2 3

SELECT ROWNUM as RANK, last_name, salary FROM (SELECT last_name,salary FROM employees ORDER BY salary DESC) WHERE ROWNUM <= 3;

3 ORACLE_SQL

Autres objet de Base de Donnes


Syntaxe de l'instruction CREATE SEQUENCE
2 1 3 4 5 6 7 8 9 10

Dfinissez une squence permettant de gnrer automatiquement des numros squentiels :


CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; ORACLE_SQL

Autres objet de Base de Donnes


Crer une squence
Crez une squence nomme DEPT_DEPTID_SEQ utiliser pour la cl primaire de la table DEPARTMENTS. N'utilisez pas l'option CYCLE.
CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE; Sequence created. ORACLE_SQL

Autres objet de Base de Donnes


Utiliser une squence
Insrez un nouveau service nomm "Support" au niveau de l'ID 2500.
INSERT INTO departments(department_id, department_name, location_id) VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500); 1 row created.

Affichez la valeur actuelle de la squence DEPT_DEPTID_SEQ.


SELECT FROM dept_deptid_seq.CURRVAL dual; ORACLE_SQL

Autres objet de Base de Donnes


Modifier une squence
Modifiez la valeur d'incrmentation, les valeurs minimale et maximale, ainsi que l'option CYCLE ou CACHE.
ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE; Sequence altered.

ORACLE_SQL

Autres objet de Base de Donnes


Supprimer une squence
Supprimez une squence du dictionnaire de donnes l'aide de l'instruction DROP SEQUENCE. Une fois supprime, la squence ne peut plus tre rfrence.
DROP SEQUENCE dept_deptid_seq; Sequence dropped.

ORACLE_SQL

Autres objet de Base de Donnes


Crer un index

Crez un index sur une ou plusieurs colonnes.


CREATE INDEX index ON table (column[, column]...);

Rduisez le temps d'accs d'une interrogation la colonne LAST_NAME de la table EMPLOYEES. CREATE INDEX emp_last_name_idx
ON employees(last_name); Index created. ORACLE_SQL

Autres objet de Base de Donnes

Vrifier des index


La vue USER_INDEXES du dictionnaire de donnes contient le nom de l'index et son unicit. La vue USER_IND_COLUMNS contient les noms d'index, de table et de colonne.
SELECT FROM WHERE AND ic.index_name, ic.column_name, ic.column_position col_pos,ix.uniqueness user_indexes ix, user_ind_columns ic ic.index_name = ix.index_name ic.table_name = 'EMPLOYEES'; ORACLE_SQL

Autres objet de Base de Donnes


Index bass sur une fonction
Un index bas sur une fonction est un index bas sur des expressions. L'expression d'un index est constitue partir de colonnes de table, de constantes, de fonctions SQL et de fonctions dfinies par l'utilisateur.
CREATE INDEX upper_dept_name_idx ON departments(UPPER(department_name)); Index created. SELECT * FROM departments WHERE UPPER(department_name) = 'SALES'; ORACLE_SQL

Autres objet de Base de Donnes


Supprimer un index
Supprimez un index du dictionnaire de donnes l'aide de la commande DROP INDEX.
DROP INDEX index;

Supprimez l'index UPPER_LAST_NAME_IDX du dictionnaire de donnes.


DROP INDEX upper_last_name_idx; Index dropped.

Pour supprimer un index, vous devez en tre le propritaire ou disposer du privilge DROP ANY INDEX.
ORACLE_SQL

Autres objet de Base de Donnes


Synonymes
Les synonymes (autres noms d'objet) simplifient l'accs aux objets. Ils permettent : de rfrencer plus facilement une table appartenant un autre utilisateur, d'abrger les noms d'objet.
CREATE [PUBLIC] SYNONYM synonym FOR object;

ORACLE_SQL

Autres objet de Base de Donnes


Crer et supprimer des synonymes
Crez un nom abrg pour la vue DEPT_SUM_VU.
CREATE SYNONYM d_sum FOR dept_sum_vu; Synonym Created.

Supprimez un synonyme.
DROP SYNONYM d_sum; Synonym dropped. ORACLE_SQL

Contrler les accs dutilisateurs


Privilges
Scurit de la base de donnes :
Scurit systme Scurit des donnes

Privilges systme : accder la base de donnes Privilges objet : manipuler le contenu des objets de base de donnes Schmas : ensembles d'objets tels que des tables, des vues et des squences
ORACLE_SQL

Contrler les accs dutilisateurs


Privilges systme d'un utilisateur
Une fois qu'il a cr un utilisateur, l'administrateur de base de donnes peut lui accorder des privilges systme spcifiques
GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...];

Par exemple, un dveloppeur d'applications peut disposer des privilges systmes suivants :
CREATE CREATE CREATE CREATE CREATE SESSION TABLE SEQUENCE VIEW PROCEDURE
ORACLE_SQL

Contrler les accs dutilisateurs


Accorder des privilges systme
L'administrateur de base de donnes peut accorder un utilisateur des privilges systme spcifiques.
GRANT create session, create table, create sequence, create view TO scott; Grant succeeded.

ORACLE_SQL

Contrler les accs dutilisateurs


Quest ce que cest un Role?

Users Manager

Privileges Allocating privileges without a role Allocating privileges with a role ORACLE_SQL

Contrler les accs dutilisateurs


Crer des privilges et les accorder aux rles

Crez un rle
CREATE ROLE manager; Role created.

Accordez des privilges ce rle


GRANT create table, create view TO manager; Grant succeeded.

Accordez ce rle des utilisateurs


GRANT manager TO DEHAAN, KOCHHAR; Grant succeeded. ORACLE_SQL

Contrler les accs dutilisateurs


Changer de mot de passe
L'administrateur de base de donnes cre votre compte utilisateur et initialise votre mot de passe. Vous pouvez changer ce mot de passe l'aide de l'instruction ALTER USER.

ALTER USER scott IDENTIFIED BY lion; User altered. ORACLE_SQL

Contrler les accs dutilisateurs


Privilges objet
Les privilges objet varient d'un objet l'autre. Le propritaire d'un objet dispose de tous les privilges sur cet objet. Le propritaire d'un objet peut accorder des privilges spcifiques sur cet objet.
GRANT ON TO [WITH GRANT object_priv [(columns)] object {user|role|PUBLIC} OPTION]; ORACLE_SQL

Contrler les accs dutilisateurs


Privilges Objet
Privilge objet ALTER DELETE EXECUTE INDEX INSERT REFERENCES SELECT UPDATE
ORACLE_SQL

Table

Vue

Squence

Procdure

Contrler les accs dutilisateurs


Accorder des privilges objet Accordez des privilges d'interrogation sur la table EMPLOYEES.
GRANT select ON employees TO sue, rich; Grant succeeded.

Accordez des utilisateurs et des rles des privilges de mise jour sur des colonnes GRANT update (department_name, location_id) spcifiques.
ON departments TO scott, manager; Grant succeeded. ORACLE_SQL

Contrler les accs dutilisateurs


Utiliser les mots-cls WITH GRANT OPTION et PUBLIC Autorisez un utilisateur transmettre des privilges.
GRANT select, insert ON departments TO scott WITH GRANT OPTION; Grant succeeded.

Autorisez tous les utilisateurs du systme interroger la GRANT select table DEPARTMENTS d'Alice.
ON alice.departments TO PUBLIC; Grant succeeded. ORACLE_SQL

Contrler les accs dutilisateurs


Vue du dictionnaire de donnes ROLE_SYS_PRIVS ROLE_TAB_PRIVS USER_ROLE_PRIVS USER_TAB_PRIVS_MADE USER_TAB_PRIVS_RECD USER_COL_PRIVS_MADE USER_COL_PRIVS_RECD USER_SYS_PRIVS Description Privilges systme accords aux rles Privilges sur des tables accords aux rles Rles accessibles l'utilisateur Privilges objet accords sur les objets de l'utilisateur Privilges objet accords l'utilisateur Privilges objet accords sur les colonnes des objets de l'utilisateur Privilges objet accords l'utilisateur sur des colonnes spcifiques Liste des privilges systme accords l'utilisateur
ORACLE_SQL

Contrler les accs dutilisateurs


Retirer des privilges objet
L'instruction REVOKE permet de retirer des privilges accords d'autres utilisateurs. Cette instruction retire galement les privilges accords via la clause WITH GRANT OPTION.
REVOKE {privilege [, privilege...]|ALL} ON object FROM {user[, user...]|role|PUBLIC} [CASCADE CONSTRAINTS];

ORACLE_SQL

Contrler les accs dutilisateurs


Retirer des privilges objet
Sous le nom de connexion Alice, retirez les privilges SELECT et INSERT accords l'utilisateur Scott sur la table DEPARTMENTS.
REVOKE select, insert ON departments FROM scott; Revoke succeeded.

ORACLE_SQL