index
- what is view
- Why do you need a view
- Rules for using views
- How to use views
- View application example
- Don't use views to update data!
what is view
The best way to understand views is to look at the following example.
SELECT cust_name, cust_contact FROM customers, orders, orderitems WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num AND prod_id = 'TNT2';
The above request is used to retrieve information about customers who have purchased a specific product . Anyone who wants to retrieve the above data must understand the structure of the table and the relationship between the multiple tables . If you want to get the same information for another product, you must also modify the conditions behind the WHERE.
If the entire request above can be encapsulated into a productcustomers table , then only the following statement is enough to retrieve the required data:
SELECT cust_name, cust_contact FROM productcustomers WHERE prod_id = 'TNT2';
productcustomers is a view, the view only contains the request, it does not have any fields and data itself, when the view is used, the view will retrieve the required data dynamically.
Why do you need a view
You've already seen one use for views. Here are some other common uses:
-
To reuse SQL statements.
-
To simplify complex SQL operations. After the query is written, it can be reused easily, without having to know the details of the underlying query itself.
-
To expose parts of a table instead of complete tables.
-
To secure data. Users can be given access to specific subsets of tables instead of to entire tables.
-
To change data formatting and representation. Views can return data formatted and presented differently from their underlying tables.
For the most part, after views are created, they can be used in the same way as tables. You can perform SELECT operations, filter and sort data, join views to other views or tables, and possibly even add and update data. (There are some restrictions on this last item. More on that in a moment.)
The important thing to remember is views are just that, views into data stored elsewhere. Views contain no data themselves, so the data they return is retrieved from other tables. When data is added or changed in those tables, the views will return that changed data.
Rules for using views
Here are some of the most common rules and restrictions governing view creation and usage:
-
Like tables, views must be uniquely named. (They cannot be named with the name of any other table or view).
-
There is no limit to the number of views that can be created.
-
To create views, you must have security access. This is usually granted by the database administrator.
-
Views can be nested; that is, a view may be built using a query that retrieves data from another view.
-
ORDER BY may be used in a view, but it will be overridden if ORDER BY is also used in the SELECT that retrieves data from the view.
-
Views cannot be indexed, nor can they have triggers or default values associated with them.
-
Views can be used in conjunction with tables, for example, to create a SELECT statement which joins a table and a view.
How to use views
So now that you know what views are (and the rules and restrictions that govern them), let's look at view creation:
-
Views are created using the CREATE VIEW statement.
-
To view the statement used to create a view, use SHOW CREATE VIEW viewname;.
-
To remove a view, the DROP statement is used. The syntax is simply DROP VIEW viewname;.
-
To update a view you may use the DROP statement and then the CREATE statement again, or just use CREATE OR REPLACE VIEW, which will create it if it does not exist and replace it if it does.
View application example
Format the retrieved data:
CREATE VIEW vendorlocations AS SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;
Filter unwanted data:
CREATE VIEW customeremaillist AS SELECT cust_id, cust_name, cust_email FROM customers WHERE cust_email IS NOT NULL;
Simplify calculated fields:
CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems;
Don't update data with views
Yes, but not recommended!