CONTEÚDOS do MÓDULO 3 - Definir estrutura de uma base de Dados com SQL - DDL
- Manipular os dados em SQL- DML
- Consultas em SQL envolvendo várias tabelas
DEFINIÇÃO
BASE DE DADOS RELACIONAL
Uma Base de Dados Relacional é um tipo de base de dados que organiza a informação em tabelas relacionadas entre si.
Esse modelo foi proposto por Edgar F. Codd em 1970 e é hoje o modelo mais utilizado em sistemas de gestão de dados (SGBD).
Exemplos de Sistemas de Gestão de Bases de Dados Relacionais
Alguns sistemas populares:
Todos utilizam a linguagem SQL usada principalmente para manipular os dados guardados nas tabelas.
EXEMPLO de uma BD no SGBD MariaDB (improved of MySQL/)
ESTRUTURA de uma Base de Dados
Nome da Base de Dados: "comprarcarros"
constituída pelas 3 tabelas:
Visualização dos dados nas tabelas
Tabela Fornecedores
DEFINIÇÃO LINGUAGEM SQL (Structured Query Language)
1️⃣ DDL ( Data Definition Language ) - definição de estrutura
2️⃣ DML (Data Manipulation Language) - manipulação de dados
DCL (Data Control Language) - controlo de acesso
TCL (Transaction Control Language) - controlo de transações

