# Select (SQL)

SELECT é uma declaração SQL que retorna um conjunto de resultados de registros de uma ou mais tabelas. Ela recupera zero ou mais linhas de uma ou mais tabelas-base, tabelas temporárias ou visões em um banco de dados. Na maioria das aplicações, SELECT é o comando de Linguagem de Manipulação de Dados (DML) mais utilizado. Como SQL é uma linguagem não procedural, consultas SELECT especificam um conjunto de resultados, mas não especificam como calculá-los, ou seja, a consulta em um "plano de consulta" é deixada para o sistema de banco de dados, mais especificamente para o otimizador de consulta.

## Visão Geral

SELECT é a operação mais comum em SQL, chamada de "consulta". SELECT recupera dados de uma ou mais tabelas ou expressões. As instruções SELECT padrão não têm efeitos persistentes no banco de dados. Algumas implementações não padrão de SELECT podem ter efeitos persistentes, como a sintaxe SELECT INTO fornecida em alguns bancos de dados. As consultas permitem que o usuário descreva os dados desejados, cabendo ao sistema de gerenciamento de banco de dados (DBMS) realizar o planejamento, a otimização e a execução das operações físicas necessárias para produzir aquele resultado conforme sua escolha.
Uma consulta inclui uma lista de colunas a serem incluídas no resultado final, normalmente imediatamente após a palavra-chave SELECT. Um asterisco ("*") pode ser usado para especificar que a consulta deve retornar todas as colunas das tabelas consultadas. SELECT é a instrução mais complexa em SQL, com palavras-chave e cláusulas opcionais que incluem:
* A cláusula FROM, que indica a (s) tabela (s) das quais recuperar dados. A cláusula FROM pode incluir subcláusulas JOIN opcionais para especificar as regras de junção de tabelas.
* A cláusula WHERE inclui um predicado de comparação, que restringe as linhas retornadas pela consulta. A cláusula WHERE elimina todas as linhas do conjunto de resultados onde o predicado de comparação não é avaliado como True.
* A cláusula GROUP BY projeta linhas com valores comuns em um conjunto menor de linhas. GROUP BY é freqüentemente usado em conjunto com funções de agregação SQL ou para eliminar linhas duplicadas de um conjunto de resultados. A cláusula WHERE é aplicada antes da cláusula GROUP BY.
* A cláusula HAVING inclui um predicado usado para filtrar linhas resultantes da cláusula GROUP BY. Como ela atua sobre os resultados da cláusula GROUP BY, as funções de agregação podem ser usadas no predicado da cláusula HAVING.
* A cláusula ORDER BY identifica quais colunas usar para classificar os dados resultantes e em que direção classificá-los (crescente ou decrescente). Sem uma cláusula ORDER BY, a ordem das linhas retornadas por uma consulta SQL é indefinida.
* A palavra-chave DISTINCT elimina dados duplicados.
O exemplo a seguir de uma consulta SELECT retorna uma lista de livros caros. A consulta recupera todas as linhas da tabela Livro na qual a coluna de preço contém um valor maior que 100,00. O resultado é classificado em ordem crescente por título. O asterisco (*) na lista de seleção indica que todas as colunas da tabela Book devem ser incluídas no conjunto de resultados.
O exemplo a seguir demonstra uma consulta de várias tabelas, agrupamento e agregação, retornando uma lista de livros e o número de autores associados a cada livro.
O resultado de exemplo pode ser semelhante ao seguinte:
Sob a pré-condição de que isbn é o único nome de coluna comum das duas tabelas e que uma coluna chamada title só existe na tabela Book, pode-se reescrever a consulta acima da seguinte forma:
No entanto, muitos fornecedores de não oferecem suporte a essa abordagem ou exigem certas convenções de nomenclatura de coluna para que as junções naturais funcionem de maneira eficaz.
SQL inclui operadores e funções para calcular valores em valores armazenados. O SQL permite o uso de expressões na lista de seleção para projetar dados, como no exemplo a seguir, que retorna uma lista de livros que custam mais de 100,00 com uma coluna sales_tax adicional contendo um valor de imposto sobre vendas calculado a 6% do preço.

### Subqueries

As consultas podem ser aninhadas para que os resultados de uma consulta possam ser usados ​​em outra consulta por meio de um operador relacional ou função de agregação. Uma consulta aninhada também é conhecida como subconsulta. Embora junções e outras operações de tabela forneçam alternativas computacionalmente superiores (ou seja, mais rápidas) em muitos casos, o uso de subconsultas introduz uma hierarquia na execução que pode ser útil ou necessária. No exemplo a seguir, a função de agregação AVG recebe como entrada o resultado de uma subconsulta:
Uma subconsulta pode usar valores da consulta externa e, nesse caso, é conhecida como subconsulta correlacionada
Desde 1999, o padrão SQL permite subconsultas nomeadas chamadas expressões de tabela comuns (nomeadas e projetadas após a implementação do IBM DB2 versão 2; o Oracle chama essas subconsultas de fatoração). CTEs também podem ser recursivos referindo-se a si próprios; o mecanismo resultante permite percursos de árvore ou gráfico (quando representados como relações) e, de forma mais geral, cálculos de pontos fixos.

### Inline view

Uma visualização embutida é o uso de referência a uma subconsulta SQL em uma cláusula FROM. Essencialmente, a visualização embutida é uma subconsulta que pode ser selecionada ou associada. A funcionalidade de visualização embutida permite que o usuário faça referência à subconsulta como uma tabela. A visualização embutida também é conhecida como tabela derivada ou subseleção. A funcionalidade de visualização embutida foi introduzida no Oracle 9i.
No exemplo a seguir, a instrução SQL envolve uma junção da tabela Books inicial para a visualização Inline "Vendas". Esta visualização em linha captura informações de vendas de livros associadas usando o ISBN para unir à tabela Livros. Como resultado, a visualização em linha fornece o conjunto de resultados com colunas adicionais (o número de itens vendidos e a empresa que vendeu os livros):

## Exemplo

Selecionando campos específicos, está é a melhor opção para se trabalhar, pois quando utilizamos esse jeito de retornar os campos especificamos somente os que precisamos e a consulta ao banco de dados fica mais rápida, e o outro ponto forte de fazer a consulta deste modo é que você sabe quais são os campos que terá retorno.
Selecionando todos os campos, somente aconselhavel utilizar se você for usar todas as colunas de uma tabela.
Para fazer testes se uma clausula SQL está funcionando.