Oi! Seja bem-vindo!
Wooow! Vamos aprender SELECT juntos? 🙂 Que D+!!! Bora lá! Nesse artigo vou te mostrar como fazer SELECT no SQL Server da Microsoft, além de alguns dos comandos de apoio mais usados no dia a dia.
SELECT em Tabelas
A sintaxe (forma como você escreve o comando) que você está procurando provavelmente seja para buscar informações em tabelas, que é assim:
SELECT [campos] FROM [tabela]
E como isso funciona?
[campos] são as “colunas” da [tabela] que você quer consultar. Se uma [tabela] possui várias colunas você pode escolher uma ou várias na sua consulta, separando por vírgula os campos. Você também pode informar [*] se quiser consultar todos os campos da tabela, por exemplo, se você tiver uma tabela chamada “amigos” que possui dois campos “nome e email”, algumas das consultas possíveis seriam essas (cada linha é uma consulta):
SELECT * FROM amigos -- mostra todas as colunas SELECT nome FROM amigos -- mostra somente a coluna nome SELECT email FROM amigos -- mostra somente a coluna email SELECT nome, email FROM amigos -- mostra as colunas nome e email
Viu como é fácil? Então agora é a sua vez de testar ai na sua máquina e ver isso funcionando na prática! Então montei um script mais completo, que cria uma tabela (CREATE), inclui registros (INSERT) e faz as consultas (SELECT) que você aprendeu, assim você pode ver a coisa funcionando online, bora lá!?
Primeiro, para testar o script abaixo você precisa ter o SQL instalado. Se você ainda não tem e está sem tempo de instalar agora, consulte esse artigo (www.dba-pro.com/como-executar-comandos-sql-na-internet) e descubra como você pode “simula os comandos” dessa aula na internet, MUITO LEGAL!! Bom, aqui vai o script de testes, copie ele todo e execute no seu SQL ou no site que te falei:
-- crie a tabela amigos create table amigos (numero int, nome varchar(100), email varchar(100), dt_nascimento date) -- insera amigos na tabela: P.S: Data no SQL se escreve AAAA-MM-DD (Ano, mês e dia) insert into amigos values (1, 'Zézão', '[email protected]', '1990-01-02') insert into amigos values (2, 'Zezinho', '[email protected]', '1990-02-01') insert into amigos values (3, 'Abismail', '[email protected]', '1991-03-04') -- efetue 4 consultas simples select * from amigos select nome from amigos select email from amigos select nome, email from amigos -- exclua a tabela após os testes drop table amigos -- DICA: Você reparou que o "--" significa que virá um comentário no script e o SQL ignora o processamento da linha. Ajuda muito para você documentar o que está acontecendo em cada comando que você faz!
SELECT com cláusula WHERE
Wooww!! Ai sim! Agora vamos dar uma explorada a mais? Seguinte, quando você tiver uns 100 amigos cadastrados, vai ficar mais fácil achar algum deles se o resultado do seu SELECT for menor, por exemplo, mostrando só amigos que começam com uma determinada letra ou que nasceram em um determinado ano, certo? Ai entra a cláusula WHERE que é um acessório para o nosso comando SELECT filtrar as linhas do resultado (também conhecido como resultset), facilitando a nossa vida na hora de encontrar informações. Faz o teste ai na sua máquina…:
-- Criar tabela e inserir dados de teste: create table amigos (numero int, nome varchar(100), email varchar(100), dt_nascimento date) insert into amigos values (1, 'Zézão', '[email protected]', '1990-01-02') insert into amigos values (2, 'Zezinho', '[email protected]', '1990-02-01') insert into amigos values (3, 'Abismail', '[email protected]', '1991-03-04') insert into amigos values (4, 'Lazarildo', '[email protected]', '1991-03-04') insert into amigos values (5, 'Febril', '[email protected]', '1992-03-04') insert into amigos values (6, 'Robinswal', '[email protected]', '1980-12-10') insert into amigos values (7, 'Verdevalda', '[email protected]', null) -- TESTE DO COMANDO WHERE: -- PS1: Note que datas e texto precisam ser colocados entre aspas (') -- PS2: _ (underline) significa qualquer um caracter -- PS3: % (percentual) significa qualquer quantidade de quaisquer caracteres -- PS4: Tanto faz escrever em maiúsculas ou minúsculas, as vezes coloco em maiúsculas só para destacar -- PS5: As cláusulas OR e AND ajudam você a utilizar multiplas condições de pesquisa -- PS5: NULL pode ser usado para qualquer tipo de campo (número, texto ou data) -- procurar amigos usando uma coluna numérica select * from amigos where numero = 4 -- todas as colunas do amigo #4 select nome, email from amigos where numero = 4 -- colunas específicas do amigo #4 select * from amigos where numero < 4 -- todas as colunas dos amigos com número MENOR que #4 select * from amigos where numero > 4 -- todas as colunas dos amigos com número MAIOR que #4 select * from amigos where numero in (1,2,4) -- amigos 1, 2 e 4 select * from amigos where numero between 1 and 4 -- amigos entre 1 e 4 select * from amigos where numero = 1 or numero = 4 -- amigos 1 ou 4 -- procurar amigos usando coluna data select * from amigos where dt_nascimento IS NULL -- quando não sei a data ou não preenchi select * from amigos where dt_nascimento = '1980-12-10' -- nascidos em uma data específica select * from amigos where dt_nascimento between '1990-01-01' and '1991-12-31' -- nascido em uma faixa de datas -- procurar amigos pelo nome select * from amigos where nome = 'Zezinho' -- pelo nome em uma busca exata select * from amigos where nome <> 'Zezinho' -- por nome (todos exceto o Zezinho) select * from amigos where nome LIKE 'Z%' -- todos que o nome começar com Z select * from amigos where nome NOT LIKE 'Z%' -- todos que o nome NÃO começar com Z -- exclui a tabela após os testes drop table amigos
SELECT com cláusula ORDER BY
Outro acessório para ajudar com a visualização das informações é a cláusula “order by”, que organiza as informações para nós. Faça os testes abaixo na sua máquina e compare as diferenças:
-- Criar tabela e inserir dados de teste: create table amigos (numero int, nome varchar(100), email varchar(100), dt_nascimento date) insert into amigos values (1, 'Zézão', '[email protected]', '1990-01-02') insert into amigos values (2, 'Zezinho', '[email protected]', '1990-02-01') insert into amigos values (3, 'Abismail', '[email protected]', '1991-03-04') insert into amigos values (4, 'Lazarildo', '[email protected]', '1991-03-04') insert into amigos values (5, 'Febril', '[email protected]', '1992-03-04') insert into amigos values (6, 'Robinswal', '[email protected]', '1980-12-10') insert into amigos values (7, 'Verdevalda', '[email protected]', null) -- selects com ordenação de resultado select * from amigos order by nome asc -- ordem acendente de nome (asc é uma palavra chave opcional) select * from amigos order by nome desc -- ordem descendente de nome select * from amigos order by dt_nascimento desc -- ordem descendente de data de nascimento -- selects com where e order by select * from amigos where nome like 'Z%' order by numero select email from amigos where dt_nascimento between '1990-01-01' and '1991-12-31' order by nome desc -- selects também podem ser ordenados pelo "número da coluna" do resultset, veja que legal! select * from amigos where nome like 'Z%' order by 1 select * from amigos order by 4 -- exclui a tabela após os testes drop table amigos
SELECT TOP & TOP + ORDER BY
Além da cláusula where, você pode reduzir o seu resultset usando o comando TOP, que reduz o resultset de acordo com a configuração que você desejar. Teste os exemplos abaixo:
-- Criar tabela e inserir dados de teste: create table amigos (numero int, nome varchar(100), email varchar(100), dt_nascimento date) insert into amigos values (1, 'Zézão', '[email protected]', '1990-01-02') insert into amigos values (2, 'Zezinho', '[email protected]', '1990-02-01') insert into amigos values (3, 'Abismail', '[email protected]', '1991-03-04') insert into amigos values (4, 'Lazarildo', '[email protected]', '1991-03-04') insert into amigos values (5, 'Febril', '[email protected]', '1992-03-04') insert into amigos values (6, 'Robinswal', '[email protected]', '1980-12-10') insert into amigos values (7, 'Verdevalda', '[email protected]', null) -- selects com ordenação de resultado select top 1 * from amigos select top 3 * from amigos order by dt_nascimento desc select top 50 percent * from amigos order by 1 -- seleciona os primeiros 50% de registros select top 1000 * from amigos -- Como temos menos de 1000 registros o SQL mostra tudo select top 0 * from amigos -- top 0 não mostra nada select top 2 nome, email from amigos -- top 0 não mostra nada -- exclui a tabela após os testes drop table amigos
SELECT com Alias
Nem sempre os nomes das tabelas e colunas são tão intuitivos como no nosso exemplo, as vezes você vai se deparar com nomes como tabela1, colunax, etc. Para facilitar a visualização das informações você pode adicionar aliases, que são apelidos para colunas e tabelas. Além de facilitar a visualização, os alias serão bastante importantes quando formos trabalhar com JOINS (selects que apresentam informações de múltiplas tabelas). Usar aliases é uma barbada, veja abaixo:
-- Criar tabela e inserir dados de teste: create table tabela_com_nome_estranho123 (x int, coluna1 varchar(100), correio_eletronico varchar(100), dt_nascimento date) insert into tabela_com_nome_estranho123 values (1, 'Zézão', '[email protected]', '1990-01-02') insert into tabela_com_nome_estranho123 values (2, 'Zezinho', '[email protected]', '1990-02-01') insert into tabela_com_nome_estranho123 values (3, 'Abismail', '[email protected]', '1991-03-04') insert into tabela_com_nome_estranho123 values (4, 'Lazarildo', '[email protected]', '1991-03-04') insert into tabela_com_nome_estranho123 values (5, 'Febril', '[email protected]', '1992-03-04') insert into tabela_com_nome_estranho123 values (6, 'Robinswal', '[email protected]', '1980-12-10') insert into tabela_com_nome_estranho123 values (7, 'Verdevalda', '[email protected]', null) -- Select incluindo alias: -- Existem várias formas de incluir alias, todas elas "dão na mesma". Abaixo os principais exemplos: select x as numero, coluna1 as nome from tabela_com_nome_estranho123 as amigos select numero = x, nome = coluna1 from tabela_com_nome_estranho123 amigos select x numero, coluna1 nome from tabela_com_nome_estranho123 [amigos] select x as 'numero', coluna1 'nome' from tabela_com_nome_estranho123 select x as [numero], coluna1 [nome] from tabela_com_nome_estranho123 select x as numero, coluna1 as [nome], * from tabela_com_nome_estranho123 -- exclui a tabela após os testes drop table tabela_com_nome_estranho123
CONCLUSÃO
Aposto que você não achou que era tão fácil né? Sem nem precisar do SQL instalado você aprendeu a fazer várias querys para começar com SQL. Espero que você tenha gostado e continue firme e forte com seus estudos!
Abraço do seu amigo Josué 🙂