The WITH clause lets you assign a name to a subquery block. You can then reference the subquery block multiple places in the query by specifying the query name. Oracle optimizes the query by treating the query name as either an inline view or as a temporary table.
A WITH clause is really best used when the result of the WITH query is required more than one time in the body of the query.