SlideShare a Scribd company logo
1 of 84
("

LABORATOIRE D’INFORMATIQUE DE
L’UNIVERSITE DE PAU ET DES PAYS
DE L’ADOUR

BDD Avancées
SQL3

Richard Chbeir, Ph.D.
Plan!

Encapsulation
des objets
Interrogation
des objets
Manipulation
des objets

Introduction"

10/12/13
Page 2

•  Fonctions et
procédures
Pourquoi ?

Employe
NumEmp

dept

salaire

ADR

…

…

…

…

…

…

…

…

Approche relationnelle

10/12/13
Page 3
Pourquoi ?

Employe
NumEmp

dept

salaire

ADR

…

…

…

…

…

…

…

…

Employe
NumEmp

dept

salaire

ADR
NOR UE

VILLE

CODE_POSTAL

…

…

…

…

…

10/12/13
Page 4

RUE

…

…

…

Approche avancée
Comment faire?

Définition d’un nouveau
Type Abstrait de Données ou TAD

10/12/13
Page 5
Introduction
•  TAD
–  Une structure de données partagée
–  Inclut des méthodes qui sont des procédures ou
des fonctions permettant de manipuler les objets ou
instances du type abstrait
–  Ne peut pas contenir de contraintes (NOT NULL,
CHECK, …)

10/12/13
Page 6
Introduction
•  Autres types de TAD
–  Large Object Bloc (LOB)
•  Binary LOB (BLOB) : stockage des données
binaires non structurées (4Go)
•  Character LOB (CLOB) : stockage de données
caractères (4Go)
•  Binary FILE (BFILE) : fichiers binaires localisés
à l extérieur de la BDD

10/12/13
Page 7
Introduction
•  Usage des TAD
–  Dans une table
–  Dans un attribut d’une table relationnelle
–  Etc.

10/12/13
Page 8
Introduction
•  Création d’un TAD
–  Syntaxe
SQL> CREATE OR REPLACE TYPE Nom_Type !
!
!AS OBJECT (!
!
!
!Nom_attribut1 !Type_Attribut,!
!
!
!Nom_attribut2 !Type_Attribut,!
!
!
!……..!
!
!
!Nom_attributn !Type_Attribut !
[final|not final]!
!
!
!)!
; /!

10/12/13
Page 9
Introduction
•  Création d’un TAD
–  Exemple
SQL> CREATE OR REPLACE TYPE adresse_type !
!AS OBJECT (!
!
!norue NUMBER, !
!
!rue VARCHAR(20), !
!
!ville VARCHAR2(30), !
!
!code_postal VARCHAR2(10)) !
/!

ADRESSE_TYPE
NORUE

10/12/13
Page 10

RUE

VILLE

CODE_POSTAL
Introduction
•  Création d’un TAD
–  Type utilisé par un attribut d’une table
relationnelle
•  Exemple
SQL> CREATE TABLE employe (!
!norue NUMBER PRIMARY KEY,!
!dept VARCHAR2(10),!
!sal NUMBER, !
!adr adresse_type);!

Employe
NumEmp

dept

sal

ADR
NOR UE

VILLE

CODE_POSTAL

…

…

…

…

…

10/12/13
Page 11

RUE

…

…

…

Une table contient un TAD est une table relationnelle-objet
Introduction
•  Manipulation des TAD
–  Insertion des tuples
•  Exemple (insérer les informations de l’employé
numéro 1 dans la table Employé)
SQL> INSERT INTO Employe(
1, 'Informatique', 2000,
adresse_type(98,'Faubourg Raines',’Lyon',’69000’)
)
;

10/12/13
Page 12
Introduction
•  Manipulation des TAD
–  Modification des tuples
•  Exemple (modifier le salaire et le numéro de la
rue de l’employé lyonnais qui porte le numéro 1)
SQL> UPDATE Employe e
SET e.sal= 200, e.adr.rue=’130'
WHERE e.adr.ville LIKE '%Ly%' and e.numero='1';

Utilisation d’alias obligatoire lors de la manipulation

10/12/13
Page 13
Introduction
•  Manipulation des TAD
–  Interrogation des tuples
•  Exemple (trouver tous les employés lyonnais)
SQL>

10/12/13
Page 14

SELECT e.numero
FROM employes e
WHERE e.adr.ville LIKE '%Ly%’;
Introduction
•  Manipulation des TAD
–  Suppression des tuples
•  Exemple (supprimer(le(tuple(de(l’employé(dont(
l’adresse(est(130(Ray(Lyon(6)
SQL>

10/12/13
Page 15

DELETE FROM employes e
WHERE e.adr = adresse_type(130,’Ray',’Lyon',’6’);
Donner&le&script&SQL&
perme1ant&de&créer&
ce1e&table&
rela6onnelle7objet?!
Numdep

Secrétaire

Budget
nemp

age

nom

D2

N1

28

Zidane

D3

325000

N2

26

Thuram

D4

10/12/13
Page 16

253000

125000

N5

26

Dessailly
Donner&le&script&SQL&
perme1ant&&
d’insérer&les&tuples&
suivants&?!

numdep

Secrétaires

budget
Nemp

D3

325000

D4

10/12/13
Page 17

125000

N1

28

Zidane

N2

26

Thuram

N3

30

Barthez

26

Dessailly

N6

24

Lizarazu

N7

253000

nom

N5

D2

age

32

Deschamps
Problème!lié!à!la!table!imbriquée!

numdep

Secrétaires

budget
Nemp

D3

325000

D3

10/12/13
Page 18

125000

N1

28

Zidane

N2

26

Thuram

N3

30

Barthez

26

Dessailly

N6

24

Lizarazu

N7

253000

nom

N5

D2

age

32

Deschamps
Introduction!
•  TAD!et!table!imbriquée!
–  Exemple!(créer!le!type!SecretaireOtype)!
SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT!
!
!(!
!
!Nemp !VARCHAR2(3),!
!
!Age
!NUMBER,!
!
!Nom
!VARCHAR2(15))!
/!

Secretaire5type
Nemp

10/12/13
Page 19

age

nom
Introduction!
•  TAD!et!table!imbriquée!
–  Exemple!(créer!le!type!SecretaireSOtype)!
SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT!
!
!(!
!
!Nemp !VARCHAR2(3),!
!
!Age
!NUMBER,!
!
!Nom
!VARCHAR2(15))!
/!

SQL> CREATE OR REPLACE TYPE SecretaireS_Type!
!AS TABLE OF Secretaire-Type !
/ !
SecretaireS_Type"
Nemp

10/12/13
Page 20

age

Nom
Introduction!
•  TAD!et!table!imbriquée!
–  Exemple!(créer(la(table(Département)!
SQL> CREATE TABLE Departement (
numdep VARCHAR2(5) PRIMARY KEY,
budget NUMBER,
secrétaires SecretaireS_Type )
NESTED TABLE secrétaires STORE AS tabsec;

numdep

Secrétaires

budget
Nemp

10/12/13
Page 21

D4

325000

125000

nom

N2

26

Thuram

N3

30

Barthez

N5

D3

age

26

Dessailly

N6

24

Lizarazu

N7

32

Deschamps
Introduction
•  Manipulation des TAD
–  Insertion des tuples dans une table
imbriquée
•  Exemple (insérer toutes les informations du
département D3)
SQL> INSERT INTO Departement VALUES (
‘D3’, 325000,
SecretaireS-Type(Secretaire-Type(‘N2’,26,’Thuram’),
Secretaire-Type(‘N3’,30,’Barthez’) ) )
;

numdep

Secrétaires

budget
Nemp

10/12/13
Page 22

D3

325000

age

nom

N2

26

Thuram

N3

30

Barthez
Introduction
•  Manipulation des TAD
–  Modification des tuples dans une table
imbriquée
•  Exemple (modifier l’âge de tous les secrétaires
du département D3 dont le nom commence par
la lettre B)
SQL> UPDATE THE
(SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') a
SET a.age = 38
WHERE a.nom LIKE ‘B%';

numdep

Secrétaires

budget
Nemp

10/12/13
Page 23

D3

325000

age

nom

N2

26

Thuram

N3

30

Barthez
Introduction
•  Manipulation des TAD
–  Interrogation des tuples dans une table
imbriquée
•  Exemple (trouver l'âge des secrétaires du
département D3)
SELECT la.age
FROM THE (SELECT e.Secrétaires FROM Departement e WHERE
e.numdep=’D3') la;
SQL>

numdep

Secrétaires

budget
Nemp

10/12/13
Page 24

D3

325000

age

nom

N2

26

Thuram

N3

30

Barthez
Introduction
•  Manipulation des TAD
–  Interrogation des tuples dans une table
imbriquée
•  Exemple (trouver les secrétaires de chaque
département)
SQL>

SELECT D.numdep, S.*
FROM Departement D, TABLE (D.Secrétaires) S;

numdep

Secrétaires

budget
Nemp

10/12/13
Page 25

D3

325000

age

nom

N2

26

Thuram

N3

30

Barthez
Introduction
•  Manipulation des TAD
–  Suppression des tuples dans une table
imbriquée
•  Exemple (supprimer les tuples des secrétaires
du département D3 ayant plus de 30 ans)
SQL> DELETE FROM the
(SELECT e.Secrétaires FROM Departement e WHERE
e.numero=’D3') li
WHERE li.age >= 30
;

numdep

Secrétaires

budget
Nemp

10/12/13
Page 26

D3

325000

age

nom

N2

26

Thuram

N3

30

Barthez
Donner&le&script&SQL&
perme1ant&&de&créer&
la&table&suivante&?!

Employe
NEmp

dept

Lieux
Interventions

ADR

sal
N°

VILLE

CODE_POSTAL

…

…

…

…

…

10/12/13
Page 27

RUE

…

…

…

Ville

Distance
Et si avait le schéma suivant ?

Véhicule

Employe
NumEmp

dept

salaire

ADR

N°Véhicule

Num

Type

Marque

Date

…

…

…

…

..

…

…

…

…

…

…

…

…

…

…

…

…

…

Contrat
NumEmp

Montant

…

…

…

10/12/13
Page 28

N°Int

…

Intervention Poss.
Date

N°

Ville

Distance

…

…

…

…

…

…

…

…

Approche relationnelle
Comment le transformer en …
Employe
NumEmp

dept

sal

@veh

ADR
NOR UE

Lieux Interventions

RUE

VILLE

CODE_POSTAL

…

…

…

…

…

…

…

Ville

…

Véhicule

Distance

Contrat

Num

Type

Marque

Date

N°Int

Montant

…

…

…

…

…

…

…

10/12/13
Page 29

@contrat

…

…

…

…

…

Approche objet-relationnelle

Date
Table objet-relationnelle
•  Définition
–  Une table est dite objet-relationnelle quand
elle dépend d un TAD
Les enregistrements d une table OR peuvent être considérés
comme des objets car ils possèdent tous un Object ID (OID)

10/12/13
Page 30
Table objet-relationnelle
•  Pseudo-colonnes
–  ROWID
•  Désigne une pseudo-colonne qui contient l adresse physique de chaque
enregistrement d une base de données Oracle

–  OID
•  Dans Oracle, chaque objet (table, type, objets des tables, …) a un
identificateur unique (OID) sur 16 positions

–  REF
•  Chaque objet, au sens Oracle du terme, possède un OID via une
pseudo-colonne de type REF. Chaque REF est composé d une partie
de l OID, des informations de la table objet-relationnelle et
éventuellement du ROWID.

10/12/13
Page 31
Table objet-relationnelle
•  Pour créer une table Objet-relationnelle
ayant une structure d un type
préalablement défini
SQL> CREATE TABLE Nom_table OF Nom_Type !
!
![(Contraintes_d_integrite)]!
;!

10/12/13
Page 32
Table objet-relationnelle
•  Création des types utilisés

SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT!
!
!(no_int
!
!VARCHAR2 (8),!
!
!date_int
!DATE,!
!
!Montant
!
!NUMBER)!
/!

contrat_typ
No_int

10/12/13
Page 33

Date_int

Montant
Table objet-relationnelle
•  Création de la table

SQL> CREATE TABLE Contrats OF contrat_typ!
(CONSTRAINT PK_con PRIMARY KEY(no_int))!
;!

10/12/13
Page 34
Table objet-relationnelle
•  Création des types utilisés
SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT!
!
!(no_immat
!VARCHAR2 (8),!
!
!date_immat
!DATE,!
!
!type_v !VARCHAR2(7),!
!
!marque !VARCHAR2(15))!
/!

veh_typ
No_immat

10/12/13
Page 35

Date_immat

Type_v

marque
Table objet-relationnelle
•  Création de la table
SQL> CREATE TABLE Vehicules OF veh_typ!
(CONSTRAINT PK_veh PRIMARY KEY(no_immat))!
;!

10/12/13
Page 36
Table objet-relationnelle
•  Création des types utilisés
SQL> CREATE OR REPLACE TYPE adresse_type !
!AS OBJECT (!
!
!norue NUMBER, !
!
!rue VARCHAR(20), !
!
!ville VARCHAR2(30), !
!
!code_postal VARCHAR2(10)) !
/!
ADRESSE_TYPE
NORUE

10/12/13
Page 37

RUE

VILLE

CODE_POSTAL
Table objet-relationnelle
•  Création des types utilisés
–  Attention aux références/pointeurs
SQL> CREATE OR REPLACE TYPE Lieu_intervention AS OBJECT!
!
!(!
!
!ref_contrat
!REF contrat_typ,!
!
!Ville !
!VARCHAR2(15),!
!
!Distance
!NUMBER)!
/!

Lieu_intervention
ref_contrat

10/12/13
Page 38

Ville

Distance
Table objet-relationnelle
•  Création des types utilisés (à partir d’un
autre type)

SQL> CREATE OR REPLACE TYPE Lieux_intervention!
!AS TABLE OF lieu_intervention!
/ !

10/12/13
Page 39
Table objet-relationnelle
•  Création des types utilisés
SQL> CREATE OR REPLACE TYPE employe_type As OBJECT (!
!numero
!
!VARCHAR2(5),!
!nom
!
!VARCHAR2(15),!
!prenom
!
!VARCHAR2(15),!
!dept !
!VARCHAR2(20),!
!veh
!REF
!veh_typ,!
!ADR
!adresse_type,!
!lieux_interventions!lieux_intervention)!
/ !

10/12/13
Page 40
Table objet-relationnelle
•  Création de la table OR

SQL> CREATE TABLE Employes OF employe_type!
!(CONSTRAINT PK_employe PRIMARY KEY(numero))!
!NESTED TABLE lieux_interventions STORE AS tab_int!
;!

10/12/13
Page 41
Le script SQL OR
Employe
NumEmp

dept

sal

@veh

ADR
NOR UE

Lieux Interventions

RUE

VILLE

CODE_POSTAL

…

…

…

…

…

…

…

Ville

…

Véhicule

Distance

Contrat

Num

Type

Marque

Date

N°Int

Montant

…

…

…

…

…

…

…

10/12/13
Page 42

@contrat

…

…

…

…

…

Date
Le script SQL OR
SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT!
!(no_immat !VARCHAR2 (8),!
!date_immat !DATE,!
!type_v
!VARCHAR2(7),!
!marque
!VARCHAR2(15))!
/!
SQL> CREATE TABLE Vehicules OF veh_typ!
(CONSTRAINT PK_veh PRIMARY KEY(no_immat))!
;!

Véhicule
Num

Type

Marque

Date

…

…

…

…

…

…

…

…

SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT!
!(no_int
!VARCHAR2 (8),!
!date_int
!DATE,!
!Montant
!NUMBER)!
/!
SQL> CREATE TABLE Contrats OF contrat_typ!
(CONSTRAINT PK_con PRIMARY KEY(no_int))!
;!

Contrat
N°Int
…

10/12/13
Page 43

Montant
…

…

…

Date
Le script SQL OR
Employe
NumEmp

dept

sal

@veh

ADR
NOR UE

Lieux Interventions

RUE

VILLE

CODE_POSTAL

…

…

…

…

…

…

…

…

CREATE or replace TYPE adresse_type
norue NUMBER,
rue VARCHAR(20),
ville VARCHAR2(30),

@contrat

/
CREATE OR REPLACE TYPE employe_type As OBJECT (
numero

AS OBJECT(

NUMBER)

REF

ADR

VARCHAR2(15),

Distance

VARCHAR2(20),

veh

ref_contrat REF contrat_typ,
Ville

VARCHAR2(15),

dept

CREATE OR REPLACE TYPE Lieu_intervention

VARCHAR2(15),

prenom

/

VARCHAR2(5),

nom

code_postal VARCHAR2(10))

10/12/13
Page 44

Distance

CREATE or REPLACE TYPE Lieux_intervention as Table of
lieu_intervention

AS OBJECT (

/

Ville

adresse_type,

lieux_interventions

veh_typ,
lieux_intervention)

/
CREATE TABLE Employes OF employe_type
(CONSTRAINT PK_employe PRIMARY KEY(numero))
NESTED TABLE lieux_interventions STORE AS tab_int;
A vous
•  Table!OR!
Departement
numdep

Secrétaires

budget
Nemp

D3

325000

D4

10/12/13
Page 45

125000

N1

28

Zidane

N2

26

Thuram

N3

30

Barthez

26

Dessailly

N6

24

Lizarazu

N7

253000

nom

N5

D2

age

32

Deschamps
Insertion des tuples
•  Dans une table OR avec un attribut
défini avec un TAD

SQL> INSERT INTO Nom_Table !
!
!VALUES ( V1, V2, ….., Nom_Type( !
!
!val1, val2, ….)
!
!
!); !

Constructeur

10/12/13
Page 46
Insertion des tuples
•  Dans une table OR avec un attribut
défini avec un TAD
–  Exemple
SQL> insert into contrats values('1','12/12/2006',500);
SQL> insert into contrats
values(
contrat_typ( 1','12/12/2006',500)
);

Contrat
N°Int
…

10/12/13
Page 47

Montant
…

…

…

Date
Insertion des tuples
•  Dans une table OR avec un attribut
défini avec un TAD
–  Exemple
SQL> insert into vehicules
values(
veh_typ( 2', BMW , X5 ,'12/12/2006')
);

Véhicule
Num

Marque

Date

…

…

…

…

…

10/12/13
Page 48

Type

…

…

…
Insertion des tuples
•  Dans une table OR contenant un
pointeur
Employe
NumEmp

dept

sal

@veh

SQL> INSERT INTO Employes

…

select 1,'Informatique', 2000, ref(a)
from vehicules a where a.no_immat='2'

…

;

Véhicule
Num

Marque

Date

…

…

…

…

…

10/12/13
Page 49

Type

…

…

…
Insertion des tuples
•  Dans une table OR contenant une table
imbriquée
–  Syntaxe
-- Initialisation de la table imbriquée à vide
!
SQL> INSERT INTO Nom_Table
VALUES ( V1, V2, ….., Ens_Nom_Type() );
-- Avec insertion de n-uplets dans la table imbriquée

10/12/13
Page 50

SQL> INSERT INTO Nom_Table
VALUES ( V1, V2, ….., Ens_Nom_Type(
Nom_type1 ( …….),
Nom_type1 ( …….),
Nom_type1 ( …….)
) );
Insertion des tuples
•  Dans une table OR contenant une table
imbriquée
–  Exemple
SQL> INSERT INTO Employes
select 1, ’Simone', ’Dijon','Informatique', ref(a),
adresse_type(98,'Faubourg Raines','Dijon','21000'),
Lieux_Intervention()
from vehicules a where a.no_immat='2'
;

10/12/13
Page 51
Insertion des tuples
•  Dans une table OR contenant une table
imbriquée
–  Exemple
SQL> INSERT INTO Employes
select 1, ’Simone', ’Dijon','Informatique', ref(a),
adresse_type(98,'Faubourg Raines','Dijon','21000'),
Lieux_Intervention()
SQL> INSERT vehicules a where a.no_immat='2'
from INTO Employes
select 2, ’Marqua', ’Xtophe','Informatique', ref(a),
adresse_type(98,'Faubourg Raines','Dijon','21000'),
;
Lieux_Intervention(Lieu_intervention(null,'Dijon',500))
from vehicules a where a.no_immat='2'
;

10/12/13
Page 52
Insertion des tuples
•  Dans une table imbriquée contenant un
pointeur
–  Syntaxe
SQL> INSERT INTO
THE (SELECT t.Tab_Imb
FROM Nom_table t
WHERE t.Attr_i = Valeur)
SELECT V1, V2, ,REF(n)FROM Table_R n
WHERE n.Attr_j = Valeur ;

10/12/13
Page 53
Insertion des tuples
•  Dans une table imbriquée contenant un
pointeur
–  Exemple nécessitant l’insertion dans la
table principale
SQL> INSERT INTO Employes
select 3, ’Xavier', ’Dupont','Informatique', ref(a),
adresse_type(98,'Faubourg Raines','Dijon','21000'),
Lieux_Intervention(Lieu_intervention(null,'Dijon',500),
Lieu_intervention(ref(v),'Lyon',600) )
from vehicules a, contrats v where v.no_int='2' and a.no_immat='2'
;

10/12/13
Page 54
Insertion des tuples
•  Dans une table imbriquée contenant un
pointeur
–  Exemple ne nécessitant pas l’insertion dans
la table principale
SQL> INSERT INTO
the (select e.Lieux_interventions from Employes e where
e.numero='3')
select ref(v), Paris',800 from contrats v where v.no_int='1'
;

10/12/13
Page 55
Mise à jour des tuples
•  Dans une table principale
–  Syntaxe
SQL> UPDATE Nom_de_table Alias
SET
Alias.Nom_Attribut1 = expression1
Alias.Nom_Attribut2 = expression2
…….
[WHERE Condition ] ;

10/12/13
Page 56
Mise à jour des tuples
•  Dans une table principale
–  Exemple

SQL> UPDATE Employes e
SET e.Nom='Nicolle', e.Prenom='Christophe'
WHERE e.adr.ville LIKE '%Dijon%' and e.numero='1';

10/12/13
Page 57
Mise à jour des tuples
•  Dans une table imbriquée
–  Syntaxe
SQL>

10/12/13
Page 58

UPDATE THE
(SELECT Nom_Alias1.Table_imbriquée
FROM Table Nom_Alias1
WHERE Condition ) Nom_alias2
SET Nom_alias2.Attribut = expression
WHERE Condition ;
Mise à jour des tuples
•  Dans une table imbriquée
–  Exemple
•  Modifier la distance d intervention à 8888 de
l employé 1 dans la ville de Dijon
SQL> UPDATE THE
(SELECT e.lieux_interventions FROM Employes e WHERE e.numero='1') a
SET a.distance = 8888
WHERE a.ville LIKE '%Dijon%';

10/12/13
Page 59
Mise à jour des tuples
•  Dans une table imbriquée
–  Exemple
•  Pour l’employé 2, changer son intervention
associée à la ville de Dijon, la nouvelle référence
ayant pour numéro T1234
SQL> UPDATE THE (
SELECT e.lieux_interventions FROM Employes e WHERE e.numero='2') a
SET a.ref_contrat =
(select ref(v) from contrats v where v.No_int ='T1234')
WHERE a.ville LIKE '%Dijon%
;

10/12/13
Page 60
Suppression des tuples
•  Syntaxe générale

SQL>

10/12/13
Page 61

DELETE FROM Nom_table Alias
WHERE Alias.Nom_attribut = Expression ;
Suppression des tuples
•  Condition de suppression portant sur
une table imbriquée
–  Exemple
•  Supprimer les employés qui ont eu des
interventions à Lyon
SQL> DELETE FROM Employes e
WHERE EXISTS(select * from the
(SELECT a.lieux_interventions FROM employes a WHERE
a.numero=e.numero) li
WHERE li.ville = Lyon')
;

10/12/13
Page 62
Suppression des tuples
•  Condition de suppression portant sur les
n-uplets d’une table imbriquée
–  Exemple
•  Supprimer les interventions de l’employé 2 qui
se sont déroulées à Lyon
SQL> DELETE FROM the
(SELECT e.lieux_interventions FROM employes e WHERE
e.numero='2') li
WHERE li.ville LIKE '%Lyon%
;

10/12/13
Page 63
Departement
Donner&le&script&SQL&perme1ant&&
d’insérer&le&tuple&D3,&de&rajouter&
le&secrétaire&N4&à&D3,&et&de&
supprimer&N2?!

numdep

Secrétaires

budget
Nemp

D4

10/12/13
Page 64

325000

125000

N1

28

Zidane

N2

26

Thuram

N3

30

Barthez

26

Dessailly

N6

24

Lizarazu

N7

D3

253000

nom

N5

D2

age

32

Deschamps
Interrogation des tuples
•  Syntaxe générale
SQL>

SELECT

t.Nom_attr1, t.Nom_ attr2, , ….

FROM Table t;

Utilisation d'un alias obligatoire pour les attributs structurés

10/12/13
Page 65
Interrogation des tuples
•  Exemple
–  Donnez le numéro, le nom et le prénom des
employés qui ont un véhicule mis en
circulation après le 01/06/2006

SQL>

10/12/13
Page 66

SELECT e.numero, e.nom, e.prenom
FROM employes e
WHERE e.VEH.date_immat>='01/12/2006';
Interrogation des tuples
•  Exemple
–  Donnez le nom des villes où intervient
l’employé numéro 2

SELECT la.ville
FROM THE (SELECT e.lieux_interventions FROM employes e
WHERE e.numero='2') la;
SQL>

10/12/13
Page 67
Interrogation des tuples
•  Exemple
–  Donnez le nom des villes où intervient tous
les employés
SQL>

10/12/13
Page 68

SELECT la.ville
FROM employes e, TABLE(e.lieux_interventions) la;
Interrogation des tuples
•  Exemple
–  Donnez les numéros et les montants des
contrats de l’employé numéro 1
SQL>

10/12/13
Page 69

SELECT le.ref_contrat.no_int, le.ref_contrat.montant FROM
THE(SELECT e.lieux_interventions FROM employes e WHERE
e.numero='1') le;
Interrogation des tuples
•  Exemple
–  Afficher les informations relatives aux
contrats de l’employé numéro « 1 »
SQL>

SELECT (Li.ref_contrat)
FROM THE (SELECT Emp.lieux_interventions
FROM Employes Emp
WHERE Emp.numero = '1') Li;

000022020876B2245DBE325C5FE03400400B40DCB176B2245DBE305C5FE034
00400B40DCB1

SQL>

10/12/13
Page 70

SELECT DEREF (Li.ref_contrat)
FROM THE (SELECT Emp.lieux_interventions
FROM Employes Emp
WHERE Emp.numero = '1') Li;
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN)
–  Syntaxe
SQL>

10/12/13
Page 71

SELECT Nom_de_fonction ( paramètres )!
!FROM Nom_de_relation!
![WHERE condition1]!
![GROUP BY condition2 [HAVING condition3]]!
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN)
–  Exemple
•  Afficher le nombre des employés qui habitent
Dijon
SQL>

10/12/13
Page 72

SELECT count(*)
FROM Employes Emp
WHERE emp.adr.ville = 'Dijon';
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN) sur
une table imbriquée
–  Syntaxe
SQL> SELECT Nom_de_fonction ( paramètres )
FROM THE (SELECT alias.tab_imb
FROM Table
alias
WHERE alias.nom_attribut = valeur );

10/12/13
Page 73
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN) sur
une table imbriquée
–  Exemple
•  Donnez le nombre de contrats de l’employé
numéro 1
SQL> SELECT count (*)
FROM THE (SELECT e.lieux_interventions
FROM Employes e
WHERE e.numero = 1);

10/12/13
Page 74
Interrogation des tuples
•  Utilisation des fonctions d agrégats
(COUNT, SUM, AVG, MAX, MIN) sur
une table imbriquée
–  Exemple
•  Donnez le nombre de contrats dans la ville de
Dijon pour l’employé numéro « 1 »
SQL> SELECT count (*)
FROM THE (SELECT e.lieux_interventions
FROM Employes e
WHERE e.numero = 1) li
where li.ville='Dijon';

10/12/13
Page 75
Interrogation des tuples
•  Utilisation des curseurs
–  Syntaxe
SQL> SELECT alias. att, CURSOR ( SELECT ti.att2, ti.att2
FROM TABLE (Tab_Imb) ti)
FROM table

alias

WHERE condition;

10/12/13
Page 76
Interrogation des tuples
•  Utilisation des curseurs
–  Exemple
•  Donnez les employés (nom et prénom) et les
villes respectives
SQL> SELECT Emp.numero, Emp.nom, Emp.prenom,
CURSOR (SELECT Li.ville
FROM TABLE(lieux_interventions) Li)
FROM employes Emp;

10/12/13
Page 77
Interrogation des tuples
•  Utilisation des curseurs
–  Exemple
•  Donnez les employés (nom et prénom) et les
contrats respectifs
SQL> SELECT e.numero, e.nom, e.prenom,
CURSOR (SELECT CURSOR (SELECT * FROM contrats p)
FROM TABLE(e.lieux_interventions) d)
FROM Employes e;

10/12/13
Page 78
Heritage
•  Pour utiliser des sous-types dans SQL3,
il faut définir des types non finaux
–  Exemple
SQL> CREATE or replace TYPE etudiant_type AS OBJECT
(no_insee VARCHAR2(13), age NUMBER, nom VARCHAR2(30))
not final;
/
CREATE or replace TYPE etudiant_IUT UNDER etudiant_type
(date_inscription DATE, situa_fam CHAR(1), annee varchar2(4))
final;/

10/12/13
Page 79
Heritage
•  Pour utiliser des sous-types dans SQL3,
il faut définir des types non finaux
–  Exemple
SQL> CREATE TABLE etudiants_IUT of etudiant_IUT
;

10/12/13
Page 80
Heritage
•  Insertion
–  Exemple
SQL> INSERT INTO etudiants_IUT VALUES
('12345555',22,'Almamy','12/12/2005','1','IQ2');

10/12/13
Page 81
Méthodes
• 

Vous pouvez associer à chaque type
un ensemble de méthodes ou fonctions
–  Deux étapes sont à suivre
1.  Lors de déclaration de la fonction (Create ou ALTER)
SQL> CREATE OR REPLACE TYPE Nom_Type !
!
!AS OBJECT (!
!
!
!Nom_attribut1 !Type_Attribut,!
!
!
!Nom_attribut2 !Type_Attribut,!
!
!
!……..!
!
!
!Nom_attributn !Type_Attribut !
[final|not final]!
MEMBER FUNCTION nom_fonction1 RETURN type_données!
MEMBER FUNCTION nom_fonction2 RETURN type_données!
);!
/!

10/12/13
Page 82
Méthodes
• 

Vous pouvez associer à chaque type
un ensemble de méthodes ou fonctions
–  Deux étapes sont à suivre
2.  Spécification du corps de la fonction
SQL> CREATE TYPE BODY Nom_Type AS
MEMBER FUNCTION nom_fonction1() IS
BEGIN
END nom_fonction1() ;
MEMBER FUNCTION nom_fonction2() IS
BEGIN
END nom_fonction2() ;
…
END;
/

10/12/13
Page 83
Conclusions!

10/12/13
Page 84

More Related Content

What's hot

BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceLilia Sfaxi
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du meriseYassine Badri
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donneeswebreaker
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkAmal Abid
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : CassandraLilia Sfaxi
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de donnéesAbdoulaye Dieng
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfFadouaBouafifSamoud
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMajid CHADAD
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.pptIdriss22
 
Le passage du diagramme de classe vers le model objet relationnel
Le passage du diagramme de classe vers le model objet relationnelLe passage du diagramme de classe vers le model objet relationnel
Le passage du diagramme de classe vers le model objet relationnelHassen Sic
 
Ia project Apprentissage Automatique
Ia project Apprentissage AutomatiqueIa project Apprentissage Automatique
Ia project Apprentissage AutomatiqueNizar Bechir
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 
Diagramme de séquences.pdf
 Diagramme de séquences.pdf Diagramme de séquences.pdf
Diagramme de séquences.pdfYasushiTsubakik
 

What's hot (20)

BigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-ReduceBigData_TP1: Initiation à Hadoop et Map-Reduce
BigData_TP1: Initiation à Hadoop et Map-Reduce
 
Introduction à pl/sql
Introduction à pl/sqlIntroduction à pl/sql
Introduction à pl/sql
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
 
Examen sybase - Administration base de donnees
Examen sybase - Administration base de donneesExamen sybase - Administration base de donnees
Examen sybase - Administration base de donnees
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
Presentation sql
Presentation sqlPresentation sql
Presentation sql
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Introduction aux bases de données
Introduction aux bases de donnéesIntroduction aux bases de données
Introduction aux bases de données
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
PROJET JAVA BD MySQL
PROJET JAVA BD MySQLPROJET JAVA BD MySQL
PROJET JAVA BD MySQL
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.ppt
 
Le passage du diagramme de classe vers le model objet relationnel
Le passage du diagramme de classe vers le model objet relationnelLe passage du diagramme de classe vers le model objet relationnel
Le passage du diagramme de classe vers le model objet relationnel
 
Ia project Apprentissage Automatique
Ia project Apprentissage AutomatiqueIa project Apprentissage Automatique
Ia project Apprentissage Automatique
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Diagramme de séquences.pdf
 Diagramme de séquences.pdf Diagramme de séquences.pdf
Diagramme de séquences.pdf
 

Similar to Sql3

1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdfImaneZoubir1
 
rapport de stage
rapport de stagerapport de stage
rapport de stagenideleray
 
Cours_JavascriptA.pdf
Cours_JavascriptA.pdfCours_JavascriptA.pdf
Cours_JavascriptA.pdfYaminaGh1
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetAmine Chkr
 
Fonctions Mono-Ligne
Fonctions Mono-LigneFonctions Mono-Ligne
Fonctions Mono-Lignewebreaker
 
Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2hortis
 
Datastudio : du basique au connecteur TEKNSEO 2018
Datastudio : du basique au connecteur TEKNSEO 2018Datastudio : du basique au connecteur TEKNSEO 2018
Datastudio : du basique au connecteur TEKNSEO 2018Vincent Lahaye
 
Chapitre 2 Interrogation de Représentations Multidimensionnelles
Chapitre 2 Interrogation de Représentations MultidimensionnellesChapitre 2 Interrogation de Représentations Multidimensionnelles
Chapitre 2 Interrogation de Représentations MultidimensionnellesMohamed Mkaouar
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Business Intelligence system
Business Intelligence system Business Intelligence system
Business Intelligence system Basma Saad
 
Projet tutoré_présentation PowerPoint.pptx
Projet tutoré_présentation PowerPoint.pptxProjet tutoré_présentation PowerPoint.pptx
Projet tutoré_présentation PowerPoint.pptxDavidVHOUMBY
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptxMaNl13
 
D3 js-last
D3 js-lastD3 js-last
D3 js-lastTECOS
 

Similar to Sql3 (20)

1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf1-pl-sql 2021 2022.pdf
1-pl-sql 2021 2022.pdf
 
Plsql
PlsqlPlsql
Plsql
 
rapport de stage
rapport de stagerapport de stage
rapport de stage
 
SQL et MySQL
SQL et MySQLSQL et MySQL
SQL et MySQL
 
Cours_JavascriptA.pdf
Cours_JavascriptA.pdfCours_JavascriptA.pdf
Cours_JavascriptA.pdf
 
U M L Analyse Et Conception Objet
U M L Analyse Et Conception ObjetU M L Analyse Et Conception Objet
U M L Analyse Et Conception Objet
 
Uml
UmlUml
Uml
 
Fonctions Mono-Ligne
Fonctions Mono-LigneFonctions Mono-Ligne
Fonctions Mono-Ligne
 
Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2Mardi gras du 2 juin 2010 : CSIM2
Mardi gras du 2 juin 2010 : CSIM2
 
Sds Programme
Sds ProgrammeSds Programme
Sds Programme
 
algo-imsi-2.pdf
algo-imsi-2.pdfalgo-imsi-2.pdf
algo-imsi-2.pdf
 
Datastudio : du basique au connecteur TEKNSEO 2018
Datastudio : du basique au connecteur TEKNSEO 2018Datastudio : du basique au connecteur TEKNSEO 2018
Datastudio : du basique au connecteur TEKNSEO 2018
 
Chapitre 2 Interrogation de Représentations Multidimensionnelles
Chapitre 2 Interrogation de Représentations MultidimensionnellesChapitre 2 Interrogation de Représentations Multidimensionnelles
Chapitre 2 Interrogation de Représentations Multidimensionnelles
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Business Intelligence system
Business Intelligence system Business Intelligence system
Business Intelligence system
 
Projet tutoré_présentation PowerPoint.pptx
Projet tutoré_présentation PowerPoint.pptxProjet tutoré_présentation PowerPoint.pptx
Projet tutoré_présentation PowerPoint.pptx
 
Plsql2
Plsql2Plsql2
Plsql2
 
PL LSQL.pptx
PL LSQL.pptxPL LSQL.pptx
PL LSQL.pptx
 
La parallélisation au service de l'optimisation
La parallélisation au service de l'optimisationLa parallélisation au service de l'optimisation
La parallélisation au service de l'optimisation
 
D3 js-last
D3 js-lastD3 js-last
D3 js-last
 

More from rchbeir

Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)
Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)
Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)rchbeir
 
SS tree (par SYLLA Demba et TALBI Rachid)
SS tree (par SYLLA Demba et TALBI Rachid)SS tree (par SYLLA Demba et TALBI Rachid)
SS tree (par SYLLA Demba et TALBI Rachid)rchbeir
 
Ranking (par IBRAHIM Sirine et TANIOS Dany)
Ranking (par IBRAHIM Sirine et TANIOS	 Dany)Ranking (par IBRAHIM Sirine et TANIOS	 Dany)
Ranking (par IBRAHIM Sirine et TANIOS Dany)rchbeir
 
Crawlers (par DE COURCHELLE Inès et JACOB Sophie)
Crawlers (par DE COURCHELLE Inès et JACOB Sophie)Crawlers (par DE COURCHELLE Inès et JACOB Sophie)
Crawlers (par DE COURCHELLE Inès et JACOB Sophie)rchbeir
 
Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)
Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)
Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)rchbeir
 
NoSQL (par HEGUY Xabier)
NoSQL (par HEGUY Xabier)NoSQL (par HEGUY Xabier)
NoSQL (par HEGUY Xabier)rchbeir
 
Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)
Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)
Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)rchbeir
 
LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)
LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)
LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)rchbeir
 
Arbre b (par EL HACHEM Marwan et RICHA Elias)
Arbre b (par EL HACHEM Marwan et RICHA Elias)Arbre b (par EL HACHEM Marwan et RICHA Elias)
Arbre b (par EL HACHEM Marwan et RICHA Elias)rchbeir
 
Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)
Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)
Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)rchbeir
 
Information Retrieval
Information RetrievalInformation Retrieval
Information Retrievalrchbeir
 

More from rchbeir (11)

Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)
Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)
Web ontologie language (par RAFEH Aya et VAILLEUX Arnaud)
 
SS tree (par SYLLA Demba et TALBI Rachid)
SS tree (par SYLLA Demba et TALBI Rachid)SS tree (par SYLLA Demba et TALBI Rachid)
SS tree (par SYLLA Demba et TALBI Rachid)
 
Ranking (par IBRAHIM Sirine et TANIOS Dany)
Ranking (par IBRAHIM Sirine et TANIOS	 Dany)Ranking (par IBRAHIM Sirine et TANIOS	 Dany)
Ranking (par IBRAHIM Sirine et TANIOS Dany)
 
Crawlers (par DE COURCHELLE Inès et JACOB Sophie)
Crawlers (par DE COURCHELLE Inès et JACOB Sophie)Crawlers (par DE COURCHELLE Inès et JACOB Sophie)
Crawlers (par DE COURCHELLE Inès et JACOB Sophie)
 
Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)
Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)
Quad-Tree et Kd-Tree (par MARQUES Patricia et OLIVIER Aymeric)
 
