SQL - Create Table in the Database

The CREATE statements are used to create the database structures like table, view, sequence, function, procedure, package, trigger, etc. We will go and explore all of these database structures in the later part of the tutorials.

The CREATE TABLE statement is used to create a new table in the database. The following is the syntax to create a new table in the database.

Syntax:

CREATE TABLE table_name(
    column_name1 data_type [NULL|NOT NULL],
    column_name2 data_type [NULL|NOT NULL],
    ...
);

In the above CREATE TABLE syntax, table_name is the name of the table you want to give, column_name1 is the name of the first column, column_name2 would be the name of the second column, and so on. The data_type is the type of data a column is going to be stored e.g string, integer, datetime, etc. The data types vary from database to database, for example, string datatype in SQL Server is varchar or nvarchar, whereas it is varchar2 in Oracle. So, data types are depend on the database you are using.

Use NULL or NOT NULL constraint to specify whether a column allows NULL values or not. By default, all the columns allow NULL values unless specified NOT NULL. The NULL columns are optional, whereas NOT NULL columns are mandatory while inserting or updating data.

Create Table in SQL Server, MySQL, PostgreSQL, SQLite

The following command will be used to create the Employee table in SQL Server, MySQL, PostgreSQL, SQLite database:

SQL Script: Create Table
CREATE TABLE Employee(
    EmpId integer, 
    FirstName varchar(20), 
    LastName varchar(20), 
    Email varchar(25), 
    PhoneNo varchar(25), 
    Salary integer
);

Above, Employee is the name of the table, and EmpId, FirstName, LastName, Email, PhoneNo, HireDate, and Salary are the columns. varchar is the string data type with size mentioned in the parenthesis e.g. varchar(20) specifies that the column will store a string upto 20 characters long.

Most of the time, all the tables in the database will have at least one column as a primary key. The following defines a table with a primary key.

The EmpId integer PRIMARY KEY, creates the EmpId column and also defines it as a primary key at the same time.

SQL Script: Create Table with Primary Key
CREATE TABLE Employee (
    EmpId integer PRIMARY KEY, 
    FirstName varchar(20), 
    LastName varchar(20), 
    Email varchar(25), 
    PhoneNo varchar(25), 
    Salary integer
);

Create Table in Oracle

The following SQL script creates the Employee table in Oracle Database with a primary key:

SQL Script: Create Table in Oracle
CREATE TABLE Employee(
    EmpId number PRIMARY KEY,
    FirstName varchar2(20),
    LastName varchar2(20),
    Email varchar2(25),
    PhoneNo varchar2(25),
    Salary number(8)
);

Note that, in Oracle, the string data type is called varchar2, and integer type is called number.

At this stage, the Employee table is empty and does not contain any data. Also, note that we created a table with EmpId column as a Primary Key, meaning EmpId will be Unique and NOT NULL field in all the rows in the Employee table.

The following is the illustration of the Employee table in the database.

EmpId FirstName LastName Email PhoneNo Salary
           

Create New Table from Existing Table

The CREATE TABLE AS command is used to create a new table from an existing table with the structure and data, as shown below: The Following queries will work in Oracle, MYSQL, SQLite, and PostgreSQL.

SQL Script: Create a Copy of a Table with Data
CREATE TABLE Employee_Backup AS SELECT * FROM Employee;

To create a copy of the Employee table, with selected columns and data, use CREATE TABLE AS command, as shown below:

SQL Script: Create a Copy of a Table with Data
CREATE TABLE TempEmployee as (SELECT EmpId, FirstName, LastName FROM Employee);

To create the copy of the Employee table, with just Structure and NO DATA, use the CREATE TABLE AS command, as shown below:

SQL Script: Create a Copy of a Table without Data
CREATE TABLE Consultant AS SELECT * FROM Employee WHERE 1=2;

Above, the where clause where 1=2 will not return any records and so the above command only creates a table without data.

Create a Copy of Table in MS SQL Server

The SELECT * INTO command creates a copy of an existing table with structure and data.

SQL Script: Create a Copy of a Table in SQL Server
SELECT * INTO Employee_backup FROM Employee

Table Design Guidelines

Before creating any table in the database, there is a need to design the tables that what kind of information will be stored in a table. What are columns needed, and what will be the datatypes of columns? What constraints will be applicable on different columns? What constraints should be applied on a table? What will be the relationship between the tables?

Here are some guidelines to consider while designing tables:

  • Use abbreviated but meaningful names while defining table and column names.
  • The maximum length allowed for a column name is 30 characters, and they should begin with the alphabet.
  • Define appropriate Data Types for each column of the table.
  • Try to keep only required columns in a table. The less important columns can be kept into some other detail table instead of storing them in the main table.
  • Always try to put a column which can contain NULL values. That way, it will save storage space.