Usaremos as mesmas tabelas VENDAS e CLIENTES da aula anterior.
CREATE TABLE CLIENTES (
id_cliente NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
nome VARCHAR2(100) NOT NULL,
cidade VARCHAR2(50),
estado VARCHAR2(2)
);
CREATE TABLE VENDAS (
id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY PRIMARY KEY,
produto VARCHAR2(100) NOT NULL,
categoria VARCHAR2(50) NOT NULL,
valor NUMBER(10,2) NOT NULL CHECK (valor > 0),
data_venda DATE DEFAULT SYSDATE,
vendedor VARCHAR2(100) NOT NULL,
id_cliente NUMBER,
CONSTRAINT fk_cliente FOREIGN KEY (id_cliente) REFERENCES CLIENTES(id_cliente)
);
Popule as tabelas:
INSERT INTO CLIENTES (nome, cidade, estado) VALUES
('Ana', 'São Paulo', 'SP'),
('Bruna', 'Campinas', 'SP'),
('Carlos', 'Rio de Janeiro', 'RJ'),
('Daniel', 'Belo Horizonte', 'MG'); -- cliente sem vendas
INSERT INTO VENDAS (produto, categoria, valor, data_venda, vendedor, id_cliente) VALUES
('Notebook Dell', 'Eletrônicos', 4500.00, DATE '2025-04-01', 'Carlos', 3),
('Mouse Gamer', 'Acessórios', 150.00, DATE '2025-04-01', 'Ana', 1),
('Teclado Mecânico', 'Acessórios', 300.00, DATE '2025-04-02', 'Carlos', 3),
('Monitor 24"', 'Eletrônicos', 1200.00, DATE '2025-04-02', 'Bruna', 2),
('Fone Bluetooth', 'Acessórios', 200.00, DATE '2025-04-03', 'Ana', 1),
('Notebook HP', 'Eletrônicos', 4000.00, DATE '2025-04-03', 'Carlos', 3);
O INNER JOIN retorna apenas registros que possuem correspondência em ambas as tabelas.
SELECT
c.nome AS cliente,
v.produto,
v.valor
FROM CLIENTES c
INNER JOIN VENDAS v
ON c.id_cliente = v.id_cliente;
🎯 Exibe somente clientes que têm vendas.
O LEFT JOIN retorna todos os registros da tabela à esquerda, mesmo que não tenham correspondência na tabela à direita.
SELECT
c.nome AS cliente,
v.produto,
v.valor
FROM CLIENTES c
LEFT JOIN VENDAS v
ON c.id_cliente = v.id_cliente;
📊 Saída:
VENDAS nulas.🎯 Objetivo: identificar clientes sem compras.