NoSQL (par HEGUY Xabier)
NoSQL (par HEGUY Xabier)NoSQL (par HEGUY Xabier)
NoSQL (par HEGUY Xabier)
 
Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)
Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)
Mpeg7 et comm ontology (par MOHIBE Amine et BENSLIMANE Mohamed-Amine)
 
LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)
LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)
LSI latent (par HATOUM Saria et DONGO ESCALANTE Irvin Franco)
 
Arbre b (par EL HACHEM Marwan et RICHA Elias)
Arbre b (par EL HACHEM Marwan et RICHA Elias)Arbre b (par EL HACHEM Marwan et RICHA Elias)
Arbre b (par EL HACHEM Marwan et RICHA Elias)
 
Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)
Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)
Adaptative hypermedia (par MALKI Sara et MAKSIMOVICH Aleksandra)
 
Information Retrieval
Information RetrievalInformation Retrieval
Information Retrieval
 

Sql3

  • 1. (" LABORATOIRE D’INFORMATIQUE DE L’UNIVERSITE DE PAU ET DES PAYS DE L’ADOUR BDD Avancées SQL3 Richard Chbeir, Ph.D.
  • 2. Plan! Encapsulation des objets Interrogation des objets Manipulation des objets Introduction" 10/12/13 Page 2 •  Fonctions et procédures
  • 5. Comment faire? Définition d’un nouveau Type Abstrait de Données ou TAD 10/12/13 Page 5
  • 6. Introduction •  TAD –  Une structure de données partagée –  Inclut des méthodes qui sont des procédures ou des fonctions permettant de manipuler les objets ou instances du type abstrait –  Ne peut pas contenir de contraintes (NOT NULL, CHECK, …) 10/12/13 Page 6
  • 7. Introduction •  Autres types de TAD –  Large Object Bloc (LOB) •  Binary LOB (BLOB) : stockage des données binaires non structurées (4Go) •  Character LOB (CLOB) : stockage de données caractères (4Go) •  Binary FILE (BFILE) : fichiers binaires localisés à l extérieur de la BDD 10/12/13 Page 7
  • 8. Introduction •  Usage des TAD –  Dans une table –  Dans un attribut d’une table relationnelle –  Etc. 10/12/13 Page 8
  • 9. Introduction •  Création d’un TAD –  Syntaxe SQL> CREATE OR REPLACE TYPE Nom_Type ! ! !AS OBJECT (! ! ! !Nom_attribut1 !Type_Attribut,! ! ! !Nom_attribut2 !Type_Attribut,! ! ! !……..! ! ! !Nom_attributn !Type_Attribut ! [final|not final]! ! ! !)! ; /! 10/12/13 Page 9
  • 10. Introduction •  Création d’un TAD –  Exemple SQL> CREATE OR REPLACE TYPE adresse_type ! !AS OBJECT (! ! !norue NUMBER, ! ! !rue VARCHAR(20), ! ! !ville VARCHAR2(30), ! ! !code_postal VARCHAR2(10)) ! /! ADRESSE_TYPE NORUE 10/12/13 Page 10 RUE VILLE CODE_POSTAL
  • 11. Introduction •  Création d’un TAD –  Type utilisé par un attribut d’une table relationnelle •  Exemple SQL> CREATE TABLE employe (! !norue NUMBER PRIMARY KEY,! !dept VARCHAR2(10),! !sal NUMBER, ! !adr adresse_type);! Employe NumEmp dept sal ADR NOR UE VILLE CODE_POSTAL … … … … … 10/12/13 Page 11 RUE … … … Une table contient un TAD est une table relationnelle-objet
  • 12. Introduction •  Manipulation des TAD –  Insertion des tuples •  Exemple (insérer les informations de l’employé numéro 1 dans la table Employé) SQL> INSERT INTO Employe( 1, 'Informatique', 2000, adresse_type(98,'Faubourg Raines',’Lyon',’69000’) ) ; 10/12/13 Page 12
  • 13. Introduction •  Manipulation des TAD –  Modification des tuples •  Exemple (modifier le salaire et le numéro de la rue de l’employé lyonnais qui porte le numéro 1) SQL> UPDATE Employe e SET e.sal= 200, e.adr.rue=’130' WHERE e.adr.ville LIKE '%Ly%' and e.numero='1'; Utilisation d’alias obligatoire lors de la manipulation 10/12/13 Page 13
  • 14. Introduction •  Manipulation des TAD –  Interrogation des tuples •  Exemple (trouver tous les employés lyonnais) SQL> 10/12/13 Page 14 SELECT e.numero FROM employes e WHERE e.adr.ville LIKE '%Ly%’;
  • 15. Introduction •  Manipulation des TAD –  Suppression des tuples •  Exemple (supprimer(le(tuple(de(l’employé(dont( l’adresse(est(130(Ray(Lyon(6) SQL> 10/12/13 Page 15 DELETE FROM employes e WHERE e.adr = adresse_type(130,’Ray',’Lyon',’6’);
  • 19. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer!le!type!SecretaireOtype)! SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT! ! !(! ! !Nemp !VARCHAR2(3),! ! !Age !NUMBER,! ! !Nom !VARCHAR2(15))! /! Secretaire5type Nemp 10/12/13 Page 19 age nom
  • 20. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer!le!type!SecretaireSOtype)! SQL> CREATE OR REPLACE TYPE Secretaire-Type AS OBJECT! ! !(! ! !Nemp !VARCHAR2(3),! ! !Age !NUMBER,! ! !Nom !VARCHAR2(15))! /! SQL> CREATE OR REPLACE TYPE SecretaireS_Type! !AS TABLE OF Secretaire-Type ! / ! SecretaireS_Type" Nemp 10/12/13 Page 20 age Nom
  • 21. Introduction! •  TAD!et!table!imbriquée! –  Exemple!(créer(la(table(Département)! SQL> CREATE TABLE Departement ( numdep VARCHAR2(5) PRIMARY KEY, budget NUMBER, secrétaires SecretaireS_Type ) NESTED TABLE secrétaires STORE AS tabsec; numdep Secrétaires budget Nemp 10/12/13 Page 21 D4 325000 125000 nom N2 26 Thuram N3 30 Barthez N5 D3 age 26 Dessailly N6 24 Lizarazu N7 32 Deschamps
  • 22. Introduction •  Manipulation des TAD –  Insertion des tuples dans une table imbriquée •  Exemple (insérer toutes les informations du département D3) SQL> INSERT INTO Departement VALUES ( ‘D3’, 325000, SecretaireS-Type(Secretaire-Type(‘N2’,26,’Thuram’), Secretaire-Type(‘N3’,30,’Barthez’) ) ) ; numdep Secrétaires budget Nemp 10/12/13 Page 22 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  • 23. Introduction •  Manipulation des TAD –  Modification des tuples dans une table imbriquée •  Exemple (modifier l’âge de tous les secrétaires du département D3 dont le nom commence par la lettre B) SQL> UPDATE THE (SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') a SET a.age = 38 WHERE a.nom LIKE ‘B%'; numdep Secrétaires budget Nemp 10/12/13 Page 23 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  • 24. Introduction •  Manipulation des TAD –  Interrogation des tuples dans une table imbriquée •  Exemple (trouver l'âge des secrétaires du département D3) SELECT la.age FROM THE (SELECT e.Secrétaires FROM Departement e WHERE e.numdep=’D3') la; SQL> numdep Secrétaires budget Nemp 10/12/13 Page 24 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  • 25. Introduction •  Manipulation des TAD –  Interrogation des tuples dans une table imbriquée •  Exemple (trouver les secrétaires de chaque département) SQL> SELECT D.numdep, S.* FROM Departement D, TABLE (D.Secrétaires) S; numdep Secrétaires budget Nemp 10/12/13 Page 25 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  • 26. Introduction •  Manipulation des TAD –  Suppression des tuples dans une table imbriquée •  Exemple (supprimer les tuples des secrétaires du département D3 ayant plus de 30 ans) SQL> DELETE FROM the (SELECT e.Secrétaires FROM Departement e WHERE e.numero=’D3') li WHERE li.age >= 30 ; numdep Secrétaires budget Nemp 10/12/13 Page 26 D3 325000 age nom N2 26 Thuram N3 30 Barthez
  • 28. Et si avait le schéma suivant ? Véhicule Employe NumEmp dept salaire ADR N°Véhicule Num Type Marque Date … … … … .. … … … … … … … … … … … … … Contrat NumEmp Montant … … … 10/12/13 Page 28 N°Int … Intervention Poss. Date N° Ville Distance … … … … … … … … Approche relationnelle
  • 29. Comment le transformer en … Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … Ville … Véhicule Distance Contrat Num Type Marque Date N°Int Montant … … … … … … … 10/12/13 Page 29 @contrat … … … … … Approche objet-relationnelle Date
  • 30. Table objet-relationnelle •  Définition –  Une table est dite objet-relationnelle quand elle dépend d un TAD Les enregistrements d une table OR peuvent être considérés comme des objets car ils possèdent tous un Object ID (OID) 10/12/13 Page 30
  • 31. Table objet-relationnelle •  Pseudo-colonnes –  ROWID •  Désigne une pseudo-colonne qui contient l adresse physique de chaque enregistrement d une base de données Oracle –  OID •  Dans Oracle, chaque objet (table, type, objets des tables, …) a un identificateur unique (OID) sur 16 positions –  REF •  Chaque objet, au sens Oracle du terme, possède un OID via une pseudo-colonne de type REF. Chaque REF est composé d une partie de l OID, des informations de la table objet-relationnelle et éventuellement du ROWID. 10/12/13 Page 31
  • 32. Table objet-relationnelle •  Pour créer une table Objet-relationnelle ayant une structure d un type préalablement défini SQL> CREATE TABLE Nom_table OF Nom_Type ! ! ![(Contraintes_d_integrite)]! ;! 10/12/13 Page 32
  • 33. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT! ! !(no_int ! !VARCHAR2 (8),! ! !date_int !DATE,! ! !Montant ! !NUMBER)! /! contrat_typ No_int 10/12/13 Page 33 Date_int Montant
  • 34. Table objet-relationnelle •  Création de la table SQL> CREATE TABLE Contrats OF contrat_typ! (CONSTRAINT PK_con PRIMARY KEY(no_int))! ;! 10/12/13 Page 34
  • 35. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT! ! !(no_immat !VARCHAR2 (8),! ! !date_immat !DATE,! ! !type_v !VARCHAR2(7),! ! !marque !VARCHAR2(15))! /! veh_typ No_immat 10/12/13 Page 35 Date_immat Type_v marque
  • 36. Table objet-relationnelle •  Création de la table SQL> CREATE TABLE Vehicules OF veh_typ! (CONSTRAINT PK_veh PRIMARY KEY(no_immat))! ;! 10/12/13 Page 36
  • 37. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE adresse_type ! !AS OBJECT (! ! !norue NUMBER, ! ! !rue VARCHAR(20), ! ! !ville VARCHAR2(30), ! ! !code_postal VARCHAR2(10)) ! /! ADRESSE_TYPE NORUE 10/12/13 Page 37 RUE VILLE CODE_POSTAL
  • 38. Table objet-relationnelle •  Création des types utilisés –  Attention aux références/pointeurs SQL> CREATE OR REPLACE TYPE Lieu_intervention AS OBJECT! ! !(! ! !ref_contrat !REF contrat_typ,! ! !Ville ! !VARCHAR2(15),! ! !Distance !NUMBER)! /! Lieu_intervention ref_contrat 10/12/13 Page 38 Ville Distance
  • 39. Table objet-relationnelle •  Création des types utilisés (à partir d’un autre type) SQL> CREATE OR REPLACE TYPE Lieux_intervention! !AS TABLE OF lieu_intervention! / ! 10/12/13 Page 39
  • 40. Table objet-relationnelle •  Création des types utilisés SQL> CREATE OR REPLACE TYPE employe_type As OBJECT (! !numero ! !VARCHAR2(5),! !nom ! !VARCHAR2(15),! !prenom ! !VARCHAR2(15),! !dept ! !VARCHAR2(20),! !veh !REF !veh_typ,! !ADR !adresse_type,! !lieux_interventions!lieux_intervention)! / ! 10/12/13 Page 40
  • 41. Table objet-relationnelle •  Création de la table OR SQL> CREATE TABLE Employes OF employe_type! !(CONSTRAINT PK_employe PRIMARY KEY(numero))! !NESTED TABLE lieux_interventions STORE AS tab_int! ;! 10/12/13 Page 41
  • 42. Le script SQL OR Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … Ville … Véhicule Distance Contrat Num Type Marque Date N°Int Montant … … … … … … … 10/12/13 Page 42 @contrat … … … … … Date
  • 43. Le script SQL OR SQL> CREATE OR REPLACE TYPE veh_typ AS OBJECT! !(no_immat !VARCHAR2 (8),! !date_immat !DATE,! !type_v !VARCHAR2(7),! !marque !VARCHAR2(15))! /! SQL> CREATE TABLE Vehicules OF veh_typ! (CONSTRAINT PK_veh PRIMARY KEY(no_immat))! ;! Véhicule Num Type Marque Date … … … … … … … … SQL> CREATE OR REPLACE TYPE contrat_typ AS OBJECT! !(no_int !VARCHAR2 (8),! !date_int !DATE,! !Montant !NUMBER)! /! SQL> CREATE TABLE Contrats OF contrat_typ! (CONSTRAINT PK_con PRIMARY KEY(no_int))! ;! Contrat N°Int … 10/12/13 Page 43 Montant … … … Date
  • 44. Le script SQL OR Employe NumEmp dept sal @veh ADR NOR UE Lieux Interventions RUE VILLE CODE_POSTAL … … … … … … … … CREATE or replace TYPE adresse_type norue NUMBER, rue VARCHAR(20), ville VARCHAR2(30), @contrat / CREATE OR REPLACE TYPE employe_type As OBJECT ( numero AS OBJECT( NUMBER) REF ADR VARCHAR2(15), Distance VARCHAR2(20), veh ref_contrat REF contrat_typ, Ville VARCHAR2(15), dept CREATE OR REPLACE TYPE Lieu_intervention VARCHAR2(15), prenom / VARCHAR2(5), nom code_postal VARCHAR2(10)) 10/12/13 Page 44 Distance CREATE or REPLACE TYPE Lieux_intervention as Table of lieu_intervention AS OBJECT ( / Ville adresse_type, lieux_interventions veh_typ, lieux_intervention) / CREATE TABLE Employes OF employe_type (CONSTRAINT PK_employe PRIMARY KEY(numero)) NESTED TABLE lieux_interventions STORE AS tab_int;
  • 45. A vous •  Table!OR! Departement numdep Secrétaires budget Nemp D3 325000 D4 10/12/13 Page 45 125000 N1 28 Zidane N2 26 Thuram N3 30 Barthez 26 Dessailly N6 24 Lizarazu N7 253000 nom N5 D2 age 32 Deschamps
  • 46. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD SQL> INSERT INTO Nom_Table ! ! !VALUES ( V1, V2, ….., Nom_Type( ! ! !val1, val2, ….) ! ! !); ! Constructeur 10/12/13 Page 46
  • 47. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD –  Exemple SQL> insert into contrats values('1','12/12/2006',500); SQL> insert into contrats values( contrat_typ( 1','12/12/2006',500) ); Contrat N°Int … 10/12/13 Page 47 Montant … … … Date
  • 48. Insertion des tuples •  Dans une table OR avec un attribut défini avec un TAD –  Exemple SQL> insert into vehicules values( veh_typ( 2', BMW , X5 ,'12/12/2006') ); Véhicule Num Marque Date … … … … … 10/12/13 Page 48 Type … … …
  • 49. Insertion des tuples •  Dans une table OR contenant un pointeur Employe NumEmp dept sal @veh SQL> INSERT INTO Employes … select 1,'Informatique', 2000, ref(a) from vehicules a where a.no_immat='2' … ; Véhicule Num Marque Date … … … … … 10/12/13 Page 49 Type … … …
  • 50. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Syntaxe -- Initialisation de la table imbriquée à vide ! SQL> INSERT INTO Nom_Table VALUES ( V1, V2, ….., Ens_Nom_Type() ); -- Avec insertion de n-uplets dans la table imbriquée 10/12/13 Page 50 SQL> INSERT INTO Nom_Table VALUES ( V1, V2, ….., Ens_Nom_Type( Nom_type1 ( …….), Nom_type1 ( …….), Nom_type1 ( …….) ) );
  • 51. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Exemple SQL> INSERT INTO Employes select 1, ’Simone', ’Dijon','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention() from vehicules a where a.no_immat='2' ; 10/12/13 Page 51
  • 52. Insertion des tuples •  Dans une table OR contenant une table imbriquée –  Exemple SQL> INSERT INTO Employes select 1, ’Simone', ’Dijon','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention() SQL> INSERT vehicules a where a.no_immat='2' from INTO Employes select 2, ’Marqua', ’Xtophe','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), ; Lieux_Intervention(Lieu_intervention(null,'Dijon',500)) from vehicules a where a.no_immat='2' ; 10/12/13 Page 52
  • 53. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Syntaxe SQL> INSERT INTO THE (SELECT t.Tab_Imb FROM Nom_table t WHERE t.Attr_i = Valeur) SELECT V1, V2, ,REF(n)FROM Table_R n WHERE n.Attr_j = Valeur ; 10/12/13 Page 53
  • 54. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Exemple nécessitant l’insertion dans la table principale SQL> INSERT INTO Employes select 3, ’Xavier', ’Dupont','Informatique', ref(a), adresse_type(98,'Faubourg Raines','Dijon','21000'), Lieux_Intervention(Lieu_intervention(null,'Dijon',500), Lieu_intervention(ref(v),'Lyon',600) ) from vehicules a, contrats v where v.no_int='2' and a.no_immat='2' ; 10/12/13 Page 54
  • 55. Insertion des tuples •  Dans une table imbriquée contenant un pointeur –  Exemple ne nécessitant pas l’insertion dans la table principale SQL> INSERT INTO the (select e.Lieux_interventions from Employes e where e.numero='3') select ref(v), Paris',800 from contrats v where v.no_int='1' ; 10/12/13 Page 55
  • 56. Mise à jour des tuples •  Dans une table principale –  Syntaxe SQL> UPDATE Nom_de_table Alias SET Alias.Nom_Attribut1 = expression1 Alias.Nom_Attribut2 = expression2 ……. [WHERE Condition ] ; 10/12/13 Page 56
  • 57. Mise à jour des tuples •  Dans une table principale –  Exemple SQL> UPDATE Employes e SET e.Nom='Nicolle', e.Prenom='Christophe' WHERE e.adr.ville LIKE '%Dijon%' and e.numero='1'; 10/12/13 Page 57
  • 58. Mise à jour des tuples •  Dans une table imbriquée –  Syntaxe SQL> 10/12/13 Page 58 UPDATE THE (SELECT Nom_Alias1.Table_imbriquée FROM Table Nom_Alias1 WHERE Condition ) Nom_alias2 SET Nom_alias2.Attribut = expression WHERE Condition ;
  • 59. Mise à jour des tuples •  Dans une table imbriquée –  Exemple •  Modifier la distance d intervention à 8888 de l employé 1 dans la ville de Dijon SQL> UPDATE THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero='1') a SET a.distance = 8888 WHERE a.ville LIKE '%Dijon%'; 10/12/13 Page 59
  • 60. Mise à jour des tuples •  Dans une table imbriquée –  Exemple •  Pour l’employé 2, changer son intervention associée à la ville de Dijon, la nouvelle référence ayant pour numéro T1234 SQL> UPDATE THE ( SELECT e.lieux_interventions FROM Employes e WHERE e.numero='2') a SET a.ref_contrat = (select ref(v) from contrats v where v.No_int ='T1234') WHERE a.ville LIKE '%Dijon% ; 10/12/13 Page 60
  • 61. Suppression des tuples •  Syntaxe générale SQL> 10/12/13 Page 61 DELETE FROM Nom_table Alias WHERE Alias.Nom_attribut = Expression ;
  • 62. Suppression des tuples •  Condition de suppression portant sur une table imbriquée –  Exemple •  Supprimer les employés qui ont eu des interventions à Lyon SQL> DELETE FROM Employes e WHERE EXISTS(select * from the (SELECT a.lieux_interventions FROM employes a WHERE a.numero=e.numero) li WHERE li.ville = Lyon') ; 10/12/13 Page 62
  • 63. Suppression des tuples •  Condition de suppression portant sur les n-uplets d’une table imbriquée –  Exemple •  Supprimer les interventions de l’employé 2 qui se sont déroulées à Lyon SQL> DELETE FROM the (SELECT e.lieux_interventions FROM employes e WHERE e.numero='2') li WHERE li.ville LIKE '%Lyon% ; 10/12/13 Page 63
  • 65. Interrogation des tuples •  Syntaxe générale SQL> SELECT t.Nom_attr1, t.Nom_ attr2, , …. FROM Table t; Utilisation d'un alias obligatoire pour les attributs structurés 10/12/13 Page 65
  • 66. Interrogation des tuples •  Exemple –  Donnez le numéro, le nom et le prénom des employés qui ont un véhicule mis en circulation après le 01/06/2006 SQL> 10/12/13 Page 66 SELECT e.numero, e.nom, e.prenom FROM employes e WHERE e.VEH.date_immat>='01/12/2006';
  • 67. Interrogation des tuples •  Exemple –  Donnez le nom des villes où intervient l’employé numéro 2 SELECT la.ville FROM THE (SELECT e.lieux_interventions FROM employes e WHERE e.numero='2') la; SQL> 10/12/13 Page 67
  • 68. Interrogation des tuples •  Exemple –  Donnez le nom des villes où intervient tous les employés SQL> 10/12/13 Page 68 SELECT la.ville FROM employes e, TABLE(e.lieux_interventions) la;
  • 69. Interrogation des tuples •  Exemple –  Donnez les numéros et les montants des contrats de l’employé numéro 1 SQL> 10/12/13 Page 69 SELECT le.ref_contrat.no_int, le.ref_contrat.montant FROM THE(SELECT e.lieux_interventions FROM employes e WHERE e.numero='1') le;
  • 70. Interrogation des tuples •  Exemple –  Afficher les informations relatives aux contrats de l’employé numéro « 1 » SQL> SELECT (Li.ref_contrat) FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp WHERE Emp.numero = '1') Li; 000022020876B2245DBE325C5FE03400400B40DCB176B2245DBE305C5FE034 00400B40DCB1 SQL> 10/12/13 Page 70 SELECT DEREF (Li.ref_contrat) FROM THE (SELECT Emp.lieux_interventions FROM Employes Emp WHERE Emp.numero = '1') Li;
  • 71. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) –  Syntaxe SQL> 10/12/13 Page 71 SELECT Nom_de_fonction ( paramètres )! !FROM Nom_de_relation! ![WHERE condition1]! ![GROUP BY condition2 [HAVING condition3]]!
  • 72. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) –  Exemple •  Afficher le nombre des employés qui habitent Dijon SQL> 10/12/13 Page 72 SELECT count(*) FROM Employes Emp WHERE emp.adr.ville = 'Dijon';
  • 73. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Syntaxe SQL> SELECT Nom_de_fonction ( paramètres ) FROM THE (SELECT alias.tab_imb FROM Table alias WHERE alias.nom_attribut = valeur ); 10/12/13 Page 73
  • 74. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Exemple •  Donnez le nombre de contrats de l’employé numéro 1 SQL> SELECT count (*) FROM THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero = 1); 10/12/13 Page 74
  • 75. Interrogation des tuples •  Utilisation des fonctions d agrégats (COUNT, SUM, AVG, MAX, MIN) sur une table imbriquée –  Exemple •  Donnez le nombre de contrats dans la ville de Dijon pour l’employé numéro « 1 » SQL> SELECT count (*) FROM THE (SELECT e.lieux_interventions FROM Employes e WHERE e.numero = 1) li where li.ville='Dijon'; 10/12/13 Page 75
  • 76. Interrogation des tuples •  Utilisation des curseurs –  Syntaxe SQL> SELECT alias. att, CURSOR ( SELECT ti.att2, ti.att2 FROM TABLE (Tab_Imb) ti) FROM table alias WHERE condition; 10/12/13 Page 76
  • 77. Interrogation des tuples •  Utilisation des curseurs –  Exemple •  Donnez les employés (nom et prénom) et les villes respectives SQL> SELECT Emp.numero, Emp.nom, Emp.prenom, CURSOR (SELECT Li.ville FROM TABLE(lieux_interventions) Li) FROM employes Emp; 10/12/13 Page 77
  • 78. Interrogation des tuples •  Utilisation des curseurs –  Exemple •  Donnez les employés (nom et prénom) et les contrats respectifs SQL> SELECT e.numero, e.nom, e.prenom, CURSOR (SELECT CURSOR (SELECT * FROM contrats p) FROM TABLE(e.lieux_interventions) d) FROM Employes e; 10/12/13 Page 78
  • 79. Heritage •  Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux –  Exemple SQL> CREATE or replace TYPE etudiant_type AS OBJECT (no_insee VARCHAR2(13), age NUMBER, nom VARCHAR2(30)) not final; / CREATE or replace TYPE etudiant_IUT UNDER etudiant_type (date_inscription DATE, situa_fam CHAR(1), annee varchar2(4)) final;/ 10/12/13 Page 79
  • 80. Heritage •  Pour utiliser des sous-types dans SQL3, il faut définir des types non finaux –  Exemple SQL> CREATE TABLE etudiants_IUT of etudiant_IUT ; 10/12/13 Page 80
  • 81. Heritage •  Insertion –  Exemple SQL> INSERT INTO etudiants_IUT VALUES ('12345555',22,'Almamy','12/12/2005','1','IQ2'); 10/12/13 Page 81
  • 82. Méthodes •  Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions –  Deux étapes sont à suivre 1.  Lors de déclaration de la fonction (Create ou ALTER) SQL> CREATE OR REPLACE TYPE Nom_Type ! ! !AS OBJECT (! ! ! !Nom_attribut1 !Type_Attribut,! ! ! !Nom_attribut2 !Type_Attribut,! ! ! !……..! ! ! !Nom_attributn !Type_Attribut ! [final|not final]! MEMBER FUNCTION nom_fonction1 RETURN type_données! MEMBER FUNCTION nom_fonction2 RETURN type_données! );! /! 10/12/13 Page 82
  • 83. Méthodes •  Vous pouvez associer à chaque type un ensemble de méthodes ou fonctions –  Deux étapes sont à suivre 2.  Spécification du corps de la fonction SQL> CREATE TYPE BODY Nom_Type AS MEMBER FUNCTION nom_fonction1() IS BEGIN END nom_fonction1() ; MEMBER FUNCTION nom_fonction2() IS BEGIN END nom_fonction2() ; … END; / 10/12/13 Page 83