top of page

Tabelas no SQL Server

  • Foto do escritor: Amanda Nascimento
    Amanda Nascimento
  • 3 de ago. de 2023
  • 10 min de leitura

Atualizado: 2 de jun.

Uma tabela é uma estrutura que armazena dados em formato de linhas e colunas. Cada coluna representa um campo com um tipo de dado específico, e cada linha representa um registro único. As tabelas são os principais componentes de um banco de dados relacional, permitindo o armazenamento e a organização eficiente das informações.


Ao criar uma tabela, é necessário definir:


  • Nome da tabela: Identificador único dentro do banco de dados.

  • Colunas: Cada coluna possui um nome, tipo de dado e, opcionalmente, restrições (como NOT NULL, UNIQUE, etc.).

  • Chave primária: Coluna(s) que identificam de forma única cada registro na tabela.


Para saber mais sobre chaves clique aqui

Para consultar sobre chave primária em tabelas existentes, clique aqui




Criando uma tabela simples, passo a passo


CREATE TABLE dbo.TESTE (

 

    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,

    NOME VARCHAR(100),

    IDADE INT,

    NASCIMENTO DATE

);




-- Inserindo uma condicional com o IF para que se a tabela já existir, é para excluir primeiro para depois criá-la novamente:



IF(OBJECT_ID('dbo.TESTE') IS NOT NULL)DROP TABLE dbo.TESTE




--Inserindo uma tabela com dados como nome, idade e data de nascimento:


--Para todos os campos que não podem ser vazio, podemos colocar o NOT NULL


--Exemplo: NOME VARCHAR(100) NOT NULL,


IF(OBJECT_ID('dbo.TESTE2') IS NOT NULL)

    DROP TABLE dbo.TESTE2;

 

CREATE TABLE dbo.TESTE2 (

 

    ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,

    NOME VARCHAR(100),

    IDADE INT,

    NASCIMENTO DATE

);

 


INSERT INTO dbo.TESTE2 (NOME, IDADE, NASCIMENTO)

VALUES ('Amanda', 32, '2023-01-01'), ('Matheus', 10, '2023-01-01'), 

('Joao', 19, '2023-01-01'), ('Guilherme', 33, '2023-01-01'), ('Dara', 26, '2023-01-01');




Criando uma tabela com chave primária (Primary Key)


A chave primária é o principal identificador exclusivo de uma tabela. Cada valor deve ser único e não nulo.


CREATE TABLE Clientes (

    ClienteID INT PRIMARY KEY,

    Nome NVARCHAR(100) NOT NULL,

    Email NVARCHAR(100) UNIQUE,

    DataCadastro DATETIME DEFAULT GETDATE()

);


  • ClienteID: Identificador único do cliente, definido como chave primária.

  • Nome: Nome do cliente, não permite valores nulos.

  • Email: Endereço de e-mail do cliente, deve ser único.

  • DataCadastro: Data e hora do cadastro, com valor padrão igual à data atual





Criando uma tabela com chave composta


É uma chave formada por mais de uma coluna, geralmente quando nenhuma coluna isoladamente pode garantir unicidade.


CREATE TABLE Matriculas (

    AlunoID INT,

    CursoID INT,

    DataMatricula DATE,

    PRIMARY KEY (AlunoID, CursoID)

);



Criando uma tabela com chave Estrangeira (Foreign Key)


Relaciona tabelas, criando uma dependência entre dados.


CREATE TABLE Alunos (

    AlunoID INT PRIMARY KEY,

    Nome NVARCHAR(100)

);

 

CREATE TABLE Notas (

    NotaID INT PRIMARY KEY,

    AlunoID INT,

    Nota DECIMAL(4,2),

    FOREIGN KEY (AlunoID) REFERENCES Alunos(AlunoID)

);



Criando uma tabela com Super Chave (Super Key)


Qualquer conjunto de colunas que identifica de forma única um registro. Pode conter atributos a mais que a chave primária.


CREATE TABLE Clientes (

    ClienteID INT PRIMARY KEY,

    CPF CHAR(11),

    Nome NVARCHAR(100),

    UNIQUE (Nome, CPF) -- Super Chave possível

);



Criando uma tabela com Chave candidata (Candidate Key)



São colunas ou conjuntos de colunas que podem servir como chave primária.


CREATE TABLE Usuarios (

    UsuarioID INT PRIMARY KEY,          -- Chave primária escolhida

    Email NVARCHAR(100) UNIQUE,         -- Chave candidata

    CPF CHAR(11) UNIQUE                 -- Outra chave candidata

);



Criando uma tabela com Chave Única (Unique Key)


