Vous êtes sur la page 1sur 90

Le langage SQL

IT-LEARNING COMPUS

06/12/2011

Aspect gnrale du langage SQL


Le langage SQL ( Structured Query Longage : Langage

dinterrogation structur) , li la structure relationnelle des BD,


est un langage non procdural, il comporte plusieurs commandes qui se repartissent en trois familles fonctionnellement distinctes:

Langage de dfinition des donnes(LDD): crer des tables dans


une BDR, ainsi den modifier ou de supprimer leur structure.

Langage

de manipulation des donnes (LMD): slectionner,

insrer, modifier, ou supprimer des donnes dans une table.

Langage de contrle de donnes(LCD): grer la scurit et les


permissions au niveau des utilisateurs dune BDR.
IT-LEARNING COMPUS 2 06/12/2011

Tables utilises dans le Cours


Table Emp Table Dept

Table SALGRADE

IT-LEARNING COMPUS

06/12/2011

Langage de dfinition des Donnes


Un ordre du LDD permet de crer , de supprimer et de modifier la structure dune base de donnes relationnelle; les objets que le LDD peut grer sont:

Table Vue Squence Index Synonyme

IT-LEARNING COMPUS

06/12/2011

Table DUAL
Table DUAL C'est une particularit d'Oracle. Cette pseudo-table ne contient qu'une seule ligne et une seule colonne et ne peut tre utilise qu'avec une requte select . Elle permet de faire afficher une expression dont la valeur ne dpend d'aucune table en particulier. Exemple Afficher la date d'aujourd'hui, le nom de l'utilisateur et le rsultat d'un calcul, revient crire. select sysdate, user, round(3676 / 7) from dual ;

IT-LEARNING COMPUS

06/12/2011

Cration de Tables
Syntaxe :
CREATE TABLE nomtable (champs typechamps [DEFAULT valeur], ...);

CREATE TABLE nomtable [(champs1, champs2...)] as sousinterrogation;

Les identificateurs utiliss doivent respecter les rgles suivantes: Commencer par une lettre et contenir que les caractres A Z, 0 9, _, $, et # (30 caractres maximum). tre diffrent des autres objets appartenant au mme utilisateur et des mots rserv Oracle

IT-LEARNING COMPUS

06/12/2011

Cration de Tables
Types de donnes
VARCHAR2(taille) CHAR(taille)

Description
Donnes caractres de longueur variable (2000 caractres maximum) Donnes caractres de longueur fixe (255 caractres maximum)

NUMBER(taille,dcimale) Numrique de longueur variable DATE LONG LONG RAW Valeurs de date et d'heure Donnes caractres de longueur variable, jusqu' 2 giga-octets Binaire(image)

IT-LEARNING COMPUS

06/12/2011

Cration de Tables

CREATE TABLE dept ( deptno NUMBER(2), dname VARCHAR2(15), loc VARCHAR2(12));

CREATE TABLE

Empclerk
hiredate, deptno

AS SELECT empno mat, ename, nom, sal + comm as salaire, FROM emp WHERE job like 'clerk');

IT-LEARNING COMPUS

06/12/2011

Modification de la structure dune Tables


L'ordre ALTER TABLE permet dajouter de nouveau champs ou de modifier des champs existants. Syntaxe :
ALTER TABLE Nomtable ADD (champs typechamps [DEFAULT valeur] [, champs typechamps]...); ALTER TABLE Nomtable MODIFY (champs typechamps [DEFAULT valeur] [, champs typechamps]...); ALTER TABLE Nomtable DROP COLUMN champs ; ALTER TABLE table RENAME COLUMN ancien_nom TO nouveau_nom
IT-LEARNING COMPUS 9 06/12/2011

Gestion des tables


Supprimer une Table
DROP TABLE Nomtable;

Renommer une Table


RENAME AncienNomTable TO NouveauNomTable;

Vider une Table


TRUNCATE TABLE NomTable;

IT-LEARNING COMPUS

10

06/12/2011

Les Contraintes dintgrits

Les types de contraintes reconnues dans SQL sont:

