Atividade Prática para Estudos
Este repositório contém um guia completo de estudos para a disciplina de Banco de Dados, com exercícios práticos, explicações detalhadas e exemplos de código SQL. A atividade foi elaborada com base no documento - Atividade Prática de Banco de Dados
- 📖 Visão Geral
- 🎯 Objetivos de Aprendizado
- 🗂️ Estrutura do Projeto
- 💾 Modelagem do Banco de Dados
- 📝 Exercícios Práticos
- 🔧 Como Executar
- 📚 Conceitos Importantes
- 💡 Dicas para a Prova
- 📖 Referências
Este projeto foi desenvolvido como material de estudo para a disciplina de Banco de Dados, focando em:
- Modelagem de Banco de Dados: Criação de tabelas com relacionamentos
- Comandos DDL: CREATE, ALTER, DROP
- Comandos DML: INSERT, UPDATE, DELETE
- Consultas SQL: SELECT com JOINs, subconsultas e funções de agregação
- Integridade Referencial: Chaves primárias e estrangeiras
- ✅ Criar e gerenciar bancos de dados relacionais
- ✅ Implementar relacionamentos entre tabelas
- ✅ Escrever consultas SQL complexas com múltiplas junções
- ✅ Utilizar funções de agregação e agrupamento
- ✅ Aplicar filtros e condições avançadas
- ✅ Manter a integridade dos dados
bdTraining/
├── README.md # Este guia de estudos
├── docs/
│ ├── querys.sql # Todas as consultas SQL do exercício
│ ├── schema.sql # Script de criação do banco e tabelas
│ ├── data.sql # Script de inserção de dados
│ └── exercises/ # Exercícios organizados por tópico
│ ├── ddl-commands.md # Comandos de definição de dados
│ ├── dml-commands.md # Comandos de manipulação de dados
│ └── advanced-queries.md # Consultas avançadas
└── assets/
└── diagrams/ # Diagramas ER e de relacionamento
| Campo | Tipo | Descrição |
|---|---|---|
| RA | INT PK | Registro Acadêmico (Identity) |
| Nome | VARCHAR(200) | Nome completo do aluno |
| Cidade | VARCHAR(40) | Cidade de residência |
| Campo | Tipo | Descrição |
|---|---|---|
| codigodisciplina | INT PK | Código da disciplina (Identity) |
| disciplina | VARCHAR(100) | Nome da disciplina |
| cargahoraria | FLOAT | Carga horária em horas |
| Campo | Tipo | Descrição |
|---|---|---|
| codigoprofessor | INT PK | Código do professor (Identity) |
| nome | VARCHAR(100) | Nome completo do professor |
| cidade | VARCHAR(40) | Cidade de residência |
| Campo | Tipo | Descrição |
|---|---|---|
| codigohistorico | INT PK | Código do histórico (Identity) |
| ra | INT FK | Referência ao aluno |
| codigodisciplina | INT FK | Referência à disciplina |
| codigoprofessor | INT FK | Referência ao professor |
| semestre | INT | Semestre cursado |
| faltas | INT | Número de faltas |
| nota | FLOAT | Nota obtida |
| ano | INT | Ano letivo |
erDiagram
ALUNOS {
int RA PK
varchar Nome
varchar Cidade
}
DISCIPLINA {
int codigodisciplina PK
varchar disciplina
float cargahoraria
}
PROFESSOR {
int codigoprofessor PK
varchar nome
varchar cidade
}
HISTORICO {
int codigohistorico PK
int ra FK
int codigodisciplina FK
int codigoprofessor FK
int semestre
int faltas
float nota
int ano
}
ALUNOS ||--o{ HISTORICO : "possui"
DISCIPLINA ||--o{ HISTORICO : "é cursada em"
PROFESSOR ||--o{ HISTORICO : "leciona em"
- Criação do Banco de Dados - Ver código
- Definição de Tabelas e Relacionamentos - Ver diagrama
- Inserção de Dados de Teste - Ver código
- Filtros Simples - Alunos com nota < 5 em BD
- Alteração de Estrutura - Adição do campo ano
- Atualização de Dados - Definir anos nos históricos
- JOIN Simples - Professores de BD em 2020
- Agregação - Quantidade de disciplinas por professor
- Múltiplos JOINs - Consultas complexas com 3+ tabelas
- Subconsultas - Histórico específico de alunos
- Filtros Complexos - Múltiplas condições
- Relatórios - Consultas para tomada de decisão
- 📋 Todas as 14 consultas da atividade
- 🏗️ Comandos DDL explicados
- 📊 Comandos DML explicados
- 🔍 Consultas avançadas explicadas
-- Backup rápido de uma tabela
SELECT * INTO ALUNOS_BACKUP FROM ALUNOS;
-- Verificar estrutura de uma tabela
EXEC sp_columns 'ALUNOS';
-- Verificar relacionamentos
SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;-- Verificar tamanho das tabelas
SELECT
t.NAME AS TableName,
p.rows AS RowCounts
FROM sys.tables t
INNER JOIN sys.partitions p ON t.object_id = p.OBJECT_ID
WHERE p.index_id < 2
ORDER BY p.rows DESC;
-- Verificar índices
SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID('ALUNOS');- SQL Server ou SQL Server Management Studio
- Conhecimento básico de SQL
-
Clone o repositório
git clone <url-do-repositorio> cd bdTraining
-
Crie o banco de dados
-- Execute o arquivo schema.sql -
Insira os dados de teste
-- Execute o arquivo data.sql -
Execute as consultas
-- Execute as consultas do arquivo querys.sql
Chave Primária (Primary Key)
- Identifica unicamente cada registro
- Não pode ser NULL
- Não pode ter valores duplicados
Chave Estrangeira (Foreign Key)
- Estabelece relacionamento entre tabelas
- Garante integridade referencial
- Deve existir na tabela referenciada
| Tipo JOIN | Descrição | Uso |
|---|---|---|
| INNER JOIN | Retorna apenas registros com correspondência em ambas as tabelas | Consultas que precisam de dados relacionados |
| LEFT JOIN | Retorna todos os registros da tabela esquerda | Quando queremos todos os registros mesmo sem correspondência |
| RIGHT JOIN | Retorna todos os registros da tabela direita | Menos usado, similar ao LEFT JOIN |
| FULL JOIN | Retorna registros quando há correspondência em qualquer tabela | União completa de dados |
-- Principais funções
COUNT(*) -- Conta registros
COUNT(DISTINCT) -- Conta valores únicos
SUM() -- Soma valores
AVG() -- Calcula média
MAX() -- Valor máximo
MIN() -- Valor mínimo
STRING_AGG() -- Concatena strings (SQL Server)-- Estrutura básica de uma consulta
SELECT colunas
FROM tabela1
JOIN tabela2 ON condição
WHERE filtros_de_registro
GROUP BY colunas_de_agrupamento
HAVING filtros_de_grupo
ORDER BY colunas_de_ordenação;- Memorizar a estrutura básica do SELECT
- Praticar JOINs entre 2, 3 e 4 tabelas
- Entender a diferença entre WHERE e HAVING
- Conhecer as principais funções de agregação
- Saber usar DISTINCT para eliminar duplicatas
- Praticar comandos DDL (CREATE, ALTER)
- Praticar comandos DML (INSERT, UPDATE)
- Leia a questão inteiramente antes de começar a escrever
- Identifique as tabelas que serão necessárias
- Determine os relacionamentos entre as tabelas
- Escreva o JOIN primeiro, depois adicione os filtros
- Use aliases para deixar o código mais limpo (A, H, D, P)
- Teste mentalmente se a consulta faz sentido
- Esquecer a condição do JOIN (vai gerar produto cartesiano)
- Confundir WHERE com HAVING
- Usar GROUP BY sem função de agregação
- Esquecer de usar DISTINCT quando necessário
- Não especificar a tabela quando há campos com mesmo nome
-- Sempre usar este padrão para facilitar a leitura
SELECT DISTINCT
A.campo1,
B.campo2
FROM
TABELA1 AS A
JOIN
TABELA2 AS B ON A.chave = B.chave_estrangeira
WHERE
A.condicao = 'valor'
AND B.outra_condicao > 0
ORDER BY
A.campo1;- SQL Server Management Studio (SSMS)
- Azure Data Studio
- DB Browser for SQLite (Para testes rápidos)