Dbms Module 4 Chap 1 - 2024
Dbms Module 4 Chap 1 - 2024
MODULE 4
CHAPTER1:SQL(Advanced Queries)
SQL has various rules for dealing with NULL values. NULL is used to represent a missing value, but
that it usually has one of three different interpretations—value unknown (exists but is not known),value
not available (exists but is purposely withheld),or value not applicable (the attribute is undefined for this
tuple).
InTables5.1(a)and5.1(b),therowsandcolumnsrepresentthevaluesoftheresultsofcomparison
conditions,whichwouldtypicallyappear intheWHEREclauseofanSQLquery. Eachexpressionresult
IN operator:
Which is a comparison operator that compares a valuev with a set (or multiset) of values Vand
evaluates to TRUE if v is one of the elements in V.
ex: Query 17. Retrieve the Social Security numbers of all employees who work on project
numbers1, 2,or 3.
SQL allows the use of tuples of values in comparisons by placing them within parentheses. To
illustrate this, consider the following query:
SELECT DISTINCT Essn
FROM WORKS_ON WHERE (Pno ,Hours)IN(SELECT Pno, Hours
FROM WORKS_ONWHERE Essn=‘123456789’);
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. In this
example, the IN operator compares the subtuple of values in parentheses(Pno, Hours)with in each tuple
in WORKS_ON with the set of type- compatible tuples produced by the nested query.
In addition to the IN operator, a number of other comparison operators can be used to compare a
single value v (typically an attribute name) to a set or multiset v (typically a nested query).The = ANY
(or = SOME) operator returns TRUE if the value v is equal to some value in the set V and is hence
equivalent to IN. The two keywords ANY and SOME have the same effect. Other operators that can be
combined with ANY (or SOME) include >, >=,
<, <=, and <>. The keyword ALL can also be combined with each of these operators. For example, the
comparison condition (v>ALL V) returns TRUE if the value is greater than all the values in the set (or
multiset) V.
An example is the following query, which returns the names of employees whose salary is
greater than the salary of all the employees in department 5:
SELECT Lname, Fname
FROM EMPLOYEE WHERE Salary>ALL(SELECT Salary FROM
EMPLOYEEWHERE Dno=5 );
For example, we can think of below Query as follows: For each EMPLOYEE tuple, evaluate the nested
query, which retrieves the Essn values for all DEPENDENT tuples with the same sex and name as that
EMPLOYEE tuple; if the Ssn value of the EMPLOYEE tupleis in the result of the nested query,then
select that EMPLOYEE tuple.
In general query written with nested select-from-where blocks and using the = or IN comparison
operators can always be expressed as a single block query. For example,Q16 maybe written as inQ16A:
Q16A:SELECTE.Fname,E.Lname
FROMEMPLOYEEASE,DEPENDENTASD
WHEREE.Ssn=D.EssnANDE.Sex=D.SexANDE.Fname=D.Dependent_name;
TheEXISTSandUNIQUEFunctionsinSQL
In Q6, the correlated nested query retrieves all DEPENDENT tuples related to a particular
EMPLOYEE tuple. If none exist, the EMPLOYEE tuple is selected because the WHERE-clause
condition will evaluate to TRUE in this case. We can explain Q6 as follows: For each EMPLOYEE
tuple, the correlated nested query selects all DEPENDENT tuples whose Essn value matches the
EMPLOYEE Ssn; if the result isempty, no dependents are related to the employee, so we select that
EMPLOYEE tuple and retrieve its Fname and Lname.
Explicit Sets and Renaming of Attributes in
SQL Explicit Sets
We have seen several ueries with a nested query in the WHERE clause.It is also possibletouse
an explicitset of values in the WHERE clause, rather than a nested query.Such a set is enclosed in
parentheses in SQL.
Query17.RetrievetheSocialSecuritynumbersofallemployeeswhoworkonproject numbers 1,2,or3.
SELECT DISTINCT Essn FROM WORKS_ON WHERE Pno IN(1,2,3);
Renaming of Attributes
In SQL,it is possible to rename any attribute that appears in the result of a query by adding the
qualifier AS followed by the desired new name. Hence, the AS construct can be used to alias both
attribute and relation names ,and it can be used in both the SELECT and FROM clauses.
For example, to retrieve the last name of each employee and his or her supervisor,while
renamingtheresultingattributenamesasEmployee_nameandSupervisor_name.Thenewnameswill appear as
column headers in the query result.
SELECT E.Lname AS Employee_name, S.Lname AS
Supervisor_name FROM EMPLOYEEAS E,
EMPLOYEE AS S
WHEREE. Super_ssn=S.Ssn;
The default type of join in a joined table is called an inner join, where a tuple is included in
the result only if a matching tuple exists in the other relation
There are a variety of outer joinoperations.
1) LEFTOUTER JOIN (every tuple in the left table must appear in the result;if it
does not haveamatchingtuple,it ispaddedwithNULLvalues for theattributesofthe
right table).
2) RIGHTOUTERJOIN(everytupleinthe righttablemustappearinthe result;if
itdoesnothavea matchingtuple,it is padded withNULLvalues for theattributes of the
left table).
3) FULLOUTERJOIN:Itisacombinationofleftandrightouterjoins.
In the latter three options, the keyword OUTER may be omitted.If the join attributes have the
same name,one can also specify the natural join variation of outer joins by using the keyword
NATURAL before the operation (for example, NATURAL LEFT OUTER JOIN).
The keyword CROSS JOIN is used to specify the CARTESIAN PRODUCT
operationalthoughthis shouldbeused only withtheutmost carebecauseit generates allpossible
tuplecombinations.
It is also possible to nest join specifications; that is, one of the tables in a join may itself be a
joined table. This allows the specification of the join of three or more tables as a single joined
table,which is called a multiway join.
Not all SQL implementations have implemented the new syntax of joined tables. In some systems, a
different syntax was used to specify outer joins by using the comparison operators+=, =+, and +=+ for
left, right, and full outer join, respectively, when specifying the join condition .For example, this syntax
is available in Oracle. To specify the left outer join using this syntax, we could write the query as
follows:
SELECTE. Lname, S.Lname
FROM EMPLOYEEE,EMPLOYEES
WHERE E.Super_ssn+=S.Ssn;
If we want to get the preceding function values for employees of a specific department—say, the
‘Research’ department—we can write Query 20, where the EMPLOYEE tuples are restricted by the
WHERE clause to those employees who work for the ‘Research’department.
Query 20. Find the sum of the salaries of all employees of the ‘Research’ department, as
well as the maximum salary,the minimum salary,and the average salary in this department.
SELECT SUM (Salary), MAX (Salary), MIN (Salary),
AVG(Salary)FROM(EMPLOYEEJOINDEPARTMENT
AND no=Dnumber)
WHERE Dname=‘Research’;
Queries 21 and 22. Retrieve the total number ofemployees inthe company (Q21) and the number
of employees in the ‘Research’ department (Q22).
will not be counted .In general, NULL values are discarded when aggregate functions are applied to a
particular column (attribute).
Grouping: The GROUP BY and HAVING Clauses
GROUP BY clause
SQLhasaGROUPBYclause.TheGROUPBYclausespecifiesthegroupingattributes,which should also
HAVINGclause
SQL provides a HAVING clause,which can appear in conjunction with a GROUPBY clause. HAVING
provides a condition on the summary information regarding the group of tuples associated with each
value of the grouping attributes. Only the groups that satisfy the condition are retrieved in the result of
the query.This is illustrated by Query 26.
In order to formulate queries correctly, it is useful to consider the steps that define the meaning or
semantics of each query. A query is evaluated conceptually by first applying the FROMclause (to
identify all tables involved in the query or to materialize any joined tables), followed by the WHERE
clause to select and join tuples, and then by GROUP BY and HAVING. Conceptually, ORDER BY is
applied at the end to sort the query result.
Specifying Constraints as Assertions and Actions as Triggers
Inthis section,we introduce two additional featuresofSQL:theCREATEASSERTION
Statement and the
CREATE TRIGGER statement.
CREATE ASSERTION, which can be used to specify additional types of constraints that are
outside the scope of the built-in relational model constraints (primary and unique keys, entity integrity,
and referential integrity)that we presented early.
CREATE TRIGGER,which can be used to specify automatic actions that the database system
will perform when certain events and conditions occur.This typeof functionality is generally referred to
as active databases.
The basic technique for writing such assertions is to specify a query that selects any tuples that violate
the desired condition. By including this query inside a NOT EXISTS clause, the assertion will specify
that the result of this query must be empty so that the condition will always be TRUE. Thus,the
assertion is violated if the result of the query is not empty .In the preceding example,the query selects all
employees whose salaries are greater than the salary of the manager of their department. If the result of
the query is not empty,the assertion is violated.
Trigger: Events
Three event types
⚫ Insert
⚫ Update
⚫ Delete
Two triggering times
⚫ Before the event
⚫ After the event
Trigger:Action
Example1
Views (virtualtable)inSQL
Concept of a View in SQL
A view is a single table that is derived from one or more base tables or other views
Views neither exist physically nor contain data itself,it depends on the base tables for its
existence
A view contains rows and columns, just like a real table.The fields in a view are fields
from one or more real tables in the database.
Specification of Views in SQLSyntax:
CREATE VIEW view_name AS SELECT column_name (s)FROM
table_name WHERE condition
Example
CREATEVIEWWORKS_ON1
AS SELECT Fname, Lname, Pname, Hours
FROM EMPLOYEE, PROJECT,WORKS_ON
WHERE Ssn=Essn AND Pno=Pnumber;
We can specify SQL queries on view
Example #
Retrieve the Last name and First name of all employees who work on ‘Product X’
SELECT
Fname,
Lname
FROM
WO RKS_ON1
WHERE Pname=‘ProductX’;
A view always shows up-to-date
If we modify the tuples in the base tables on which the view is defined, theview must
Automatically reflect these changes
If we do not need a view any more, we can use the DROPVIEW command
DROPVIEW WORKS_ON1;
View Materialization
Physically create a temporary view table when the view is first queried
Keep that table on the assumption that other queries on the view will follow
Requires efficient strategy for automatically updating the view table when the base tables are
updated, that is Incremental Update
Incremental Update determines what new tuples must be inserted, deleted, or modified in a
materialized view table when a change is applied to one of the defining base table
View Update
Updating of views is complicated and can be ambiguous
An update on view defined on a single table without any aggregate functions can be mapped to
an update on the underlying base table under certain conditions.
View involving joins, an update operation may be mapped to update operations on the
underlying base relations in multiple ways.
Example
Update the Pname attribute of‘ johnsmith’ from‘ Product X’
to ‘Product Y’UPDATE WORKS_ON1
SET Pname=‘ProductY’
WHERE Lname=‘smith’
AND Fname=‘john’ AND Pname
= ‘ProductX’
This query can be mapped into several updates on the base relations to give the desired effect
on the view.
Two possible updates (a)and(b)on the base relations corresponding to above query.
(a) UPDATE WORKS_ON
SET Pno= (SELECT
PnumberFROMPROJECT
WHERE Pname=‘ProductY’)
WHERE EssnIN(SELECTSsn
FROMEMPLOYEE
WHERELname=‘smith’ANDFname=‘john’)
AND
Pno=(SELECT PnumberFROMPROJECT
WHERE Pname=‘ProductX’);
(b) UPDATE
PROJECT
SET
Pname=‘Pro
ductY’
WHEREPname=‘ProductX’;
In this section,we give an overview of the schema evolution commandsavailable in SQL, which can be
used to altera schema by adding or dropping tables, attributes, constraints, and other schema elements.
This can be done while the database is operational and does not require recompilation of the database
schema. Certain checks must be done by theDBMS to ensure that thechangesdo not affect therest of the
database and make it inconsistent.
TheDROPCommand
The DROP command can be used to drop named schemaelements, such as tables, domains, or
constraints.
One can also drop a schema. For example, if a whole schema is no longer needed, the DROP
SCHEMA command can be used. There are two drop behavior options: CASCADE and RESTRICT.
For example, toremovetheCOMPANYdatabaseschema andallitstables, domains, andother elements, the
CASCADE option is used as follows:
DROPSCHEMACOMPANYCASCADE;
If the RESTRICToption is chosen in place of CASCADE,the schema is dropped only if it has no
elements in it; otherwise, the DROP command will not be executed. To use the RESTRICT option, the
user must first individually drop each element intheschema,then drop theschema itself.
DROPTABLECOMMAND:
If a base relation within a schema is no longer needed,the relation and its definition can be deleted by
using the DROP TABLE command. For example, if we no longer wish to keep track of dependents of
employees in the COMPANY .we can get rid of the DEPENDENT relation by issuing the following
command:
DROPTABLEDEPENDENTCASCADE;
If the RESTRICT option is chosen instead of CASCADE, a table is dropped only if it is not referenced
inanyconstraints(forexample,byforeignkeydefinitionsinanotherrelation)orviewsorbyanyother
We must still enter a value for the new attribute Job for each individual EMPLOYEE tuple. This can be done
either byspecifyinga default clauseor byusingtheUPDATE commandindividuallyoneachtuple.Ifnodefault clause
is specified, the new attribute will have NULLs in all the tuples of the relation immediately after the command is
executed; hence, theNOT NULL constraint is not allowed in this case.