Types of Views in SQL: Why They Matter More Than You Think!

By Rohan Vats

Updated on Sep 18, 2025 | 20 min read | 61.34K+ views

Share:

In SQL, a view acts as a virtual table created from the result set of a stored query. It contains rows and columns just like a real table, but it does not store the data itself. Instead, it pulls data from one or more base tables whenever it is queried. Understanding the different types of views in SQL is essential for simplifying complex queries, enhancing security, and presenting data in a more readable format. 

This blog will guide you through the primary types of views in SQL. You will learn about simple, complex, and materialized views. We will explore what defines each type, see practical code examples, and lay out their key differences so you can choose the right one for your specific database needs. 

Finding it hard to break into high-paying data roles? Join upGrad’s 100% Online Data Science courses with GenAI-powered learning, guided by experts from IIIT Bangalore and LJMU. You'll master Python, SQL, AI, and more. 

Types of Views in SQL: An Overview 

SQL offers different types of views to support data abstraction, security, and performance optimization. Let's explore all- 

In 2025, professionals using SQL to improve business operations will be in high demand. If you're looking to develop relevant SQL skills, here are some top-rated courses to help you get there: 

 

Simple Views: The Basic Building Block 

A simple view is the most basic type of view you can create. It is built upon a single base table. The key characteristic of a simple view is that it does not contain any advanced functions or clauses that manipulate the data structure. 

A view is considered "simple" if it adheres to these rules: 

  • It fetches data from only one table. 
  • It does not contain any aggregate functions like SUM(), AVG(), COUNT(), etc. 
  • It does not use GROUP BY or ORDER BY clauses. 
  • It does not use the DISTINCT keyword. 
  • It contains all NOT NULL columns from the base table. 

Also Read: Mastering SQL Aggregate Functions: A Comprehensive Guide 

Because simple views are a direct, filtered representation of a single table, they are often updatable. This means you can use INSERT, UPDATE, and DELETE statements on the view itself, and the changes will pass through to the underlying base table. 

Example of a Simple View 

Let's assume we have a base table called Employees

Employees Table: 

EmployeeID 

FirstName 

LastName 

Department 

Salary 

101  Neha  Gupta  HR  60000 
102  Sameer  Kumar  IT  85000 
103  Priya  Singh  Marketing  72000 
104  Vikram  Sharma  IT  95000 
105  Ananya  Reddy  HR  62000 

Now, let's create a simple view to show only the employees working in the 'IT' department. This can be useful for an IT manager who only needs to see their team's information. 

SQL Query to Create a Simple View: 

SQL 
CREATE VIEW IT_Employees AS 
SELECT EmployeeID, FirstName, LastName, Department 
FROM Employees 
WHERE Department = 'IT'; 
 

This command creates a view named IT_Employees. This view does not show the Salary column, which adds a layer of security. 

Querying the Simple View: 

Now, you can query this view just like a table. 

SQL 
SELECT * FROM IT_Employees; 
 

Result: 

EmployeeID 

FirstName 

LastName 

Department 

102  Sameer  Kumar  IT 
104  Vikram  Sharma  IT 

This view is simple because it's based on one table (Employees) and uses a basic WHERE clause without any aggregate functions or grouping. 

Also Read: What is MySQL? Everything You Need to Know 

Complex Views: For Advanced Data Aggregation 

A complex view is built from a query that can include more sophisticated elements. Unlike a simple view, a complex view can be based on multiple tables and often involves data transformation and aggregation. This makes them powerful tools for generating summaries and reports. 

A view is considered "complex" if it has one or more of the following characteristics: 

  • It fetches data from multiple tables using JOINs
  • It contains aggregate functions (SUM(), AVG(), COUNT()), GROUP BY, or ORDER BY clauses. 
  • It uses the DISTINCT keyword to remove duplicate rows. 
  • It is created from a query that includes computations or functions on columns (e.g., Salary * 1.1). 

Also Read: Top 27 SQL Projects in 2025 With Source Code: For All Levels 

A major difference from simple views is that complex views are generally not updatable. You cannot use INSERT, UPDATE, or DELETE statements on them. The reason is simple: if a view shows an aggregated value like the average salary, how would the database know which specific row in the base table to update? The relationship is not one-to-one. 

Example of a Complex View 

Let's expand our database with a Departments table and show one of the useful types of views in SQL with examples. 

