Duplicate possible:
Différence entre CTE et SubQuery?
J'essayais de comprendre comment utiliser la clause WITH
et l'objectif de la clause WITH
.
Tout ce que j’ai compris, c’est que la clause WITH
remplaçait les sous-requêtes normales.
Quelqu'un peut-il m'expliquer cela avec un petit exemple en détail?
La clause SQL WITH a été introduite par Oracle dans la base de données Oracle 9i release 2. La clause SQL WITH vous permet de donner un nom à un bloc de sous-requête (processus également appelé refactoring de sous-requête), qui peut être référencé à plusieurs endroits dans la requête SQL principale. Le nom attribué à la sous-requête est traité comme s'il s'agissait d'une vue ou d'une table intégrée. La clause SQL WITH est fondamentalement un remplacement instantané de la sous-requête normale.
Syntaxe de la clause SQL WITH
Voici la syntaxe de la clause SQL WITH lors de l'utilisation d'un alias de sous-requête unique.
WITH <alias_name> AS (sql_subquery_statement)
SELECT column_list FROM <alias_name>[,table_name]
[WHERE <join_condition>]
Lorsque vous utilisez plusieurs alias de sous-requête, la syntaxe est la suivante.
WITH <alias_name_A> AS (sql_subquery_statement),
<alias_name_B> AS(sql_subquery_statement_from_alias_name_A
or sql_subquery_statement )
SELECT <column_list>
FROM <alias_name_A>, <alias_name_B> [,table_names]
[WHERE <join_condition>]
Dans la documentation de syntaxe ci-dessus, les occurrences de alias_name
sont un nom explicite que vous donneriez à la sous-requête après la clause AS. Chaque sous-requête doit être séparée par une virgule exemple pour l'instruction WITH . Les autres requêtes suivent les formats standard pour les requêtes SQL SELECT simples et complexes.
Pour plus d'informations: http://www.brighthub.com/internet/web-development/articles/91893.aspx
Cela a été pleinement répondu ici .
Voir la documentation d'Oracle sur SELECT pour voir comment fonctionne la factorisation de sous-requête et l'exemple de Mark:
WITH employee AS (SELECT * FROM Employees)
SELECT * FROM employee WHERE ID < 20
UNION ALL
SELECT * FROM employee WHERE Sex = 'M'