NOT NULL UNIQUE

PRIMARY KEY
FOREIGN KEY

CHECK

IT-LEARNING COMPUS

11

06/12/2011

Les Contraintes dintgrits


Syntaxe :
CREATE TABLE [Schema.]NomTable (Champs TypeChamps [DEFAULT Valeur] [[CONSTRAINT NomContrainte] TypeContrainte], , [[CONSTRAINT NomContrainte] TypeContrainte(Champs, ...),] );

ALTER TABLE NomTable ADD [CONSTRAINT NomContrainte] TypeContrainte(Champs);

IT-LEARNING COMPUS

12

06/12/2011

Les Contraintes dintgrits


CREATE TABLE Employes( empno NUMBER(4) PRIMARY KEY, ename VARCHAR2(15) NOT NULL, job VARCHAR2(10), mgr NUMBER(4), hiredate DATE, sal NUMBER(8,2), comm NUMBER(8,2), deptno NUMBER(2) NOT NULL , CONSTRAINT un_dept UNIQUE (ename) ); ALTER TABLE Employes

ADD CONSTRAINT Emp_Dept_Fk FOREIGN KEY (deptno)

REFERENCES dept (deptno) ON DELETE CASCADE;

ALTER TABLE

Employes

ADD CONSTRAINT CONSTRAINT CHECK (Comm > 0);


IT-LEARNING COMPUS 13 06/12/2011

Gestion des contraintes


Supprimer une contrainte
ALTER TABLE NomTable NomContrainte [CASCADE];

DROP CONSTRAINT

Dsactiver une Contraintes


ALTER TABLE NomTable

DISABLE CONSTRAINT NomContrainte [CASCADE];

Activer une Contraintes


ALTER TABLE ENABLE CONSTRAINT NomTable NomContrainte [CASCADE];

IT-LEARNING COMPUS

14

06/12/2011

Notion

de vue

Une vue est une table virtuelle base sur une ou plusieurs table
(ou sur dautres vues). Cest une fentre par laquelle il est possible de visualiser ou de modifier des donnes venant de ces tables (appels tables de base).

