Requêtes imbriquées
Oracle permet d’imbriquer les requêtes, c’est-à-dire de placer des requêtes dans les requêtes. Une requête imbriquée peut renvoyer trois types de résultats :
— une valeur scalaire
— une colonne
— une table
Sous requêtes renvoyant une valeur scalaire
Le résultat d’une requête est dit scalaire s’il comporte une seule ligne et une seule colonne. Par exemple :
SELECT COUNT(∗) FROM PRODUIT
COUNT(∗)
4
On peut placer dans une requête une sous-requête calculant un résultat scalaire. Un tel type de sous-requête se place soit comme une colonne supplémentaire, soit comme une valeur servant à évaluer des conditions (WHERE ou HAVING).
Colonne fictive
On peut ajouter une colonne dans une requête, et choisir comme valeurs pour cette colonne le résultat d’une requête. Ce type de requête est souvent une alternative à GROUP BY. Par exemple, la requête suivante nous renvoie, pour tout produit, le nombre de fournisseurs proposant ce produit :
SELECT nomprod , (SELECT COUNT(∗)
FROM PROPOSER PR
WHERE PR . numprod = P . numprod ) AS NB_FOURNISSEURS
FROM PRODUIT P
nomprod NB_FOURNISSEURS
Bocal de cornichons 2
Tube de dentifrice 1
Flacon de lotion anti−escarres 1
Déodorant fraîcheur 96 heures 0
Conditions complexes
On peut construire une condition en utilisant le résultat d’une requête. Pour notre exemple, déclarons d’abord une vue contenant le nombre d’articles proposés par chaque fournisseur,
CREATE VIEW NB_PROD_PAR_FOU AS
SELECT numfou , (SELECT COUNT(∗)
FROM PROPOSER P
WHERE P . numfou = F . numfou ) AS NB_PROD
FROM FOURNISSEUR F
Ensuite, recherchons les noms des fournisseurs proposant le plus de produits :
SELECT nomfou
FROM FOURNISSEUR F , NB_PROD_PAR_FOU N
WHERE F . numfou = N . numfou
AND NB_PROD = (SELECTMAX( NB_PROD )
FROM NB_PROD_PAR_FOU )
nomfou
Paramédical Gisèle
1 Notes de cours
1.1 Introduction
1.1.1 Qu’est-ce qu’un SGBDR ?
1.1.2 SQL
1.1.3 Connexion à une base de données
1.1.4 Consultation des tables
1.1.5 Organisation relationnelle des données
1.2 Contraintes déclaratives
1.2.1 Valeurs par défaut
1.2.2 Champs non renseignés
1.2.3 Clé primaire
1.2.4 Clé étrangère
1.2.5 Syntaxe alternative
1.3 Introduction aux requêtes
1.3.1 Compléments sur SELECT
1.3.2 Instruction WHERE
1.3.3 Conditions
1.3.4 Suppression
1.3.5 Mise à jour
1.4 Jointures
1.4.1 Principe
1.4.2 Produit cartésien
1.4.3 Jointure
1.4.4 Jointures réflexives
1.5 Agrégation de données
1.5.1 Fonctions d’agrégation
1.5.2 Groupage
1.6 Vues
1.6.1 Définition
1.6.2 Syntaxe
1.6.3 Application
1.6.4 Suppression
1.7 Requêtes imbriquées
1.7.1 Sous requêtes renvoyant une valeur scalaire
1.7.2 Sous requêtes renvoyant une colonne
1.7.3 Sous requêtes non corrélées renvoyant une table
1.7.4 Sous requêtes corrélées
1.8 Procédures stockées
1.8.1 Exemple
1.8.2 SQL Procédural
1.8.3 Procédures
1.8.4 Curseurs
1.8.5 Triggers
.1 Scripts de création de tables
.2 Livraisons Sans contraintes
.3 Modules et prerequis
.4 Géométrie
.5 Livraisons
.6 Arbre généalogique
.7 Comptes bancaires
.8 Comptes bancaires avec exceptions
.9 Secrétariat pédagogique
.10 Mariages
.11 Bibliothèque
Introduction aux langage SQL (256 KO) (Cours PDF)