🎉 75% of content is free forever — Unlock Premium from $10/mo →
CW
Search courses…
💼 Servicesℹ️ About✉️ ContactView Pricing Plansfrom $10

SELECT Statement

SQL FundamentalsDML🟢 Free Lesson

Advertisement

SQL Fundamentals

The SELECT Statement

The foundation of every SQL query — retrieve exactly the data you need from your database.

  • Targeted Retrieval — select specific columns instead of entire tables
  • Computed Columns — calculate values on the fly with expressions
  • Clean Output — alias columns for readable, report-ready results

SELECT is how you ask your database questions.

What is SELECT?

SQL Query Execution Order1. FROM2. WHERE3. GROUP BY4. HAVING5. SELECT6. ORDER BY7. LIMIT/OFFSETFROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT
SELECT column1, column2
FROM table_name;
ComponentDescriptionRequired
SELECTColumns to retrieveYes
column1, column2Specific columns or * for allYes
FROMTable to queryYes
table_nameSource tableYes

Select All Columns

SELECT * FROM customers;
idfirst_namelast_nameemailcity
1AliceJohnsonalice@email.comNew York
2BobSmithbob@email.comLos Angeles
3CarolWilliamscarol@email.comChicago

Select Specific Columns

SELECT first_name, last_name, email
FROM customers;
first_namelast_nameemail
AliceJohnsonalice@email.com
BobSmithbob@email.com
-- SLOW: Returns all columns
SELECT * FROM customers WHERE city = 'New York';

-- FAST: Returns only needed columns
SELECT first_name, last_name, email
FROM customers
WHERE city = 'New York';

Expressions in SELECT

SELECT
    name,
    price,
    price * 1.08 AS price_with_tax,
    price * stock AS inventory_value,
    ROUND(price * 0.9, 2) AS discounted
FROM products;
namepriceprice_with_taxinventory_valuediscounted
Mouse29.9932.394498.5026.99
Keyboard89.9997.196749.2580.99

Common Functions

-- String functions
SELECT
    UPPER(first_name) AS upper_name,
    LOWER(last_name) AS lower_name,
    LENGTH(email) AS email_length,
    CONCAT(first_name, ' ', last_name) AS full_name
FROM customers;

-- Math functions
SELECT
    price,
    ROUND(price, 0) AS rounded,
    CEIL(price) AS ceiling,
    FLOOR(price) AS floor_price,
    ABS(-price) AS absolute
FROM products;

-- Date functions
SELECT
    hire_date,
    YEAR(hire_date) AS hire_year,
    MONTH(hire_date) AS hire_month,
    DATEDIFF(CURRENT_DATE, hire_date) AS days_employed
FROM employees;

Column Aliases

SELECT
    first_name AS "First Name",
    last_name AS "Last Name",
    salary AS annual_salary,
    salary * 12 AS monthly_salary
FROM employees;
First NameLast Nameannual_salarymonthly_salary
AliceJohnson750006250
BobSmith620005166.67

SELECT Without a Table

-- Perform calculations without any table
SELECT 1 + 1 AS result;                    -- 2
SELECT CURRENT_DATE AS today;              -- 2024-01-15
SELECT 'Hello, World!' AS greeting;        -- Hello, World!
SELECT RANDOM();                           -- Random number

SQL Execution Order

StepClauseWhat It Does
1FROMIdentify source tables
2WHEREFilter rows
3GROUP BYGroup rows
4HAVINGFilter groups
5SELECTChoose columns
6ORDER BYSort results
7LIMITRestrict row count
-- What you write:
SELECT first_name, salary
FROM employees
WHERE department = 'Engineering'
ORDER BY salary DESC
LIMIT 5;

-- How it executes:
-- 1. FROM employees        → All employee rows
-- 2. WHERE department='Engineering' → Only engineers
-- 3. SELECT first_name, salary → Just those two columns
-- 4. ORDER BY salary DESC  → Highest salary first
-- 5. LIMIT 5               → Top 5 only

Performance Tips

TipBad ExampleGood ExampleImpact
Use specific columnsSELECT *SELECT name, priceFaster
Add WHERE clauseNo filterWHERE id > 1000Fewer rows
Use LIMITUnlimited resultsLIMIT 100Smaller result

Common Mistakes

-- BAD: SELECT * in production
SELECT * FROM customers;

-- GOOD: Specific columns
SELECT id, first_name, last_name, email FROM customers;

-- BAD: Missing WHERE clause
SELECT * FROM customers;

-- GOOD: Filter with WHERE
SELECT * FROM customers WHERE is_active = TRUE;

-- BAD: No LIMIT for large tables
SELECT * FROM logs;

-- GOOD: Limit results
SELECT * FROM logs ORDER BY created_at DESC LIMIT 100;

Practice Exercises

Exercise 1: Write a query to select name and price from products, and calculate a 10% discount as discounted_price.

SELECT
    name,
    price,
    price * 0.9 AS discounted_price
FROM products;

Exercise 2: Select all employees with their annual salary (salary * 12).

SELECT
    first_name,
    last_name,
    salary,
    salary * 12 AS annual_salary
FROM employees;

Exercise 3: Select customers with formatted names and email length.

SELECT
    UPPER(first_name) AS first_name,
    UPPER(last_name) AS last_name,
    CONCAT(first_name, ' ', last_name) AS full_name,
    LENGTH(email) AS email_length
FROM customers;

Need Expert SQL Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement