SQL DML
// Manipulação de Dados
A Data Manipulation Language (DML) é usada para consultar e modificar dados em bancos relacionais.
SELECT
: Consultar dados.INSERT
: Inserir novos registros.UPDATE
: Alterar registros existentes.DELETE
: Excluir registros.
Comando | Função |
---|---|
SELECT | Recupera dados |
INSERT | Adiciona registros |
UPDATE | Modifica registros |
DELETE | Remove registros |
Atividade Prática: Cite dois comandos DML.
SELECT, INSERT
SELECT e Cláusulas
// Consultas Básicas
SELECT
recupera dados com cláusulas como FROM
, WHERE
, ORDER BY
, LIMIT
.
db_admin@postgres:~#
SELECT id, nome, salario
FROM funcionarios
WHERE salario > 5000
AND departamento_id = 2
ORDER BY salario DESC
LIMIT 5;
-- Exemplo com projetos
SELECT jname, orcamento
FROM projetos
WHERE orcamento > 10000
AND local = 'Paris'
ORDER BY orcamento DESC;
Atividade Prática: Selecione nomes de projetos com orçamento > 5000.
SELECT jname FROM projetos WHERE orcamento > 5000;
Funções Agregadas
// Agrupamento e Cálculos
Funções como COUNT
, SUM
, AVG
, MIN
, MAX
com GROUP BY
e HAVING
.
db_admin@postgres:~#
SELECT departamento, COUNT(*) AS total
FROM funcionarios
GROUP BY departamento
HAVING COUNT(*) > 3;
-- Exemplo com projetos
SELECT local, COUNT(*) as total
FROM projetos
GROUP BY local
HAVING COUNT(*) > 2;
Atividade Prática: Conte projetos por local com mais de 1 projeto.
SELECT local, COUNT(*) FROM projetos GROUP BY local HAVING COUNT(*) > 1;
JOINs
// Combinando Tabelas
JOINs combinam dados: INNER
, LEFT
, RIGHT
, FULL
, SELF
.
db_admin@postgres:~#
SELECT f.nome, d.nome AS departamento
FROM funcionarios f
INNER JOIN departamentos d
ON f.departamento_id = d.id;
-- Exemplo com projetos
SELECT p.jname, c.nome
FROM projetos p
INNER JOIN colaboradores c
ON p.responsavel_id = c.colaborador_id;
Atividade Prática: Liste projetos e seus responsáveis.
SELECT p.jname, c.nome FROM projetos p LEFT JOIN colaboradores c ON p.responsavel_id = c.colaborador_id;
Subconsultas
// Consultas Aninhadas
Subconsultas são SELECT
s aninhados, usados com IN
, EXISTS
, ANY
.
db_admin@postgres:~#
SELECT nome
FROM funcionarios
WHERE id IN (
SELECT funcionario_id
FROM projetos
WHERE nome_projeto = 'Sistema X'
);
-- Exemplo com projetos
SELECT nome
FROM colaboradores
WHERE colaborador_id IN (
SELECT responsavel_id
FROM projetos
WHERE orcamento > 15000
);
Atividade Prática: Liste colaboradores de projetos caros (> 10000).
SELECT nome FROM colaboradores WHERE colaborador_id IN ( SELECT responsavel_id FROM projetos WHERE orcamento > 10000 );
INSERT, UPDATE, DELETE
// Modificação de Dados
INSERT
adiciona, UPDATE
modifica, DELETE
remove registros.
db_admin@postgres:~#
INSERT INTO funcionarios (nome, salario, departamento_id)
VALUES ('João', 4500, 2);
UPDATE funcionarios
SET salario = salario * 1.1
WHERE departamento_id = 3;
DELETE FROM funcionarios
WHERE salario < 2000;
-- Exemplo com projetos
INSERT INTO projetos (jname, orcamento)
VALUES ('Projeto X', 20000);
UPDATE projetos
SET orcamento = orcamento + 5000
WHERE local = 'Paris';
DELETE FROM projetos
WHERE orcamento < 1000;
Atividade Prática: Insira um projeto com orçamento 15000.
INSERT INTO projetos (jname, orcamento) VALUES ('Projeto Y', 15000);
Atividade: Desafios SQL
// Manipulação de Dados
Desafios:
Usando
Usando
gestao_projetos
, funcionarios
, e S-P-SP:
- Listar projetos com orçamento > 10000.
- Contar tarefas por projeto com mais de 2 tarefas.
- Juntar
S
eSP
para fornecedores de peça 'P2'. - Listar fornecedores (SNAME) de peças vermelhas.
- Selecionar projetos com mais de 5 funcionários.
- Atualizar salário de analistas em 15%.
- Excluir funcionários sem projetos.
Visualização: Junção Funcionários e Departamentos
db_admin@postgres:~#
-- Desafio 5: Projetos com > 5 funcionários
SELECT p.nome_projeto, COUNT(f.id)
FROM projetos p
JOIN funcionarios f
ON p.funcionario_id = f.id
GROUP BY p.nome_projeto
HAVING COUNT(f.id) > 5;
-- Desafio 6: Atualizar analistas
UPDATE funcionarios
SET salario = salario * 1.15
WHERE cargo = 'Analista';
-- Desafio 3: Fornecedores de peça P2
SELECT s.sname
FROM S s
INNER JOIN SP sp
ON s.s# = sp.s#
WHERE sp.p# = 'P2';
-- Desafio 1 SELECT jname FROM projetos WHERE orcamento > 10000; -- Desafio 2 SELECT projeto_id, COUNT(*) FROM tarefas GROUP BY projeto_id HAVING COUNT(*) > 2; -- Desafio 4 SELECT s.sname FROM S s WHERE s.s# IN ( SELECT sp.s# FROM SP sp WHERE sp.p# IN ( SELECT p.p# FROM P p WHERE p.color = 'RED' ) ); -- Desafio 7 DELETE FROM funcionarios WHERE id NOT IN ( SELECT funcionario_id FROM projetos );
Quiz Interativo
// Teste seus Conhecimentos
Teste de Conhecimento
Responda às perguntas sobre SQL DML.
1. Qual comando recupera dados?
a) SELECT
b) INSERT
c) UPDATE
d) DELETE
Resposta Correta: a) SELECT. Recupera dados.
2. Qual função conta valores distintos?
a) COUNT(UNIQUE)
b) SUM
c) AVG
d) MAX
Resposta Correta: a) COUNT(UNIQUE). Conta valores distintos.
3. Qual JOIN retorna todas as linhas da tabela esquerda?
a) INNER JOIN
b) LEFT JOIN
c) RIGHT JOIN
d) FULL JOIN
Resposta Correta: b) LEFT JOIN. Inclui todas as linhas da esquerda.
4. O que é uma subconsulta?
a) Tabela temporária
b) SELECT aninhado
c) Índice
d) Trigger
Resposta Correta: b) SELECT aninhado. Consulta dentro de outra.
5. Qual comando modifica registros?
a) SELECT
b) INSERT
c) UPDATE
d) DELETE
Resposta Correta: c) UPDATE. Modifica registros existentes.
6. Qual cláusula filtra grupos?
a) WHERE
b) HAVING
c) ORDER BY
d) LIMIT
Resposta Correta: b) HAVING. Filtra grupos após GROUP BY.
7. Qual comando remove registros?
a) SELECT
b) INSERT
c) UPDATE
d) DELETE
Resposta Correta: d) DELETE. Remove registros de uma tabela.
db_quiz_results:~#
RUN dml_quiz;
-- Quiz finalizado. Parabéns!
Referências
// Fontes Utilizadas
- Date, C. J. Introdução a Sistemas de Banco de Dados
- Documentação oficial do PostgreSQL
- Exemplos adaptados do esquema S-P-SP