Voltar para a lista de artigos Artigos
8 minutos de leitura

Como criar uma tabela em SQL

Criar tabelas em bancos de dados é uma habilidade muito útil, e não apenas para engenheiros de software ou administradores de bancos de dados. Permite projetar ou alterar a estrutura de um banco de dados e armazenar dados que estão relacionados entre si. Neste artigo, você aprenderá o que é uma tabela de banco de dados, quem os cria e como usar a sintaxe do comando CREATE TABLE.

O que é uma tabela de banco de dados?

Um banco de dados relacional é construído com várias estruturas como tabelas, visões, procedimentos e gatilhos. O elemento principal em um banco de dados é a tabela. É uma estrutura que realmente armazena dados. Na maioria dos casos, um banco de dados contém mais de uma tabela e as tabelas são relacionadas entre si (ou seja, as tabelas armazenam informações relacionadas, como o nome, a cor e a altura de uma pessoa).

A figura abaixo mostra uma amostra de um banco de dados para uma loja de equipamentos musicais on-line. (A imagem vem do blog da Vertabelo; Vertabelo é uma ferramenta de modelagem de banco de dados online). Note que este banco de dados tem várias tabelas. As linhas indicam as relações entre as tabelas:

Base de dados

Como você pode ver, há muitas tabelas: category, instrument, manufacturere muito mais. Em um banco de dados SQL, cada tabela tem um nome e armazena dados em filas e colunas. Cada linha armazena detalhes sobre um objeto específico.

Por exemplo, a tabela instrument armazena informações sobre os instrumentos. Cada fileira é um instrumento específico: uma fileira pode armazenar informações sobre um violão branco comprado na "Music Shop in Chicago"; outra fileira pode armazenar informações sobre um tambor prateado comprado na "In Tom's shop".

Os detalhes em cada linha devem ser atômicos (ou seja, não podem ser menores ou mais específicos), portanto, temos que dividi-las em colunas. Cada coluna armazena um tipo de dado, como uma cor, um nome, um tipo de instrumento, ou a loja onde foi comprada. Abaixo está uma tabela de exemplo com estas colunas e linhas:

namecolortypestore
guitarwhitechordophoneMusic Shop in Chicago
trumpetgoldwindMusic Shop in Chicago
drumssilverpercussionIn Tom’s shop

O nome da tabela deve descrever os dados armazenados nessa tabela. Você também deve definir o(s) tipo(s) de dados utilizados nas colunas da tabela ao criar a tabela. (Você precisa ter uma permissão CREATE TABLE para fazer tudo isso, mas isso é outro artigo).

Se você estiver interessado em aprender como criar tabelas em um banco de dados, recomendo a faixa Criando Estrutura de Banco de Dados em LearnSQL.com.br. É uma série de cinco cursos interativos que lhe ensinarão os detalhes da criação de tabelas em SQL.

Quem Cria Tabelas?

Você sabe o que é uma tabela, mas isto levanta outra questão: quem cria as tabelas em um banco de dados? Vários grupos diferentes de pessoas podem criar tabelas de banco de dados.

O primeiro grupo são designers de banco de dados. Eles definem a estrutura do banco de dados: o que as tabelas contêm, as relações entre as tabelas, como as tabelas armazenam informações. Eles projetam novas bases de dados para aplicações ou serviços específicos.

Os administradores de banco de dados (DBAs) cuidam dos servidores de banco de dados. Eles mantêm, criam e modificam as bases de dados. A criação de novas tabelas faz parte de seu trabalho.

Os engenheiros de software e desenvolvedores de aplicativos também criam tabelas de banco de dados. Ao criar uma nova aplicação, eles freqüentemente têm que projetar um banco de dados para ela.

Os analistas de dados são outro grupo que às vezes cria tabelas. Eles usam bancos de dados para armazenar os dados que estão analisando e podem usar tabelas para armazenar os resultados de suas análises.

Naturalmente, projetar bancos de dados e criar tabelas pode ser útil para qualquer pessoa que trabalhe com dados ou utilize bancos de dados.

Como criar uma tabela

Criar uma tabela em um banco de dados é muito simples. Basta usar a sintaxe SQL padrão para o comando CREATE TABLE:

CREATE TABLE table_name
( 
column1 data_type, 
column2 data_type,
 … 
);

Vamos investigar o que está acontecendo aqui. Primeiro você coloca a palavra-chave CREATE TABLE, seguida do nome da tabela. Este nome não deve ser uma palavra-chave SQL (como CREATE, LIKE, ou NULL). Ela deve ser única dentro do banco de dados - se uma tabela for nomeada personoutras tabelas no mesmo banco de dados não podem ter este nome - e descrevem os dados que estão sendo armazenados na tabela. Você pode ler mais sobre nomenclatura de tabelas em convenções de nomenclatura em modelagem de banco de dados e uma visão lógica não-emocional em convenções de nomenclatura do SQL Server.

