How to SELECT all columns except one in MySQL

A MySQL SELECT statement is used to retrieve data from a MySQL table.

To exclude certain column(s) from the SELECT statement result, you can omit the column/ field name from the query.

For example, suppose you have a table named Students with the following columns:

+---------+
| Field   |
+---------+
| id      |
| name    |
| age     |
| address |
| phone   |
| email   |
| comment |
+---------+

To retrieve certain columns, you can name them in the SELECT statement as shown below:

SELECT name, age, address FROM Students;

The above query will retrieve the name, age, and address columns from the Students table.

But sometimes, you may want to retrieve all columns from a table except one or two.

One way of doing it is to name all the columns in the SELECT statement.

-- exclude comment column
SELECT id, name, age, address, phone, email FROM Students;

But if you have more than 10 columns in a single table, then specifying all column names but one is too tedious.

This tutorial will help you learn how to exclude column(s) easier in your SELECT statement. There are at least 3 ways to do so:

  • Using temporary table
  • Using a view
  • Using the information_schema.COLUMNS table

Let’s start with using a temporary table first.

Exclude specific columns using a temporary table

A MySQL temporary table is a table that’s created only for you during the current MySQL session.

Once you create this table, then you can use it as many times as you want, as long as you’re in the same session (haven’t disconnected from MySQL server)

To create a temporary table from your existing table, use the CREATE TEMPORARY TABLE statement as shown below:

CREATE TEMPORARY TABLE TempStudents AS SELECT * FROM Students;

The data from the temporary table will be copied from the existing Students table.

Now you can use ALTER TABLE statement to drop the column you wish to exclude from the SELECT statement.

The following statements will drop the comment column from the TempStudents table and then run a SELECT * statement for the temporary table:

ALTER TABLE TempStudents DROP COLUMN comment;
SELECT * FROM TempStudents; 

With the comment column is removed from the temporary table, the SELECT * query won’t return the comment column.

To exclude multiple columns, you need to drop multiple columns from the temporary table:

ALTER TABLE TempStudents 
  DROP COLUMN phone,
  DROP COLUMN email;

By using a temporary table, you can still have all your columns unchanged. What’s more, the table is automatically removed once you end the session.

If you need a record that stays after your current session ends, then you can use a MySQL view.

Exclude specific columns using a view

A MySQL view is a stored query designed to help you retrieve custom data from existing tables in your database.

Once a view is created, it will be available until you remove the view.

To create a view, you can use the CREATE VIEW statement as follows:

CREATE VIEW StudentsView AS
  SELECT id, name, age, address, phone, email
  FROM Students;

When you create the view, you need to specify the columns you wish to include in the view one by one.

With the comment column exBut after the view is created, you can do a SELECT * statement as follows:

SELECT * FROM StudentsView;

-- +----+--------+------+---------+-------+-------+
-- | id | name   | age  | address | phone | email |
-- +----+--------+------+---------+-------+-------+
-- |  1 | Jack   |   19 | NULL    | NULL  | NULL  |
-- +----+--------+------+---------+-------+-------+

You can drop the view using a DROP VIEW statement as follows:

DROP VIEW IF EXISTS StudentsView;

And that’s how you exclude MySQL table columns using a view.

Exclude specific columns using the information_schema.COLUMNS table

The information_schema database is a database generated by MySQL to store information about databases and tables that you’ve created in the server.

The information_schema.COLUMNS table holds all information about the columns in your MySQL tables.

To exclude columns, you use the REPLACE() and GROUP_CONCAT() functions to generate the column names you wish to include in your SELECT statement later.

In the following query, replace <column_name>, <table_name> and <database_name> with your actual MySQL names:

SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<column_name>,', '') 
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table_name>' 
AND TABLE_SCHEMA = '<database_name>';

Because my Students table is created in the school_db database, the query for the table is as shown below:

SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), 'comment,', '') 
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Students' 
AND TABLE_SCHEMA = 'school_db';

The query result will be as follows:

+----------------------------------------------------+
| REPLACE(GROUP_CONCAT(COLUMN_NAME), 'comment,', '') |
+----------------------------------------------------+
| address,age,email,id,name,phone                    |
+----------------------------------------------------+

You can use the result to create your SELECT statement:

SELECT address,age,email,id,name,phone FROM Students;

And that’s how you use the information_schema.COLUMNS table to exclude a column from your SELECT statement.

Because querying the information_schema database demands more resources, I’d recommend you try the first two methods before using the information_schema.COLUMNS table.

This method also doesn’t allow you to exclude more than one column because of the REPLACE() function limitation.

To exclude multiple columns, you need to call the REPLACE() function for each column, which is cumbersome 😕

You need to try and use a temporary table or a view before using the information_schema.COLUMNS table.

Take your skills to the next level ⚡️

I'm sending out an occasional email with the latest tutorials on programming, web development, and statistics. Drop your email in the box below and I'll send new stuff straight into your inbox!

No spam. Unsubscribe anytime.