Departments Table: 

DepartmentID 

DepartmentName 

Location 

HR  Mumbai 
IT  Bangalore 
Marketing  Delhi 

Let's update the Employees table to use DepartmentID instead of Department. 

Employees Table (Updated): 

EmployeeID 

FirstName 

DepartmentID 

Salary 

101  Neha  60000 
102  Sameer  85000 
103  Priya  72000 
104  Vikram  95000 
105  Ananya  62000 

 

Now, let's create a complex view that shows the number of employees and the average salary for each department. 

SQL Query to Create a Complex View: 

SQL 
CREATE VIEW Department_Summary AS 
SELECT 
   d.DepartmentName, 
   COUNT(e.EmployeeID) AS NumberOfEmployees, 
   AVG(e.Salary) AS AverageSalary 
FROM 
   Employees e 
JOIN 
   Departments d ON e.DepartmentID = d.DepartmentID 
GROUP BY 
   d.DepartmentName; 
 

This view joins two tables, uses COUNT() and AVG() aggregate functions, and groups the results using GROUP BY

Querying the Complex View: 

SQL 
SELECT * FROM Department_Summary; 
 

Result: 

DepartmentName 

NumberOfEmployees 

AverageSalary 

HR  61000 
IT  90000 
Marketing  72000 

This view provides a quick, aggregated summary, hiding the complexity of the underlying join and calculation from the end-user. This is one of the most common uses for the different types of views in SQL. 

Also Read: Is SQL Hard to Learn? Breaking Down the Challenges and Solutions 

Materialized Views: The Performance Booster 

While simple and complex views are virtual and run their queries every time they are accessed, a materialized view is different. It is a physical copy of the query result, stored on disk just like a real table. This is why it's called "materialized" the data is made real. 

The primary purpose of a materialized view is performance. For complex queries that run on very large datasets, executing the query every time can be slow and resource-intensive. A materialized view runs the query once and stores the result. Subsequent queries to the view read the stored data directly, which is much faster. 

Also Read: What is Big Data? Ultimate Guide to Big Data and Big Data Analytics 

Key characteristics of a materialized view: 

  • Physical Storage: The result set is stored on disk. 
  • Performance: Offers significant speed improvements for complex, frequently run queries. 
  • Stale Data: The data is a snapshot in time. It does not update automatically when the base tables change. You must refresh the view periodically to get the latest data. 
  • Refresh Mechanisms: The refresh can be done on a schedule (e.g., every night) or on demand. 

The syntax for creating materialized views can vary between database systems (e.g., Oracle, PostgreSQL, SQL Server). The example below uses PostgreSQL syntax. 

Also Read: MongoDB vs PostgreSQL: Key Differences, Similarities, and More 

Example of a Materialized View 

Let's use our previous Department_Summary example. Imagine our company has millions of employees, and generating this summary report takes several minutes. To speed this up, we can create a materialized view. 

SQL Query to Create a Materialized View (PostgreSQL syntax): 

SQL 
CREATE MATERIALIZED VIEW Department_Summary_MV AS 
SELECT 
   d.DepartmentName, 
   COUNT(e.EmployeeID) AS NumberOfEmployees, 
   AVG(e.Salary) AS AverageSalary 
FROM 
   Employees e 
JOIN 
   Departments d ON e.DepartmentID = d.DepartmentID 
GROUP BY 
   d.DepartmentName; 
 

Now, querying this view will be nearly instant because it's just reading pre-calculated, stored data. 

Querying the Materialized View: 

SQL 
SELECT * FROM Department_Summary_MV; 
 

The result will be the same as the complex view, but it will be delivered much faster. 

Refreshing the Materialized View: 

If a new employee is added or a salary is updated, the materialized view will not show the change. You need to refresh it. 

SQL 
REFRESH MATERIALIZED VIEW Department_Summary_MV; 
 

After this command, the view will be updated with the latest data from the base tables. Knowing when and how to use this option is key to managing different types of views in SQL. 

Software Development Courses to upskill

Explore Software Development Courses for Career Progression

Coverage of AWS, Microsoft Azure and GCP services

Certification8 Months

Job-Linked Program

Bootcamp36 Weeks

Indexed Views: Combining Speed and Logic 

An indexed view is a powerful feature, most prominently found in SQL Server, that fundamentally changes how a view operates. While a standard view is a virtual query, an indexed view stores its result set physically on disk, much like a materialized view. The key difference is that you create a unique clustered index on the view itself. 

This process, called "materializing the view," means the data is stored like a real table with an index for fast lookups. The database engine then automatically maintains this index as data in the underlying base tables changes. This offers the performance benefits of a materialized view without the need for manual refreshes. However, creating an indexed view comes with a strict set of requirements. 

An indexed view must: 

  • Be created with the WITH SCHEMABINDING option, which locks the underlying tables from schema changes. 
  • Use only deterministic functions (functions that always return the same result for the same input). 
  • Meet several other SET option requirements. 

Example of an Indexed View 

Let's use our Employees and Departments tables to create a view and then index it. This view will calculate the total salary expense per department. This kind of aggregation is a perfect candidate for an indexed view, as it can be slow to calculate on the fly for a large company. 

SQL Query to Create and Index a View (SQL Server T-SQL syntax): 

SQL 
-- Step 1: Create the view with schema binding 
CREATE VIEW dbo.Department_Salary_Expense 
WITH SCHEMABINDING 
AS 
SELECT 
   d.DepartmentName, 
   COUNT_BIG(*) AS NumberOfEmployees, -- COUNT_BIG is required for indexed views 
   SUM(e.Salary) AS TotalSalary 
FROM 
   dbo.Employees e 
JOIN 
   dbo.Departments d ON e.DepartmentID = d.DepartmentID 
GROUP BY 
   d.DepartmentName; 
GO 
 
-- Step 2: Create a unique clustered index on the view 
CREATE UNIQUE CLUSTERED INDEX UCIX_Department_Salary_Expense 
ON dbo.Department_Salary_Expense (DepartmentName); 
GO 
 

After these commands, the Department_Salary_Expense view is no longer just a virtual query. It's a physically stored structure. When you query this view, you get near-instant results. The query optimizer can also use this index to speed up other queries that share its logic, even if they don't reference the view directly. 

Updatable Views: Modifying Data Directly 

An updatable view is not a separate CREATE command but rather a property of a view that allows you to use Data Manipulation Language (DML) statements like INSERT, UPDATE, and DELETE directly on it. The changes you make to the view are then passed through to the underlying base table. As we saw, simple views are often updatable. 

However, for a view to be updatable, it must follow a clear set of rules so the database knows exactly which row in the base table to modify. Any ambiguity would make the operation impossible. 

A view is generally updatable if it: 

  • References only one base table. 
  • Does not use aggregate functions (SUM, COUNT, etc.), GROUP BY, or HAVING. 
  • Does not use DISTINCT, TOP, or windowing functions. 
  • Does not use set operators like UNION, INTERSECT, or EXCEPT. 

When working with updatable views, you can also use the WITH CHECK OPTION. This clause ensures that any row you INSERT or UPDATE through the view must conform to the view's WHERE clause criteria. 

Example of an Updatable View 

Let's create a view for the HR department that only shows employees in that department. We'll add the WITH CHECK OPTION to prevent anyone from accidentally reassigning an HR employee to a different department through this view. 

EmployeeID 

FirstName 

Department 

Salary 

101  Neha  HR  60000 
102  Sameer  IT  85000 
105  Ananya  HR  62000 

SQL Query to Create an Updatable View: 

SQL 
CREATE VIEW HR_Employees AS 
SELECT EmployeeID, FirstName, Department, Salary 
FROM Employees 
WHERE Department = 'HR' 
WITH CHECK OPTION; 
 

Using the Updatable View: Now, if you try to update Neha's record and change her salary, it will work. 

SQL 
UPDATE HR_Employees 
SET Salary = 65000 
WHERE EmployeeID = 101; -- This is successful. 
 

However, if you try to move Ananya from 'HR' to 'IT' using this view, the operation will fail because it violates the WITH CHECK OPTION. 

SQL 
UPDATE HR_Employees 
SET Department = 'IT' 
WHERE EmployeeID = 105; -- This will fail and return an error. 
 

This makes updatable views a powerful tool for enforcing business rules and providing a secure interface for data modification. 

Partitioned Views: Managing Large-Scale Data 

A partitioned view is a more advanced type designed to manage very large datasets by horizontally partitioning data across multiple tables. These member tables have the exact same structure, but each one holds a different subset of the data, defined by a CHECK constraint. The partitioned view then uses the UNION ALL set operator to present all the data as if it were coming from a single table. 

