Cours de SQL Oracle ETS
Cours de SQL Oracle ETS
Cours de SQL Oracle ETS
Cours de SQL
labor par
Mohamed Taleb, B.Sc., M.Sc.
Said Makhlouf, ING. en informatique
Alain April, Professeur lEcole de Technologie Suprieure
TABLE DES MATIRES
1. INTRODCUTION.................................... ERROR! BOOKMARK NOT DEFINED.
1.1. LES BASES DE DONNES ............................................................................................ 1
1.2. LE MODLE RELATIONNEL......................................................................................... 1
1.2.1. Composantes du modle relationnel................................................................. 1
1.3. LE MODLE DE DONNES ........................................................................................... 1
1.3.1. Le modle Entit/Relation................................................................................. 1
1.4. TERMINOLOGIE DES BASES DE DONNES RELATIONNELLES ....................................... 2
1.5. PROPRITS DUNE BASE DE DONNES RELATIONNELLE............................................ 2
1.6. SOLUTION COMPLTE DORACLE .............................................................................. 3
1.7. LE SYSTME DE GESTION DES BD RELATIONNELLES (RDBMS)................................ 3
2. SQL (STRUCTURED QUERY LANGUAGE).......................................................... 4
2.1. RCAPITULATIF DES COMMANDES SQL ......................................................... 4
2.2. LES OBJETS SQL ................................................................................................. 4
2.3. SQL*PLUS .......................................................................................................... 5
2.4. COMMENT ENTRER SOUS SQL*PLUS ............................................................ 5
2.5. COMMANDES SQL*PLUS................................................................................. 7
2.6. FICHIERS DE COMMANDES SQL*PLUS .......................................................... 8
2.7. COMMANDES SQL .............................................................................................. 8
13. QUIZ .......................................................................................................................... 37
14. RPONSE AUX QUESTIONS DU QUIZ.............................................................. 44
Cours de SQL dOracle
1. Introduction
1.1. Les bases de donnes
- Une base de donnes est une collection organise des informations
- Pour grer une base de donnes, on a besoin dun DBMS (Data Base
Management System) ou SGBD (Systme de gestion de base de donnes),
cest (DBMS) un programme qui permet de stocker, rcuprer et modifier les
donnes dune base de donnes.
La base de donnes Oracle, jusqu la version 7 est une base de donnes relationnelle
(RBDMS : Relational Data Base Management System)
La version 8 dOracle est un Object Relational DBMS (ORDBMS).
Entits
Employe Departement
#* No employe Assign #* No dept
* Nom employe * Nom dept
o Poste o Loc
(#) No dept Compos de
# : cl primaire Relation :
(#) : cl trangre Nom: ex : assign , compos de,
* : obligatoire renseign par,
o : optionnel Option: doit tre ou peut tre
Degr : soit : 1 et un seul
Soit : 1 ou plusieurs
BD
Tables,Vues, Index,
(Objets)
Financier Discovery
Manufacture
Oracle Designer
2.3. SQL*PLUS
- Cest un outil dOracle qui reconnat et soumet les ordres SQL au serveur
dOracle pour les excuter.
- SQL*PLUS contient son propre langage de commande.
- SQL*PLUS peut crer des scripts pour stocker des requtes pour excuter
ultrieurement.
Cration de privilges :
Il y a 2 types de privilges :
1. Privilge systme (System privileges) (No CASCADE) : Create, Alter,
Drop
2. Privilges objet (Object privileges) (avec CASCADE) : Select, Insert,
Update, Delete, Alter(Table, Sequence seulement), Index, reference,
execute,
GRANT objet_p [{colonne}] ON objet TO {utilisateur|Role|Public}
Objet_p: Select, Update, Insert, Index, References, Execute, Delete, Alter
Colonnes : ce sont des colonnes de la table ou vue
Objet : table, vue,
Public : tous les utilisateurs
Ex: GRANT select ON EMP TO Blake, Smith;
Ex: GRANT update (dname, loc) ON DEPT TO Scott, Manager;
Cration de rles :
Cre par le DBA pour un groupe dusagers avec des privilges. Cela,
permet plus facilement de donner ou de supprimer des privilges. Le DBA
cre un rle puis assigne des privilges ce rle puis assigne ces
privilges des utilisateurs.
Syntaxe :
1. CREATE ROLE nom_rle
2. GRANT CREATE TABLE, CREATE VIEW TO nom_role;
3. GRANT nom_role TO utilisateur1, Blacke, Clarke;
n Affiche la ligne no n
n texte Remplace la nime ligne par texte
SPOOL nom fichier.ext |OFF|OUT : stocke le rsultat dune requte dans un fichier.
OFF : ferme le fichier SPOOL
OUT : ferme le fichier SPOOL et envoie le fichier rsultat limprimante.
2. Oprateurs arithmtiques
Ordre des oprateurs : * / + -
Ex1 : select ename, sal, sal + 300 from EMP;
Ex2 : select ename, sal, sal * 12 + 100 from EMP;
Ex3: select ename, sal, 12*(sal + 100) from EMP;
3. Les alias
Ex1: select ename as Nom, sal Salaire mensuel from EMP;
Ex2 : select ename Nom, sal*12 Salaire_annuelle from EMP;
4. La concatnation
Ex1 : select ename || job as Employes from EMP;
Ex2 : select ename || || est le|| ||job from EMP;
5. Lignes dupliques
select [Distinct] {*, col1, col2, } from nom de table;
select distinct deptno from EMP;
7. Ordre de tri
select [Distinct] {* | col alis, }
from nom de table
where condition(s)
order by col1, col2, {ASC | DESC}
Ex: Select ename, job, deptno
From EMP
Where job = CLERK
Order by ename;
8. Oprateurs de comparaison
= , >, >=, <, <=, <>, !=
Ex : Select ename, sal, comm
From EMP
Where sal <= 1500;
9. Loprateurs LIKE
Caractre jocker de loprateur LIKE :
% : remplace 0 n caractre (n = 1, 2, )
_ (soulign) : remplace un et un seul caractre
Ex1 : tous les employs (noms) qui commencent par M
Select * from EMP where ename LIKE M%;
Ex2 : tous les noms qui contiennent un E la 3ime position
Select * from EMP where ename LIKE _ _E%;
Ex3 : tous les noms qui se terminent par M
Select * from EMP where ename LIKE %M;
Ex4 : tous les noms dont le 1er caractre est S, le 3ime est O et le
dernier est T
Select * from EMP where ename LIKE S_O%T;
Ex5 : tous les noms qui contiennent un O
Select * from EMP where ename LIKE %O%;
Formats date :
yyyy, year, yy (anne)
mm, non, month (mois)
dd, dy, day (jour)
hh: (heure)
mi: (minutes)
ss: (secondes)
Ex1 : select hiredate, to_char(hiredate, yyyy-mm-dd) from EMP;
Ex2 : select ename, to_char(hiredate, dd/month/yyyy) from EMP;
Ex3 : select to_char(hiredate, yyyy mm dd hh24:mi) from EMP;
2. TO_DATE(chane[, format])
Conversion d,une chane en date selon un format.
Ex1 : select ename, to_date(19-FEB-1998, dd-mon-yyyy) from EMP;
mme dimension
Ex2 : select ename, hiredate
from EMP
where hiredate = to_date(FEBRUARY 22 1981, month dd yyyy);
N.B. : toutes les colonnes dans le select, qui ne sont pas des fonctions de
groupe, doivent tre dans la clause GROUP BY.
Ex1: select deptno, avg(sal) from EMP group by deptno;
Ex2: select ename, deptno, avg(sal) from EMP group by deptno;
Ex: La job, le total des salaries mensuel, pour chaque job avec la somme des
salaires > 5000, tri par ordre croissant sur la somme des salaires.
Select job, sum(sal)
From EMP
Group by job
Having sum(sal) > 5000
Order by sum(sal);
N.B. : UNION ALL : mme chose que UNION sauf que quelle ne fait pas
de tri pour liminer les doublons.
Ex1 : select deptno, empno, ename, sal from EMP where deptno = 10
UNION
Select deptno, empno, ename, sal from EMP30 where deptno=20;
N.B. :
- EMP et EMP30 ont la mme structure et le mme contenu.
- UNION ALL donne le mme rsultat pour Ex1 car il ny a pas de
doublons.
N.B. : Si on cre un second Save point avec le mme nom (tiquette) que le
prcdent, alors le 1r Save point est supprim
N.B.: le deptno = 55 nexiste pas dans la table DEPT (la table DEPT est la
table matre, deptno est une cl primaire dans DEPT et est une cl
secondaire dans la table EMP, donc il y a violation des contraintes
dintgrit (voir aprs).
N.B. : si pas de clause WHERE alors toutes les lignes de la table ou vue
sont supprimes (la table est vide mais elle existe toujours).
N.B. : Comme les tables EMP et DEPT sont relies par la cl deptno, donc
on ne peut pas supprimer nimporte quelle ligne des deux tables
(contrainte dintgrit).
N.B. : Si on fait les mmes exercices avec les tables EMP30 et DEPT30
qui ont la mme structure et le mme contenu que les tables EMP et
DEPT, mais nont pas de contraintes dintgrit (elles ne sont pas relies),
alors ont peu supprimer nimporte quelle ligne.
N.B. : ce nest pas la peine de prciser le nom des colonnes, car DEPT30
ne contient que ces 3 colonnes.
N.B. : une seule colonne de type LONG ou LONG RAW par table.
N.B.:
REFERENCES identifie la table et la colonne parent.
ON DELETE CASCADE : indique que lorsquune ligne
de la table parent est supprime alors les lignes
correspondantes dans la table (fille) sont aussi
supprimes.
Ex :
Select IC.index_name, IC.column_name,
IC.colum_position col_pos, IX.uniqueness
From USER_INDEXES IX, USER_IND_COLUMNS IC
Where IC.index_name = IX.index_name
And IC.table_name = EMP;
Rsultat:
Index_name Column_name Col_pos Uniqueness
EMP_ename_PK empno 1 Unique
EMP_ename_IDX Ename 1 Nonunique
Cette commande cre une squence Dept_deptno qui sera utilise pour la
colonne deptno de la table DEPT.
La squence commence par 91
La valeur max = 100
Nocycle : pas de valeur > 100
Nocache : 20 valeurs en mmoire
Remarques :
- La modification dune table affecte la vue
- Le corps dune table ne peut contenir la clause ORDER BY ou FOR
UPDATE
- On ne peut pas effectuer des insertions, des mise jour et des
suppressions sur une vue contenant une jointure, des oprations
ensemblistes, des fonctions de groupe, la clause GROUP BY et
lopration DISTINCT
- Pour supprimer une vue : DROP VIEW nom_vue;
- Les tables systme : USER_VIEWS et USER_CATALOG (CAT)
Ex1: crer une vue sur la table EMP(empvu10) qui contient 3 colonnes :
empno, ename, job (slectionner uniquement les employs du
dpartement no 10. Donner les alias aux colonnes.
CREATE VIEW empvu10(num, nom, emploi)
AS select empno, ename, job from EMP where deptno = 10;
Verification:
Select * from empvu10; /* on a 3 lignes (dept 10)*/
Si on insre des lignes dans la vue (INSERT INTO empvu10.) les
lignes sont ajoutes dans la table EMP.
Ex2 : crer une vue (dept_vue) sur la table EMP contenant le no dept, le
salaire max, min et moyen par dpartement
CREATE OR REPLACE VIEW dept_vue(num_dept, sal_min,
sal_max, sal_moy)
AS select deptno, min(sal), max(sal, avg(sal) from EMP group by
deptno;
N.B.: on ne peut pas faire de mise jour, suppression, insertion car
existence de fonctions de groupe et group by.
Ex3 : crer une vue (empvue20) sur la table EMP qui slectionne tous les
employs qui travaillent dans le dept mo 20. (ajouter la contrainte
With Check Option)
CREATE OR REPLACE VIEW empvue20
AS select * from EMP where deptno = 20 with check option;
Verification:
- si on veut insrer un employ dont le no dept = 30 alors
impossible (with check option)
- si on veut mettre jour le no dept = 10 pour un employ de la
vue ceci est impossible
Ex4: crer une vue (en lecture seulement) empvue10 sur la table EMP
(deptno=10)
CREATE OR REPLACE VIEW empnvue10 AS select * from EMP
where deptno = 10 with read only
Cette vue est en lecture seulement, donc on ne peut pas faire des
insertions, des mises jour ou des suppressions
Cl Cl
trangre primaire
Pour dterminer le nom de dpartement dun employ, on compare le no
dept de la table EMP avec le no dept de la table DEPT. La relation entre
les tables EMP et DEPT est une quijointure ou jointure simple de la
colonne deptno des tables EMP et DEPT
Ce type de jointure implique les 2 cls primaire et secondaire
N.B. : Lutilisation des alias permet une criture plus courte et prend
moins despace mmoire.
Ex: Afficher name, ordid, total, item, itemtot,o name=TKB sport shop
3. Non-quijointure :
EMP SALGRADE
Empno Ename sal grade losal hisal
7839 King 5000 1 700 1200
2 1201 1400
3 1401 2000
4 2001 3000
5 3001 9999
- le salaire dans EMP est entre losal et hisal de SALGRADE, cest un lien
indirect
- la relation est obtenue en utilisant un oprateur autre que lgalit(=)
(between, <=, >=, <, >)
4. Jointure externe :
EMP DEPT
Ename deptno deptno dname
King 10 10 Accounting
Blake 30 30 Sales
Clarke 10 10 Accounting
40 Operation
5. LAutojointure :
EMP(employ) EMP(Manager)
Empno Ename mgr empno ename
7839 King - 7839 King
7698 Blake 7839 7839 King
7782 Clarke 7839 7839 King
7566 Jones 7839 7698 Blake
7654 Martin 7698 7698 Blake
7499 Allen 7698
- On utilise une autojointure lorsquon a besoin de joindre une table
elle mme.
- Pour trouver le nom du manager de chaque employ, on a besoin (ou
doit) joindre la table EMP avec elle-mme.
Ex: pour trouver le nom du manager de lemploy Blake on doit :
- Trouver lemploy Blake dans EMP (ename)
- Trouver le no manager (mgr) de Blake (7839)
- Puis trouver le nom du manager dont le no employ est gal
7839 qui est King
Ex : Trouver le manager de chaque employ de la table EMP
Select e1.ename, e2.ename
From EMP e1, EMP e2
Where e1.mgr = e2.mgr;
13. QUIZ
1. Which of the following statement contains an error?
A. select * from EMP where empid = 493945;
B. select empid from EMP where empid = 493945;
C. select empid from EMP;
D. select empid where empid = 56949 and lastname = SMITH;
2. Which of the following correctly describes how to specify a column alias?
A. Place the alias at the beginning of the statement to describe the table
B. Place the alias after each column, separated by a space, to describe the column
C. Place the alias after each column, separated by a comma, to describe the column
D. Place the alias at the end of the statement to describe the table
3. The nvl() function?
A. Assists in the distribution of output across multiple column
B. Allows you to specify alternate output for non-NULL column values
C. Allows you to specify alternate output for NULL column values
D. Nullifies the value of the column output
4. Output from table called PLAYS with two columns, Play_Name and Author,
is shown next. Which of the following SQL statements produced it?
PLAY_TABLE
----------------------------------------------------------------
Midsummer Nights Dream, SHAKESSPEARE
Waiting for Godot, BECKETT
The glass menagerie, WILLIAMS
A. select Play_name|| Author from PLAYS;
B. select Play_name, Author from PLAYS;
C. select Play_name||, || Author from PLAYS;
D. select Play_name||, || Author Play_table from PLAYS;
5. Issuing the command define _editor=emacs will produce which outcome?
A. The EMACS editor will become the SQL*Plus default text editor
B. The EMACS editor will start running immediately
C. The EMACS editor will no longer be used by SQL*Plus as the default text editor
D. The EMACS editor will be deleted from the system
6. Which function can best be categorized as similar in function to an if-then-else
statement?
A. sqrt()
B. decode()
C. new_time()
D. rowidtochar()
7. Which of the following are number functions?(choose three of the four)
A. sinh()
B. to_number()
C. sqrt()
D. round
8. You issue the following statement. What will be displayed if the empid selected
is 604994?
Select DECODE(empid, 38475, Terminated, 60494, LOA, ACTIVE)
A. 60494
B. LOA
C. Terminated
D. ACTIVE
9. Which of the following is a valid SQL statement?
A. select to_char(nvl(sqrt(59483), 0)) from dual;
B. select to_char(nvl(sqrt(59483), INVALID)) from dual;
C. select (to_char(nvl(sqrt(59483), 0)) from dual;
D. select to_char(nvl(sqrt(59483), TRUE)) from dual;
10. The appropriate table to use when performing arithmetic calculations on
values defined within the select statement (not pulled from a table column) is
A. EMP
B. The table containing the column values
C. DUAL
D. An Oracle-defined table
11. Which of the following keywords are used in order by clauses?(choose two)
A. abs
B. asc
C. desc
D. disc
12. Which of the following statements are not true about order by clauses?
A. Ascending or descending order can be defined with the asc or desc keywords
B. Only one column can be used to define the sort order in an order by clause
C. Multiple columns can be used to define sort order in an order by clause
D. Columns can be represented by numbers indicating their listed order in the
select clause within order by
13. Which lines in the following select statements contain errors?
Select decode(empid, 58385, INACTIVE, ACTIVE) empid
from EMP
Where substr(lastname,1,1) > to_number(S)
and empid > 02000
order by empid desc, lastname asc;
A. select decode(empid,58385, INACTIVE, ACTIVE) empid
B. from EMP
C. where substr(lastname,1,1) > to_number(S)
D. and empid > 02000
E. order by empid desc, lastname asc
F. There are no errors in this statement
21. Which of the following uses of the having clause are appropriate?(choose three)
A. To put returned data into sorted order
B. To exclude certain data groups based on known criteria
C. To include certain data groups based on unknown criteria
D. To include certain data groups based on known criteria
22. A Cartesian product is
A. A group function
B. Produced as a result of join select statement with no where clause
C. The result of fuzzy logic
D. A special feature of Oracle server
23. The default character that identifies runtime variables is changed by
A. Modifying the initsid.ora file
B. Modifying the login.sql file
C. Issuing the define variablename command
D. Issuing the set define command
24. Which line of the following select statement will produce an error?
A. select dept, avg(salary)
B. from EMP
C. group by empid;
D. There are no errors in this statement
25. Which of the following integrity constraint automatically create an index
when defined?(choose two)
A. Foreign keys
B. Unique constraints
C. NOT NULL constraints
D. Primary keys
26. Which of the following dictionary views gives information about the position
of a column in a primary key?
A. ALL_PRIMARY_KEYS
B. USER_CONSTRAINTS
C. ALL_IND_CONSTRAINTS
D. ALL_TABLES
27. Developer ANJU executes the following statement :
Create table ANIMALS as select * from MASTER.ANIMALS;
What is the effect of this statement?
A. A table named ANIMALS will be created in the MASTER schema with the
same data as the ANIMALS table owned by ANJU
B. A table named ANJU will be created in the ANIMALS schema with the same
data as the ANIMALS table owned by MASTER
C. A table named ANIMALS will be created in the ANJU schema with the same
data as the ANIMALS table owned by MASTER
D. A table named MASTER will be created in the ANIMALS schema with the
same data as the ANJU table owned by ANIMALS
28. User JANKO would like to insert a row into the EMPLOYEE table that has
three columns : empid, lastname, and salary. The user would like to enter
data for empid 59694, lastname harris, but no salary. Which statement
would work best?
A. insert into EMPLOYEE values(59694, Harris, NULL);
B. insert into EMPLOYEE values(59694, Harris);
C. insert into EMPLOYEE(empid, lastname, salary) values(59694, Harris);
D. insert into EMPLOYEE (select 59694 from Harris);
29. Which components are parts of an entity-relationship diagram?(choose two)
A. Referential integrity constraints
B. Entities
C. Relationships
D. Triggers
30. Which of the following choices is the strongest indicator of a parent/child
relationship?
A. Two tables in the database are named VOUCHER and VOUCHER_ITEM,
respectively
B. Two tables in the database are named EMPLOYEE and PRODUCTS,
respectively
C. Two tables in the database were created on the same day
D. Two tables in the database contain none of the same day
31. Which of the following are valid database datatypes in Oracle?(choose three)
A. CHAR
B. VARCHAR2
C. BOOLEAN
D. NUMBER
32. Omitting the where clause from a delete statement has which of the following
effects?
A. The delete statement will fail because there are no records to delete
B. The delete statement will prompt the user to enter criteria for the deletion
C. The delete statement will fail because of syntax error
D. The delete statement will remove all records from the table
33. Which line of the following statement will produce an error?
A. Create table GOODS
B. (goodno number,
C. Good_name varchar2(20) check(good_bame in(select name from AVAIL_GOODS));
D. Constraint pk_goods_01
E. Primary key (goodsno));
F. There are no errors in this statement
34. The transaction control that prevents more than one user from updating
data in a table is which of the following?
A. Locks
B. Commits
C. Rollbacks
D. Savepoints
35. Dropping a table has which of the following effects on a nonumerique index
created for the table?
A. No effects
B. The index will be dropped
C. The index will be rendered invalid
D. The index will contain NULL values
36. Which of the following statements about indexes is true?
A. Columns with low cardinality are handled well by B-tree indexes
B. Columns with low cardinality are handled poorly by bitmap indexes
C. Columns with high cardinality are handled well by B-tree indexes
37. To increase the number of nullable columns for a table:
A. Use the alter table statement
B. Ensure that all column values are NULL for all rows
C. First, increase the size of adjacent column datatypes, and then add the column
D. Add the column, populate the column, and then add the NOT NULL constraint
38. To add the number of columns selected by a view:
A. Add more columns to the underlying table
B. Issue the alter view statement
C. Use a correlated subquery in conjunction with the view
D. Drop and re-create the view with references to select more columns
39. A user issues the statement select count(*) from EMPLOYEE. The query
takes an inordinately long time and returns count of zero. The most cost-
effective solution is :
A. Upgrade the hardware
B. Truncate the table
C. Upgrade the version of Oracle
D. Delete the highwatermark
40. Which of the following choices are valid parameters for sequence creation?
A. Identified by
B. Using temporary talespace
C. Maxvalue
D. On delete cascade
41. The following statement is issued against the Oracle database. Which line
will produce an error?
A. Create view EMP_VIEW_01
B. As select E.empid, E.lastname, E.firstname, A.address
C. From EMPLOYEE E, EMPL_ADDRESS A
D. Where E.empid = A.empid
E. With check option;
F. This statement contains no errors
42. The following statement is issued on the database: comment on table EMPL
is Do not use this table. How can this data be viewed?
A. Using the describe command
B. Issuing a select * from EMPL statement
C. Selecting from ALL_COMMENTS
D. Selecting from ALL_TAB_COMMENTS
43. Which system privilege allows the user to connect to a database in restricted
session mode?
A. Create table
B. Create user
C. Restricted session
D. Create session
44. Which of the following statement is true about roles?(choose three)
A. Roles can be granted to other roles
B. Privileges can be granted to roles
C. Roles can be granted to users
D. Roles can be granted to synonyms
45. User MANN has granted the create any view with admin option privilege to
user SNOW. User SNOW granted the same privilege with admin option to
user REED. User MANN revokes the privilege from user SNOW. Which
statement is true about privileges granted to users REED,MANN and SNOW?
A. REED and MANN have the privilege, but SNOW does not
B. REED and SNOW have the privilege, but MANN does not
C. MANN and SNOW have the privilege, but REED does not
D. MANN has the privilege, but SNOW and REED does not
46. After referencing NEXTVAL, the value in CURRVAL
A. is incremented by one
B. is now in PREVVAL
C. is equal to NEXTVAL
D. is unchanged
2. B. Place the alias after each column, separated by a space, to describe the column
3.C. Allows you to specify alternate output for NULL column values
5.A. The EMACS editor will become the SQL*Plus default text editor
6. B. decode()
8.B. LOA
10. C. DUAL
12. B. Only one column can be used to define the sort order in an order by clause
13. C. where substr(lastname,1,1) > to_number(S)
14. B. sqrt()
15. B. The table in the join need to have common columns
16. D. Until the session completes
17. B and C. Alter the prompt clause of the accept command and Enter a new
prompt in the login.sql file
18. A and C. select * from EMP where empid = &empid;
select * from EMP where empid = (select empid from invoice where
invoice_no = 4399485);
19. A. Ampersand
20. C. select e.empid, d.head from EMP e, DEPT d where e.deptno=d.deptno (+);
21. B,C and D. To exclude certain data groups based on known criteria
To include certain data groups based on unknown criteria
To include certain data groups based on known criteria
22. B. Produced as a result of join select statement with no where clause
23. D. Issuing the set define command
24. C. group by empid;