NUNCA MAIS PASSE RAIVA POR NÃO CONSEGUIR RESOLVER UM PROBLEMA COM O EXCEL - GARANTIDO!

UNIVERSIDADE DO VBA - Domine o VBA no Excel Criando Sistemas Completos - Passo a Passo - CLIQUE AQUI

Você está em: PrincipalArtigosSQL Server 2005 › Capítulo 01 : 06
Quer receber novidades e e-books gratuitos?
« Lição anterior Δ Página principal ¤ Capítulos Próxima lição »
SQL Server 2005 - CURSO COMPLETO
Autor: Júlio Battisti
Lição 013 - Capítulo 01 - A Instrução Select

Esta, sem dúvidas, é a instrução SQL mais importante e mais utilizada. Não existe pesquisa que não utilize esta instrução. Vamos conhecê-la em detalhes.

A instrução Select é utilizada para especificar quais os campos de quais tabelas farão parte da consulta, quais os critérios de pesquisa que serão utilizados, qual a ordem de classificação, etc.

A sintaxe simplificada da instrução é a seguinte:

SELECT
campo1, campo2, campo3
FROM nome_da_tabela
[WHERE condição ]
[GROUP BY nome_do_campo ]
[HAVING ... ]
[ORDER BY... ]

Na Tabela 1.2 temos uma descrição destes elementos.

Tabela 1.2 Os principais elementos da instrução Select.

Elemento Descrição
campo1, campo2... campon Nome dos campos a serem retornados a partir de uma ou mais tabelas.
nome_da_tabela Nome da tabela a partir da qual os dados devem ser recuperados.
WHERE Permite que sejam especificados critérios de pesquisa.
GROUP BY Podemos agrupar os resultados em torno de um ou mais campos de dados. Por exemplo, em um relatório de vendas anuais, posso ter os resultados agrupados por mês, com a soma das vendas do mês logo após a listagem das vendas.
HAVING Especifica critérios para serem utilizados juntamente com Group By.
ORDER BY Podemos ordenar os resultados obtidos com base em um ou mais campos de dados. Por exemplo, podemos ordenar uma listagem de vendas em ordem alfabética do nome do cliente ou do nome do vendedor.

Vamos analisar alguns exemplos práticos de utilização da Linguagem SQL.

Exemplo 1: Criar uma instrução SQL que retorne os campos NúmeroDoPedido, DataDoPedido, Frete e PaísDeDestino da tabela Pedidos.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PaísDeDestino, Pedidos.Frete FROM Pedidos

Observe que os nomes dos campos estão separados por vírgula, além disso estamos utilizando o nome completo, isto é: Nome_da_tabela.Nome_do_campo. Também poderíamos utilizar o comando, sem o nome da tabela antes do nome do campo, conforme indicado no seguinte comando:

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos

Somente é obrigatória a utilização do nome da tabela antes do nome do campo quando o mesmo campo existir em duas ou mais tabelas que fazem parte da instrução Select, para indicar de qual tabela deve ser retornado o respectivo campo.

Por exemplo, imagine que estejamos escrevendo uma instrução SQL para criar uma listagem com o Código e o Nome do Cliente, bem como todos os pedidos efetuados pelo Cliente. Acontece que o Código do Cliente, no nosso exemplo, existe em duas tabelas: Clientes e Pedidos. Neste caso devemos especificar o nome da tabela, antes do nome do campo.

Exemplo 2: Alterar a instrução SQL anterior para que os registros sejam classificados em ordem crescente pelo valor do Frete.

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
ORDER BY Frete

Observe a utilização da cláusula “ORDER BY Frete” para classificar os registros em ordem crescente. A classificação em ordem crescente é a padrão. Quando formos classificar em ordem decrescente, precisamos especificar a palavra DESC, conforme indicado no seguinte comando:

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
ORDER BY Frete DESC

Exemplo 3: Agora vamos começar a inserir critérios de filtragem. Muitas vezes as condições são chamadas de filtro, uma vez estabelecida uma condição, somente os registros que “atendem” a condição especificada serão retornados. Desta forma a condição atua como se fosse um filtro. Neste exemplo, vamos alterar a instrução SQL anterior para que sejam exibidos somente os pedidos cujo PaísDeDestino seja Brasil.

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
WHERE PaísDeDestino=‘Brasil’
ORDER BY Frete

Observe a utilização da cláusula WHERE para filtrar somente os pedidos cujo campo PaísDeDestino contenha o valor Brasil. Como o campo PaísDeDestino é um campo do tipo texto, o valor do critério (Brasil) tem que vir entre apóstrofes. Vamos trabalhar um pouco mais com a cláusula WHERE.

Exemplo 4: Altere a instrução SQL anterior para que sejam exibidos somente os pedidos para o Brasil ou Alemanha como PaísDeDestino.

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
WHERE Pedidos.PaísDeDestino=‘Brasil’ OR Pedidos.PaísDeDestino=‘Alemanha’
ORDER BY Frete


Promoção: Livro Windows Server 2008 R2 - Curso Completo, 1222 Páginas. Tudo para você se tornar um administrador de redes altamente qualificado para o mercado de trabalho e levar a sua carreira para o próximo nível!

Promoção: Livro Windows Server 2008 R2

Curso Completo, 1222 páginas. Tudo para você se tornar um administrador de redes altamente qualificado para o mercado de trabalho e levar a sua carreira para o próximo nível!


Observe a utilização da cláusula OR ligando os dois Critérios. Lembre que a cláusula OR retorna um registro se o PaísDeDestino atender um dos dois critérios. Assim, se for Brasil ou se for Alemanha , o registro será selecionado, o que é exatamente o que desejamos, ou seja, todos os pedidos para o Brasil ou todos os pedidos para a Alemanha.

Exemplo 5: Altere a instrução SQL anterior, retirando o critério para PaísDeDestino. Adicione um critério para NúmeroDoPedido maior do que 10500, retire a classificação do campo Frete e classifique pelo campo NúmeroDoPedido.

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
WHERE NúmeroDoPedido>10500
ORDER BY NúmeroDoPedido

Observe a cláusula WHERE utilizando o operador de comparação maior do que ( > ) e a classificação através da cláusula ORDER BY no campo NúmeroDoPedido.

Podemos ver, através dos exemplos, que a linguagem SQL não é tão difícil como pode parecer à primeira vista. Observe que a sintaxe da linguagem é bastante intuitiva e orientada a extração de dados, através das consultas.

Vamos continuar analisando alguns exemplos de aplicação da linguagem SQL com a utilização de recursos mais avançados.

Exemplo 6: Alterar a instrução SQL anterior, e adicionar um critério de tal maneira que somente sejam exibidos os pedidos para o ano de 1995. Tirar o critério do campo NúmeroDoPedido.

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
WHERE Year(DataDoPedido)=1995
ORDER BY NúmeroDoPedido

Observe a utilização da função Year para extrairmos apenas o ano do campo DataDoPedido a fim de especificarmos como critério o Ano=1995. Também a cláusula Order By foi mantida, classificando a listagem em ordem crescente pelo número do pedido. A utilização de funções junto com os comando SQL nos fornece inúmeras possibilidades de refinamento em nossas consultas.

Exemplo 7: Alterar a instrução SQL anterior, para que sejam exibidos somente os pedidos no Período de 01/01/1995 até 31/08/1995 e que tenham como PaísDeDestino Brasil, Argentina, Alemanha ou Canadá.

SELECT NúmeroDoPedido, DataDoPedido, PaísDeDestino, Frete FROM Pedidos
WHERE DataDoPedido Between ‘1/1/95’ And ‘8/31/95’
AND
PaísDeDestino In (‘Brasil’,‘Argentina’,‘Alemanha’,‘Canadá’)
ORDER BY NúmeroDoPedido

Observe a utilização de vários critérios em diferentes campos. Colocamos critérios nos campos DataDoPedido e PaísDeDestino. Os critérios de dois ou mais campos são ligados através do operador AND, indicando que um registro deve atender ambos os critérios para ser selecionado. Também temos a utilização dos operadores Between (Entre) para selecionar as datas dentre de um determinado intervalo e do operador In (Em) para selecionar o campo PaísDeDestino que seja igual a um dos valores apresentados na lista. Observe também, que os valores de data vem delimitados por apóstrofes (‘).

Exemplo 8: Criar uma instrução SQL que retorne os campos NúmeroDoPedido, DataDoPedido, DataDeEntrega, Frete e PaísDeDestino da tabela Pedidos. Criar uma coluna adicional que calcula o número de dias entre a DataDeEntrega e a DataDoPedido. Chamar esta coluna de Dias_Ped_Entr.

SELECT NúmeroDoPedido, DataDoPedido, DataDeEntrega, PaísDeDestino, Frete, DataDeEntrega-DataDoPedido AS Dias_Ped_Entr FROM Pedidos
WHERE (DataDoPedido Between ‘1/1/95’ And ‘8/31/95’)
AND
(PaísDeDestino In (‘Brasil’,‘Argentina’,‘Alemanha’,‘Canadá’))
ORDER BY Pedidos.NúmeroDoPedido

Veja que a coluna calculada DataDeEntrega-DataDoPedido está junto com a listagem dos campos no início da instrução Select. Além disso, foi utilizada a palavra AS para atribuir um nome (apelido) para esta coluna calculada. Este nome é o que será utilizado para fazer referência à coluna, em uma página ASP ou um programa desenvolvido em Visual Basic, por exemplo.

Você também pode classificar a listagem em ordem crescente ou decrescente de um campo calculado. Por exemplo, se você quisesse classificar a listagem do item anterior, em ordem crescente, do número de dias entre a DataDeEntrega e a DataDoPedido, bastaria utilizar a seguinte instrução SQL:

SELECT NúmeroDoPedido, DataDoPedido, DataDeEntrega, PaísDeDestino, Frete, DataDeEntrega-DataDoPedido AS Dias_Ped_Entr
FROM Pedidos
WHERE (DataDoPedido Between ‘1/1/95’ And ‘8/31/95’)
AND
(PaísDeDestino In (‘Brasil’,‘Argentina’,‘Alemanha’,‘Canadá’))
ORDER BY DataDeEntrega-DataDoPedido

Exemplo 9: Alterar a instrução SQL anterior, eliminando os critérios para a DataDoPedido e para o PaísDeDestino. Colocar um novo critério para PaísDeDestino, onde sejam exibidos apenas os pedidos cujo PaísDeDestino tem a primeira letra na faixa de A até M. Utilize o operador Like.

SELECT NúmeroDoPedido, DataDoPedido, DataDeEntrega, PaísDeDestino, Frete, DataDeEntrega-DataDoPedido AS Dias_Ped_Entr
FROM Pedidos
WHERE PaísDeDestino Like ‘[A-M]%’
ORDER BY PaísDeDestino

Observe a utilização do operador Like no critério de pesquisa para esta consulta. Nunca é demais salientar que a utilização das instruções SQL juntamente com as funções e operadores, como o Like, nos fornece um amplo conjunto de possibilidades. O caracter % é utilizado como um caracter curinga. Por exemplo, se especificarmos o seguinte critério:

WHERE NomeDoCLiente Like ‘João%’

serão retornados todos os registros para Clientes cujo nome inicia com João. O caracter curinga % significa, em termos simples: “qualquer coisa”, ou seja, o critério especifica que o nome inicie com João, não importando (qualquer coisa) o que vier depois.

Aqui cabe um aviso importante para os usuários do Microsoft Access. Naquele aplicativo, o caracter curinga é o *, já no Microsoft SQL Server 2005 (e também nas versões anteriores do SQL Server) , utilizamos como caractere curinga o %, o qual também é utilizado na construção de páginas ASP. Para maiores informações sobre a tecnologia ASP – Active Server Pages, consulte o e-book “Criando Sites Dinâmicos com ASP 3.0”, 732 páginas, de minha autoria, disponível no formato .PDF em: https://juliobattisti.com.br/ebooksdoautor

Até agora trabalhamos com Instruções que selecionam registros de uma única tabela. Porém é bastante comum criarmos instruções SQL baseadas em duas ou mais tabelas. Quando criamos instruções SQL que buscam dados em duas ou mais tabelas, dizemos que está sendo feito um Join entre as duas ou mais tabelas.

Normalmente este Join (ou ligação) é feito através de um campo comum às duas tabelas. Por exemplo, NúmeroDoPedido na tabela Pedidos e NúmeroDoPedido na tabela Detalhes do Pedido. Outro exemplo, CódigoDoCliente na tabela Pedidos e CódigoDoCliente na tabela Clientes. Pode acontecer de termos consultas que trabalham com três ou mais tabelas, neste caso teremos diversos “Joins”. O número de Joins é sempre igual ao número de tabelas menos um. Por exemplo, se a nossa consulta acessar dados de quatro tabelas, teremos três joins.

Agora passaremos e explorar na prática, através de exemplos, a construção de instruções SQL que trabalhem com duas ou mais tabelas.

Exemplo 10: Criar uma instrução SQL que selecione os seguintes campos:

  • NúmeroDoPedido da tabela Pedidos
  • DataDoPedido da tabela Pedidos
  • PaísDeDestino da tabela Pedidos
  • Frete da tabela Pedidos
  • CódigoDoProduto da tabela DetalhesdoPedido
  • PreçoUnitário da tabela DetalhesdoPedido
  • Quantidade da tabela DetalhesdoPedido.

Além disso, as tabelas Pedidos e DetalhesDoPedido estão relacionadas pelo campo NúmeroDoPedido, através de um relacionamento do tipo Um para Vários.

Classificar a listagem em ordem crescente do Número do Pedido. Para resolver este exemplo podemos utilizar a seguinte instrução SQL:

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PaísDeDestino, Pedidos.Frete, DetalhesdoPedido.CódigoDoProduto, DetalhesdoPedido.PreçoUnitário, DetalhesdoPedido.Quantidade
FROM Pedidos
INNER JOIN
DetalhesdoPedido
ON Pedidos.NúmeroDoPedido = DetalhesdoPedido.NúmeroDoPedido
ORDER BY Pedidos.NúmeroDoPedido

Primeiro devemos observar que, pelo fato de tratarmos com dados de duas tabelas, estamos utilizando a nomenclatura completa, isto é, Nome_da_tabela.Nome_do_campo.

Observe a utilização da cláusula INNER JOIN, ligando as tabelas Pedidos e DetalhesdoPedido, através do campo NúmeroDoPedido, conforme especificado na cláusula ON, onde temos o seguinte:

ON Pedidos.NúmeroDoPedido = DetalhesdoPedido.NúmeroDoPedido

Observe que esta listagem irá trazer vários registros para cada pedido, tantos quantos forem os itens de cada pedido.

Mas, se ao invés do CódigoDoProduto, nós quiséssemos que fosse exibida a descrição do produto?

Em primeiro lugar esta informação encontra-se na tabela Produtos, logo teremos que adicionar a Tabela Produtos à nossa consulta, a qual irá se ligar à tabela DetalhesdoPedido através do campo CódigoDoProduto. Com isso teremos mais um Join. Para três tabelas teremos dois Joins.

Após adicionar a tabela Produtos e substituir o campo CódigoDoProduto pelo campo NomeDoProduto, a nossa instrução SQL deve ficar conforme indicado no seguinte comando:

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PaísDeDestino, Pedidos.Frete, Produtos.NomeDoProduto, DetalhesdoPedido.PreçoUnitário, DetalhesdoPedido.Quantidade
FROM Produtos
INNER JOIN (Pedidos INNER JOIN DetalhesdoPedido
ON Pedidos.NúmeroDoPedido=DetalhesdoPedido.NúmeroDoPedido)
ON
Produtos.CódigoDoProduto=DetalhesdoPedido.CódigoDoProduto
ORDER BY Pedidos.NúmeroDoPedido

Observe que neste caso temos um INNER JOIN dentro do outro. Dentro do parênteses é feita a ligação entre as tabelas Pedidos e DetalhesDoPedido, através do campo NúmeroDoPedido, e externamente é feita a ligação entre as tabelas Produtos e DetalhesdoPedido, através do campo CódigoDoProduto.

Podemos utilizar diversos níveis de INNER JOIN, embora esta não seja uma prática recomendada, pois se aumentarmos muito os níveis de INNER JOIN, posso ter como resultado pesquisas mais lentas, em conseqüência do aumento da complexidade das consultas. Até três ou quatro níveis é considerado normal, acima disso repense a maneira de construir a consulta.

Exemplo 11: Alterar a instrução SQL do item anterior para que somente sejam exibidos os pedidos para os produtos cujo NomeDoProduto inicie com uma letra na faixa de A até J. Tirar a classificação do campo NúmeroDoPedido e classificar em ordem crescente do campo NomeDoProduto.

SELECT Pedidos.NúmeroDoPedido, Pedidos.DataDoPedido, Pedidos.PaísDeDestino, Pedidos.Frete, Produtos.NomeDoProduto, DetalhesdoPedido.PreçoUnitário, DetalhesdoPedido.Quantidade
FROM Pedidos
INNER JOIN (Produtos INNER JOIN DetalhesdoPedido
ON
Produtos.CódigoDoProduto=DetalhesdoPedido.CódigoDoProduto)
ON
Pedidos.NúmeroDoPedido = DetalhesdoPedido.NúmeroDoPedido
WHERE (Produtos.NomeDoProduto Like ‘[A-J]%’)
ORDER BY Produtos.NomeDoProduto

Observe, além dos dois INNER JOIN, a utilização da cláusula WHERE em conjunto com operador LIKE para especificar o critério desejado.

Até este momento apresentei instruções SQL que executam consultas em Banco de Dados. Especifiquei quais campos serão exibidos, critérios de filtragem para estes campos e uma ordem de classificação. A partir de agora mostrarei como utilizar instruções SQL para a construção de outros tipos de operações, tais como operações que realizam alterações nos dados e inclusões de novos registros, em tabelas de um Banco de Dados.

« Lição anterior Δ Página principal ¤ Capítulos Próxima lição »

você conhece a universidade do access?

Universidade do Access - Curso Completo de Access
com tudo para você dominar o Access - do Básico ao
Avançado - até a Criação de Sistemas Profissionais
Completos - Passo a Passo - Tela a Tela

Capa da Universidade do Access

Aplica-se ao Access 2019, 2016, 2013 e 2010!

13 Cursos - 574 Vídeo-Aulas - 63:32 horas

Para todos os detalhes, acesse:

https://juliobattisti.com.br/universidade-do-access.asp

Quer receber novidades e e-books gratuitos?

 
 

Contato: Telefone: (51) 3717-3796 | E-mail: webmaster@juliobattisti.com.br | Whatsapp: (51) 99627-3434

Júlio Battisti Livros e Cursos Ltda | CNPJ: 08.916.484/0001-25 | Rua Vereador Ivo Cláudio Weigel, 537 - Universitário, Santa Cruz do Sul/RS, CEP: 96816-208

Todos os direitos reservados, Júlio Battisti 2001-2025 ®

LIVRO: MACROS E PROGRAMAÇÃO VBA NO EXCEL 2016 - CURSO COMPLETO E PRÁTICO

DOMINE A PROGRAMAÇÃO VBA NO EXCEL - 878 PÁGINAS - CLIQUE AQUI