This is one of the more complex types of views in SQL and is used for: 

  • Scalability: Splitting a massive table (e.g., billions of rows of sales data) into smaller, more manageable chunks (e.g., one table per year). 
  • Performance: The query optimizer is smart enough to use the CHECK constraints to scan only the relevant member tables for a given query, a process called partition elimination. 
  • Administration: It's easier to perform maintenance tasks like backups or index rebuilds on smaller tables. 

A partitioned view can be local (all member tables are on the same server) or distributed (member tables are on different servers). 

Example of a Partitioned View 

Imagine we have a huge Sales table. To manage it better, we split it into two tables: Sales_2024 and Sales_2025. 

SQL Query to Create Member Tables and Partitioned View: 

SQL 
-- Table for 2024 sales data 
CREATE TABLE Sales_2024 ( 
   SaleID INT PRIMARY KEY, 
   SaleDate DATE, 
   Amount DECIMAL(10, 2), 
   CONSTRAINT CK_Sales_2024_Date CHECK (YEAR(SaleDate) = 2024) 
); 
 
-- Table for 2025 sales data 
CREATE TABLE Sales_2025 ( 
   SaleID INT PRIMARY KEY, 
   SaleDate DATE, 
   Amount DECIMAL(10, 2), 
   CONSTRAINT CK_Sales_2025_Date CHECK (YEAR(SaleDate) = 2025) 
); 
 
-- Now, create the partitioned view to unify them 
CREATE VIEW All_Sales AS 
SELECT SaleID, SaleDate, Amount FROM Sales_2024 
UNION ALL 
SELECT SaleID, SaleDate, Amount FROM Sales_2025; 
 

Querying the Partitioned View: When you run a query against the All_Sales view with a date filter, the database optimizer reads the CHECK constraints and only accesses the relevant table. 

SQL 
SELECT * FROM All_Sales WHERE SaleDate = '2024-11-15'; 
 

For this query, the database will only scan the Sales_2024 table and completely ignore Sales_2025, making the query much faster. While modern database systems offer built-in table partitioning, partitioned views remain a valid and flexible strategy for data management. 

Key Differences: A Comprehensive Comparison 

This table summarizes the main differences between all the types of views in SQL we have discussed, helping you choose the right one for your specific goal. 

Feature  Simple View  Complex View  Materialized View  Indexed View  Updatable View  Partitioned View 
Base Tables  One  One or more  One or more  One or more  Strictly one  Multiple (identical structure) 
DML Operations  Yes (INSERT, UPDATE, DELETE)  Generally No (Read-only)  No (Must be refreshed)  Limited (with restrictions)  Yes (Its main purpose)  Yes (with certain rules) 
Data Storage  No (Virtual)  No (Virtual)  Yes (Physically stored)  Yes (Physically stored)  No (Virtual)  No (Virtual) 
Data Freshness  Always up-to-date  Always up-to-date  Stale until refreshed  Automatically updated  Always up-to-date  Always up-to-date 
Performance  Similar to a direct query  Can be slow on large tables  Very fast (reads stored data)  Very fast (reads from index)  Similar to a direct query  Fast (with partition elimination) 
Primary Use Case  Security, simplicity  Reporting, summarization  Performance (for slow queries)  Performance (for aggregations)  Secure data modification  Managing very large tables 

This comparison of types of views in SQL with examples shows that each view serves a distinct purpose in database management. 

What Are Views in SQL? 

Before we explore the different types of views in SQL, let's quickly review what a view is and why it's so useful. A view is essentially a saved SQL query that you can interact with as if it were a table. When you run a query against a view, the database engine executes the view's underlying query and presents the results to you. 

Think of it as a dynamic window into your data. You are not creating a new copy of the data; you are creating a new perspective on the existing data. 

The main benefits of using views include: 

  • Simplicity: You can hide the complexity of a multi-table join behind a simple SELECT statement. A user can query the view without needing to know the complex logic that creates it. 
  • Security: You can restrict access to certain data. For instance, you can create a view that only shows specific columns or rows from a table, hiding sensitive information like salaries or personal identification numbers from certain users. 
  • Consistency: Views ensure that data is presented in a consistent format. Everyone querying the view gets the same structure and logic, which helps maintain data integrity across applications. 

