P. 1
Cours SQL IT

Cours SQL IT

|Views: 7|Likes:
Published by Yassine Ouhani

More info:

Published by: Yassine Ouhani on May 25, 2013
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

11/10/2015

pdf

text

original

Le langage SQL

IT-LEARNING COMPUS

1

06/12/2011

Aspect générale du langage SQL
Le langage SQL ( Structured Query Longage : Langage

d’interrogation structuré) , lié à la structure relationnelle des BD,
est un langage non procédural, il comporte plusieurs commandes qui se repartissent en trois familles fonctionnellement distinctes:

• Langage de définition des données(LDD): créer des tables dans
une BDR, ainsi d’en modifier ou de supprimer leur structure.

• Langage

de manipulation des données (LMD): sélectionner,

insérer, modifier, ou supprimer des données dans une table.

• Langage de contrôle de données(LCD): gérer la sécurité et les
permissions au niveau des utilisateurs d’une BDR.
IT-LEARNING COMPUS 2 06/12/2011

Tables utilisées dans le Cours
Table Emp Table Dept

Table SALGRADE

IT-LEARNING COMPUS

3

06/12/2011

Langage de définition des Données
Un ordre du LDD permet de créer , de supprimer et de modifier la structure d’une base de données relationnelle; les objets que le LDD peut gérer sont:

• • • • •

Table Vue Séquence Index Synonyme

IT-LEARNING COMPUS

4

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 utilisée qu'avec une requête « select ». Elle permet de faire afficher une expression dont la valeur ne dépend d'aucune table en particulier. Exemple Afficher la date d'aujourd'hui, le nom de l'utilisateur et le résultat d'un calcul, revient à écrire. select sysdate, user, round(3676 / 7) from dual ;

IT-LEARNING COMPUS

5

06/12/2011

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

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

Les identificateurs utilisés doivent respecter les règles suivantes: • Commencer par une lettre et contenir que les caractères A à Z, 0 à 9, _, $, et # (30 caractères maximum). • Être différent des autres objets appartenant au même utilisateur et des mots réservé à Oracle

IT-LEARNING COMPUS

6

06/12/2011

Création de Tables
Types de données
VARCHAR2(taille) CHAR(taille)

Description
Données caractères de longueur variable (2000 caractères maximum) Données caractères de longueur fixe (255 caractères maximum)

NUMBER(taille,décimale) Numérique de longueur variable DATE LONG LONG RAW Valeurs de date et d'heure Données caractères de longueur variable, jusqu'à 2 giga-octets Binaire(image)

IT-LEARNING COMPUS

7

06/12/2011

Création 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

8

06/12/2011

Modification de la structure d’une Tables
L'ordre ALTER TABLE permet d’ajouter 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 d’intégrités

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 d’intégrités
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 d’intégrités
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

