Select (SQL)
Este artigo não cita fontes confiáveis. (Maio de 2015) |
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
[editar | editar código-fonte]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.
SELECT *
FROM Book
WHERE price > 100.00
ORDER BY title;
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.
SELECT Book.title AS Title,
count(*) AS Authors
FROM Book
JOIN Book_author
ON Book.isbn = Book_author.isbn
GROUP BY Book.title;
O resultado de exemplo pode ser semelhante ao seguinte:
Title Authors
---------------------- -------
SQL Examples and Guide 4
The Joy of SQL 1
An Introduction to SQL 2
Pitfalls of SQL 1
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:
SELECT title,
count(*) AS Authors
FROM Book
NATURAL JOIN Book_author
GROUP BY title;
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.
SELECT isbn,
title,
price,
price * 0.06 AS sales_tax
FROM Book
WHERE price > 100.00
ORDER BY title;
Subqueries
[editar | editar código-fonte]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:
SELECT isbn,
title,
price
FROM Book
WHERE price < (SELECT AVG(price) FROM Book)
ORDER BY title;
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
[editar | editar código-fonte]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):
SELECT b.isbn, b.title, b.price, sales.items_sold, sales.company_nm
FROM Book b
JOIN (SELECT SUM(Items_Sold) Items_Sold, Company_Nm, ISBN
FROM Book_Sales
GROUP BY Company_Nm, ISBN) sales
ON sales.isbn = b.isbn
Exemplo
[editar | editar código-fonte]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.
SELECT campo1,campo2
FROM table1
WHERE campo1 = "Laisa"
Selecionando todos os campos, somente aconselhavel utilizar se você for usar todas as colunas de uma tabela.
SELECT * FROM table1
Para fazer testes se uma clausula SQL está funcionando.
SELECT 1 FROM table1