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"

1. O que é JOIN no SQL?

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.


2. Conceitos Fundamentais

2.1 Chave Primária

Regras:

2.2 Chave Estrangeira