Also Read: Top 20 SQL Query Interview Questions & Answers You Must Know! 

Advantages of Using Views in SQL 

Views in SQL offer several benefits that make working with databases more structured and manageable. 

  • Simplifies complex queries: Instead of writing long and repeated queries, you can store them as a view and call them directly. 
  • Provides data security: You can restrict access by exposing only selected columns through a view, keeping sensitive data hidden. 
  • Supports logical data independence: Changes in the database structure don’t always affect the way users query data if views are in place. 
  • Makes reporting easier: Views can be used to create predefined datasets that speed up report generation. 
  • Reduces redundancy: Views eliminate the need to rewrite the same joins or calculations multiple times. 

Limitations of Views 

While views are powerful, they also come with certain drawbacks you should know. 

  • Not always updatable: Some views, especially those with joins or aggregations, cannot be updated directly. 
  • Materialized views require refresh: Unlike normal views, materialized views store data physically and need regular updates to reflect the latest changes. 
  • Performance impact: Complex views can slow down queries since the database has to execute the underlying SQL each time the view is accessed 

Conclusion 

Views are a powerful feature in SQL that can greatly improve how you manage and interact with your data. By understanding the different types of views in SQL, you can build more secure, simple, and efficient database solutions. Simple views are great for controlling access and simplifying queries on a single table. Complex views are perfect for creating sophisticated reports and summaries. Materialized views are the ideal choice when you need to boost the performance of heavy, repetitive queries. The right view is a tool that makes your data work better for you. 

Subscribe to upGrad's Newsletter

Join thousands of learners who receive useful tips

Promise we won't spam!

Strengthen your SQL skills and learn how to use functions and formulas to handle data more efficiently. Start with upGrad's free Advanced SQL: Functions and Formulas course today and take a step toward higher-paying roles in data.

Tired of writing the same complex SQL queries again and again? Master how SQL Views can simplify your workflows with upGrad’s 8-month Certificate in Cloud Computing and DevOps. Learn to integrate SQL, AWS, Docker, and CI/CD for building efficient, scalable systems.

upGrad’s Exclusive Software and Tech Webinar for you –

SAAS Business – What is So Different?

 

Before presenting insights from databases, you need to accurately assess patterns in data. This is where upGrad’s free Analyzing Patterns in Data and Storytelling course can help you. You will learn pattern analysis, insight creation, Pyramid Principle, logical flow, and data visualization. It’ll help you transform raw data into compelling narratives.

Boost your career with our popular Software Engineering courses, offering hands-on training and expert guidance to turn you into a skilled software developer.

Master in-demand Software Development skills like coding, system design, DevOps, and agile methodologies to excel in today’s competitive tech industry.

Stay informed with our widely-read Software Development articles, covering everything from coding techniques to the latest advancements in software engineering.

Frequently Asked Questions (FAQs)

1. What is an indexed view?

An indexed view, also known as a materialized view in some systems like SQL Server, is a view that has a unique clustered index created on it. This physically stores the view's result set, similar to a materialized view, and can dramatically improve the performance of queries that access it, especially those involving aggregations on large datasets. 

2. How do you delete a view in SQL?

You can delete or remove a view using the DROP VIEW command. The syntax is straightforward: DROP VIEW view_name;. This action removes the view's definition from the database but does not affect the data in the underlying base tables. 

3. Can a view be based on another view?

Yes, you can create a view based on one or more existing views. This is called nesting views. It can be a useful way to build layers of abstraction, where each view simplifies the data a little more, but it can also lead to performance issues if the nesting becomes too deep or complex. 

4. Do views improve query performance?

Simple and complex views generally do not improve performance because their underlying query runs every time they are accessed. However, materialized or indexed views are specifically designed to improve performance by pre-computing and storing the result set, making data retrieval much faster. 

5. What is the WITH CHECK OPTION in a view?

The WITH CHECK OPTION is a constraint that can be added when creating an updatable view. It enforces the view's WHERE clause for any INSERT or UPDATE operations performed on the view. This ensures that new or modified rows must meet the view's criteria and remain visible through the view. 

6. What are the security benefits of using a view?

Views provide column-level and row-level security. You can create a view that exposes only certain non-sensitive columns to a user, hiding others like salaries or personal data. Similarly, you can use a WHERE clause to restrict the rows a user can see, for example, showing a sales manager only the records for their region. 