Garante que os valores sejam únicos, mas permite valores nulos (diferente da chave primária).


CREATE TABLE Funcionarios (

    FuncionarioID INT PRIMARY KEY,

    Email NVARCHAR(100) UNIQUE,         -- Pode ser nulo, mas se houver valor, deve ser único

    Telefone VARCHAR(15) UNIQUE

);



Criando uma tabela com Chave Alternativa (Alternate Key)


É qualquer chave candidata que não foi escolhida como a chave primária.

CREATE TABLE Cidadãos (

    ID INT PRIMARY KEY,     -- Chave primária escolhida

    CPF CHAR(11) UNIQUE     -- Chave alternativa

);




Criando uma tabela com Chave Natural (Natural Key)


Chave que já existe nos dados do mundo real. Ex: CPF, CNPJ, matrícula, etc.


CREATE TABLE ClientesNaturais (

    CPF CHAR(11) PRIMARY KEY,  -- Chave natural

    Nome NVARCHAR(100)

);




Criando uma tabela com Chave de Substituição (Surrogate Key)


É uma chave artificial criada quando a natural não é confiável ou não existe. Normalmente é um número incremental (ID).


CREATE TABLE ClientesSubstituidos (

    ClienteID INT IDENTITY(1,1) PRIMARY KEY,  -- Surrogate Key

    CPF CHAR(11),

    Nome NVARCHAR(100)

);



Criando uma tabela com Chave Secundária


Não identifica registros de forma única, mas é usada para recuperação de dados, via índices. É comum em índices não clusterizados.

CREATE TABLE ProdutosIndexados (

    ProdutoID INT PRIMARY KEY,

    Categoria NVARCHAR(50),

    Nome NVARCHAR(100)

);


-- Índice secundário na coluna Categoria

CREATE NONCLUSTERED INDEX idx_Categoria

ON ProdutosIndexados (Categoria);




Criando uma tabela com restrição


Para garantir que os valores inseridos em uma coluna atendam a uma condição específica:


CREATE TABLE Funcionarios (

    FuncionarioID INT PRIMARY KEY,

    Nome NVARCHAR(100),

    Salario DECIMAL(10,2) CHECK (Salario >= 0)

);



Tipos de dados para criar uma tabela

Categoria

Tipo de Dado

Descrição

Exemplo de Uso

Numéricos Exatos

bigint

Inteiro grande (-2^63 a 2^63-1)

QtdAcessos BIGINT

Numéricos Exatos

bit

Valor booleano (0, 1 ou NULL)

Ativo BIT

Numéricos Exatos

decimal(p,s)

Número com precisão e escala definidas

Salario DECIMAL(10,2)

Numéricos Exatos

int

Inteiro comum (-2.147.483.648 a 2.147.483.647)

Idade INT

Numéricos Exatos

money

Valores monetários com 4 casas decimais

Saldo MONEY

Numéricos Exatos

numeric(p,s)

Igual ao decimal, sinônimo

Imposto NUMERIC(8,3)

Numéricos Exatos

smallint

Inteiro pequeno (-32.768 a 32.767)

AnoNascimento SMALLINT

Numéricos Exatos

smallmoney

Valores monetários menores

Mensalidade SMALLMONEY

Numéricos Exatos

tinyint

Inteiros de 0 a 255

Nota TINYINT

Numéricos Aproximados

float(n)

Ponto flutuante de precisão variável

Temperatura FLOAT

Numéricos Aproximados

real

Menor precisão que float

Velocidade REAL

Data e Hora

date

Apenas data (sem hora)

DataNascimento DATE

Data e Hora

datetime

Data e hora com precisão de ~3ms

DataCadastro DATETIME

Data e Hora

datetime2(p)

Data/hora com precisão ajustável (frações de segundo)

DataAtualizacao DATETIME2(7)

Data e Hora

datetimeoffset

Data/hora com fuso horário

DataEnvio DATETIMEOFFSET

Data e Hora

smalldatetime

Intervalo reduzido de datas (1900-2079)

DataEvento SMALLDATETIME

Data e Hora

time(p)

Apenas hora, com precisão opcional

HoraAcesso TIME(0)

Texto (Caractere)

char(n)

Tamanho fixo de texto (até 8000 caracteres)

UF CHAR(2)

Texto (Caractere)

varchar(n)

Texto de tamanho variável (até 8000 ou MAX)

NomeProduto VARCHAR(100)

Texto Unicode

nchar(n)

Tamanho fixo de texto Unicode

Sigla NCHAR(3)

Texto Unicode

nvarchar(n)

Texto Unicode de tamanho variável

