Base de dados usadas nos exemplos desse capítulo.
drop database supermercado_join;
create database supermercado_join;
use supermercado_join ;
CREATE TABLE Cliente (
ClienteID INT PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Email VARCHAR(100) ,
Telefone VARCHAR(15)
);
CREATE TABLE Vendedor (
VendedorID INT PRIMARY KEY,
Nome VARCHAR(50) NOT NULL
);
CREATE TABLE Produto (
ProdutoID INT PRIMARY KEY,
Nome VARCHAR(50) NOT NULL,
Preco DECIMAL(10, 2) NOT NULL CHECK (Preco > 0) -- Garantir que o preço seja maior que zero
);
CREATE TABLE Venda (
NF CHAR(14) PRIMARY KEY, -- NF como chave primária (Nota Fiscal de 14 caracteres)
DataVenda DATE NOT NULL,
ClienteID INT NOT NULL,
VendedorID INT,
FOREIGN KEY (ClienteID) REFERENCES Cliente(ClienteID) ON DELETE CASCADE,
FOREIGN KEY (VendedorID) REFERENCES Vendedor(VendedorID) ON DELETE SET NULL
);
CREATE TABLE VendaProduto (
VendaProdutoID INT PRIMARY KEY,
NF CHAR(14) NOT NULL,
ProdutoID INT NOT NULL,
Quantidade INT NOT NULL CHECK (Quantidade > 0),
FOREIGN KEY (NF) REFERENCES Venda(NF) ON DELETE CASCADE,
FOREIGN KEY (ProdutoID) REFERENCES Produto(ProdutoID) ON DELETE CASCADE
);
INSERT INTO Cliente (ClienteID, Nome, Email, Telefone) VALUES
(1, 'João Silva', '[email protected]', '999991234'),
(2, 'Maria Oliveira', '[email protected]', '999995678'),
(3, 'Carlos Pereira', '[email protected]', '999991011'),
(4, 'Ana Costa', '[email protected]', '999992345'),
(5, 'Lucas Almeida', '[email protected]', '999994321'),
(6, 'Fernanda Nunes', '[email protected]', '999993210'),
(7, 'Paulo Santos', '[email protected]', '999992233'),
(8, 'Juliana Souza', '[email protected]', '999991987'),
(9, 'Ricardo Lima', '[email protected]', '999994455'),
(10, 'Beatriz Machado', '[email protected]', '999995544');
INSERT INTO Vendedor (VendedorID, Nome) VALUES
(1, 'Ana Martins' ),
(2, 'Rafael Souza'),
(3, 'Juliana Alves'),
(4, 'Pedro Silva'),
(5, 'Mariana Costa' ),
(6, 'Gustavo Nunes' ),
(7, 'Fernanda Lopes' ),
(8, 'Ricardo Oliveira' ),
(9, 'Camila Santos' ),
(10, 'Fábio Pereira' );
INSERT INTO Produto (ProdutoID, Nome, Preco) VALUES
(1, 'Celular', 1200.00),
(2, 'Sofá', 2300.00),
(3, 'Camisa', 150.00),
(4, 'Notebook', 3500.00),
(5, 'Geladeira', 2800.00),
(6, 'Bicicleta', 600.00),
(7, 'TV', 1800.00),
(8, 'Furadeira', 300.00),
(9, 'Tênis', 400.00),
(10, 'Cadeira Gamer', 850.00);
INSERT INTO Venda (NF, DataVenda, ClienteID, VendedorID) VALUES
('00000000000001', '2024-12-01', 1, 1),
('00000000000002', '2024-12-02', 2, 2),
('00000000000003', '2024-12-03', 3, 3),
('00000000000004', '2024-12-04', 4, 4),
('00000000000005', '2024-12-05', 5, 5),
('00000000000006', '2024-12-06', 6, 6),
('00000000000007', '2024-12-07', 7, null),
('00000000000008', '2024-12-08', 8, null),
('00000000000009', '2024-12-09', 1, 9),
('00000000000010', '2024-12-10', 1, 10);
INSERT INTO VendaProduto (VendaProdutoID, NF, ProdutoID, Quantidade) VALUES
(1, '00000000000001', 1, 2),
(2, '00000000000001', 3, 1),
(3, '00000000000002', 2, 1),
(4, '00000000000002', 4, 1),
(5, '00000000000003', 5, 1),
(6, '00000000000003', 6, 2),
(7, '00000000000004', 7, 1),
(8, '00000000000004', 8, 3),
(9, '00000000000005', 9, 1),
(10, '00000000000005', 10, 2),
(11, '00000000000006', 1, 1),
(12, '00000000000006', 2, 1),
(13, '00000000000007', 3, 3),
(14, '00000000000007', 5, 1),
(15, '00000000000008', 6, 1),
(16, '00000000000008', 7, 2),
(17, '00000000000009', 8, 1),
(18, '00000000000009', 9, 1),
(19, '00000000000009', 10, 1),
(20, '00000000000010', 1, 1),
(21, '00000000000010', 3, 2),
(22, '00000000000010', 4, 1),
(23, '00000000000010', 5, 1),
(24, '00000000000010', 6, 1),
(25, '00000000000010', 7, 1);
erDiagram
Cliente {
int ClienteID PK
string Nome
string Email
string Telefone
}
Vendedor {
int VendedorID PK
string Nome
}
Produto {
int ProdutoID PK
string Nome
decimal Preco
}
Venda {
char(14) NF PK
date DataVenda
int ClienteID FK
int VendedorID FK
}
VendaProduto {
int VendaProdutoID PK
char(14) NF FK
int ProdutoID FK
int Quantidade
}
Cliente ||--o{ Venda : "realiza"
Vendedor ||--o{ Venda : "responsável por"
Venda ||--o{ VendaProduto : "contém"
Produto ||--o{ VendaProduto : "vendido em"
O JOIN é uma operação no SQL que combina dados de duas ou mais tabelas com base em uma coluna comum entre elas, chamada de chave relacionada.
Exemplo:
Se você tem uma tabela de vendas e outra de produtos, pode usar um JOIN
para saber quais produtos foram vendidos em cada transação.
Cliente
, a chave primária pode ser ClienteID
.Produto
, a chave primária pode ser ProdutoID
.Regras:
NULL
.