¿A qué se refiere el término "proyección" en una consulta SQL (o definición de vista)


15

En el documento de Oracle The Query Optimizer , en Ver combinación , encontré la siguiente información

La optimización de fusión de vistas se aplica a las vistas que contienen solo selecciones, proyecciones y uniones. Es decir, las vistas fusionables no contienen operadores de conjuntos, funciones agregadas, DISTINCT, GROUP BY, CONNECT BY, etc. (énfasis mío)

Sin embargo, solo puedo adivinar a qué se refiere realmente esa proyección.

Respuestas:


17

En álgebra relacional, proyección significa recopilar un subconjunto de columnas para usar en operaciones, es decir, una proyección es la lista de columnas seleccionadas.

En un paso del optimizador de consultas, la proyección se manifestará como un área de almacenamiento intermedio o de spool de alguna descripción que contiene un subconjunto de las columnas de la tabla u operador subyacente, o una vista lógica basada en esas columnas que se utiliza en operaciones posteriores.

En una vista, una proyección equivale a la lista de columnas seleccionadas en la consulta subyacente a la vista.


13

La proyección se refiere a ese subconjunto del conjunto de todas las columnas encontradas en una tabla, que desea que se devuelva. Puede variar desde 0 ** hasta el conjunto completo.

Hay dos "conjuntos" en una tabla que corresponden a las dos dimensiones de una tabla. Cada tabla tiene un conjunto de columnas y un conjunto de filas . Cada valor individual en una tabla se puede encontrar en una intersección específica de estos dos * conjuntos **. Sin embargo, su valor no se encuentra "yendo" a una dirección, como T60 , como lo haría con Excel.

No hay un orden inherente en las tablas relacionales . Eso es importante de recordar. En cambio, para recuperar su valor único, seleccionaría un subconjunto de las columnas (una en este caso) y un subconjunto de las filas (una en este caso). Para seleccionar un subconjunto de una columna de todos los disponibles, solo necesita conocer su nombre, así como el nombre de la tabla. El nombre de la columna será único dentro de su tabla.

Una vez que haya elegido la columna en la que se encuentra su valor, deberá elegir la fila particular en la que se encuentra. Sin embargo, las filas no tienen nombres como las columnas. La forma en que especificamos una fila es. . . bueno, no exactamente. . . Especificamos algo que sabemos sobre el valor que estamos buscando. Tienes que saber algo relacionado (literalmente) con el valor que estás buscando. Si puede especificar suficiente información relacionada, entonces puede reducir el conjunto de filas devueltas a la que está buscando.

Piense en ello como si un estudiante universitario perdiera su mochila. Digamos que un chico lo perdió. Él llama a objetos perdidos, y la mujer que asiste dice: "Sí, tenemos un par de docenas de mochilas. ¿Puedes describirlo?" Dices "Bueno, ¿es azul?". A lo que ella responde "¿Me lo preguntas o me lo dices?", Y luego dice: "Tengo ocho azules, tendré que hacerlo mejor que eso, y no parecías muy seguro de eso". Usted dice "A ver, umm, ¡oh sí! Tenía mi libro 1010 de matemáticas". "Bien, ahora tienes cuatro". Entonces recuerdas que se supone que debes encontrarte con tu novia, Lucy, en 15 minutos, y eso provocó otro recuerdo, del tiempo en que te aburriste en Math 1010 y escribiste, en letras minúsculas reales en la parte inferior de la mochila, "I amo a Lucy ".Ricky ".

La proyección podría compararse con decir lo que perdió: una mochila. La selección puede compararse con la descripción de sus atributos : es azul, tiene un libro de matemáticas 1010 dentro y tiene "Amo a Lucy" escrito en la parte inferior.

Haces lo mismo con SQL. Primero, qué tipo de información quieres ver. Segundo, los criterios que describen cuál o cuáles quieres ver. Estos se llaman predicados o declaraciones de verdad . Son verdaderas para uno o más miembros del conjunto. Si no lo son, no devuelven ningún valor.

* Las implementaciones de SQL de algunos proveedores proporcionan medios para romper estas reglas, como las tablas anidadas en Oracle. Sin embargo, las tablas bidimensionales estándar siguen siendo la forma predominante.

** CJ Date escribió un artículo muy interesante llamado "Una tabla sin columnas". Me pareció que valía la pena leerlo, ya que hago la mayoría de sus muchos artículos de "Escritos". Los recomiendo mucho!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.