SQL Practice Logo

SQLPractice Online

Views & Materialized Views: Examples

Module: Schema Design & Advanced DDL

Security View - Hide Sensitive Columns

basic

Employee table has salary and SSN. Create view for general access that hides sensitive data.

CREATE TABLE employees (

employee_id SERIAL PRIMARY KEY,

name VARCHAR(100) NOT NULL,

email VARCHAR(255) NOT NULL,

department VARCHAR(50),

salary DECIMAL(10,2),

ssn VARCHAR(11),

hire_date DATE

);

CREATE VIEW employee_directory AS

SELECT

employee_id,

name,

email,

department,

hire_date

FROM employees;

GRANT SELECT ON employee_directory TO public;

REVOKE SELECT ON employees FROM public;

SELECT * FROM employee_directory;

Shows only non-sensitive columns. Salary and SSN hidden.

View provides security layer. Users query employee_directory but can't see salary/SSN. Always current because it queries base table.

All

graph LR

A[employees table] --> B[All columns including salary, SSN]

C[employee_directory view] --> D[Only public columns]

E[Public Users] --> C

E -.->|No Access| A

F[HR Users] --> A

Materialized View - Daily Sales Dashboard

intermediate

Dashboard shows daily sales. Query joins orders, customers, products and takes 45 seconds. Viewed 500 times/day. Use materialized view to pre-compute results.

CREATE MATERIALIZED VIEW daily_sales_dashboard AS

SELECT

DATE(o.order_date) as sale_date,

COUNT(DISTINCT o.order_id) as total_orders,

COUNT(DISTINCT o.customer_id) as unique_customers,