280 votes

Exemple de clause SQL WITH

J'essayais de comprendre comment utiliser le WITH et l'objectif de la WITH clause.

Tout ce que j'ai compris, c'est que le WITH a remplacé les sous-requêtes normales.

Quelqu'un peut-il m'expliquer cela en détail à l'aide d'un petit exemple ?

3 votes

3 votes

Utilisez-vous MYSQL ? car il n'est pas supporté.

0 votes

J'ai mis au point un exemple d'utilisation de la clause WITH pour créer une table statique temporaire. Vous trouverez peut-être cela utile, car il contient des exemples sur la façon d'utiliser les clauses WITH dans vos requêtes. giombetti.com/2014/02/14/…

351voto

cc4re Points 715

La clause SQL WITH a été introduite par Oracle dans la base de données Oracle 9i version 2. La clause SQL WITH vous permet de donner un nom à un bloc de sous-requêtes (un processus également appelé refactoring de sous-requêtes), 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 en ligne. La clause SQL WITH est en fait un remplacement direct 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êtes, 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 syntaxique ci-dessus, les occurrences de alias_name est un nom significatif que vous donnerez à la sous-requête après la clause AS. Chaque sous-requête doit être séparée par une virgule. Exemple d'instruction WITH . Le reste des requêtes suit les formats standard des requêtes SQL SELECT simples et complexes.

Pour plus d'informations : http://www.brighthub.com/internet/web-development/articles/91893.aspx

6 votes

Je l'ai déjà vu, pouvez-vous expliquer cela avec un petit exemple qui serait plus facile à comprendre.

20 votes

Je pense que vous avez besoin d'une virgule après l'expression "AVEC". <alias_name_A> AS (sql_subquery_statement) lors de l'utilisation de plusieurs alias de sous-requêtes.

4 votes

Ce n'est pas vraiment un exemple

118voto

Lo Sauer Points 5469

Cette question a reçu une réponse complète ici .

Voir Documents d'Oracle sur SELECT pour voir comment la factorisation des sous-requêtes fonctionne, 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'

2 votes

Merci surtout pour la première phrase avec un lien :)

8 votes

Oui, en fait, il remplace une sous-requête MAIS vous permet de référencer le résultat de la "sous-requête" à plusieurs endroits.

0 votes

Ne devriez-vous pas mentionner les attributs dans la parenthèse au lieu de (SELECT * FROM Employees) ? Par exemple, WITH employee AS (Name, ID).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X