con – organizar consultas complejas

con – organizar consultas complejas

en ingeniería de software, es una práctica común agrupar instrucciones como unidades pequeñas y fácilmente comprensibles, es decir, funciones o métodos. Esto hace que el código sea reutilizable y mejora la legibilidad.

aunque SQL también tiene funciones y procedimientos, no son las herramientas adecuadas para construir unidades fácilmente comprensibles y reutilizables. En SQL, ni las funciones ni los procedimientos son ciudadanos de primera clase de la misma manera que lo son las subconsultas.0 los bloques de construcción de SQL son queries1-No instrucciones.,

para hacer las consultas reutilizables, SQL-92 introdujo vistas. Una vez creada, una vista tiene un nombre en el esquema de la base de datos para que otras consultas puedan usarla como una tabla.

SQL: 1999 agregó la cláusula with para definir «vistas de alcance de sentencia». No se almacenan en el esquema de la base de datos: en su lugar, solo son válidos en la consulta a la que pertenecen. Esto hace posible mejorar la estructura de una sentencia sin contaminar el espacio de nombres global.,

sintaxis

la cláusulawith es, en pocas palabras, un prefijo opcional paraselect:2

WITH query_name (column_name1, ...) AS (SELECT ...) SELECT ...

la sintaxis después de la palabra clavewith es lo mismo que paracreate view: comienza con el nombre de la consulta, y opcionalmente 3 y entre paréntesis el nombre de las columnas que devuelve. La palabra clave as finalmente introduce la definición en sí (la consulta)—de nuevo entre paréntesis.,

With no es un solo comando como create view es: debe ser seguido por select. Esta consulta (y las subconsultas que contiene) pueden referirse al nombre de consulta recién definido en su cláusula from.

una sola cláusula with puede introducir varios nombres de consulta separándolos con una coma (la palabra clave with no se repite)., Cada una de estas consultas puede referirse a los nombres de consulta previamente definidos dentro del mismo with clause4 (una regla a menudo descuidada—consulte Compatibilidad):

WITH query_name1 AS ( SELECT ... ) , query_name2 AS ( SELECT ... FROM query_name1 ... )SELECT ...

nombres de consulta definidos usando with enmascara tablas o vistas existentes con el mismo nombre.5

consideraciones de rendimiento

La mayoría de las bases de datos procesan with-consultas de la misma manera que procesan vistas: reemplazan la referencia a la consulta por su definición y optimizan la Consulta general.,

La base de datos PostgreSQL era diferente hasta la versión 12: optimizaba cada consulta with y la instrucción principal independientes entre sí.

si se hace referencia a una consulta with varias veces, algunas bases de datos almacenan en caché (es decir, «materializan») su resultado para evitar la doble ejecución.

Lea más sobre esto en «with Clause: Performance Impacts».

en mi propio nombre

me gano la vida de la formación, Otros servicios relacionados con SQL y la venta de mi libro. Más información en https://winand.at/.,

casos de uso

  • SQL alfabetizado

  • pruebas unitarias sobre datos transitorios

  • asignar nombres a columnas sin un nombre conocido

compatibilidad

la cláusula with se introdujo con SQL:1999 como un conjunto de características opcionales. Dejando a un lado la variante recursive, las características son T121 para cláusulas de nivel superior with y t122 para cláusulas with en subconsultas.

La funcionalidad básica de with está bien soportado., La única área donde los productos se comportan de manera diferente es la resolución de nombres. Es especialmente notable que with a menudo se trata como with recursive.6 las incompatibilidades más sutiles están relacionadas con los nombres de tabla calificados (schema.table no puede hacer referencia a una consulta with) 7 y las vistas utilizadas en el ámbito de las consultas with (la consulta dentro de la vista no «ve»>cláusula).,8

Conforme Alternativas

las Vistas pueden cubrir algunos de los casos de uso. Sin embargo, esto puede conducir fácilmente a un número irrazonable de vistas («contaminación del espacio de nombres»). En esos casos, las subconsultas suelen ser la mejor opción.

extensiones propietarias

con como prefijo DML (PostgreSQL, SQL Server, SQLite)

algunas bases de datos aceptan with como prefijo a instrucciones DML (docs: PostgreSQL, SQL Server, SQLite).,

SQL Server también puede usar una consulta with como destino para instrucciones DML (básicamente creando una vista actualizable).

Funciones En with (Oracle)

La base de datos Oracle admite declaraciones de funciones y procedimientos dentro de la cláusula with desde la versión 12cR1 (documentación).

DML in with (PostgreSQL)

a partir de la 9.1, La base de datos PostgreSQL admite sentencias DML (insert, update, delete) dentro del cuerpo de with consultas (documentación)., Cuando se utiliza la cláusula (también propietaria) returning de la instrucción DML, la consulta with devuelve datos (por ejemplo, las filas recién insertadas).

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *