Pular para o conteúdo

Banco de dados em SQL: consultas com exemplos resolvidos

Aprenda SQL com um pequeno banco acadêmico: crie tabelas, insira dados e confira filtros, junções, contagens e médias com resultados explicados.

Autoria
Study Mais
Publicado em
Tempo de leitura
5 min de leitura
Programador trabalha em um computador em um laboratório universitário.
Cena ilustrativa de estudo, gerada por IA. Imagem ilustrativa gerada com IA.

Em poucas palavras

  • SQL é uma linguagem para definir, consultar e modificar dados; PostgreSQL é um dos gerenciadores que a executam.
  • Uma consulta precisa declarar o significado de suas linhas, os filtros, a combinação de tabelas e a ordem do resultado.
  • Os exemplos distinguem registros existentes, notas ausentes e estudantes sem avaliações para evitar contagens incorretas.

Para trabalhar com um banco de dados em SQL, você usa comandos que definem tabelas, registram informações e consultam resultados. SQL é a linguagem; o sistema gerenciador executa as instruções e mantém os dados. Neste tutorial, um pequeno cenário acadêmico permite acompanhar cada consulta e conferir a saída esperada.

Os comandos usam um subconjunto simples de SQL compatível com PostgreSQL. Execute o exercício em um banco de estudo vazio. Os nomes e notas são fictícios e servem apenas para demonstrar a lógica. A proposta é entender como a pergunta se transforma em uma consulta verificável, sem depender de decorar comandos isolados.

Crie duas tabelas com funções claras

Uma tabela representa estudantes. A outra registra avaliações associadas a eles. Cada linha de estudante corresponde a uma pessoa do cenário; cada linha de avaliacao corresponde a um registro de avaliação. A separação permite que um estudante possua mais de uma avaliação e que outro ainda não possua nenhuma.

O identificador distingue cada registro, e estudante_id informa a qual estudante a avaliação pertence. A coluna nota admite NULL para representar uma nota ainda não registrada no exemplo. O significado dessa ausência foi definido para o exercício; em outro sistema, você precisaria estabelecer uma regra própria.

Para aprofundar a relação entre chaves e tabelas, consulte banco de dados relacionais. A linguagem permite executar instruções sobre estruturas existentes, mas não decide sozinha qual organização representa corretamente o problema de uma aplicação.

Insira dados que incluam situações diferentes

A documentação de inserção do PostgreSQL apresenta o comando INSERT. Informar os nomes das colunas deixa explícita a correspondência com os valores. No exercício, incluiremos duas avaliações para Ana, duas para Bruno e nenhuma para Caio; uma das avaliações de Bruno ficará sem nota.

Esses casos foram escolhidos para revelar diferenças que passariam despercebidas em uma base contendo apenas linhas completas. Uma nota nula e a inexistência de avaliação não são a mesma situação. As duas precisam continuar distinguíveis quando as tabelas forem combinadas.

Dois estudantes revisam um programa no computador.
Cena ilustrativa gerada para acompanhar o estudo; não representa dados ou resultados experimentais. Imagem ilustrativa gerada com IA.

SELECT e WHERE: escolha colunas e filtre linhas

A consulta de tabelas no tutorial PostgreSQL utiliza SELECT para definir o resultado e WHERE para selecionar as linhas que atendem a uma condição. Para encontrar avaliações com nota a partir de sete, compare o valor da coluna e solicite explicitamente a ordenação desejada.

Resultado do filtro, sem alterações nos dados iniciais
idnota
18.00
39.00
id
1
nota
8.00
id
3
nota
9.00
Resultado do filtro, sem alterações nos dados iniciais

A avaliação 2 foi excluída porque sua nota é seis. A avaliação 4 não satisfaz o filtro porque sua nota é desconhecida. Para procurá-la, use SELECT id FROM avaliacao WHERE nota IS NULL ORDER BY id;. O resultado contém somente id = 4.

A documentação de comparações explica por que nota = NULL não substitui IS NULL. Uma comparação comum com valor nulo produz resultado desconhecido. Também não suponha que a ordem observada sem ORDER BY permanecerá igual entre execuções.

JOIN: relacione linhas por uma condição

A documentação de junções mostra como combinar tabelas. No exemplo, a ligação correta compara estudante.id com avaliacao.estudante_id. Escrever apenas as duas tabelas sem uma condição apropriada pode produzir combinações que não correspondem aos relacionamentos registrados.

Resultado da junção interna
idnomenota
1Ana8.00
2Ana6.00
3Bruno9.00
4BrunoNULL
id
1
nome
Ana
nota
8.00
id
2
nome
Ana
nota
6.00
id
3
nome
Bruno
nota
9.00
id
4
nome
Bruno
nota
NULL
Resultado da junção interna

Ana e Bruno aparecem duas vezes porque cada um possui duas avaliações. A repetição dos nomes corresponde à unidade do resultado: uma linha por avaliação. Caio não aparece porque a junção interna conserva apenas correspondências. Aplicar DISTINCT sem pensar no significado poderia esconder informações que deveriam permanecer.

Conte avaliações e calcule médias por estudante

Para incluir Caio, comece com estudante e use LEFT JOIN. Depois agrupe por estudante. A seção de funções agregadas do PostgreSQL apresenta cálculos sobre conjuntos de linhas. Neste exercício, a escolha da coluna contada distingue registros de avaliação e notas efetivamente preenchidas.

Resultados esperados; médias exibidas com duas casas para facilitar a leitura
EstudanteAvaliaçõesNotas lançadasMédia
Ana227.00
Bruno219.00
Caio00NULL
Estudante
Ana
Avaliações
2
Notas lançadas
2
Média
7.00
Estudante
Bruno
Avaliações
2
Notas lançadas
1
Média
9.00
Estudante
Caio
Avaliações
0
Notas lançadas
0
Média
NULL
Resultados esperados; médias exibidas com duas casas para facilitar a leitura

A média de Ana é (8 + 6) ÷ 2 = 7. A de Bruno considera somente a nota preenchida, resultando em 9. Sua segunda avaliação continua existindo, mas não entra como zero. Caio não possui avaliações, e sua média permanece nula. O formato de casas decimais mostrado pelo cliente pode variar.

COUNT(*) após o LEFT JOIN contaria uma linha para Caio, porque a junção preserva o estudante mesmo sem correspondência. COUNT(a.id) resulta em zero nesse caso. Essa diferença mostra por que a pergunta sobre o significado de cada linha vem antes da escolha de uma função.

Como continuar praticando com resultados previsíveis

Altere uma pergunta por vez: quais estudantes têm notas pendentes, quem ainda não possui avaliações e qual é a quantidade de notas lançadas? Escreva primeiro o resultado esperado a partir das tabelas pequenas e só depois execute a consulta. Se a saída divergir, examine filtros, condição de junção e unidade de agregação.

O pensamento computacional ajuda a decompor essas etapas. Ao crescer o banco, você também precisará estudar integridade, permissões e desempenho. A base permanece a mesma: declarar uma pergunta precisa e conferir se a consulta produz as linhas e os valores que realmente respondem a ela.

Aula complementar para revisar o tema e relacionar os conceitos do artigo. Banco de Dados - Linguagem SQL - Consultas com funções - SELECT (UNIVESP)

Referências

  1. PostgreSQL — Inserting Data https://www.postgresql.org/docs/current/dml-insert.html
  2. PostgreSQL — Querying a Table https://www.postgresql.org/docs/current/tutorial-select.html
  3. PostgreSQL — Comparison Functions and Operators https://www.postgresql.org/docs/current/functions-comparison.html
  4. PostgreSQL — Joins Between Tables https://www.postgresql.org/docs/current/tutorial-join.html
  5. PostgreSQL — Aggregate Functions https://www.postgresql.org/docs/current/tutorial-agg.html

Autoria

Study Mais

Estudantes organizam cartões e objetos em uma atividade de resolução de problemas.
Computação e Tecnologia

Pensamento computacional: pilares e exemplo aplicado

Entenda pensamento computacional com uma escala de monitoria: decomposição, padrões, abstração, algoritmos, testes e limites das decisões automatizadas.

8 min de leituraPortuguês