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
Create a Simple SQL View
📖 Scenario: You work at a bookstore that keeps track of books and their authors in a database. You want to create a simple view to easily see the book titles along with their authors' names.
🎯 Goal: Build a SQL view named BookAuthorView that shows the title of each book and the author_name from the existing tables.
📋 What You'll Learn
Create a table called Books with columns book_id (integer), title (text), and author_id (integer).
Create a table called Authors with columns author_id (integer) and author_name (text).
Insert the exact data into Books: (1, 'The Great Gatsby', 101), (2, '1984', 102), (3, 'To Kill a Mockingbird', 103).
Insert the exact data into Authors: (101, 'F. Scott Fitzgerald'), (102, 'George Orwell'), (103, 'Harper Lee').
Create a view named BookAuthorView that shows title and author_name by joining Books and Authors on author_id.
💡 Why This Matters
🌍 Real World
Views help simplify complex queries by creating a virtual table that users can query easily without writing joins every time.
💼 Career
Database developers and analysts often create views to provide clean, reusable data access layers for applications and reports.
Progress0 / 4 steps
1
Create the Books and Authors tables
Write SQL statements to create a table called Books with columns book_id (integer), title (text), and author_id (integer). Then create a table called Authors with columns author_id (integer) and author_name (text).
SQL
Hint
Use CREATE TABLE statements with the exact column names and types.
2
Insert data into Books and Authors
Write SQL INSERT INTO statements to add these exact rows into Books: (1, 'The Great Gatsby', 101), (2, '1984', 102), (3, 'To Kill a Mockingbird', 103). Then insert these exact rows into Authors: (101, 'F. Scott Fitzgerald'), (102, 'George Orwell'), (103, 'Harper Lee').
SQL
Hint
Use one INSERT INTO statement per table with multiple rows.
3
Write the SELECT query for the view
Write a SQL SELECT statement that selects title from Books and author_name from Authors. Join the tables on Books.author_id = Authors.author_id.
SQL
Hint
Use JOIN to combine the tables on author_id.
4
Create the view BookAuthorView
Write a SQL statement to create a view named BookAuthorView using the SELECT query that shows title and author_name by joining Books and Authors on author_id.
SQL
Hint
Use CREATE VIEW view_name AS SELECT ... syntax.
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
Step 1: Understand what a view is
A view is a virtual table created by saving a SELECT query.
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.
Final Answer:
To save a SELECT query as a virtual table -> Option A
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
Step 1: Recall the correct CREATE VIEW syntax
The syntax is: CREATE VIEW view_name AS SELECT ...
Step 2: Match the syntax with options
CREATE VIEW EmployeeView AS SELECT * FROM Employees; matches the correct syntax exactly.
Final Answer:
CREATE VIEW EmployeeView AS SELECT * FROM Employees; -> Option B
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
Step 1: Understand the view definition
The view selects id and name from Users where active = 1, so only active users are included.
Step 2: Analyze the SELECT from the view
Selecting * from ActiveUsers returns all columns defined in the view, filtered by active = 1.
Final Answer:
Only users with active = 1 -> Option A
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
Step 1: Check the syntax of CREATE VIEW
The correct syntax requires AS before the SELECT statement.
Step 2: Identify the missing keyword
The statement misses AS, causing a syntax error.
Final Answer:
Missing AS keyword before SELECT -> Option C
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
Step 1: Understand the requirement
We need product names and total sales, only for products with total sales over 1000.
Step 2: Use GROUP BY and HAVING correctly
SUM(sales) requires GROUP BY product_name, and filtering on aggregated values uses HAVING.
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.
Final Answer:
CREATE VIEW TopProducts AS SELECT product_name, SUM(sales) FROM Products GROUP BY product_name HAVING SUM(sales) > 1000; -> Option D
Quick Check:
Use HAVING for aggregated filters in views [OK]
Hint: Use HAVING for conditions on aggregates in views [OK]