SQL

SQL Views: Syntax, Usage, and Examples

SQL views provide a way to encapsulate query logic and simplify data retrieval by storing pre-defined queries as virtual tables. They act as saved queries that return results dynamically, helping with readability, security, and efficiency.

How to Use SQL Views

A view is created using the CREATE VIEW statement, followed by a SELECT query that defines its structure. Once created, a view can be queried just like a regular table.

CREATE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE condition;

To retrieve data from a view, use a standard SELECT statement:


SELECT * FROM view_name;

If you need to modify a view, use the CREATE OR REPLACE VIEW command:

CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE new_condition;

To remove a view, use the DROP VIEW statement:

DROP VIEW view_name;

When to Use SQL Views

Views are useful in many scenarios where data organization and security are important.

Simplifying Complex Queries

If you frequently run queries with complex joins, aggregations, or filters, a view can store that logic and allow you to retrieve data without rewriting the query each time.

Enhancing Security

A view can restrict access to certain columns by exposing only the necessary data, preventing users from accessing sensitive information in underlying tables.

Encapsulating Business Logic

When multiple users need to work with pre-defined business rules, views ensure consistency by enforcing the same logic across different queries.

Examples of SQL Views

Creating a Simple View

A view that retrieves only active users from a users table:

CREATE VIEW active_users AS
SELECT user_id, username
FROM users
WHERE is_active = 1;

To retrieve active users:

SELECT * FROM active_users;

Joining Multiple Tables

A view that combines user data with their orders:

CREATE VIEW user_orders AS
SELECT users.user_id, users.username, orders.order_id, orders.total_amount
FROM users
JOIN orders ON users.user_id = orders.user_id;

This allows for an easy lookup of orders per user:

SELECT * FROM user_orders WHERE username = 'Alice';

Aggregating Data with a View

A view to calculate the total sales per product:

CREATE VIEW product_sales AS
SELECT product_id, SUM(total_amount) AS total_sales
FROM orders
GROUP BY product_id;

This simplifies retrieving sales data:

SELECT * FROM product_sales ORDER BY total_sales DESC;

Learn More About SQL Views

Updating Data in a View

Views based on a single table with simple queries allow updates, but more complex views with joins may require INSTEAD OF triggers.

UPDATE active_users
SET username = 'NewName'
WHERE user_id = 3;

For complex views, consider using stored procedures or triggers to enable updates while maintaining integrity.

Creating Views vs. Using Tables

A view does not store data itself but dynamically retrieves it from tables. This reduces redundancy and ensures real-time data accuracy, but querying views can sometimes be slower than working with indexed tables.

Indexed Views for Performance

While standard views are dynamic, some databases allow indexed views, which persist computed results for performance improvements.

CREATE INDEX idx_product_sales ON product_sales (product_id);

Views offer an efficient way to simplify queries, control access, and enforce consistency across an SQL database. They provide a powerful tool to streamline database operations.

Learn SQL for Free
Start learning now
button icon
To advance beyond this tutorial and learn SQL by doing, try the interactive experience of Mimo. Whether you're starting from scratch or brushing up your coding skills, Mimo helps you take your coding journey above and beyond.

Sign up or download Mimo from the App Store or Google Play to enhance your programming skills and prepare for a career in tech.

You can code, too.

© 2025 Mimo GmbH