1️⃣DDL ( Data Definition Language )
definição da estrutura de base de dados
Comandos | Função |
CREATE | Criar bases de dados ou tabelas |
ALTER | Alterar uma tabela |
DROP | Apagar uma tabela ou a base de dados |
TRUNCATE RENAME | Esvazia a tabela (apaga todos os dados) Renomeia a tabela |
👉 É
o conjunto de comandos usados para criar, alterar e apagar a estrutura da base de
dados (tabelas, colunas, etc.).
EXEMPLO comando DDL
2️⃣DML (Data Manipulation Language)
manipulação de dados
Comandos | Função |
SELECT
INSERT | Selecionar dados Inserir dados |
UPDATE
| Atualizar dados |
DELETE | Apagar dados |
| |
👉 É usado para manipular os dados dentro das tabelas, ou seja, trabalhar com os registos.
Exemplos
SQL não é case sensitive ou seja, não distingue letras maiúsculas de minúsculas na maioria dos comandos.
📘 Tipos de dados em SQL
Os tipos de dados definem que tipo de dados que pode ser armazenada numa coluna/campo de uma tabela.
|
Categoria
|
Tipo de dado
|
Descrição
|
Exemplo
|
|
Numérico
|
INT
|
Número inteiro
|
10
|
|
BIGINT
|
Inteiro muito grande
|
1000000
|
|
DECIMAL(p,s)
DECIMAL (4,2)
|
Número com precisão decimal
p (precision) → número total de dígitos
s (scale) → número de casas
decimais
|
10.50
|
|
FLOAT
|
Número com casas decimais aproximadas
|
3.1415…
|
|
Texto
|
CHAR(n)
CHAR (1)
|
Nº caracteres de tamanho fixo
|
"F",
“M”
|
|
VARCHAR(n)
VARCHAR(20)
|
Texto de tamanho variável
|
"Maria"
|
|
TEXT
|
Texto longo
|
descrição grande
|
|
Data/Hora
|
DATE
|
Guarda apenas data
|
2026-03-16
|
|
TIME
|
Guarda hora
|
14:30:00
|
|
DATETIME
|
Guarda data e hora
|
2026-03-16 14:30:00
|
|
TIMESTAMP
|
Data e hora automática
|
2026-03-16 14:30:00
|
|
Lógico
|
BOOLEAN
|
Verdadeiro ou falso
|
TRUE
|
|
Binário
|
BLOB
|
Guarda ficheiros ou imagens
|
Imagem
|
|
Tipo
|
Descrição
|
BYTE
|
INTERVALO
|
EXEMPLO
|
|
TINYINT
|
inteiro muito pequeno
|
1 byte
|
-128 a 127
|
-125
|
|
SMALLINT
|
inteiro pequeno
|
2 bytes
|
-32 768 a 32 767
|
32000
|
|
INT
|
inteiro
|
4 bytes
|
-2 147 483
648 a 2 147 483 647
|
2 000 000
|
|
BIGINT
|
inteiro grande
|
8 bytes
|
±9.22 × 10¹⁸
|
3 999 999 000
|
|
|
|
|
|
|
📊 Diferença entre DECIMAL e FLOAT
| Tipo | Característica | Uso principal |
|---|
| DECIMAL | Valores exatos | 💰Valores financeiros € (preços, salários) e Classificações |
| FLOAT | Valores aproximados | 🔬Cálculos científicos ou estatísticos (arredondamentos) |
📊Métodos guardar imagens
| BLOB | foto Blob guarda a imagem dentro da base de dados |
| PATH | foto VARCHAR(255) mais rápido e mais usado em aplicações |
✔ Guarda o caminho onde fica guardada a imagem - exemplo "
/fotos/alunos/joao_silva.jpg"
EXEMPLO em SQL
CREATE TABLE Alunos (
nprocesso INT PRIMARY KEY,
nome VARCHAR(100),
sexo CHAR(1),
data_nascimento DATE,
email VARCHAR(255),
telefone CHAR(9),
peso FLOAT,
mediacurso DECIMAL(4,2),
foto BLOB,
ativo BOOLEAN,
data_matricula DATETIME,
observacoes TEXT
);
1️⃣Principais Comandos SQL DDL
1.1 CREATE - Criar DB e Tabelas
✔Criar uma base de dados
Sintaxe Exemplo
|
CREATE DATABASE nome_da_DB;
|
CREATE DATABASE Loja;
|
✔Usar uma base de dados
USE Loja;
✔Criar uma tabela
|
Sintaxe Exemplo | |
CREATE
TABLE nome_da_tabela (
campo1
tipo de dados
restrições,
campo2 tipo de dados restrições,
campo3 tipo de dados restrições
);
1.2. ALTER - Adicionar/ Modificar / Apagar Coluna da tabela O comando ALTER TABLE em SQL é usado para alterar a estrutura de uma tabela: adicionar, modificar ou apagar colunas/campos. Sintaxe básica
Adicionar campo - ADD ou ADD COLUMN
|
Sintaxe
|
Exemplo
|
ALTER TABLE nome_da_tabela ADD COLUMN campo tipo de dados;
|
ALTER TABLE Clientes ADD COLUMN DataNascimento DATE ;
|
|
|
Modificar tipo de dados 🚨
Sintaxe | Exemplo |
ALTER TABLE nome_da_tabela MODIFY campo tipo de dados; | ALTER TABLE Clientes MODIFY email VARCHAR(255) |
Renomear uma coluna - RENAME COLUMN ou CHANGE
Sintaxe SQL Server/ PostgreSQL | Exemplo |
ALTER TABLE nome_da_tabela RENAME COLUMN campo TO novocampo ; | ALTER TABLE Clientes RENAME COLUMN DataNascimento TO DataNasc; |
Sintaxe MariaDB e MySQL | Exemplo |
ALTER TABLE nome_da_tabela CHANGE campo novocampo Tipo de dado; | ALTER TABLE Clientes CHANGE DataNascimento DataNasc DATE; |
Remover coluna - DROP ou DROP COLUMN
Sintaxe | Exemplo |
ALTER TABLE nome_da_tabela DROP COLUMN nome_coluna; | ALTER TABLE Clientes DROP COLUMN DataNasc ; |
1.3. DROP - Remover tabela ou Base de dados
Sintaxe | Exemplo |
DROP TABLE nome_tabela; | DROP TABLE Clientes; |
Remover Base de Dados
Sintaxe | Exemplo |
DROP DATABASE nome_BD; | DROP DATABASE Loja; |
1.4. TRUNCATE - Esvazia a tabela (apagar todos os dados)
Sintaxe | Exemplo |
TRUNCATE TABLE nome_tabela; | TRUNCATE TABLE Clientes;
|
1.5. RENAME - renomear nome tabela
Sintaxe | Exemplo |
RENAME TABLE nome_antigo TO nome_novo; | RENAME TABLE Clientes TO Clients;
|
📊 Tipos de restrições (constraints)
mais usadas e SQL
Em SQL, as restrições são usadas para garantir a integridade e validade dos dados numa tabela.
|
Restrição
|
Função
|
Exemplo
|
|
PRIMARY KEY
|
Identifica registo único
|
id INT PRIMARY KEY
|
|
NOT NULL
|
Campo obrigatório (não vazio)
|
nome VARCHAR(40) NOT NULL
|
|
UNIQUE
|
Não permite duplicados
|
email VARCHAR(150) UNIQUE
|
|
FOREIGN KEY
|
Liga tabelas
|
FOREIGN KEY (CodClientFK)
REFERENCES Clientes (CodClient)
|
|
DEFAULT
|
Valor automático
|
ativo BOOLEAN DEFAULT TRUE
|
|
AUTO_INCREMENT
|
Incremento automático
|
id INT PRIMARY KEY AUTO-INCREMENT
|
|
CHECK
|
Validar
dados
|
CHECK (Quantity > 0 )
CHECK (data_nasc < CURRENT_DATE)
|
EXEMPLO
CREATE
TABLE Alunos (
nprocesso
INT PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(100) NOT NULL ,
email VARCHAR(150) UNIQUE,
repetente
BOOLEAN DEFAULT FALSE,
FOREIGN KEY
(codCursoFK )
REFERENCES Cursos
(CodCurso)
);
ATENÇÃO
FOREIGN KEY (campoFK) REFERENCES NomeTabela (campoPK) );
Em alguns SGBD,
poderá ter que escrever ´CONSTRAINT nome__constraint
CONSTRAINT fk_codcurso_Cursos FOREIGN KEY (codCursoFK ) REFERENCES Cursos (CodCurso)
Download e instalação do Xampp
- Apache servidor web ( hospedar websites )
- MariaDB /MySQL - SGBG
- suporte as linguagens PHP e Perl
- phpMyAdmin ferramenta usada para fazer a Gestão de Base de Dados através do Browser
FERRAMENTA phpMyAdmin
-O phpMyAdmin é a plataforma mais popular para a gestão de base de dados MariaDB
-MARIADB - SGDB open source dos criadores do MySQL (by
Oracle Corporation)
-O phpMyAdmin é uma ferramenta gratuita, open source, escrita em PHP, e que permite fazer a gestão de Bases de Dados guardadas no SGBD MariaDB /MySQL através de um Browser.
- É instalado com o XAMPP
Através de uma interface bastante intuitivo e organizado, o phpMyAdmin permite a qualquer utilizador fazer um gestão simplificada do MariaDB e das respectivas bases de dados.
Através do PhpMyAdmin, podemos:- controlar todas as bases de dados existentes como se existisse uma só;- criar e eliminar bases de dados;- criar, eliminar e alterar tabelas e campos de tabelas;- listar a informação existente, bem como executar qualquer comando SQL.Para além destas funcionalidades, permite igualmente exportar toda a informação de uma base de dados para vários formatos (SQL, XML, etc) para, por exemplo, realizar uma cópia de segurança de toda a informação existente na base de dados.
INICIAR o XAMPP
ABRIR o BROWSER
Escrever no URL: localhost/phpmyadmin/
Entrar com conta Utilizador: root (
sem password)
TRABALHAR em SQL
👉 CRIAR UMA TABELA de CADA VEZ
ATENÇÃO
Order_Items(IdOrderFK, IdProductFK, Quantity)
Mesmo código mas atribuir nome às CONTRAINTAPAGAR e ATUALIZAR DADOS na tabela principal (pai),
os registos relacionados na tabela filha são apagados ou atualizados automaticamente
🟦 Comparação de ações de integridade referencial (FK)
| Ação | O que faz | Quando se apaga o registo pai | Efeito nos registos filhos | Vantagens | Desvantagens |
|---|
| 🔴 ON DELETE CASCADE | Apaga automaticamente os registos dependentes | Elimina o pai | Apaga todos os filhos relacionados | Mantém base de dados limpa e sem “órfãos” | Pode apagar dados importantes sem aviso |
| 🟡 ON DELETE RESTRICT | Impede a eliminação do registo pai | Não deixa apagar se existirem filhos | Nenhuma ação (bloqueia o DELETE) | Garante segurança dos dados | Pode dificultar manutenção da BD |
EXERCÍCIO
CRIAR DB e TABELAS, considerando ON DELETE RESTRICT
Veterinario (CodVet (PK), Nome,
DataAdmissao, Salario )
Animal (CodAnimal (PK) , Nome
, AnoNascimento, Raça)
Consulta ( IdConsulta (PK) ,
Data, Hora, Motivo, CodVetFK(FK), CodAnimalFK (FK))
Veterinarian (CodVet (PK) ,Name , AdmissionDate , Salary)
Animal (CodAnimal (PK) , Name , BirthYear , Breed)
Consultation (IdConsultation (PK) , Date , Time , Reason
, CodVetFK (FK), CodAnimalFK (FK) )
ATENÇÃO: nome da tabela e nome dos campos chaves primárias e tipo de dados