7. Are views automatically updated when the base table structure changes?

No, views are not automatically updated if the underlying table structure changes. If you drop a column from a base table that a view depends on, the view will become invalid and will produce an error when queried. You would need to alter or recreate the view to match the new table schema. 

8. What is the difference between a view and a temporary table?

A view is a stored query definition that is permanent in the database until dropped, and it does not store data (unless materialized). A temporary table is a physical table that stores data for the duration of a single database session or transaction and is automatically deleted when the session ends. 

9. Can you pass parameters to a view?

Standard SQL views do not accept parameters directly like a stored procedure or function does. However, you can achieve similar results by using parameterized table-valued functions or by filtering the view with a WHERE clause when you query it. 

10. When should you avoid using a view?

You should avoid using views when the underlying logic is extremely complex and involves many levels of nested views, as this can be difficult to debug and may perform poorly. Also, if you need to perform DML operations and the view is complex, it is better to operate directly on the base tables. 

11. Does creating a view take up a lot of database space?

Standard simple and complex views take up a very small amount of space, as only the query definition is stored in the database's data dictionary. Materialized or indexed views, on the other hand, do take up significant space because they store a physical copy of the data. 

12. How do you see the definition of an existing view?

Most database systems provide a command to view the SQL code used to create a view. For example, in SQL Server, you can use the sp_helptext 'view_name'; stored procedure. In MySQL, you can use SHOW CREATE VIEW view_name;. 

13. What is an updatable view?

An updatable view is a view on which you can perform DML operations (INSERT, UPDATE, DELETE) that are passed through to the underlying base table. Typically, only simple views that are based on a single table and do not contain aggregate functions or joins are updatable. 

14. Can a view have a primary key?

A standard view itself cannot have a primary key because it is not a real table. However, it can include the primary key column(s) from its base table(s). Indexed views are an exception, as creating a unique clustered index on them effectively serves a similar purpose to a primary key. 

15. What is the difference between a view and a synonym?

A view is a stored query that can simplify complex logic or restrict data access. A synonym is simply an alternative name or alias for a database object like a table, another view, or a stored procedure. A synonym does not offer any filtering or logic; it is just a pointer. 

16. Are there limitations on the SELECT statement used in a view?

The SELECT statement used to define a view cannot contain an INTO clause to create a new table, and it generally cannot reference temporary tables or table variables. The ORDER BY clause is also only allowed in specific situations, such as when used with TOP or OFFSET / FETCH. 

17. How do permissions work with views?

Permissions for views can be managed separately from the base tables. You can grant a user SELECT permission on a view without giving them any permissions on the underlying tables. This is a key part of using views for security, as users can only access the data as presented by the view. 

18. What happens if I try to update a non-updatable complex view?

If you attempt to perform an INSERT, UPDATE, or DELETE operation on a view that is not updatable (for example, one with a JOIN or GROUP BY), the database system will reject the command and return an error message stating that the target view is not updatable. 

19. Can views from different databases be combined?

Yes, if your database system supports cross-database queries, you can create a view that joins tables from different databases on the same server. The syntax typically involves specifying the database name as part of the table reference, such as database_name.schema_name.table_name. 

20. Is there a limit to the number of views you can create?

The theoretical limit on the number of views in a database is extremely high and is determined by the specific database system (e.g., SQL Server can have over 2 billion objects in a database). In practice, you are not likely to ever reach this limit. The practical limit is based on manageability and performance. 

Rohan Vats

408 articles published

Rohan Vats is a Senior Engineering Manager with over a decade of experience in building scalable frontend architectures and leading high-performing engineering teams. Holding a B.Tech in Computer Scie...

Get Free Consultation

+91

By submitting, I accept the T&C and
Privacy Policy

India’s #1 Tech University

Executive PG Certification in AI-Powered Full Stack Development

77%

seats filled

View Program

Top Resources

Recommended Programs

upGrad

upGrad

AI-Driven Full-Stack Development

Job-Linked Program

Bootcamp

36 Weeks

upGrad

upGrad KnowledgeHut

Professional Certificate Program in UI/UX Design & Design Thinking

#1 Course for UI/UX Designers

Bootcamp

3 Months

IIIT Bangalore logo
new course

Executive PG Certification

9.5 Months