Les utilisateurs consultent la base, ou modifier la base (avec


certaines restrictions) travers les vues (Limitation d'accs )

IT-LEARNING COMPUS

15

06/12/2011

Cration d'une Vue


Syntaxe
CREATE VIEW NomVue [(alias[, alias]...)] AS SousInterogation [WITH CHECK OPTION] [WITH READ ONLY]

La SousInterogation(ordre select) ne doit pas comporter la clause ORDER BY. WITH CHECK OPTION permet de garantir que les ordres LMD reste dans le domaine de la vue. WITH READ ONLY assure qu'aucune opration LMD ne sera excute dans la vue.

IT-LEARNING COMPUS

16

06/12/2011

Exemple de cration d'une Vue

CREATE VIEW manager (matricule, nom, fonction, dateembouche, salaire, Departement ) AS SELECT empno, ename, job,hiredate, sal + nvl(comm,0), dname FROM emp, dept WHERE ((emp.deptno = dept.deptno) and empno in (select mgr from emp where mgr is not NULL)) WITH READ ONLY

Select * from manager ;

IT-LEARNING COMPUS

17

06/12/2011

Suppression dune vue

L'ordre DROP VIEW permet supprimer une vue (les tables de base correspondantes ne sont pas supprimes). Syntaxe

DROP VIEW NomVue;

IT-LEARNING COMPUS

18

06/12/2011

Index

Un index Oracle est un objet de schma qui permet d'acclrer l'extraction de lignes par le biais d'un pointeur.

Si la colonne ne comporte pas d'index, la table entire est balaye.


Un index offre un accs direct et rapide aux lignes d'une table. Il a pour but de rduire les E/S sur disque grce un chemin d'accs index qui identifie rapidement l'emplacement des donnes.

Quand Faut-il Crer un Index

Lorsqu'une colonne est frquemment utilise dans la clause WHERE ou dans une condition de jointure. Lorsqu'une colonne contient un large ventail de valeurs. Lorsqu'une colonne contient un grand nombre de valeurs NULL. Lorsque deux ou plusieurs colonnes sont frquemment utilises conjointement dans une clause WHERE ou une condition de jointure. Lorsque la table est de grande taille et que la plupart des requtes doivent extraire moins de 2 4 % de lignes.
19 06/12/2011

IT-LEARNING COMPUS

CREATE INDEX
Un index se cre par la commande CREATE INDEX : CREATE [UNIQUE] INDEX [nom-schma.]nom-index ON <nom-table> ( { nomcolonne [ASC | DESC ] } ) On peut spcifier par l'option UNIQUE que chaque valeur d'index doit tre unique dans la table. On peut spcifier par l'option ASC et DESC un tri en ordre croissant ou dcroissant (respectivement).

Exemple : index sur les numros de pice, sans double, en ordre croissant CREATE UNIQUE INDEX emp_idx ON EMP (EMPNO ASC) ;

IT-LEARNING COMPUS

20

06/12/2011

CREATE INDEX
Exemple 1: Index B-Tree Ce type dindex conserve en permanence une arborescence symtrique (balance). Toutes les feuilles sont la mme profondeur. Le temps de recherche est ainsi peu prs constant quel que soit lenregistrement cherch. Le plus bas niveau de lindex (leaf blocks) contient les valeurs des colonnes indexes et le rowid. Remarque : Nous observons lefficacit de b-tree quand les valeurs du champ index sont uniques. CREATE UNIQUE INDEX nom_idx ON Pilote btree (nom ASC);

IT-LEARNING COMPUS

21

06/12/2011

CREATE INDEX
Exemple 2: Index bitmap Un bitmap ne stocke quune chane de bits. Chacun deux correspond une possible valeur de la colonne indexe. Si le bit est positionn 1, pour une valeur donne de lindex, cela signifie que la ligne courante contient la valeur. Une fonction de transformation convertit la position du bit en un rowid. CREATE BITMAP INDEX nom_bitmap_idx ON Pilote (compa);

Les index bitmaps sont trs bien adapts la recherche dinformations base sur des critres dgalit (exemple : compa = AF), mais ne conviennent pas du tout des critres de comparaison (exemple : nbHVol > 657).

IT-LEARNING COMPUS

22

06/12/2011

CREATE INDEX
Exemple 2: Index bass sur des fonctions Une fonction de calcul (expressions arithmtiques ou fonctions SQL, PL/SQL ou C) peut dfinir un index. Celui-ci est dit bas sur une fonction CREATE INDEX idx_fct_Solde_CompteEpargne ON CompteEpargne ((credit- debit) *(1+(txInt/100))-agios, credit, debit, txInt, agios);

IT-LEARNING COMPUS

23

06/12/2011

DROP INDEX

Pour modifier un index, vous devez le supprimer puis le recrer. Utiliser DROP INDEX Pour supprimer un index Pour supprimer un index, vous devez en tre le propritaire ou avoir le privilge DROP ANY INDEX. Un index est automatiquement supprim ds qu'on supprime la table laquelle il appartient.

Exemple DROP INDEX emp_idx ;

IT-LEARNING COMPUS

24

06/12/2011

CREATE SEQUENCE

Une squence est un compteur programmable stock en mmoire par Oracle et utilisable de manire partag. Il est, en gnral, utilis pour fournir les n des cls d'enregistrements. CREATE SEQUENCE nom_squence [INCREMENT BY entier1] [START WITH entier2] Exemple create sequence seqdept increment by 10 start with 10

IT-LEARNING COMPUS

25

06/12/2011

Utilisation SEQUENCE
Deux pseudo-colonnes permettent d'utiliser les squences :

CURRVAL retourne la valeur courante de la squence ; NEXTVAL incrmente la squence et retourne la nouvelle valeur.

Exemple : insert into dept(deptno, dname,loc) values (seqdept.nextval, 'Finances', 'casablanca') Pour voir la valeur d'une squence, on utilise currval avec la table dual select seqdept.currval from dual.

IT-LEARNING COMPUS

26

06/12/2011

Lordre Select
Lutilisation la plus frquente de SQL seffectue dans les requtes afin de rechercher les donnes dans une base de donnes.

Syntaxe
select [distinct] * | <liste des champs > From <Liste des tables> [where <critre de slection >] [group by <critres de regroupement>] [having <conditions de filtrage sur les groupes>] [order by <liste des champs > asc | desc ] ;
IT-LEARNING COMPUS 27 06/12/2011

criture des Ordres SQL

Les

ordres SQL peuvent tre crits indiffremment en

majuscules et/ou minuscules.

Les ordres SQL peuvent tre crits sur plusieurs lignes. Les mots-cls ne doivent pas tre abrgs ni scinds sur deux
lignes diffrentes.

Les

clauses sont gnralement places sur des lignes

distinctes.

IT-LEARNING COMPUS

28

06/12/2011

Exemple de SELECT

SELECT * FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON

SELECT deptno, loc FROM dept; DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON

IT-LEARNING COMPUS

29

06/12/2011

Exemple de SELECT
SELECT * FROM dept; DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON SELECT DISTINCT deptno FROM emp; DEPTNO --------10 20 30

SELECT deptno FROM emp; DEPTNO --------10 30 10 20 ... 14 rows selected.


IT-LEARNING COMPUS 30

06/12/2011

LAlias de Colonne

Permet de renommer un en-tte de colonne (champs) Suit immdiatement le nom de la colonne ; le mot-cl AS peut
tre plac entre le nom et lalias est optionnel

Doit

obligatoirement tre inclus entre guillemets (") sil

contient des espaces, des caractres spciaux ou si les majuscules/minuscules doivent tre diffrencies
SELECT ename AS name, sal salary FROM emp;

IT-LEARNING COMPUS

31

06/12/2011

Le littral

Un littral est un caractre, une expression, ou un nombre inclus


dans la liste SELECT.

Les

valeurs littrales de type date et caractre doivent tre

places entre simples quotes (').


SELECT ename, job, deptno FROM emp WHERE job='CLERK'; ENAME ---------JAMES SMITH ADAMS MILLER
IT-LEARNING COMPUS

JOB DEPTNO --------- --------CLERK 30 CLERK 20 CLERK 20 CLERK 10


32 06/12/2011

Les oprateurs

IT-LEARNING COMPUS

33

06/12/2011

Utilisation des Oprateurs


SELECT FROM WHERE ename, sal emp sal BETWEEN 1000 AND 1500;

ENAME SAL ---------- --------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300 SELECT FROM WHERE

Limite infrieure

Limite suprieure

empno, ename, sal, mgr emp mgr IN (7902, 7566, 7788);

EMPNO --------7902 7369 7788 7876


IT-LEARNING COMPUS

ENAME SAL MGR ---------- --------- --------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788
34 06/12/2011

Utilisation des Oprateurs de Comparaison

SELECT FROM WHERE

ename emp ename LIKE 'S%';

SELECT FROM WHERE

ename emp ename LIKE '_A%';

ENAME ---------JAMES WARD

IT-LEARNING COMPUS

35

06/12/2011

Utilisation des Oprateurs logiques


... ... ... ... WHERE WHERE WHERE WHERE

... ... ... ...

NOT BETWEEN ... AND IS NOT IN ... NOT LIKE ... IS NOT NULL

...

SELECT ename, job FROM emp WHERE job NOT IN ('CLERK','MANAGER','ANALYST'); ENAME ---------KING MARTIN ALLEN TURNER WARD JOB --------PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN

IT-LEARNING COMPUS

36

06/12/2011

Utilisation de loprateurs de Concatnation

SELECT ename

||' is a '||job AS "Employee Details"

FROM

emp;

Employee Details ------------------------KING is a PRESIDENT BLAKE is a MANAGER CLARK is a MANAGER JONES is a MANAGER MARTIN is a SALESMAN ... 14 rows selected.

IT-LEARNING COMPUS

37

06/12/2011

Exemple de tri des enregistrements


SELECT ename, deptno, sal FROM emp ORDER BY deptno, sal DESC;

ENAME DEPTNO SAL ---------- --------- --------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.

IT-LEARNING COMPUS

38

06/12/2011

Types de Jointures en SQL

Equijointure

Non-quijointure

Jointure externe

Autojointure

IT-LEARNING COMPUS

39

06/12/2011

Jointure croise

Dfinition Une Cross-Jointure (Jointure croise) consiste en le produit cartsien des deux tables sur lesquelles la jointure est effectue.

Exemple SELECT empno,ename,dname FROM emp CROSS JOIN dept;

IT-LEARNING COMPUS

40

06/12/2011

Jointure Interne
Dfinition Une Jointure Interne permet d'intgrer plusieurs Tables de Donnes en mettant en correspondance les occurrences de plusieurs tables qui ont un attribut commun. Exemple SELECT empno,ename,dname FROM emp NATURAL JOIN dept; Problme:
Si des attributs de mme nom et de signification diffrente apparaissent dans les tables jointes, ils seront utiliss pour raliser la jointure naturelle. D'o un fort risque d'erreur non matrises ! Si un attribut possde deux noms diffrents dans les deux tables, la jointure ne peut pas avoir lieu

IT-LEARNING COMPUS

41

06/12/2011

Jointure Interne

Solution: Spcifier le nom du (des) attribut(s) qui servent de rfrence pour la jointure Commande INNER JOIN ... USING ou INNER JOIN ON : Elle permet de prciser le nom de l'attribut utilis pour raliser la correspondance entre les tables.

Exemple
SELECT empno,ename,dname FROM emp INNER JOIN dept USING (deptno); ou SELECT empno,ename,dname FROM emp INNER JOIN dept ON emp. deptno = dept. deptno;

IT-LEARNING COMPUS

42

06/12/2011

Exemple dquijointure

SELECT FROM WHERE

empno, ename, emp.deptno, dept.deptno , dept.loc emp, dept emp.deptno=dept.deptno;

EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ ------ ------ --------7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected.

IT-LEARNING COMPUS

43

06/12/2011

Exemple de non-quijointure

SELECT e.ename, e.sal, s.grade FROM emp e, salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal;

ENAME SAL GRADE ---------- --------- --------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected.

IT-LEARNING COMPUS

44

06/12/2011

Exemple de Jointures Externes

SELECT e.ename, d.deptno, d.dname FROM emp e, dept d WHERE e.deptno(+) = d.deptno ORDER BY e.deptno;

ENAME DEPTNO DNAME ---------- --------- ------------KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected.

IT-LEARNING COMPUS

45

06/12/2011

Jointure Externe
SELECT empno,ename,dname FROM emp e LEFT OUTER JOIN dept d ON e. deptno = d. deptno; SELECT empno,ename,dname FROM dept d RIGHT OUTER JOIN emp e ON d. deptno = e. deptno;

LEFT OUTER JOIN: prend comme rfrence la premire table de 'from


RIGHT OUTER JOIN: prend comme rfrence la dernire table de 'from RIGHT FULL JOIN: prend comme rfrence toutes les tables de 'from'

IT-LEARNING COMPUS

46

06/12/2011

Exemple de lautojointures

SELECT worker.ename||' works for '||manager.ename FROM emp worker, emp manager WHERE worker.mgr = manager.empno;

WORKER.ENAME||'WORKSFOR'||MANAG ------------------------------BLAKE works for KING CLARK works for KING JONES works for KING MARTIN works for BLAKE ... 13 rows selected.

IT-LEARNING COMPUS

47

06/12/2011

Fonction de regroupement de donnes


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

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

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

IT-LEARNING COMPUS

48

06/12/2011

Utilisation des fonctions de regroupement


SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal) FROM emp WHERE job LIKE 'SALES%'; AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------1400 1600 1250 5600 SELECT FROM emp WHERE COUNT(*) --------6 COUNT(*) deptno = 30;

IT-LEARNING COMPUS

49

06/12/2011

Utilisation des fonctions de regroupement


SELECT AVG(comm) FROM emp;
AVG(COMM) --------550

SELECT AVG(NVL(comm,0)) FROM emp;


AVG(NVL(COMM,0)) ---------------157.14286

IT-LEARNING COMPUS

50

06/12/2011

Cration de Groupes de Donnes


EMP
DEPTNO SAL --------- --------10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250

2916.6667

DEPTNO AVG(SAL) "salaire moyen pour ------- --------chaque 2175 10 2916.6667 dpartement 20 2175 de la table 30 1566.6667 EMP"
1566.6667

SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;


IT-LEARNING COMPUS 51 06/12/2011

Exemple de cration de groupes de donnes


SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, job; DEPTNO JOB SUM(SAL) --------- --------- --------10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 6000 20 CLERK 1900 ... 9 rows selected.

IT-LEARNING COMPUS

52

06/12/2011

Imbrication des Fonctions de Groupe

SELECT max(avg(sal)) FROM emp GROUP BY deptno;

MAX(AVG(SAL)) ------------2916.6667

IT-LEARNING COMPUS

53

06/12/2011

Utilisation de la clause HAVING

La clause HAVING permet restreindre les groupes

Les lignes sont regroupes.

La fonction de groupe est applique.


Les
groupes qui correspondent la clause HAVING sont

affichs.

IT-LEARNING COMPUS

54

06/12/2011

Exemple de lutilisation de HAVING

SELECT FROM GROUP BY HAVING

deptno, max(sal) emp deptno max(sal)>2900;

DEPTNO MAX(SAL) --------- --------10 5000 20 3000

IT-LEARNING COMPUS

55

06/12/2011

Exemple de lutilisation de HAVING

SELECT FROM WHERE GROUP BY HAVING ORDER BY

job, SUM(sal) PAYROLL emp job NOT LIKE 'SALES%' job SUM(sal)>5000 SUM(sal);

JOB PAYROLL --------- --------ANALYST 6000 MANAGER 8275

IT-LEARNING COMPUS

56

06/12/2011

Les Sous-Interrogations
Syntaxe SELECT select_list FROM tables WHERE expr operator (SELECT select_list FROM tables ) ;

La sous-interrogation (requte interne) est excute une fois


avant la requte principale (une sous-interrogation ne doit pas contenir la clause ORDER BY).

Le rsultat de la sous-interrogation est utilis par la requte


principale (externe).
IT-LEARNING COMPUS 57 06/12/2011

Types de Sous-Interrogations
Sous-interrogation mono-ligne
Oprateurs mono-ligne Sous-interrogation multi-ligne Oprateurs multi-ligne

IT-LEARNING COMPUS

58

06/12/2011

Exemple de Sous-Interrogations mono-ligne


SELECT FROM WHERE ename, job emp job = (SELECT FROM WHERE sal > (SELECT FROM WHERE

CLERK

job emp ename = 'ADAMS')


1100

AND

sal emp ename = 'ADAMS');

ENAME JOB ---------- --------MILLER CLERK

IT-LEARNING COMPUS

59

06/12/2011

Exemple de Sous-Interrogations mono-ligne


SELECT FROM WHERE ename, job, sal emp sal = (SELECT MIN(sal) FROM emp);
800

ENAME JOB SAL ---------- --------- --------SMITH CLERK 800 SELECT FROM GROUP BY HAVING deptno, MIN(sal) emp deptno 800 MIN(sal) > (SELECT MIN(sal) FROM emp WHERE deptno = 20);
60 06/12/2011

IT-LEARNING COMPUS

Exemple de Sous-Interrogations multi-ligne

SELECT FROM WHERE

AND

empno, ename, job 1300 1100 emp 800 sal < ANY 950 (SELECT sal FROM emp WHERE job = 'CLERK) job <> ''CLERK'; ENAME ---------MARTIN WARD JOB --------SALESMAN SALESMAN

EMPNO --------7654 7521

IT-LEARNING COMPUS

61

06/12/2011

Exemple de Sous-Interrogations multi-ligne

SELECT FROM WHERE

empno, ename, job 1566.6667 2175 emp 2916.6667 sal > ALL (SELECT avg(sal) FROM emp GROUP BY deptno) ENAME ---------KING JONES FORD SCOTT JOB --------PRESIDENT MANAGER ANALYST ANALYST

EMPNO --------7839 7566 7902 7788

IT-LEARNING COMPUS

62

06/12/2011

Les Sous-Interrogations Synchronises


Syntaxe: SELECT outer1, outer2, ... FROM table1 alias1 WHERE outer1 operator (SELECT inner1 FROM table2 alias2 WHERE alias1.outer2 = alias2.inner1); La sous-interrogation est excute pour chaque enregistrement de la requte principale.
Nouvelle ligne candidate (requte externe)

Excuter la requte interne utilisant une valeur de la ligne candidate


Utiliser la valeur(s) de la requte interne qualifiant la ligne candidate

IT-LEARNING COMPUS

63

06/12/2011

Exemple de Sous-Interrogations Synchronises


Recherchez tous les employs dont le salaire est suprieur au salaire moyen de leur dpartement
SELECT empno, sal, deptno Chaque fois que la requte externe est traite, FROM emp outer la requte interne WHERE sal > (SELECT AVG(sal) est excute. FROM emp inner WHERE outer.deptno= inner.deptno);

EMPNO SAL DEPTNO -------- --------- --------7839 5000 10 7698 2850 30 7566 2975 20 ... 6 rows selected.

Oprateur mono.ligne ou muti-ligne

IT-LEARNING COMPUS

64

06/12/2011

Les Sous-Interrogations Synchronises et l'Oprateur EXISTS

Pour

chaque enregistrement de la requte principale, une

recherche denregistrement est effectue dans la sousinterrogation.

La recherche dans la sous-interrogation est interrompue ds une


ligne a t trouve, la condition de la requte principale est
vraie.

La condition de la requte principale est fausse si aucune ligne


na t trouve dans la sous-interrogation.

IT-LEARNING COMPUS

65

06/12/2011

Exemple de lutilisation de loprateur EXISTS


Recherchez les employs ayant au moins une personne sous leur responsabilit.
SELECT empno, ename, job, deptno FROM emp outer WHERE EXISTS (SELECT empno FROM emp inner WHERE inner.mgr = outer.empno); EMPNO ENAME --------- ---------7839 KING 7698 BLAKE 7782 CLARK 7566 JONES ... 6 rows selected. JOB DEPTNO --------- --------PRESIDENT 10 MANAGER 30 MANAGER 10 MANAGER 20

IT-LEARNING COMPUS

66

06/12/2011

Les Oprateurs Ensemblistes

Intersect Union / Union All Minus


Table Emp Table EMPHISTORY

IT-LEARNING COMPUS

67

06/12/2011

Exemple de l'Oprateur UNION


Affichez le nom, le poste et le dpartement de tous les employs
SELECT ename, job, deptno FROM emp UNION SELECT name, title, deptid FROM emp_history;
ENAME JOB DEPTNO ---------- --------- --------ADAMS CLERK 30 ALLEN SALESMAN 30 ALLEN SALESMAN 20 BALFORD CLERK 20 BLAKE MANAGER 30 ... 20 rows selected.

IT-LEARNING COMPUS

68

06/12/2011

Exemple de l'Oprateur INTERSECT


Affichez les diffrents noms, numros et postes des employs prsents dans les tables EMP et EMPHISTORY.
SELECT ename, empno, job FROM emp INTERSECT SELECT name, empid, title FROM emp_history; ENAME EMPNO JOB ---------- --------- --------ALLEN 7499 SALESMAN CLARK 7782 MANAGER SCOTT 7788 ANALYST

IT-LEARNING COMPUS

69

06/12/2011

Exemple de l'Oprateur MINUS


Affichez le nom,le numro et le poste de tous les employs ayant quitt la socit.
SELECT FROM MINUS SELECT FROM name, empid, title emp_history

ename, empno, job emp;


TITLE --------CLERK PAY CLERK ANALYST OPERATOR

NAME EMPID ---------- --------BALFORD 6235 BRIGGS 7225 JEWELL 7001 SPENCER 6087 ... 6 rows selected.

IT-LEARNING COMPUS

70

06/12/2011

Ajout denregistrement dans une Table


L'ordre INSERT permet d'ajouter un nouveau enregistrement dans une table. Syntaxe 1:
INSERT INTO VALUES Nomtable [(champs [, champs ...])] (valeur [, valeur...] );

Indiquez les valeurs dans l'ordre par dfaut des colonnes dans
la table.

Placez
quotes.

les valeurs de type caractre et date entre simples

IT-LEARNING COMPUS

71

06/12/2011

Ajout denregistrement dans une Table

INSERT INTO VALUES

dept (deptno, dname, loc) (50, 'FINANCES', 'PARIS');

INSERT INTO VALUES

emp (empno, ename, job, mgr, hiredate, sal, deptno) (8000, SAAD', 'ANALYST', 7839, SYSDATE, 4000, 20);

IT-LEARNING COMPUS

72

06/12/2011

Ajout denregistrement dans une Table


Syntaxe 2:
INSERT INTO Nomtable [(champs [, champs ...])] (select );

Les champs de la clause INSERT doit correspondre ceux de la sous-interrogation Exemple:


INSERT INTO SALSES (mat, nom, sal, hiredate, deptno) SELECT empno, ename, hiredate, sal+ comm, deptno FROM emp

WHERE job like 'SALSES%';

IT-LEARNING COMPUS

73

06/12/2011

Modification des donnes dune Table


L'ordre UPDATE permet de modifier les enregistrements dune table. Syntaxe :
UPDATE SET [WHERE Nomtable Champs = valeur [, champs = valeur] condition];

La

clause WHERE permet de modifier une ou plusieurs lignes spcifiques; en cas dabsence de cette clause toutes les lignes seront modifies. Chaque opration de modification doit respecter les contraintes dintgrit rfrentielle de la base de donnes.

IT-LEARNING COMPUS

74

06/12/2011

Modification des donnes dune Table

UPDATE SET WHERE

emp com

=0

com is NULL;

UPDATE emp SET mgr = (SELECT empno FROM emp

WHERE (deptno = 30) AND (job like 'MANAGER') ) ,


job ='SALSESMEN' WHERE deptno = 30;

IT-LEARNING COMPUS

75

06/12/2011

Suppression des enregistrements dune Table


L'ordre DELETE permet de supprimer des enregistrements a partir dune table. Syntaxe :
DELETE [FROM] Nomtable [WHERE condition];

La

clause WHERE permet de supprimer une ou plusieurs lignes spcifiques en labsence de cette clause, toutes les lignes sont supprimes. Chaque opration de modification doit respecter les contraintes dintgrit rfrentielle de la base de donnes.
76 06/12/2011

IT-LEARNING COMPUS

Suppression des enregistrements dune Table

DELETE WHERE

dept dname = 'FINANCES';

DELETE FROM emp WHERE deptno = (SELECT deptno

FROM
WHERE

dept
dname ='SALES');

IT-LEARNING COMPUS

77

06/12/2011

IT-LEARNING COMPUS

78

06/12/2011

IT-LEARNING COMPUS

79

06/12/2011

IT-LEARNING COMPUS

80

06/12/2011

IT-LEARNING COMPUS

81

06/12/2011

IT-LEARNING COMPUS

82

06/12/2011

IT-LEARNING COMPUS

83

06/12/2011

IT-LEARNING COMPUS

84

06/12/2011

IT-LEARNING COMPUS

85

06/12/2011

IT-LEARNING COMPUS

86

06/12/2011

IT-LEARNING COMPUS

87

06/12/2011

IT-LEARNING COMPUS

88

06/12/2011

IT-LEARNING COMPUS

89

06/12/2011

IT-LEARNING COMPUS

90

06/12/2011

Vous aimerez peut-être aussi