2️⃣DML (Data Manipulation Language)
manipulação de dados
Comandos | Função |
SELECT
INSERT | Selecionar dados Inserir dados |
UPDATE
| Atualizar dados |
DELETE | Apagar dados |
| |
👉 É usado para manipular os dados dentro das tabelas, ou seja, trabalhar com os registos.
Inserir dados nas tabelas
Comando INSERT
🟦 Sintaxe básica
Strings entre plicas ' ' , exemplo: 'Ana Ferreira'
Tabela Veterinario - inserir 3 registos
Tabela Animal - inserir 3 registos
⚠️ Nota importante
CodVet deve existir na tabela Veterinario antes de ser usado em Consulta.
CodAnimal deve existir na tabela Animal antes de ser usado em Consulta.
As datas devem estar no formato YYYY-MM-DD.
Tabela Consulta - inserir 4 registos
- inserir 2 registos
VISUALIZAR DADOS das TABELAS
com a tabela selecionada --> separador PROCURAR
🟦 Atualizar dados em SQL (UPDATE)
🧠 Sintaxe do UPDATE
O comando UPDATE é utilizado para modificar dados existentes numa tabela. A cláusula WHERE permite indicar quais os registos que serão atualizados
Tabela Veterinario
🟩 Exemplo 1 — Atualizar salário
👉 Alterar o salário da veterinária Ana Ferreira:
🟨 Exemplo 2 — Atualizar nome
🟧 Exemplo 3 — Atualizar vários campos
🟦 Tabela Consulta — atualizar dados (UPDATE)
🧠 Exemplo 1 — Alterar o motivo da consulta
🟩 Exemplo 2 — Alterar data e hora
👉 Atualiza a data e hora da consulta nº 2.
🟨 Exemplo 3 — Alterar veterinário associado
👉 A consulta 4 passa a ser realizada pelo veterinário 3.
🟥 Comando SQL DELETE
O comando DELETE é utilizado para eliminar registos de uma tabela. CUIDADO!!
(INSERIR novo veterenário e novo animal)
🟥 DELETE do novo veterinário inserido
🟦 DELETE do novo animal inserido
⚠️ Nota importante
Se existirem consultas associadas a estes registos:
-
com
ON DELETE CASCADE → as consultas são apagadas automaticamente
-
com
ON DELETE RESTRICT → as consultas NÃO SERÃO APAGADAS
✅ Comandos SELECT em SQL
O comando SQL SELECT serve para consultar (ler) dados de uma ou mais tabelas numa base de dados.
É o comando mais usado em SQL.
📌 Para que serve?
-
Obter dados armazenados na base de dados
-
Filtrar informações específicas
-
Ordenar resultados
- obter dados da junção de duas ou mais tabelas
-
Fazer cálculos e agregações (calcular valores a partir dos dados e/ou resumir vários registos num resultado final)
🔹 Sintaxe do SELECT
🔹 Ver todos os veterinários
Comando SQL:
// * todos os campos
IGUAL
Resultado:
🔹 Mostrar apenas nome e salário do veterinário
Resultado:
🔹 Mostrar todos os dados da tabela Consulta
🔹 Consultas do veterinário 1
O AS em SQL significa “alias” (apelido temporário).
👉 Serve para dar um nome mais simples ou mais compreensível a uma coluna, no resultado da consulta.
🔹 Mostrar apenas nome e salário do veterinário
Sintaxe de Filtrar Dados – WHERE - serve para filtrar registos.
SELECT * // * todos os campos
FROM NomeTabela
WHERE condição ;
🔹 Veterinários com salário superior a 1600
🔹 Procurar veterinários admitidos depois de 2020
Sintaxe de Ordenar Dados – ORDER BY - serve para filtrar registos.
SELECT coluna1, coluna2 ...
FROM NomeTabela
ORDER BY coluna;
🔹 Ordenar ordem de crescente os veterinários por salário
🔹 Ordenar ordem de crescente os veterinários por salário
🔹 Consultas ordenadas por data descendente
Sintaxe de FILTRAR e Ordenar Dados – WHERE e ORDER BY
SELECT coluna1, coluna2 ...
FROM NomeTabela
WHERE condição
ORDER BY coluna;
🔹 Veterinários com salário superior a 1400, ORDENADOS de forma ascendente pelo salário
Explicação rápida:
- SELECT CodVet, Nome, DataAdmissao, Salario → escolhe as colunas a mostrar
- FROM Veterinario → tabela onde estão os dados
- WHERE Salario > 1400.00 → filtra apenas veterinários com salário superior a 1400
- ORDER BY Salario ASC → ordena por salário de forma crescente (do menor para o maior)
Resultado:
🔹 Contar veterinários
🔥 4. SELECT com JOIN — As 3 tabelas
🔹 Mostrar consultas com nome do veterinário e animal
O AS em SQL significa “alias” (apelido temporário).
👉 Serve para dar um nome mais simples ou mais compreensível a uma coluna, no resultado da consulta.
🔹 Mostrar apenas consultas do animal “Bobby”
🔹 Mostrar consultas do veterinário “Sofia Lopes”
🔹 Mostrar consultas ordenadas por data e hora
🔥 5. SELECT mais avançados
🔹 Número de consultas por veterinário
🔹 Média salarial dos veterinários