NomeCompleto NVARCHAR(200)

Binário

binary(n)

Dados binários fixos

SenhaHash BINARY(64)

Binário

varbinary(n)

Binário de tamanho variável

Arquivo VARBINARY(MAX)



Alterar tipo de dados em uma tabela


alter table funcionarios

alter column telefone varchar(10)



Resumo tipo de chaves para criar uma tabela


Tipo de Chave

Função Principal

Primária

Identificação única obrigatória

Composta

Combinação de colunas como identificador

Estrangeira

Relacionamento entre tabelas

Super

Conjunto que pode identificar unicamente um registro

Candidata

Potenciais chaves primárias

Única

Garante unicidade, mas permite NULL

Alternativa

Candidata não escolhida como chave primária

Natural

Chave vinda do mundo real

Substituição

Chave artificial gerada (ex: IDENTITY)

Secundária

Usada em busca, via índice, não para identificação



Adicionando coluna em uma tabela


💠 Exemplo 1

ALTER TABLE Clientes ADD Telefone NVARCHAR(20);


💠 Exemplo 2

ALTER TABLE TCARGOS

ADD datacriacao DATE NULL;

 

💠 Exemplo 3

alter table funcionarios

add telefone varchar(20)


Criar uma coluna com valor default


ALTER TABLE NomeDaTabela

ADD NovaColuna VARCHAR(50) DEFAULT 'Valor Padrão';




Adicionando ou alterando dados em uma coluna



Atualizar um valor específico em uma linha.

Atualiza a cidade do cliente com id_cliente = 101


UPDATE clientes

SET cidade = 'Belo Horizonte'

WHERE id_cliente = 101;


Atualizar múltiplas colunas

Atualiza o preço e o estoque do produto de ID 5


UPDATE produtos

SET preco = 29.90,

    estoque = 100

WHERE id_produto = 5;



Atualizar todos os registros da tabela

Define o valor da coluna ativo como 0 para todos os funcionários.


UPDATE funcionarios

SET ativo = 0;


Atualizar com base em outra tabela (usando JOIN)

Aplica um aumento de 10% no salário de funcionários do TI.


UPDATE f

SET f.salario = f.salario * 1.10

FROM funcionarios f

JOIN departamentos d ON f.id_departamento = d.id_departamento

WHERE d.nome = 'TI';



Atualizar com base em uma subquery

 Aumenta o preço dos produtos da categoria "Eletrônicos" em 15%.

UPDATE produtos

SET preco = preco * 1.15

WHERE id_categoria = (

  SELECT id_categoria FROM categorias WHERE nome = 'Eletrônicos'

);


Usar CASE dentro de um UPDATE

Atualiza o status dos pedidos com base na data de entrega.


UPDATE pedidos

SET status = CASE 

    WHEN data_entrega < GETDATE() THEN 'Entregue'

    WHEN data_entrega IS NULL THEN 'Pendente'

    ELSE 'Em trânsito'

END;




🔹Exemplo 1

UPDATE FUNCO

SET NOME_CARGO = UPPER(REPLACE(REPLACE(REPLACE(RTRIM(NOME_CARGO), 'ç', 'c'), 'á', 'a'), 'é', 'e'));

 

🔹Exemplo 2

UPDATE TCARGOS

SET datacriacao = '2023-07-13'

WHERE cargos = 5;

 

 🔹Exemplo 3

UPDATE psecao

SET rua = 'AV REI PELE'

WHERE codigo LIKE '0.039%'

AND SECAODESATIVADA = '0'



🔹Exemplo 4

update funcionarios set telefone= '11999999999' where funcionarioid=1

update funcionarios set telefone= '11988888888' where funcionarioid=2



Alterar nome de uma coluna


EXEC sp_rename 'TCARGOS.codigo_cargo', 'CARGOS', 'COLUMN';


Excluindo uma tabela

💠 Exemplo 1

DROP TABLE Clientes


💠 Exemplo 2

DROP TABLE CORPORE_DESENV.dbo.TCARGOS;


Apagando uma coluna


ALTER TABLE NomeDaTabela

DROP COLUMN NomeDaColuna;




Apagando dados de uma coluna


UPDATE NomeDaTabela

SET NomeDaColuna = NULL;




Mascarar (codificar) os dados de uma coluna específica


Exemplo: mascarar parcialmente uma coluna de e-mails.


UPDATE NomeDaTabela

SET Email = CONCAT(LEFT(Email, 2), '*****@***.com');


Outro exemplo para criptografar dados (não reversível, usando HASHBYTES):


-- Primeiro, converta para VARBINARY, depois salve como VARCHAR

