← Back to Questions
SQL

What is the difference between COUNT(*) and COUNT(column_name)?

Learn What is the difference between COUNT(*) and COUNT(column_name)? with simple explanations, real-time examples, interview tips and practical use cases.

What is the Difference Between COUNT(*) and COUNT(column_name) in SQL?

COUNT(*) and COUNT(column_name) are SQL aggregate functions used to count rows in a table, but they behave differently when NULL values are present.

In simple words:

  • COUNT(*) counts all rows
  • COUNT(column_name) counts only non-NULL values in that column

Why COUNT Functions are Important

Enterprise applications frequently require:

  • Record counting
  • Analytics reporting
  • Dashboard metrics
  • Data validation
  • Business intelligence reports

COUNT functions help:

  • Measure data accurately
  • Generate statistical reports
  • Track business activities

Main Difference Between COUNT(*) and COUNT(column_name)

Feature COUNT(*) COUNT(column_name)
Counts All rows Only non-NULL values
NULL Handling Includes NULL rows Ignores NULL values
Main Use Total row count Valid data count
Performance Usually optimized Depends on column scanning

What is COUNT(*)?

COUNT(*) counts:

Every row in the table, including rows containing NULL values.


COUNT(*) Syntax

SELECT COUNT(*)

FROM table_name;

Students Table Example

ID Name Email
1 Naresh naresh@gmail.com
2 Rahul NULL
3 Arjun arjun@gmail.com
4 David NULL

COUNT(*) Example

SELECT COUNT(*)

FROM students;

Result

4

Why?

Because:

  • All rows are counted
  • NULL values do not matter

COUNT(*) Internal Architecture

Read Table Rows
      |
      v
Count Every Row
      |
      v
Return Total Count

What is COUNT(column_name)?

COUNT(column_name) counts:

Only rows where the specified column contains non-NULL values.


COUNT(column_name) Syntax

SELECT COUNT(column_name)

FROM table_name;

COUNT(email) Example

SELECT COUNT(email)

FROM students;

Result

2

Why?

Because:

  • Only two rows contain email values
  • NULL email values ignored

COUNT(column_name) Internal Architecture

Read Column Values
       |
       v
NULL?
 /          \
Yes          No
 |            |
Ignore      Increase Count

Visual Comparison

Table Data

1 → naresh@gmail.com
2 → NULL
3 → arjun@gmail.com
4 → NULL

COUNT(*) Result

4

COUNT(email) Result

2

Important Point

COUNT(column_name):

  • Ignores NULL values automatically

COUNT with WHERE Clause

COUNT functions can be combined with:

  • Filtering conditions

Example

SELECT COUNT(*)

FROM students

WHERE department = 'IT';

Purpose

Count:

  • All IT students

COUNT(column_name) with WHERE

SELECT COUNT(email)

FROM students

WHERE department = 'IT';

Purpose

Count:

  • IT students having email addresses

COUNT(DISTINCT column_name)

Counts:

  • Unique non-NULL values

Example

SELECT COUNT(DISTINCT department)

FROM employees;

Purpose

Count:

  • Unique departments only

COUNT and GROUP BY

COUNT is commonly used with:

  • GROUP BY

Example

SELECT department,
       COUNT(*)

FROM employees

GROUP BY department;

Result

Employee count:

  • Per department

COUNT(column_name) Example

SELECT department,
       COUNT(email)

FROM employees

GROUP BY department;

Purpose

Count employees:

  • Having email addresses in each department

Difference Between COUNT(*) and COUNT(1)

Feature COUNT(*) COUNT(1)
Behavior Same Same
Counts All rows All rows

Important Point

Modern databases optimize:

  • COUNT(*) efficiently

Performance Consideration

COUNT(*)

  • Often highly optimized

COUNT(column_name)

  • Requires NULL checking

Index Optimization

COUNT(column_name) may use:

  • Indexes for faster counting

COUNT Query Flow

Read Rows
    |
    v
Apply COUNT Logic
    |
    v
NULL Check Needed?
 /             \
Yes             No
 |               |
Ignore NULL     Count Row

Real-Time Banking Example

Banking systems use COUNT(*) for:

  • Total transaction counts
  • Customer statistics

COUNT(column_name) Used For

  • Valid account counts
  • Verified customer reports

Example

COUNT(email_verified)

Real-Time E-Commerce Example

E-commerce platforms use COUNT(*) for:

  • Total orders
  • Total products

COUNT(column_name) Used For

  • Products with discounts
  • Orders with tracking IDs

Example

COUNT(discount)

Real-Time Learning Platform Example

Learning platforms use COUNT(*) for:

  • Total students
  • Total courses

COUNT(column_name) Used For

  • Students with certificates
  • Courses with ratings

Example

COUNT(certificate_id)

COUNT Functions in Microservices

Microservices use COUNT functions for:

  • Analytics APIs
  • Dashboard metrics
  • Monitoring systems

Advantages of COUNT(*)

  • Simple total row counting
  • Usually optimized
  • Counts all records

Advantages of COUNT(column_name)

  • Counts valid data only
  • Useful for data quality analysis

Disadvantages of COUNT(*)

  • Cannot identify missing data

Disadvantages of COUNT(column_name)

  • Ignores NULL values automatically
  • May confuse beginners

Best Practices

  • Use COUNT(*) for total row counts
  • Use COUNT(column_name) for valid data counts
  • Understand NULL handling properly
  • Use indexes for large analytical queries

Common Interview Mistake

Many developers think:

  • COUNT(*) and COUNT(column_name) behave identically

Reality

COUNT(column_name):

  • Ignores NULL values

while COUNT(*):

  • Counts every row

Related Learning Topics


Professional Interview Answer

COUNT(*) and COUNT(column_name) are SQL aggregate functions used for counting records, but they differ in NULL handling. COUNT(*) counts all rows in a table regardless of NULL values, while COUNT(column_name) counts only rows where the specified column contains non-NULL values. COUNT(*) is mainly used for total row counting, whereas COUNT(column_name) is used for counting valid or available data in a specific column. These functions are widely used in enterprise reporting, analytics dashboards, banking systems, e-commerce platforms, and microservices-based APIs for generating accurate statistics and business metrics.


Why Interviewers Like This Answer

  • Clearly explains NULL handling behavior
  • Includes aggregate function understanding
  • Shows enterprise reporting knowledge
  • Provides real-world examples
  • Explains performance considerations

Frequently Asked Questions

What does COUNT(*) do in SQL?

COUNT(*) counts all rows including rows containing NULL values.

What does COUNT(column_name) do?

COUNT(column_name) counts only non-NULL values in that column.

Does COUNT(column_name) include NULL values?

No, NULL values are ignored automatically.

Which is faster: COUNT(*) or COUNT(column_name)?

COUNT(*) is usually more optimized in modern databases.

Can COUNT be used with GROUP BY?

Yes, COUNT is commonly used with GROUP BY for analytics and reporting.

Why this SQL question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.