Database Reference
In-Depth Information
Vues complexes
Une vue complexe est caractérisée par le fait qu'elle contient, dans sa déinition, plusieurs
tables (jointures, sous-requêtes, expressions de tables : CTE), une fonction appliquée à
des regroupements, une fonction de fenêtrage, le mot-clé
DISTINCT
ou des expressions de
colonnes.
La mise à jour directe (par
INSERT
ou
UPDATE
ou
DELETE
) de telles vues n'est pas possible
sans programmer un déclencheur
INSTEAD OF
.
Le tableau suivant présente la vue multitable
v_dept_calculs
du schéma
soutou
qui extrait
pour chaque département, le nom du manager, le nombre d'employés, ainsi que les salaires
minimum, maximum et moyens.
Tableau 4-5 : Création d'une vue complexe
Création de la vue
Structure de la vue
CREATE VIEW soutou.v_dept_calculs
(departement, manager, employes,
min_sal, max_sal, moyenne_sal)
AS SELECT d.department_name, m.last_name,
COUNT(e.department_id), MIN(e.salary),
MAX(e.salary), ROUND(AVG(e.salary),1)
FROM hr.employees e,
hr.departments d, hr.employees m
WHERE e.department_id = d.department_id
AND d.manager_id = m.employee_id
GROUP BY d.department_name, m.last_name
ORDER BY 1;
SQL> DESC soutou.v_dept_calculs;
Name Null? Type
---------------------- --------- ------------
DEPARTEMENT
NOT NULL
VARCHAR2(30)
MANAGER
NOT NULL
VARCHAR2(25)
EMPLOYES NUMBER
MIN_SAL
NUMBER
MAX_SAL
NUMBER
MOYENNE_SAL
NUMBER
Conseil avisé
Il est toujours préférable de programmer une jointure à l'aide de l'opérateur relationnel
INNER
JOIN
plutôt que dans
WHERE
: d'une part, pour des raisons de performances (cer-
tains SGBD y sont sensibles), d'autre part, d'un point de vue de la maintenance du code
(il est plus eficace de modiier une requête ainsi écrite).
Une fois créée, la vue multitable s'interroge simplement (sans jointure). Le tableau suivant
présente une extraction de cette vue.