Oracle by Alex
Home

 

Home

perf

la Pres.

technique

 

 

Interrogation des objets

2.3.1. La clause SELECT monotable.
2.3.2. La clause SELECT multitable.

 

De nouvelles fonctionnalités ont été offertes grâce à la modification du langage SQL d'interrogation des bases de données relationnelles.
Voyons les clauses existant pour cette interrogation.

 

2.3.1. La clause SELECT monotable.

Il s'agit de la clause SELECT classique telle qu'utilisée en relationnel.

SELECT  [DISTINCT] {Champ}* FROM Table [WHERE Cond] [ORDER BY Critère {ASC | DESC}] [GROUP BY Groupe]
 
DISTINCT sert à éliminer les occurences multiples de l'ensemble des résultats
WHERE Cond spécifie la condition pour qu'un enregistrement figure dans l'ensemble des solutions
ORDER BY Critère permet de trier les réponses (ASC : tri ascendant, DESC : tri descendant)
GROUP BY Groupe permet de regrouper les réponses selon un champ qu'elles ont en commun
{Champ}* peut etre remplace par une fonction mathématique de Champ telle que :
COUNT : renvoie le nombre de réponses
AVG : renvoie la moyenne des réponses
SUM : renvoie la somme des réponses
MAX : renvoie le maximum des réponses
MIN : renvoie le minimum des réponses

2.3.2. La clause SELECT multitable.

Alors que l'opération de SELECT multitable reposait le plus souvent dans les SGBD relationnelles sur la jointure par comparaison d'une clé primaire avec une clé étrangère, en objet-relationnel les pointeurs pourront remplacer cette clé étrangère. La jointure est ainsi rendue implicite.

Soient les tables suivantes représentant les relations entre des PC et leur administrateur.
 
nserie adresseIP @administre
P1 193.54.227.59 REF(1) 
P2 193.54.227.200 REF(1) 
P3 193.54.207.100 REF(2)
P4 130.40.120.20 REF(1) 

NB : Dans le champ @administre, REF(1) devrait en fait être une flèche vers l'objet numéro 1 de la table des administrateurs.
 
nadmin age nom
A1 45 Jacques Faure
A2 50 Daniel Vielle
 
Quels sont les numéros de série et les adresses IP des PC administrés par Jacques Faure ?
Q : SELECT p.nserie "PC", p.adresseIP "Adresse IP"
      FROM PC p
      WHERE p.administre.nom = 'Jacques Faure';

R :
 
PC Adresse IP
P1 193.54.227.59
P2 193.54.227.200
P4 130.40.120.20
Note sur les tables imbriquées : il est difficile d'extraire des objets qui proviennent de plusieurs tables imbriquées avec une seule requête SELECT. La documentation d'Oracle 8 mentionne la notion de curseur imbriqué qui permet de sélectionner plusieurs objets avec leur tables imbriquées associées. Cette technique n'est pas encore au point sous l'interface SQL*Plus de Windows (allez savoir pourquoi...). En revanche, elle tourne sous SQL*Plus de Unix.
 
Fonction VALUE() :
Cette fonction s'applique à tout type et renvoie en particulier la valeur des pointeurs. Il s'agit en fait des OID des objets correspondants.
 
Fonction DEREF() :
Elle s'applique à un pointeur et renvoie le contenu du type référencé par ce pointeur.
 
Quels sont les administrateurs qui ont en charge des PC dont l'adresse IP commence par 193.54 ?
Q : SELECT DEREF(p.administre)
      FROM PC p
      WHERE p.adresseIP LIKE '193.54%';

R :
 
DEREF(P.ADMINISTRE)(NADMIN,AGE,NOM)
ADMIN_TYPE('A1', 45, 'Jacques Faure')
ADMIN_TYPE('A1', 45, 'Jacques Faure')
ADMIN_TYPE('A2', 50, 'Daniel Vielle')