A que se refere o termo "projeção" em uma consulta SQL (ou definição de exibição)

15

No documento da Oracle, o Query Optimizer , em Exibir mesclagem , encontrei as seguintes informações

A otimização de mesclagem de vistas se aplica a vistas que contêm apenas seleções, projeções e junções. Ou seja, as exibições mescláveis ​​não contêm operadores de conjunto, funções agregadas, DISTINCT, GROUP BY, CONNECT BY e assim por diante. (ênfase minha)

No entanto, só posso adivinhar como o que essa projeção realmente se refere.

René Nyffenegger
fonte

Respostas:

17

Na álgebra relacional, projeção significa coletar um subconjunto de colunas para uso em operações, ou seja, uma projeção é a lista de colunas selecionadas.

Em uma etapa do otimizador de consulta, a projeção se manifestará como uma área de buffer ou spool de alguma descrição que contém um subconjunto das colunas da tabela ou do operador subjacente, ou uma visualização lógica com base nas colunas usadas pelas operações subseqüentes.

Em uma exibição, uma projeção equivale à lista de colunas selecionadas na consulta subjacente à exibição.

ConcernedOfTunbridgeWells
fonte
13

Projeção refere-se ao subconjunto do conjunto de todas as colunas encontradas em uma tabela que você deseja retornar. Pode variar de 0 ** até o conjunto completo.

Existem dois "conjuntos" em uma tabela que correspondem às duas dimensões de uma tabela. Cada tabela possui um conjunto de colunas e um conjunto de linhas . Cada valor individual em uma tabela pode ser encontrado em uma interseção específica desses dois * conjuntos **. No entanto, seu valor não é encontrado "indo para" um endereço, como T60 , da mesma maneira que você faria com o Excel.

Não há ordem inerente às tabelas relacionais . É importante lembrar. Em vez disso, para recuperar seu valor único, você selecionaria um subconjunto das colunas (uma neste caso) e um subconjunto das linhas (uma neste caso). Para selecionar um subconjunto de uma coluna dentre todas as disponíveis, você só precisa saber o nome e o nome da tabela. O nome da coluna será exclusivo em sua tabela.

Depois de escolher a coluna em que seu valor está, você precisará escolher a linha específica em que está. No entanto, as linhas não têm nomes como as colunas. A maneira como especificamos uma linha é. . . bem, nós não fazemos exatamente. . . Especificamos algo que sabemos sobre o valor que estamos procurando. Você precisa saber algo relacionado (literalmente) ao valor que está procurando. Se você puder especificar informações relacionadas suficientes, poderá reduzir o conjunto de linhas retornadas para o que você está procurando.

Pense nisso como se um estudante universitário tivesse perdido sua mochila. Digamos que um cara tenha perdido. Ele liga para achados e perdidos, e a mulher que atende diz: "Sim, temos algumas dúzias de mochilas. Você pode descrever?" Você diz "Bem, é azul?". Ao que ela responde: "Você está me perguntando ou me dizendo", e depois diz: "Eu tenho oito azuis, vou ter que fazer melhor que isso, e você não parecia muito certo disso". Você diz "Vamos ver, umm, sim! Tinha o meu livro de matemática 1010 nele". "Bom, agora você está com quatro anos." Então você se lembra de que deveria conhecer sua namorada, Lucy, em 15 minutos, e isso provocou outra lembrança - da época em que você estava entediado no Math 1010 e escreveu - em letras minúsculas reais na parte inferior da mochila: "Eu amo Lucy ".Ricky ".

A projeção pode ser comparada a dizer o que você perdeu - uma mochila. A seleção pode ser comparada à descrição de seus atributos : é azul, possui um livro de matemática 1010 e tem "I love Lucy" escrito na parte inferior.

Você faz a mesma coisa com o SQL. Primeiro, que tipo de informação você deseja ver. Segundo, critérios que descrevem qual deles você deseja ver. Estes são chamados de predicados ou declarações de verdade . Eles são verdadeiros para um ou mais membros do conjunto. Caso contrário, eles não retornam nenhum valor.

* As implementações SQL de alguns fornecedores fornecem meios para quebrar essas regras, como Tabelas Aninhadas no Oracle. No entanto, as tabelas bidimensionais padrão ainda são a forma predominante.

** CJ Date escreveu um artigo muito interessante chamado "Uma Tabela Sem Colunas". Achei que valeu a pena ler, como faço com a maioria dos seus muitos artigos "Escritos". Eu recomendo!

user6612
fonte