Désactiver 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 basée sur une ou plusieurs table
(ou sur d’autres vues). C’est une fenêtre par laquelle il est possible de visualiser ou de modifier des données venant de ces tables (appelés tables de base).

 Les utilisateurs consultent la base, ou modifier la base (avec
certaines restrictions) à travers les vues (Limitation d'accès )

IT-LEARNING COMPUS

15

06/12/2011

Création 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 opération LMD ne sera exécutée dans la vue.

IT-LEARNING COMPUS

16

06/12/2011

Exemple de création 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 d’une vue

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

DROP VIEW NomVue;

IT-LEARNING COMPUS

18

06/12/2011

Index

Un index Oracle est un objet de schéma qui permet d'accélérer l'extraction de lignes par le biais d'un pointeur.

• •

Si la colonne ne comporte pas d'index, la table entière est balayée.
Un index offre un accès direct et rapide aux lignes d'une table. Il a pour but de réduire les E/S sur disque grâce à un chemin d'accès indexé qui identifie rapidement l'emplacement des données.

Quand Faut-il Créer un Index

• • • • •

Lorsqu'une colonne est fréquemment utilisée 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 fréquemment utilisées conjointement dans une clause WHERE ou une condition de jointure. Lorsque la table est de grande taille et que la plupart des requêtes doivent extraire moins de 2 à 4 % de lignes.
19 06/12/2011

IT-LEARNING COMPUS

CREATE INDEX
Un index se crée par la commande CREATE INDEX : CREATE [UNIQUE] INDEX [nom-schéma.]nom-index ON <nom-table> ( { nomcolonne [ASC | DESC ] } ) On peut spécifier par l'option « UNIQUE » que chaque valeur d'index doit être unique dans la table. On peut spécifier par l'option ASC et DESC un tri en ordre croissant ou décroissant (respectivement).

Exemple : index sur les numéros de pièce, 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 d’index conserve en permanence une arborescence symétrique (balancée). Toutes les feuilles sont à la même profondeur. Le temps de recherche est ainsi à peu près constant quel que soit l’enregistrement cherché. Le plus bas niveau de l’index (leaf blocks) contient les valeurs des colonnes indexées et le rowid. Remarque : Nous observons l’efficacité 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 qu’une chaîne de bits. Chacun d’eux correspond à une possible valeur de la colonne indexée. Si le bit est positionné à 1, pour une valeur donnée de l’index, 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 très bien adaptés à la recherche d’informations basée sur des critères d’égalité (exemple : compa = ’AF’), mais ne conviennent pas du tout à des critères de comparaison (exemple : nbHVol > 657).

IT-LEARNING COMPUS

22

06/12/2011

CREATE INDEX
Exemple 2: Index basés sur des fonctions Une fonction de calcul (expressions arithmétiques ou fonctions SQL, PL/SQL ou C) peut définir 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 recréer. Utiliser DROP INDEX Pour supprimer un index Pour supprimer un index, vous devez en être le propriétaire ou avoir le privilège DROP ANY INDEX. Un index est automatiquement supprimé dès qu'on supprime la table à laquelle il appartient.

Exemple DROP INDEX emp_idx ;

IT-LEARNING COMPUS

24

06/12/2011

CREATE SEQUENCE

Une séquence est un compteur programmable stocké en mémoire par Oracle et utilisable de manière partagé. Il est, en général, utilisé pour fournir les n° des clés d'enregistrements. CREATE SEQUENCE nom_séquence [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 séquences :

• •

CURRVAL retourne la valeur courante de la séquence ; NEXTVAL incrémente la séquence et retourne la nouvelle valeur.

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

IT-LEARNING COMPUS

26

06/12/2011

L’ordre Select
L’utilisation la plus fréquente de SQL s’effectue dans les requêtes afin de rechercher les données dans une base de données.

Syntaxe
select [distinct] * | <liste des champs > From <Liste des tables> [where <critère de sélection >] [group by <critères 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 indifféremment en

majuscules et/ou minuscules.

• Les ordres SQL peuvent être écrits sur plusieurs lignes. • Les mots-clés ne doivent pas être abrégés ni scindés sur deux
lignes différentes.

• Les

clauses sont généralement placées 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

L’Alias de Colonne

• Permet de renommer un en-tête de colonne (champs) • Suit immédiatement le nom de la colonne ; le mot-clé AS peut
être placé entre le nom et l’alias est optionnel

• Doit

obligatoirement être inclus entre guillemets (") s’il

contient des espaces, des caractères spéciaux ou si les majuscules/minuscules doivent être différenciées
SELECT ename AS name, sal salary FROM emp;

IT-LEARNING COMPUS

31

06/12/2011

Le littéral

• Un littéral est un caractère, une expression, ou un nombre inclus
dans la liste SELECT.

• Les

valeurs littérales de type date et caractère doivent être

placées 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 opérateurs

IT-LEARNING COMPUS

33

06/12/2011

Utilisation des Opérateurs
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 inférieure

Limite supérieure

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 Opérateurs 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 Opérateurs 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 l’opérateurs de Concaténation

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 croisée

Définition Une Cross-Jointure (Jointure croisée) consiste en le produit cartésien des deux tables sur lesquelles la jointure est effectuée.

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

IT-LEARNING COMPUS

40

06/12/2011

Jointure Interne
Définition Une Jointure Interne permet d'intégrer plusieurs Tables de Données en mettant en correspondance les occurrences de plusieurs tables qui ont un attribut commun. Exemple SELECT empno,ename,dname FROM emp NATURAL JOIN dept; Problème:
–Si des attributs de même nom et de signification différente apparaissent dans les tables jointes, ils seront utilisés pour réaliser la jointure naturelle. D'où un fort risque d'erreur non maîtrisées ! –Si un attribut possède deux noms différents dans les deux tables, la jointure ne peut pas avoir lieu

IT-LEARNING COMPUS

41

06/12/2011

Jointure Interne

Solution: Spécifier le nom du (des) attribut(s) qui servent de référence pour la jointure Commande INNER JOIN ... USING ou INNER JOIN ON : Elle permet de préciser le nom de l'attribut utilisé pour réaliser 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 d’équijointure

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 référence la première table de 'from‘
RIGHT OUTER JOIN: prend comme référence la dernière table de 'from‘ RIGHT FULL JOIN: prend comme référence toutes les tables de 'from'

IT-LEARNING COMPUS

46

06/12/2011

Exemple de l’autojointures

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 données
Les fonctions de groupe agissent sur des groupes de lignes et donnent un résultat 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

Création de Groupes de Données
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 département 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 création de groupes de données
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 regroupées.

• La fonction de groupe est appliquée.
• Les
groupes qui correspondent à la clause HAVING sont

affichés.

IT-LEARNING COMPUS

54

06/12/2011

Exemple de l’utilisation 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 l’utilisation 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 (requête interne) est exécutée une fois
avant la requête principale (une sous-interrogation ne doit pas contenir la clause ORDER BY).

• Le résultat de la sous-interrogation est utilisé par la requête
principale (externe).
IT-LEARNING COMPUS 57 06/12/2011

Types de Sous-Interrogations
Sous-interrogation mono-ligne
Opérateurs mono-ligne Sous-interrogation multi-ligne Opérateurs 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 Synchronisées
Syntaxe: SELECT outer1, outer2, ... FROM table1 alias1 WHERE outer1 operator (SELECT inner1 FROM table2 alias2 WHERE alias1.outer2 = alias2.inner1); La sous-interrogation est exécutée pour chaque enregistrement de la requête principale.
Nouvelle ligne candidate (requête externe)

Exécuter la requête interne utilisant une valeur de la ligne candidate
Utiliser la valeur(s) de la requête interne qualifiant la ligne candidate

IT-LEARNING COMPUS

63

06/12/2011

Exemple de Sous-Interrogations Synchronisées
Recherchez tous les employés dont le salaire est supérieur au salaire moyen de leur département
SELECT empno, sal, deptno Chaque fois que la requête externe est traitée, FROM emp outer la requête interne WHERE sal > (SELECT AVG(sal) est exécutée. FROM emp inner WHERE outer.deptno= inner.deptno);

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

Opérateur mono.ligne ou muti-ligne

IT-LEARNING COMPUS

64

06/12/2011

Les Sous-Interrogations Synchronisées et l'Opérateur EXISTS

• Pour

chaque enregistrement de la requête principale, une

recherche d’enregistrement est effectuée dans la sousinterrogation.

• La recherche dans la sous-interrogation est interrompue dès une
ligne a été trouvée, la condition de la requête principale est
vraie.

• La condition de la requête principale est fausse si aucune ligne
n’a été trouvée dans la sous-interrogation.

IT-LEARNING COMPUS

65

06/12/2011

Exemple de l’utilisation de l’opérateur EXISTS
Recherchez les employés 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 Opérateurs Ensemblistes

• Intersect • Union / Union All • Minus
Table Emp Table EMPHISTORY

IT-LEARNING COMPUS

67

06/12/2011

Exemple de l'Opérateur UNION
Affichez le nom, le poste et le département de tous les employés
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'Opérateur INTERSECT
Affichez les différents noms, numéros et postes des employés présents 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'Opérateur MINUS
Affichez le nom,le numéro et le poste de tous les employés ayant quitté la société.
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 d‘enregistrement 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 défaut des colonnes dans
la table.

• Placez
quotes.

les valeurs de type caractère et date entre simples

IT-LEARNING COMPUS

71

06/12/2011

Ajout d‘enregistrement 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 d‘enregistrement 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 données d’une Table
L'ordre UPDATE permet de modifier les enregistrements d’une table. Syntaxe :
UPDATE SET [WHERE Nomtable Champs = valeur [, champs = valeur] condition];

• La

clause WHERE permet de modifier une ou plusieurs lignes spécifiques; en cas d’absence de cette clause toutes les lignes seront modifiées. Chaque opération de modification doit respecter les contraintes d’intégrité référentielle de la base de données.

IT-LEARNING COMPUS

74

06/12/2011

Modification des données d’une 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 d’une Table
L'ordre DELETE permet de supprimer des enregistrements a partir d’une table. Syntaxe :
DELETE [FROM] Nomtable [WHERE condition];

• La •

clause WHERE permet de supprimer une ou plusieurs lignes spécifiques en l’absence de cette clause, toutes les lignes sont supprimées. Chaque opération de modification doit respecter les contraintes d’intégrité référentielle de la base de données.
76 06/12/2011

IT-LEARNING COMPUS

Suppression des enregistrements d’une 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

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->