SQL View
A view in SQL is a logical
subset of data from one or more tables. View is used to restrict data access.
Syntax for creating a View,
CREATE or REPLACE view view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Example of
Creating a View
Consider following Sale table,
|
Oid
|
order_name
|
previous_balance
|
customer
|
|
11
|
ord1
|
2000
|
Alex
|
|
12
|
ord2
|
1000
|
Adam
|
|
13
|
ord3
|
2000
|
Abhi
|
|
14
|
ord4
|
1000
|
Adam
|
|
15
|
ord5
|
2000
|
Alex
|
SQL Query to Create View
CREATE or REPLACE view sale_view as select * from Sale where customer = 'Alex';
The data fetched from select
statement will be stored in another object called sale_view. We can use create
seperately and replace too but using both together works better.
Example of
Displaying a View
Syntax of displaying a view
is similar to fetching data from table using Select statement.
SELECT * from sale_view;
Force View
Creation
Syntax for forced View is,
CREATE or REPLACE force view view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Update a View
Update command for view is same
as for tables.
Syntax to Update a View is,
UPDATE view-name
set value
WHERE condition;
If we update a view it also
updates base table data automatically.
Read-Only View
We can create a view with
read-only option to restrict access to the view.
Syntax to create a view with
Read-Only Access
CREATE or REPLACE force view view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition with read-only
The above syntax will create
view for read-only purpose, we cannot Update or Insert data into read-only view.
It will throw an error.
Types of View
There are two types of view,
·
Simple View
·
Complex View
|
Simple View
|
Complex View
|
|
Created from one table
|
Created from one or more
table
|
|
Does not contain
functions
|
Contain functions
|
|
Does not contain groups
of data
|
Contains groups of data
|
§ Creating View from multiple tables: In this example we will create a View named MarksView from two
tables StudentDetails and StudentMarks. To create a View from multiple tables
we can simply include multiple tables in the SELECT statement. Query:
§
CREATE VIEW MarksView AS
§
SELECT StudentDetails.NAME,
StudentDetails.ADDRESS, StudentMarks.MARKS
§
FROM StudentDetails, StudentMarks
§
WHERE StudentDetails.NAME = StudentMarks.NAME;
To display data of View
MarksView:
SELECT * FROM
MarksView;
DELETING VIEWS
We have learned about
creating a View, but what if a created View is not needed any more? Obviously
we will want to delete it. SQL allows us to delete an existing View. We can
delete or drop a View using the DROP statement.
Syntax:
DROP VIEW
view_name;
view_name: Name of the View which we want to delete.
For example, if we want to delete the View MarksView,
we can do this as:
DROP VIEW
MarksView;
UPDATING VIEWS
There are certain conditions needed to be satisfied to update a
view. If any one of these conditions is not met, then we will
not be allowed to update the view.
1. The SELECT statement which is used to create the view should not
include GROUP BY clause or ORDER BY clause.
2. The SELECT statement should not have the DISTINCT keyword.
3. The View should have all NOT NULL values.
4. The view should not be created using nested queries or complex
queries.
5. The view should be created from a single table. If the view is
created using multiple tables then we will not be allowed to update the view.
§ We can use the CREATE OR REPLACE VIEW statement
to add or remove fields from a view.
Syntax:
Syntax:
§
CREATE OR REPLACE VIEW view_name AS
§
SELECT column1,coulmn2,..
§
FROM table_name
§
WHERE condition;
For example, if we want
to update the view MarksView and add the field AGE to this
View from StudentMarks Table, we can do this as:
CREATE OR
REPLACE VIEW MarksView AS
SELECT
StudentDetails.NAME, StudentDetails.ADDRESS, StudentMarks.MARKS,
StudentMarks.AGE
FROM
StudentDetails, StudentMarks
WHERE
StudentDetails.NAME = StudentMarks.NAME;
If we fetch all the data
from MarksView now as:
SELECT * FROM
MarksView;
§ Inserting a row in a view:
We can insert a row in a View in a same way as we do in a table. We can use the INSERT INTO statement of SQL to insert a row in a View.Syntax:
We can insert a row in a View in a same way as we do in a table. We can use the INSERT INTO statement of SQL to insert a row in a View.Syntax:
§
INSERT view_name(column1, column2 , column3,..)
§
VALUES(value1, value2, value3..);
§
§
view_name: Name of the
View
Example:
In the below example we will insert a new row in the View DetailsView which we have created above in the example of “creating views from a single table”.
In the below example we will insert a new row in the View DetailsView which we have created above in the example of “creating views from a single table”.
INSERT INTO
DetailsView(NAME, ADDRESS)
VALUES("Suresh","Gurgaon");
If we fetch all the data
from DetailsView now as,
SELECT * FROM
DetailsView;
§ Deleting a row from a View:
Deleting rows from a view is also as simple as deleting rows from a table. We can use the DELETE statement of SQL to delete rows from a view. Also deleting a row from a view first delete the row from the actual table and the change is then reflected in the view.Syntax:
Deleting rows from a view is also as simple as deleting rows from a table. We can use the DELETE statement of SQL to delete rows from a view. Also deleting a row from a view first delete the row from the actual table and the change is then reflected in the view.Syntax:
§
DELETE FROM view_name
§
WHERE condition;
§
§
view_name:Name of view
from where we want to delete rows
§
condition: Condition to
select rows
Example:
In this example we will delete the last row from the view DetailsView which we just added in the above example of inserting rows.
In this example we will delete the last row from the view DetailsView which we just added in the above example of inserting rows.
DELETE FROM
DetailsView
WHERE
NAME="Suresh";
If we fetch all the data
from DetailsView now as,
SELECT * FROM
DetailsView;
WITH CHECK OPTION
The WITH CHECK OPTION
clause in SQL is a very useful clause for views. It is applicable to a
updatable view. If the view is not updatable, then there is no meaning of
including this clause in the CREATE VIEW statement.
§ The WITH CHECK OPTION clause is used to prevent the insertion of
rows in the view where the condition in the WHERE clause in CREATE VIEW
statement is not satisfied.
§ If we have used the WITH CHECK OPTION clause in the CREATE VIEW
statement, and if the UPDATE or INSERT clause does not satisfy the conditions
then they will return an error.
Example:
In the below example we are creating a View SampleView from StudentDetails Table with WITH CHECK OPTION clause.
In the below example we are creating a View SampleView from StudentDetails Table with WITH CHECK OPTION clause.
CREATE VIEW
SampleView AS
SELECT S_ID,
NAME
FROM StudentDetails
WHERE NAME IS
NOT NULL
WITH CHECK
OPTION;
In this View if we now
try to insert a new row with null value in the NAME column then it will give an
error because the view is created with the condition for NAME column as NOT
NULL.
For example, though the View is updatable but then also the below query for this View is not valid:
For example, though the View is updatable but then also the below query for this View is not valid:
INSERT INTO
SampleView(S_ID)
VALUES(6);
NOTE: The default value of
NAME column is null.
Materialized Views in Oracle
A materialized view, or
snapshot as they were previously known, is a table segment whose contents are
periodically refreshed based on a query, either against a local or remote
table. Using materialized views against remote tables is the simplest way to
achieve replication of data between sites.
Basic Syntax
The full syntax description for the CREATE
MATERIALIZED VIEW command
is available in the documentation. Here we will only concern ourselves with the
basics.
-- Normal
CREATE MATERIALIZED VIEW view-name
BUILD [IMMEDIATE | DEFERRED]
REFRESH [FAST | COMPLETE | FORCE ]
ON [COMMIT | DEMAND ]
[[ENABLE | DISABLE] QUERY REWRITE]
AS
SELECT ...;
The BUILD clause options are shown
below.
- IMMEDIATE
: The materialized view is populated immediately.
- DEFERRED
: The materialized view is populated on the first requested refresh.
The following refresh
types are available.
- FAST
: A fast refresh is attempted. If materialized view logs are not present
against the source tables in advance, the creation fails.
- COMPLETE
: The table segment supporting the materialized view is truncated and
repopulated completely using the associated query.
- FORCE
: A fast refresh is attempted. If one is not possible a complete refresh
is performed.
A refresh can be
triggered in one of two ways.
- ON
COMMIT : The refresh is triggered by a committed data change in one of the
dependent tables.
- ON
DEMAND : The refresh is initiated by a manual request or a scheduled task.
The QUERY REWRITE clause tells the
optimizer if the materialized view should be consider for query rewrite
operations. An example of the query rewrite functionality is shown below.
The ON PREBUILT
TABLE clause tells the database to use an existing table segment, which
must have the same name as the materialized view and support the same column
structure as the query.
Create Materialized View
Connect to the
materialized view owner and create the database link and the materialized view
itself.
CONNECT scott/tiger@db2
CREATE DATABASE LINK DB1.WORLD CONNECT TO scott IDENTIFIED BY
tiger USING 'DB1.WORLD';
CREATE MATERIALIZED VIEW emp_mv
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT * FROM emp@db1.world;
Refresh Materialized
Views
If a materialized view
is configured to refresh on commit, you should never need to manually refresh
it, unless a rebuild is necessary. Remember, refreshing on commit is a very
intensive operation for volatile base tables. It makes sense to use fast
refreshes where possible.
For on demand refreshes,
you can choose to manually refresh the materialized view or refresh it as part
of a refresh group.
Difference between
View vs Materialized View in database
Based upon on our understanding of View and
Materialized View, Let’s see, some short difference between them :
1) First difference between View and
materialized view is that, In Views query result
is not stored in the disk or
database but Materialized view allow to store query result in disk or table.
2) Another difference between View vs materialized
view is that, when we create view using any table, rowid of view is same as original table but in case of Materialized view rowid is different.
3) One more difference
between View and materialized view in database is that, In case of View we always get
latest data but in case of Materialized view we need to refresh the view for
getting latest data.
4) Performance of View is less than
Materialized view.
5) This is continuation of first difference
between View and Materialized View, In case of view its only the logical view
of table no separate copy of table but in case of Materialized view we get
physically separate copy of table
6) Last difference between View vs
Materialized View is that, In case of Materialized view we need extra trigger
or some automatic method so that we can keep MV
refreshed, this is not required for views in database.
No comments:
Post a Comment