Bird
Raised Fist0
SQLquery~10 mins

CREATE VIEW syntax in SQL - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - CREATE VIEW syntax
Write SELECT query
Use CREATE VIEW name AS
Database stores view definition
Querying view runs stored SELECT
Return result set as if table
You write a SELECT query, then create a view with that query. The database stores it. When you query the view, it runs the stored SELECT and returns results like a table.
Execution Sample
SQL
CREATE VIEW active_users AS
SELECT id, name FROM users WHERE active = 1;
This creates a view named active_users that shows only users who are active.
Execution Table
StepActionQuery/CommandResult/State
1Write SELECT querySELECT id, name FROM users WHERE active = 1Query ready to define view
2Create view with queryCREATE VIEW active_users AS SELECT id, name FROM users WHERE active = 1View 'active_users' stored in database
3Query the viewSELECT * FROM active_usersRuns stored SELECT, returns active users
4View resultid | nameRows of active users from users table
5ExitN/AView acts like a virtual table
💡 View creation ends after storing the SELECT query; querying the view runs that query.
Variable Tracker
VariableStartAfter Step 2After Step 3Final
View DefinitionNoneSELECT id, name FROM users WHERE active = 1Same stored querySame stored query
Query ResultNoneNoneRows where active=1Rows where active=1
Key Moments - 2 Insights
Why does the CREATE VIEW command not return rows immediately?
Because CREATE VIEW only stores the SELECT query as a definition (see execution_table step 2). It does not run the query until you select from the view (step 3).
Can you update data directly in a view?
Usually no, because a view is a virtual table showing results of a SELECT (execution_table step 4). You update the underlying tables instead.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what happens at step 2?
AThe view runs the SELECT query and returns rows
BThe view definition is stored in the database
CThe view is deleted
DThe underlying table is modified
💡 Hint
Check execution_table row with Step 2 describing storing the view definition
At which step does querying the view actually run the stored SELECT query?
AStep 1
BStep 2
CStep 3
DStep 5
💡 Hint
Look at execution_table step 3 where the view is queried
If the SELECT query inside the view changes, what must you do to update the view?
ARun CREATE VIEW again with new query
BJust query the view again
CUpdate the underlying table only
DDrop the view and do nothing
💡 Hint
View stores the SELECT query at creation (see variable_tracker 'View Definition')
Concept Snapshot
CREATE VIEW view_name AS SELECT ...;
- Defines a virtual table storing a SELECT query
- Does not run query until view is queried
- Querying view runs stored SELECT and returns results
- Views simplify complex queries and reuse
- Views do not store data themselves
Full Transcript
The CREATE VIEW syntax lets you save a SELECT query as a virtual table called a view. First, you write the SELECT query you want. Then you use CREATE VIEW view_name AS followed by that query. The database stores this query as the view's definition. When you later query the view, the database runs the stored SELECT query and returns the results as if it were a table. The view itself does not store data, it just shows data from the underlying tables. This helps reuse queries and simplify complex data access. You cannot update data directly in a view; you update the original tables instead. To change the view's query, you recreate the view with a new SELECT statement.

Practice

(1/5)
1. What is the main purpose of the CREATE VIEW statement in SQL?
easy
A. To save a SELECT query as a virtual table
B. To permanently store data in the database
C. To delete rows from a table
D. To update existing records in a table

Solution

  1. Step 1: Understand what a view is

    A view is a virtual table created by saving a SELECT query.
  2. Step 2: Identify the purpose of CREATE VIEW

    CREATE VIEW stores the SELECT query so you can use it like a table without storing data.
  3. Final Answer:

    To save a SELECT query as a virtual table -> Option A
  4. Quick Check:

    CREATE VIEW = virtual table [OK]
Hint: Views save SELECT queries as virtual tables [OK]
Common Mistakes:
  • Thinking views store data physically
  • Confusing CREATE VIEW with INSERT or UPDATE
  • Assuming views delete or modify data
2. Which of the following is the correct syntax to create a view named EmployeeView that selects all columns from the Employees table?
easy
A. CREATE EmployeeView VIEW AS SELECT * FROM Employees;
B. CREATE VIEW EmployeeView AS SELECT * FROM Employees;
C. VIEW CREATE EmployeeView AS SELECT * FROM Employees;
D. CREATE VIEW Employees AS SELECT * FROM EmployeeView;

Solution

  1. Step 1: Recall the correct CREATE VIEW syntax

    The syntax is: CREATE VIEW view_name AS SELECT ...
  2. Step 2: Match the syntax with options

    CREATE VIEW EmployeeView AS SELECT * FROM Employees; matches the correct syntax exactly.
  3. Final Answer:

    CREATE VIEW EmployeeView AS SELECT * FROM Employees; -> Option B
  4. Quick Check:

    CREATE VIEW view_name AS SELECT ... [OK]
Hint: CREATE VIEW view_name AS SELECT ... [OK]
Common Mistakes:
  • Swapping keywords CREATE and VIEW
  • Mixing table and view names incorrectly
  • Using wrong keyword order
3. Given the view creation:
CREATE VIEW ActiveUsers AS SELECT id, name FROM Users WHERE active = 1;
What will the query SELECT * FROM ActiveUsers; return?
medium
A. Only users with active = 1
B. Only user IDs without names
C. An error because views cannot filter data
D. All users including inactive ones

Solution

  1. Step 1: Understand the view definition

    The view selects id and name from Users where active = 1, so only active users are included.
  2. Step 2: Analyze the SELECT from the view

    Selecting * from ActiveUsers returns all columns defined in the view, filtered by active = 1.
  3. Final Answer:

    Only users with active = 1 -> Option A
  4. Quick Check:

    View filters rows = active users only [OK]
Hint: View returns filtered rows as defined in SELECT [OK]
Common Mistakes:
  • Assuming view returns all table rows
  • Thinking views cannot filter data
  • Expecting columns not in view to appear
4. Identify the error in this view creation statement:
CREATE VIEW SalesView SELECT * FROM Sales;
medium
A. SELECT * is not allowed in views
B. View name cannot be SalesView
C. Missing AS keyword before SELECT
D. CREATE VIEW must include WHERE clause

Solution

  1. Step 1: Check the syntax of CREATE VIEW

    The correct syntax requires AS before the SELECT statement.
  2. Step 2: Identify the missing keyword

    The statement misses AS, causing a syntax error.
  3. Final Answer:

    Missing AS keyword before SELECT -> Option C
  4. Quick Check:

    CREATE VIEW ... AS SELECT ... [OK]
Hint: Always include AS before SELECT in CREATE VIEW [OK]
Common Mistakes:
  • Omitting AS keyword
  • Misplacing SELECT clause
  • Assuming WHERE clause is mandatory
5. You want to create a view TopProducts that shows product names and total sales only for products with sales over 1000. Which SQL statement correctly creates this view?
hard
A. CREATE VIEW TopProducts AS SELECT product_name, sales FROM Products WHERE sales > 1000;
B. CREATE VIEW TopProducts AS SELECT product_name, SUM(sales) FROM Products GROUP BY product_name WHERE SUM(sales) > 1000;
C. CREATE VIEW TopProducts AS SELECT product_name, SUM(sales) FROM Products WHERE SUM(sales) > 1000 GROUP BY product_name;
D. CREATE VIEW TopProducts AS SELECT product_name, SUM(sales) FROM Products GROUP BY product_name HAVING SUM(sales) > 1000;

Solution

  1. Step 1: Understand the requirement

    We need product names and total sales, only for products with total sales over 1000.
  2. Step 2: Use GROUP BY and HAVING correctly

    SUM(sales) requires GROUP BY product_name, and filtering on aggregated values uses HAVING.
  3. Step 3: Check each option

    CREATE VIEW TopProducts AS SELECT product_name, SUM(sales) FROM Products GROUP BY product_name HAVING SUM(sales) > 1000; uses GROUP BY and HAVING correctly; others misuse WHERE or clause order.
  4. Final Answer:

    CREATE VIEW TopProducts AS SELECT product_name, SUM(sales) FROM Products GROUP BY product_name HAVING SUM(sales) > 1000; -> Option D
  5. Quick Check:

    Use HAVING for aggregated filters in views [OK]
Hint: Use HAVING for conditions on aggregates in views [OK]
Common Mistakes:
  • Using WHERE with aggregate functions
  • Placing WHERE after GROUP BY
  • Omitting GROUP BY when using SUM