2012-09-23 15 views
134

Duplicar posible:
Difference between CTE and SubQuery?SQL con la cláusula ejemplo

Yo estaba tratando de entender cómo usar la cláusula de WITH y el propósito de la cláusula WITH.

Todo lo que entendí fue que la cláusula WITH era un reemplazo para las subconsultas normales.

¿Alguien me puede explicar esto con un pequeño ejemplo en detalle?

+3

http://msdn.microsoft.com/en-us/library/ms175972(v=sql.105).aspx – Vikdor

+1

¿Estás usando MYSQL? b/c no es compatible. –

+0

Puse un ejemplo de cómo usar la cláusula WITH para crear una tabla estática temporal. Puede encontrar esto útil, ya que contiene algunos ejemplos sobre cómo usar cláusulas WITH en sus consultas. http://www.giombetti.com/2014/02/14/using-sql-with-clause-to-create-temporary-static-tables-at-query-time/ –

Respuesta

178

La cláusula SQL WITH fue introducida por Oracle en la base de datos Oracle 9i release 2. La cláusula SQL WITH le permite asignar un nombre a un bloque de subconsulta (un proceso también llamado refactorización de subconsulta), que se puede referenciar en varios lugares dentro de la consulta SQL principal. El nombre asignado a la subconsulta se trata como si fuera una vista o tabla en línea. La cláusula SQL WITH es básicamente un reemplazo directo a la subconsulta normal.

sintaxis para el SQL con la cláusula

La siguiente es la sintaxis del SQL con la cláusula cuando se utiliza un solo alias sub-consulta.

WITH <alias_name> AS (sql_subquery_statement) 
SELECT column_list FROM <alias_name>[,table_name] 
[WHERE <join_condition>] 

Al usar múltiples alias de sub-consulta, la sintaxis es la siguiente.

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>] 

En la documentación sintaxis anterior, las ocurrencias de alias_name es un nombre significativo que le daría a la sub-consulta después de la cláusula AS. Cada sub consulta debe separarse con una coma Example for WITH statement. El resto de las consultas siguen los formatos estándar para consultas SQL SELECT simples y complejas.

Para más información: http://www.brighthub.com/internet/web-development/articles/91893.aspx

+1

: Ya lo he visto ¿Puede explicar esto con un pequeño ejemplo que sería más fácil de entender? –

+12

Creo que necesita una coma después de WITH ' AS (sql_subquery_statement)' cuando se usan múltiples alias de subconsulta. – Jason

53

Esto ha sido respondida plenamente here.

Ver Oracle's docs on SELECT para ver cómo subconsulta obras de factoraje, y el ejemplo de Mark:

WITH employee AS (SELECT * FROM Employees) 
SELECT * FROM employee WHERE ID < 20 
UNION ALL 
SELECT * FROM employee WHERE Sex = 'M' 
+0

Gracias especialmente por la primera oración con un enlace :) –

+0

Sí, básicamente reemplaza una subconsulta PERO le permite hacer referencia al resultado de "subconsulta" en varios lugares. – kiradotee

Cuestiones relacionadas