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 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.

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.

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.

Subconsultas

// Consultas Aninhadas

Subconsultas são SELECTs 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).

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.

Atividade: Desafios SQL

// Manipulação de Dados

Desafios:
Usando gestao_projetos, funcionarios, e S-P-SP:
  1. Listar projetos com orçamento > 10000.
  2. Contar tarefas por projeto com mais de 2 tarefas.
  3. Juntar S e SP para fornecedores de peça 'P2'.
  4. Listar fornecedores (SNAME) de peças vermelhas.
  5. Selecionar projetos com mais de 5 funcionários.
  6. Atualizar salário de analistas em 15%.
  7. Excluir funcionários sem projetos.

Visualização: Junção Funcionários e Departamentos

Funcionários id, nome, departamento_id Departamentos id, nome INNER JOIN ON departamento_id
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';
          

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