A instrução Select é sem duvida é a instrução mais importante de um programa que manipula dados, não importa o quão robusto é o seu servidor, não importa qual é o seu banco de dados e nem o quão afinado está a sua configuração, instruções “Select” mal feitas podem ser responsáveis pela lentidão de um sistema.
É possível usar a instrução Select de varias maneiras diferentes, este comando é muito flexível e pode ser associado a outras instruções SQL a fim de se obter um resultado especifico, por exemplo é possível rodar uma instrução que seleciona dados em cima do resultado de outra instrução que seleciona dados, é possível unir, filtrar, calcular, relacionar e etc.
É de extrema importância que instruções Select sejam escritas da forma mais correta e enxuta possível, pois com uma abrangência enorme de recursos é fácil extrapolar o sentido da palavra “criatividade” na hora de escrever está instrução, causando lentidão no sistema e como diz o ditado “de grão em grão a galinha enche o papo”, para desespero de alguns de Select em Select o sistema pode ficar cada vez mais lento.
O que você precisa saber na hora de criar uma instrução Select?
É essencial que o desenvolvedor tenha conhecimento do que é e como funcionam as Tablespaces (Oracle e IBM DB2 ou Filegroups MSSQL). Uma Tablespace é onde os servidores de banco de dados armazenam os dados logicamente.
O que todos devemos saber é que um banco de dados possui Tablespaces do sistema, estas são criadas durante a instalação do banco de dados, e exigem uma configuração especifica para que haja uma boa performance do seu banco de dados, mas em nosso caso especifico existe uma Tablespace que nos afeta diretamente e o seu nome pode variar mas é conhecida como Tablespace Temporária.
Tablespace Temporária
Tablespaces temporárias são usadas para operações especiais, particularmente para classificar os resultados dos dados no disco e geralmente para manipular operações SQL que são muito grandes para ser executada somente pela memoria RAM. Utilizada para armazenar objetos transitórios durante as classificações e agrupamentos de dados durante a execução de uma SQL contendo as cláusulas ORDER BY e GROUP BY, entre outras. Apesar das Tablespaces temporárias não serem tão criticas e poderem ser excluídas e recriadas quando necessário é preciso saber que elas existem, que precisam de configuração especial, que são manipuladas, na grande maioria das vezes de um modo invisível ao desenvolvedor.
Oracle: http://docs.oracle.com/cd/B10500_01/server.920/a96524/c04space.htm
Mssql Server: http://msdn.microsoft.com/en-us/library/ms190768.aspx
Nos links acima você encontra a documentação completa sobre as Tablespaces de cada banco de dados, o Microsoft SQL Server não possui Tablespaces e sim Filegroups apesar do conceito ser muito parecido existe importantes diferenças, o link acima mostra como funciona o Database TEMPDB do MSSQL.
Data Query Language
Embora tenha apenas um comando, a DQL é a parte do SQL mais utilizado. O comando SELECT permite ao usuário especificar uma consulta “query” como uma descrição do resultado desejado. Esse comando é composto de várias cláusulas e opções, possibilitando elaborar consultas das mais simples às mais elaboradas.
SELECT
A instrução mais básica do comando Select permite que você retorne dados criados por você mesmo em tempo de execução do script SQL, é possível criar campos com conteúdos e nomes, somar dados, retornar variáveis do sistema e etc. Este procedimento básico varia de banco para banco, por exemplo o Oracle possui uma tabela chamada DUAL para este tipo de procedimento, o IBM DB2 possui a tabela sysibm.sysdummy1 e também possui a tabela DUAL, já o Microsoft SQL Server possui uma sintaxe diferente para a instrução Select eliminando a obrigatoriedade da clausula From.
Oracle:
IBM DB2:
Microsoft SQL Server:
Retornando dados de uma tabela
Para retornar campos de uma tabela todos os 3 bancos possuem a mesma sintaxe básica:
Select * from tabela
Para a documentação completa desta instrução segue os links oficiais:
Oracle: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm
MSSQL: http://msdn.microsoft.com/pt-br/library/ms189499(v=sql.120).aspx
Exemplo:
No exemplo a seguir escrevemos três instruções Select que retornam dados criados pelo usuário em tempo de execução.
Oracle
Select 'Desenvolvimento Aberto' as titulo, 'Criando um resultado em tempo de execução' as aula, '20' as valor1, '10' as valor2, 20 + 10 as total from DUAL
IBM DB2
Select 'Desenvolvimento Aberto' as titulo, 'Criando um resultado em tempo de execução' as aula, '20' as valor1, '10' as valor2, 20 + 10 as total from sysibm.sysdummy1
Microsoft SQL Server
Select 'Desenvolvimento Aberto' as titulo, 'Criando um resultado em tempo de execução' as aula, '20' as valor1, '10' as valor2, 20 + 10 as total