UPDATE NomeDaTabela

SET ColunaCodificada = CONVERT(VARCHAR(100), HASHBYTES('SHA2_256', ColunaOriginal), 2);

 


🔹 HASHBYTES gera um hash da informação. Ideal para senhas, não pode ser revertido.

🔹 Use SHA2_256 ou SHA1 para algoritmos seguros.




Entidade e Atributo


É importante mencionar aqui um conceito importante na modelagem de dados.

Quando estamos projetando um banco de dados relacional, é essencial entender os conceitos de entidade e atributo


Uma entidade representa qualquer objeto do mundo real que pode ser identificado e que queremos armazenar informações sobre ele no banco de dados. Cada entidade vira, geralmente, uma tabela no banco.

Exemplos de entidades:

  • Cliente

  • Produto

  • Pedido

  • Funcionário

👉 Em um sistema de vendas, por exemplo, as entidades principais poderiam ser: Clientes, Produtos e Pedidos.

Um atributo é uma característica ou propriedade da entidade. Em termos de banco de dados, os atributos são representados pelas colunas da tabela.

Exemplo:

Para a entidade Cliente, os atributos podem ser:

  • Nome

  • CPF

  • Data de Nascimento

  • E-mail

Ou seja, quando você cria uma tabela chamada Clientes, cada coluna representa um atributo dessa entidade.


 

 exemplo prático:

 

--Entidade clientes

CREATE TABLE Clientes (

    ClienteID INT PRIMARY KEY,     -- atributo identificador

    Nome NVARCHAR(100),            -- atributo

    CPF CHAR(11),                  -- atributo

    Email NVARCHAR(100),          -- atributo

    DataNascimento DATE           -- atributo

);


Entidades podem se relacionar entre si. Por exemplo, um cliente pode fazer vários pedidos. Isso nos leva ao conceito de relacionamento entre entidades, que é modelado usando chaves estrangeiras (foreign keys) que vimos acima.



CREATE TABLE Pedidos (

    PedidoID INT PRIMARY KEY,

    ClienteID INT FOREIGN KEY REFERENCES Clientes(ClienteID),

    DataPedido DATETIME,

    Total DECIMAL(10, 2)

);


Para saber mais sobre modelagem de dados, clique aqui!



Criando uma tabela com indexador numérico



 

IF OBJECT_ID('dbo.Numbers') IS NOT NULL DROP TABLE dbo.Numbers;

 

CREATE TABLE dbo.Numbers (Number INT PRIMARY KEY);

 

WITH Tally (N) AS (

 

    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1

    FROM sys.objects s1 CROSS JOIN sys.objects s2

)

 

INSERT INTO dbo.Numbers (Number)

SELECT N

FROM Tally

WHERE N <= 10000; -- Ajuste conforme necessário

 

 

select * from Numbers


Resultado:



Alterando nome de uma tabela

 

De FUNCO para TCARGOS


EXEC sp_rename 'FUNCO', 'TCARGOS';

SELECT * FROM TCARGOS



Consultar nomes das tabelas existentes



💠 Exemplo 1

SELECT 

    t.name AS 'Nome da Tabela',

    s.name AS 'Nome do Schema',

    t.create_date AS 'Data de Criação'

FROM 

    sys.tables t

INNER JOIN 

    sys.schemas s ON t.schema_id = s.schema_id;



💠 Exemplo 2

USE NOMEDOSEUBANCO

 

SELECT name, 

       FORMAT(create_date, 'dd/MM/yyyy') as create_date, 

       FORMAT(modify_date, 'dd/MM/yyyy') as modify_date,

         modify_date

 

FROM sys.tables

ORDER BY name






Criar tabela temporária


São tabelas criadas temporariamente, visíveis somente durante a sessão atual (ou transação, dependendo do escopo), e são armazenadas fisicamente no banco tempdb.



CREATE TABLE #ClientesTemporarios (

    Nome VARCHAR(100),

    Cidade VARCHAR(50)

);

 

SELECT Nome, Cidade

FROM Clientes

WHERE Estado = 'SP';

 

SELECT * FROM #ClientesTemporarios;



Tipo

Prefixo

Escopo

Visível para outras sessões?

Exemplo

Tabela temporária local

#

Sessão atual (conexão)

❌ Não

CREATE TABLE #Temp

Tabela temporária global

##

Todas as sessões (até encerrar a última que usa)

✅ Sim

CREATE TABLE ##TempGlobal


© 2017-2025  Criado e desenvolvido por Amanda Nascimento

  • Discord
  • GitHub
  • youtube
  • LinkedIn Amanda
bottom of page