Após o nome, você adiciona um par de parênteses. Dentro dos parênteses, você lista os nomes das colunas com seus tipos de dados. Um tipo de dado define que tipo de valores (números, texto, datas, horas, etc.) você pode armazenar em uma coluna. Os tipos de dados mais populares são:

  • INTEGER/INT armazena números inteiros como -2567, 0 , 1, e 67.
  • VARCHAR armazena dados de texto. Você pode especificar o número máximo de caracteres como este: VARCHAR(n). Por exemplo, varchar(4) pode armazenar os textos 'Lisa', 'Os' ou 'Gary'.
  • CHAR é semelhante, mas em vez de definir o comprimento máximo, você define o comprimento absoluto. Por exemplo, CHAR(4) irá armazenar 'Os' como 'Os'. Observe os dois espaços extras, que compõem o comprimento de até 4.
  • FLOAT armazena números de ponto flutuante, tais como -23.789, 23.5, e 78.0.
  • DECIMAL é semelhante a float, na medida em que armazena números decimais. Entretanto, pode-se indicar o número total máximo de dígitos(p) e o número de dígitos após o decimal(s) assim: DECIMAL(p,s). Em outras palavras, decimal(4,2) pode armazenar 12,56, 1,56, 70. Ao contrário da FLOAT, a DECIMAL oferece cálculos precisos. Utilize-a para armazenar valores de dinheiro.
  • A TIME armazena dados de tempo, por exemplo, '12:34:50'.
  • DATE armazena dados de data, por exemplo, '2020-09-09-09'.
  • DATETIME armazena dados de data e hora em um único campo, por exemplo, '2020-03-30 12:34:50'.

Esta sintaxe básica de CREATE TABLE é a mesma para a maioria dos motores SQL; você pode usá-la em Oracle, SQL Server, MySQL, ou PostgreSQL.

Criando uma tabela de banco de dados simples

Vamos criar uma tabela chamada customer que armazena detalhes sobre os clientes de uma empresa. Cada linha conterá dados sobre um cliente específico. A tabela deve ter as colunas ID, last_name, first_name, e registration_date. As colunas definidas na tabela armazenam dados atômicos sobre cada cliente: seu número de identificação, sobrenome, primeiro nome e data de registro como cliente.

Aqui está o comando que usaríamos:

CREATE TABLE  customer
( 
ID int, 
last_name varchar(80),
first_name varchar(80),
registration_date date
);

Começamos com a palavra-chave CREATE TABLE, após a qual damos o nome da nova tabela: customer. Em seguida, entre parênteses, damos os nomes das colunas e os tipos de dados. A primeira coluna é ID, que armazena valores inteiros como 1,2,3. A segunda e terceira colunas, last_name e first_name, são valores de string; usaremos varchar(80) para eles. Lembre-se, o valor entre parênteses denota o número máximo de caracteres na cadeia de caracteres. Finalmente, a coluna registration_date armazena a data em que a pessoa foi registrada.

Os tipos de dados controlam que tipo de informação pode ser inserida em uma coluna; não é possível inserir letras ou símbolos em uma coluna INT como ID. Você pode encontrar mais sobre tipos de dados nos cursos Os fundamentos da criação de tabelas em SQL e Tipos de dados em SQL.

Definição de colunas sem valores vazios/ repetidos

A declaração CREATE TABLE mostrada na última seção permite aos usuários inserir valores não únicos ou valores vazios (NULLs) em um campo. Por exemplo, você pode ter o mesmo valor ID para mais de um cliente. Podemos mudar este comportamento criando uma tabela com restrições: adicionaremos restrições a ID para evitar NULLs e valores não únicos; também adicionaremos restrições nas colunas first_name e last_name para evitar NULLs nestas colunas. Dê uma olhada:

CREATE TABLE customer 
( 
ID int NOT NULL UNIQUE, 
last_name varchar(80) NOT NULL,
first_name varchar(80) NOT NULL,
registration_date date
);

SQL oferece a palavra-chave NOT NULL, que quando adicionada à definição da coluna não permite valores vazios (NULL) quando se insere ou modifica uma linha. Em nosso exemplo, não podemos omitir (ou inserir um NULL) nas colunas first_name, last_name ou ID. Elas devem ter um valor.

Outra palavra-chave valiosa é UNIQUE. Ao adicionar esta palavra-chave, você pode ter certeza de que todos os valores nesta coluna são diferentes em cada linha. Em nosso exemplo, a coluna ID armazena valores únicos que identificam cada cliente. Você pode aprender mais sobre diferentes tipos de restrições no curso SQL Constraints.

Criando uma Tabela a partir de Dados Armazenados em Outra Tabela

Podemos criar uma nova tabela sem definir colunas: o processo é baseado em dados e colunas em outras tabelas.

Use este método se quiser criar tabelas e inserir dados armazenados em colunas específicas em outra tabela. Aqui está a sintaxe:

CREATE TABLE new_table_name
  SELECT col1, col2, … 
  FROM existing_table_name ;

Primeiro fornecemos a palavra-chave CREATE TABLE e o nome da nova tabela. Em seguida, usamos o comando SELECT. Isto permite especificar as colunas e tabela(s) a partir das quais você copia dados para a nova tabela. Os nomes e tipos de dados destas colunas serão automaticamente definidos na nova tabela.

Abaixo, criamos a tabela history_instrument utilizando as colunas ID, name, color, e type do instrument mesa:

CREATE TABLE history_instrument   
  SELECT ID, name, type  
  FROM instrument ;

Note que a nova tabela não armazena todas as colunas da tabela instrument.

Saiba mais sobre as estruturas de banco de dados

Se você estiver interessado em construir estruturas de banco de dados como tabelas, há muito material on-line que você pode usar. Em LearnSQL.com.br você encontrará artigos como Understanding Numerical Data Types in SQL e TRUNCATE TABLE vs. DELETE vs. DROP TABLE: Removendo Tabelas e Dados em SQL para aumentar seu conhecimento em SQL. Você também pode completar a faixa Creating Database Structure em LearnSQL.com.br para uma visão geral abrangente e interativa.