Copyright © 2016 Ramez Elmasri and Shamkant B.
Navathe
CHAPTER 7
More SQL: Complex Queries,
Triggers, Views, and Schema
Modification
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 2
Chapter 7 Outline
n More Complex SQL Retrieval Queries
n Specifying Semantic Constraints as Assertions
and Actions as Triggers
n Views (Virtual Tables) in SQL
n Schema Modification in SQL
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 3
More Complex SQL Retrieval
Queries
n Additional features allow users to specify more
complex retrievals from database:
n Nested queries, joined tables, and outer joins (in
the FROM clause), aggregate functions, and
grouping
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 4
Comparisons Involving NULL
and Three-Valued Logic
n Meanings of NULL
n Unknown value
n Unavailable or withheld value
n Not applicable attribute
n Each individual NULL value considered to be
different from every other NULL value
n SQL uses a three-valued logic:
n TRUE, FALSE, and UNKNOWN (like Maybe)
n NULL = NULL comparison is avoided
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 5
Comparisons Involving NULL
and Three-Valued Logic (cont’d.)
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 6
Comparisons Involving NULL
and Three-Valued Logic (cont’d.)
n SQL allows queries that check whether an
attribute value is NULL
n IS or IS NOT NULL
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 7
Nested Queries, Tuples,
and Set/Multiset Comparisons
n Nested queries
n Complete select-from-where blocks within WHERE
clause of another query
n Outer query and nested subqueries
n Comparison operator IN
n Compares value v with a set (or multiset) of values
V
n Evaluates to TRUE if v is one of the elements in V
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 8
Nested Queries (cont’d.)
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 9
Nested Queries (cont’d.)
n Use tuples of values in comparisons
n Place them within parentheses
This query will select the Essns of all employees who work the same
(project, hours) combination on some project that employee ‘John
Smith’ (whose Ssn = ‘123456789’) works on.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 10
Nested Queries (cont’d.)
n Use other comparison operators to compare a
single value v
n = ANY (or = SOME) operator
n Returns TRUE if the value v is equal to some value in
the set V and is hence equivalent to IN
n Other operators that can be combined with ANY (or
SOME): >, >=, <, <=, and <>
n ALL: value must exceed all values from nested
query
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 11
Nested Queries (cont’d.)
n Avoid potential errors and ambiguities
n Create tuple variables (aliases) for all tables
referenced in SQL query
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 12
Correlated Nested Queries
n Queries that are nested using the = or IN
comparison operator can be collapsed into one
single block: E.g., Q16 can be written as:
n Q16A: SELECT E.Fname, E.Lname
FROM EMPLOYEE AS E, DEPENDENT AS D
WHERE E.Ssn=D.Essn AND E.Sex=D.Sex
AND
E.Fname=D.Dependent_name;
n Correlated nested query
n Evaluated once for each tuple in the outer query
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 13
The EXISTS and UNIQUE Functions
in SQL for correlating queries
n EXISTS function
n Check whether the result of a correlated nested
query is empty or not. They are Boolean functions
that return a TRUE or FALSE result.
n EXISTS and NOT EXISTS
n Typically used in conjunction with a correlated
nested query
n SQL function UNIQUE(Q)
n Returns TRUE if there are no duplicate tuples in
the result of query Q
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 14
Example EXISTS
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 14
Example NOT EXISTS
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 14
USE of EXISTS
Q7:List the names of managers who have at least one dependent.
SELECT Fname, Lname
FROM Employee
WHERE EXISTS (SELECT *
FROM DEPENDENT
WHERE Ssn= Essn)
AND
EXISTS (SELECT *
FROM Department
WHERE Ssn= Mgr_Ssn) ;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 15
USE OF NOT EXISTS
To achieve the “for all” (universal quantifier- see Ch.8) effect,
we use double negation this way in SQL:
Query: List first and last name of employees who work on
ALL projects controlled by Dno=5.
SELECT Fname, Lname
FROM Employee
WHERE NOT EXISTS ( (SELECT Pnumber
FROM PROJECT
WHERE Dno=5)
EXCEPT
(SELECT Pno
FROM WORKS_ON
WHERE Ssn= ESsn) );
The above is equivalent to double negation: List names of those
employees for whom there does NOT exist a project managed by
department no. 5 that they do NOT work on.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 16
Double Negation to accomplish “for
all” in SQL
n Q3B:
SELECT Lname, Fname
FROM EMPLOYEE
WHERE NOT EXISTS (SELECT *
FROM WORKS_ON B
WHERE (
B.Pno IN ( SELECT Pnumber
FROM PROJECT
WHERE Dnum=5 )
AND
NOT EXISTS (SELECT *
FROM WORKS_ON C
WHERE C.Essn=Ssn AND C.Pno=B.Pno )
)
);
The above is a direct rendering of: List names of those employees for whom there does
NOT exist a project managed by department no. 5 that they do NOT work on.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 19
Explicit Sets and Renaming of
Attributes in SQL
n Can use explicit set of values in WHERE clause
Q17: SELECT DISTINCT Essn
FROM WORKS_ON
WHERE Pno IN (1, 2, 3);
n Use qualifier AS followed by desired new name
n Rename any attribute that appears in the result of
a query
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 18
Specifying Joined Tables in the
FROM Clause of SQL
n Joined table
n Permits users to specify a table resulting from a
join operation in the FROM clause of a query
n The FROM clause in Q1A
n Contains a single joined table. JOIN may also be
called INNER JOIN
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 19
Different Types of JOINed Tables in
SQL
n Specify different types of join
n NATURAL JOIN
n Various types of OUTER JOIN (LEFT, RIGHT,
FULL )
n NATURAL JOIN on two relations R and S
n No join condition specified
n Is equivalent to an implicit EQUIJOIN condition for
each pair of attributes with same name from R and
S
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 20
NATURAL JOIN
n Rename attributes of one relation so it can be joined with
another using NATURAL JOIN:
Q1B: SELECT Fname, Lname, Address
FROM (EMPLOYEE NATURAL JOIN
(DEPARTMENT AS DEPT (Dname, Dno, Mssn,
Msdate)))
WHERE Dname=‘Research’;
The above works with EMPLOYEE.Dno = DEPT.Dno as an
implicit join condition
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 23
INNER and OUTER Joins
n INNER JOIN (versus OUTER JOIN)
n Default type of join in a joined table
n Tuple is included in the result only if a matching tuple exists
in the other relation
n LEFT OUTER JOIN
n Every tuple in left table must appear in result
n If no matching tuple
n Padded with NULL values for attributes of right table
n RIGHT OUTER JOIN
n Every tuple in right table must appear in result
n If no matching tuple
n Padded with NULL values for attributes of left table
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 22
Example: LEFT OUTER JOIN
SELECT E.Lname AS Employee_Name
S.Lname AS Supervisor_Name
FROM Employee AS E LEFT OUTER JOIN EMPLOYEE AS S
ON E.Super_ssn = S.Ssn)
ALTERNATE SYNTAX:
SELECT E.Lname , S.Lname
FROM EMPLOYEE E, EMPLOYEE S
WHERE E.Super_ssn + = S.Ssn
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 25
Multiway JOIN in the FROM clause
n FULL OUTER JOIN – combines result if LEFT
and RIGHT OUTER JOIN
n Can nest JOIN specifications for a multiway join:
Q2A: SELECT Pnumber, Dnum, Lname, Address, Bdate
FROM ((PROJECT JOIN DEPARTMENT ON
Dnum=Dnumber) JOIN EMPLOYEE ON
Mgr_ssn=Ssn)
WHERE Plocation=‘Stafford’;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 26
Aggregate Functions in SQL
n Used to summarize information from multiple
tuples into a single-tuple summary
n Built-in aggregate functions
n COUNT, SUM, MAX, MIN, and AVG
n Grouping
n Create subgroups of tuples before summarizing
n To select entire groups, HAVING clause is used
n Aggregate functions can be used in the SELECT
clause or in a HAVING clause
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 27
Renaming Results of Aggregation
n Following query returns a single row of computed values
from EMPLOYEE table:
Q19: SELECT
SUM (Salary), MAX (Salary), MIN (Salary), AVG
(Salary)
FROM EMPLOYEE;
n The result can be presented with new names:
Q19A: SELECT
SUM (Salary) AS Total_Sal, MAX (Salary) AS
Highest_Sal, MIN (Salary) AS Lowest_Sal, AVG
(Salary) AS Average_Sal
FROM EMPLOYEE;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 28
Aggregate Functions in SQL (cont’d.)
n NULL values are discarded when aggregate
functions are applied to a particular column
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 29
Aggregate Functions in SQL (cont’d.)
n We may also use the COUNT function to count
values in a column rather than tuples, as in the
next example.
Query 23. Count the number of distinct salary
values in the database.
Q23: SELECT COUNT (DISTINCT Salary)
FROM EMPLOYEE;
n If COUNT(DISTINCT SALARY) duplicate values
will be eliminated. However, any tuples with
NULL for SALARY will not be counted.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 30
Aggregate Functions in SQL (cont’d.)
n In general, NULL values are discarded when
aggregate functions are applied. However:
n The general rule is as follows: when an aggregate
function is applied to a collection of values, NULLs
are removed from the collection before the
calculation; if the collection becomes empty
because all values are NULL, the aggregate
function will return NULL (except in the case of
COUNT, where it will return 0 for an empty
collection of values).
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 31
Aggregate Functions in SQL (cont’d.)
n These functions can also be used in:
n selection conditions involving nested queries. We can
specify a correlated nested query with an aggregate
function, and then use the nested query in the WHERE
clause of an outer query.
n For example, to retrieve the names of all employees who
have two or more dependents (Query 5), we can write the
following:
Q5: SELECT Lname, Fname FROM EMPLOYEE
WHERE ( SELECT COUNT (*) FROM DEPENDENT
WHERE Ssn = Essn ) > = 2;
n The correlated nested query counts the number of dependents
that each employee has; if this is greater than or equal to two,
the employee tuple is selected.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 32
Aggregate Functions on Booleans
n SOME and ALL may be applied as functions on
Boolean Values.
n SOME returns true if at least one element in the
collection is TRUE (similar to OR)
n ALL returns true if all of the elements in the
collection are TRUE (similar to AND)
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 33
Grouping: The GROUP BY Clause
n Partition relation into subsets of tuples
n Based on grouping attribute(s)
n Apply function to each such group independently
n GROUP BY clause
n Specifies grouping attributes
n COUNT (*) counts the number of rows in the
group
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 34
Examples of GROUP BY
n The grouping attribute must appear in the SELECT
clause:
Q24: SELECT Dno, COUNT (*), AVG (Salary)
FROM EMPLOYEE
GROUP BY Dno;
n If the grouping attribute has NULL as a possible value,
then a separate group is created for the null value (e.g.,
null Dno in the above query)
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 35
n GROUP BY may be applied to the result of a JOIN:
n Query 25. For each project, retrieve the project number,
the project name, and the number of employees who work
on that project.
Q25: SELECT Pnumber, Pname, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE Pnumber=Pno
GROUP BY Pnumber, Pname;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 36
Grouping: The GROUP BY and
HAVING Clauses
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe
Grouping: The GROUP BY and
HAVING Clauses (cont’d.)
n HAVING clause
n Provides a condition to select or reject an entire
group:
n Query 26. For each project on which more than two employees work,
retrieve the project number, the project name, and the number of
employees who work on the project.
Q26: SELECT Pnumber, Pname, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE Pnumber=Pno
GROUP BY Pnumber, Pname
HAVING COUNT (*) > 2;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 31
n Query 27. For each project, retrieve the project number,
the project name, and the number of employees from
department 5 who work on the project.
Q27: SELECT Pnumber, Pname, COUNT (*)
FROM PROJECT, WORKS_ON, EMPLOYEE
WHERE Pnumber=Pno AND Ssn=Essn AND Dno=5
GROUP BY Pnumber, Pname
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 39
Combining the WHERE and the
HAVING Clause
n Consider the query: we want to count the total number of
employees whose salaries exceed $40,000 in each
department, but only for departments where more than
five employees work.
n INCORRECT QUERY:
SELECT Dno, COUNT (*)
FROM EMPLOYEE
WHERE Salary>40000
GROUP BY Dno
HAVING COUNT (*) > 5;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 40
Combining the WHERE and the
HAVING Clause (continued)
Correct Specification of the Query:
n Note: the WHERE clause applies tuple by tuple
whereas HAVING applies to entire group of
tuples
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 41
Use of WITH
n The WITH clause allows a user to define a table
that will only be used in a particular query (not
available in all SQL implementations)
n Used for convenience to create a temporary
“View” and use that immediately in a query
n Allows a more straightforward way of looking a
step-by-step query
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 42
Example of WITH
n See an alternate approach to doing Q28:
n Q28’: WITH BIGDEPTS (Dno) AS
( SELECT Dno
FROM EMPLOYEE
GROUP BY Dno
HAVING COUNT (*) > 5)
SELECT Dno, COUNT (*)
FROM EMPLOYEE
WHERE Salary>40000 AND Dno IN BIGDEPTS
GROUP BY Dno;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 43
Use of CASE
n SQL also has a CASE construct
n Used when a value can be different based on
certain conditions.
n Can be used in any part of an SQL query where a
value is expected
n Applicable when querying, inserting or updating
tuples
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 44
EXAMPLE of use of CASE
n The following example shows that employees are
receiving different raises in different departments
(A variation of the update U6)
n U6’: UPDATE EMPLOYEE
SET Salary =
CASE WHEN Dno = 5THEN Salary + 2000
WHEN Dno = 4THEN Salary + 1500
WHEN Dno = 1THEN Salary + 3000
ELSE Salary + 0 ;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 45
Recursive Queries in SQL
n An example of a recursive relationship between
tuples of the same type is the relationship
between an employee and a supervisor.
n This relationship is described by the foreign key
Super_ssn of the EMPLOYEE relation
n An example of a recursive operation is to retrieve all supervisees of
a supervisory employee e at all levels—that is, all employees e¢
directly supervised by e, all employees e¢’ directly supervised by each
employee e¢, all employees e²¢ directly supervised by each employee
e², and so on. Thus the CEO would have each employee in the
company as a supervisee in the resulting table. Example shows such
table SUP_EMP with 2 columns (Supervisor,Supervisee(any level)):
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 46
Example of WITH and WITH RECURSIVE
n Example of WITH:
WITH BIGDEPTS (Dno) AS
( SELECT Dno
FROM EMPLOYEE
GROUP BY Dno
HAVING COUNT (*) > 5)
SELECT Dno, COUNT (*)
FROM EMPLOYEE
WHERE Salary>40000 AND Dno IN BIGDEPTS
GROUP BY Dno;
n Example of WITH RECURSIVE:
baseT = is a table that has one column (m) with one value=1.
WITH RECURSIVE rec(n) AS (
SELECT m FROM baseT
UNION
SELECT n+1 FROM rec WHERE n < 3)
SELECT sum(n) FROM rec ;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 47
Recursive Queries in SQL
n WITH RECURSIVE pseudo-entity-name(column-names) AS
(
Initial-SELECT
UNION
Recursive-SELECT using pseudo-entity-name
)
Outer-SELECT using pseudo-entity-name
The execution process in pseudo code:
working-recordset = result of Initial-SELECT
append working-recordset to empty outer-recordset
while( working-recordset is not empty ) begin
new working-recordset = result of Recursive-SELECT taking previous working-
recordset as pseudo-entity-name
append working-recordset to outer-recordset
end
overall-result = result of Outer-SELECT taking outer-recordset as pseudo-entity-name
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 48
An EXAMPLE of RECURSIVE Query
n Q29: WITH RECURSIVE SUP_EMP (SupSsn, EmpSsn) AS
(SELECT SupervisorSsn, Ssn
FROM EMPLOYEE
UNION
SELECT S.SupSsn , E.Ssn
FROM EMPLOYEE AS E, SUP_EMP AS S
WHERE E.SupervisorSsn = S.EmpSsn)
SELECT *
FROM SUP_EMP;
n The above query starts with an empty SUP_EMP and
successively builds SUP_EMP table by computing
immediate supervisees first, then second level
supervisees, etc. until a fixed point is reached and no
more supervisees can be added
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 49
EXPANDED Block Structure of SQL
Queries
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 40
Specifying Constraints as Assertions
and Actions as Triggers
n Semantic Constraints: The following are beyond
the scope of the EER and relational model
n CREATE ASSERTION
n Specify additional types of constraints outside
scope of built-in relational model constraints
n CREATE TRIGGER
n Specify automatic actions that database system
will perform when certain events and conditions
occur
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 41
Specifying General Constraints as
Assertions in SQL
n CREATE ASSERTION
n Specify a query that selects any tuples that violate
the desired condition
n Use only in cases where it goes beyond a simple
CHECK which applies to individual attributes and
domains
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 52
Introduction to Triggers in SQL
n CREATE TRIGGER statement
n Used to monitor the database
n Typical trigger has three components which make
it a rule for an “active database “ (more on active
databases in section 26.1) :
n Event(s)
n Condition
n Action
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 43
USE OF TRIGGERS
n AN EXAMPLE with standard Syntax.(Note : other
SQL implementations like PostgreSQL use a
different syntax.)
R5:
CREATE TRIGGER SALARY_VIOLATION
BEFORE INSERT OR UPDATE OF Salary, Supervisor_ssn ON
EMPLOYEE
FOR EACH ROW
WHEN (NEW.SALARY > ( SELECT Salary FROM EMPLOYEE
WHERE Ssn = NEW. Supervisor_Ssn))
INFORM_SUPERVISOR (NEW.Supervisor.Ssn, New.Ssn)
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 44
Views (Virtual Tables) in SQL
n Concept of a view in SQL
n Single table derived from other tables called the
defining tables
n Considered to be a virtual table that is not
necessarily populated
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 45
Specification of Views in SQL
n CREATE VIEW command
n Give table name, list of attribute names, and a query to
specify the contents of the view
n In V1, attributes retain the names from base tables. In
V2, attributes are assigned names
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 46
Specification of Views in SQL
(cont’d.)
n Once a View is defined, SQL queries can use the
View relation in the FROM clause
n View is always up-to-date
n Responsibility of the DBMS and not the user
n DROP VIEW command
n Dispose of a view
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 47
View Implementation, View Update,
and Inline Views
n Complex problem of efficiently implementing a view for
querying
n Strategy1: Query modification approach
n Compute the view as and when needed. Do not store
permanently
n Modify view query into a query on underlying base
tables, ex: query QV1 would be:
n Disadvantage: inefficient for views defined via complex
queries that are time-consuming to execute
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 48
View Materialization
n Strategy 2: View materialization
n Physically create a temporary view table when the
view is first queried
n Keep that table on the assumption that other
queries on the view will follow
n Requires efficient strategy for automatically updating
the view table when the base tables are updated
n Incremental update strategy for materialized
views
n DBMS determines what new tuples must be inserted,
deleted, or modified in a materialized view table
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 49
View Materialization (contd.)
n Multiple ways to handle materialization:
n immediate update strategy updates a view as
soon as the base tables are changed
n lazy update strategy updates the view when
needed by a view query
n periodic update strategy updates the view
periodically (in the latter strategy, a view query
may get a result that is not up-to-date). This is
commonly used in Banks, Retail store operations,
etc.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 60
View Update
n A user can always issue a retrieval query against any view. However,
issuing an INSERT, DELETE, or UPDATE command on a view table
is in many cases not possible.
n Update on a view defined on a single table without any aggregate
functions
n Can be mapped to an update on underlying base table- possible if
the primary key is preserved in the view
n Update not permitted on aggregate views. E.g.,
UV2: UPDATE DEPT_INFO
SET Total_sal=100000
WHERE Dname=‘Research’;
cannot be processed because Total_sal is a computed value in the view
definition
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 51
View Update and Inline Views
n View involving joins
n Often not possible for DBMS to determine which
of the updates is intended
n Clause WITH CHECK OPTION
n Must be added at the end of the view definition if a
view is to be updated to make sure that tuples
being updated stay in the view
n In-line view
n Defined in the FROM clause of an SQL query (e.g.,
we saw its used in the WITH example)
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 62
Views as authorization mechanism
n SQL query authorization statements (GRANT and
REVOKE) are described in detail in Chapter 30
n Views can be used to hide certain attributes or
tuples from unauthorized users
n E.g., For a user who is only allowed to see
employee information for those who work for
department 5, he may only access the view
DEPT5EMP:
CREATE VIEW DEPT5EMP AS
SELECT *
FROM EMPLOYEE
WHERE Dno = 5;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 63
Schema Change Statements in SQL
n Schema evolution commands
n DBA may want to change the schema while the
database is operational
n Does not require recompilation of the database
schema
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 54
The DROP Command
n DROP command
n Used to drop named schema elements, such as
tables, domains, or constraint
n Drop behavior options:
n CASCADE and RESTRICT
n Example:
n DROP SCHEMA COMPANY CASCADE;
n This removes the schema and all its elements
including tables,views, constraints, etc.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 55
The ALTER table command
n Alter table actions include:
n Adding or dropping a column (attribute)
n Changing a column definition
n Adding or dropping table constraints
n Example:
n ALTER TABLE COMPANY.EMPLOYEE ADD
COLUMN Job VARCHAR(12);
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 56
Adding and Dropping Constraints
n Change constraints specified on a table
n Add or drop a named constraint
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 57
Dropping Columns, Default Values
n To drop a column
n Choose either CASCADE or RESTRICT
n CASCADE would drop the column from views etc.
RESTRICT is possible if no views refer to it.
ALTER TABLE COMPANY.EMPLOYEE DROP COLUMN
Address CASCADE;
n Default values can be dropped and altered :
ALTER TABLE COMPANY.DEPARTMENT ALTER COLUMN Mgr_ssn
DROP DEFAULT;
ALTER TABLE COMPANY.DEPARTMENT ALTER COLUMN Mgr_ssn
SET DEFAULT ‘333445555’;
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 68
Table 7.2 Summary of SQL
Syntax
continued on next slide
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 59
Table 7.2 (continued)
Summary of SQL Syntax
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 60
Summary
n Complex SQL:
n Nested queries, joined tables (in the FROM
clause), outer joins, aggregate functions, grouping
n Handling semantic constraints with CREATE
ASSERTION and CREATE TRIGGER
n CREATE VIEW statement and materialization
strategies
n Schema Modification for the DBAs using ALTER
TABLE , ADD and DROP COLUMN, ALTER
CONSTRAINT etc.
Copyright © 2016 Ramez Elmasri and Shamkant B. Navathe Slide 7- 61