Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
60 views

Chapter 06 SQL (Advanced)

Uploaded by

Mireia Artesero
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
60 views

Chapter 06 SQL (Advanced)

Uploaded by

Mireia Artesero
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 38

CHAPTER 06

Complex Queries

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 1


Chapter 6 Outline
 More Complex SQL Retrieval Queries

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 3


More Complex SQL Retrieval
Queries
 Additional features allow users to specify more
complex retrievals from database:
 Nested queries, joined tables, and outer joins (in
the FROM clause), aggregate functions, and
grouping

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 4


Comparisons Involving NULL

 SQL allows queries that check whether an


attribute value is NULL
 IS or IS NOT NULL

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 7


Nested Queries, Tuples,
and Set/Multiset Comparisons
 Nested queries
 Complete select-from-where blocks within WHERE
clause of another query
 Outer query and nested subqueries
 Comparison operator IN
 Compares value v with a set (or multiset) of values
V
 Evaluates to TRUE if v is one of the elements in V

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 8


Nested Queries (cont’d.)

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 9


Nested Queries (cont’d.)
 Use tuples of values in comparisons
 Place them within parentheses

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 10


Nested Queries (cont’d.)
 Use other comparison operators to compare a
single value v
 = 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
 Other operators that can be combined with ANY (or
SOME): >, >=, <, <=, and <>
 ALL: value must exceed all values from nested
query

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 11


Nested Queries (cont’d.)
 Avoid potential errors and ambiguities
 Create tuple variables (aliases) for all tables
referenced in SQL query

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 9


Correlated Nested Queries
 Queries that are nested using the = or IN
comparison operator can be collapsed into one
single block: E.g., Q16 can be written as:

 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;
 Correlated nested query
 Evaluated once for each tuple in the outer query

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 13


The EXISTS and UNIQUE Functions
in SQL for correlating queries
 EXISTS function
 Check whether the result of a correlated nested
query is empty or not. They are Boolean functions
that return a TRUE or FALSE result.
 EXISTS and NOT EXISTS
 Typically used in conjunction with a correlated
nested query
 SQL function UNIQUE(Q)
 Returns TRUE if there are no duplicate tuples in
the result of query Q

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 14


USE of EXISTS

Q7:

SELECT Fname, Lname


FROM Employee
WHERE EXISTS (SELECT *
FROM DEPENDENT
WHERE Ssn= Essn)

AND EXISTS (SELECT *


FROM Department
WHERE Ssn= Mgr_Ssn)

Copyright © 2017 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 16
Double Negation to accomplish “for
all” in SQL
 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 14


Explicit Sets and Renaming of
Attributes in SQL
 Can use explicit set of values in WHERE clause
Q17: SELECT DISTINCT Essn
FROM WORKS_ON
WHERE Pno IN (1, 2, 3);
 Use qualifier AS followed by desired new name
 Rename any attribute that appears in the result of
a query

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 18


Specifying Joined Tables in the
FROM Clause of SQL
 Joined table
 Permits users to specify a table resulting from a
join operation in the FROM clause of a query
 The FROM clause in Q1A
 Contains a single joined table. JOIN may also be
called INNER JOIN

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 19


Different Types of JOINed Tables in
SQL
 Specify different types of join
 NATURAL JOIN
 Various types of OUTER JOIN (LEFT, RIGHT,
FULL )
 NATURAL JOIN on two relations R and S
 No join condition specified
 Is equivalent to an implicit EQUIJOIN condition for
each pair of attributes with same name from R and
S

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 20


NATURAL JOIN
 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 18


INNER and OUTER Joins
 INNER JOIN (versus OUTER JOIN)
 Default type of join in a joined table

 Tuple is included in the result only if a matching tuple exists in

the other relation


 LEFT OUTER JOIN
 Every tuple in left table must appear in result

 If no matching tuple

 Padded with NULL values for attributes of right table

 RIGHT OUTER JOIN


 Every tuple in right table must appear in result

 If no matching tuple

 Padded with NULL values for attributes of left table

Copyright © 2017 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 20


Multiway JOIN in the FROM clause
 FULL OUTER JOIN – combines result if LEFT
and RIGHT OUTER JOIN
 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 21


Aggregate Functions in SQL
 Used to summarize information from multiple
tuples into a single-tuple summary
 Built-in aggregate functions
 COUNT, SUM, MAX, MIN, and AVG
 Grouping
 Create subgroups of tuples before summarizing
 To select entire groups, HAVING clause is used
 Aggregate functions can be used in the SELECT
clause or in a HAVING clause

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 22


Renaming Results of Aggregation
 Following query returns a single row of computed values
from EMPLOYEE table:

Q19: SELECT SUM (Salary), MAX (Salary), MIN (Salary),


AVG (Salary)
FROM EMPLOYEE;
 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 23


Aggregate Functions in SQL (cont’d.)
 NULL values are discarded when aggregate
functions are applied to a particular column

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 24


Aggregate Functions on Booleans
 SOME and ALL may be applied as functions on
Boolean Values.
 SOME returns true if at least one element in the
collection is TRUE (similar to OR)
 ALL returns true if all of the elements in the
collection are TRUE (similar to AND)

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 25


Grouping: The GROUP BY Clause
 Partition relation into subsets of tuples
 Based on grouping attribute(s)
 Apply function to each such group independently
 GROUP BY clause
 Specifies grouping attributes
 COUNT (*) counts the number of rows in the
group

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 26


Examples of GROUP BY
 The grouping attribute must appear in the SELECT clause:
Q24: SELECT Dno, COUNT (*), AVG (Salary)
FROM EMPLOYEE
GROUP BY Dno;
 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)
 GROUP BY may be applied to the result of a JOIN:
Q25: SELECTPnumber, Pname, COUNT (*)
FROM PROJECT, WORKS_ON
WHERE Pnumber=Pno
GROUP BY Pnumber, Pname;

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 27


Grouping: The GROUP BY and
HAVING Clauses (cont’d.)
 HAVING clause
 Provides a condition to select or reject an entire
group:
 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 31


Combining the WHERE and the
HAVING Clause
 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.

 INCORRECT QUERY:
SELECT Dno, COUNT (*)
FROM EMPLOYEE
WHERE Salary>40000
GROUP BY Dno
HAVING COUNT (*) > 5;

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 29


Combining the WHERE and the
HAVING Clause (continued)
Correct Specification of the Query:
Note: the WHERE clause applies tuple by tuple

whereas HAVING applies to entire group of tuples

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 30


Use of WITH
 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)
 Used for convenience to create a temporary
“View” and use that immediately in a query
 Allows a more straightforward way of looking a
step-by-step query

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 31


Example of WITH
 See an alternate approach to doing Q28:
 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 © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 32


Use of CASE
 SQL also has a CASE construct
 Used when a value can be different based on
certain conditions.
 Can be used in any part of an SQL query where a
value is expected
 Applicable when querying, inserting or updating
tuples

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 33


EXAMPLE of use of CASE
 The following example shows that employees are
receiving different raises in different departments
(A variation of the update U6)

 U6’: UPDATE EMPLOYEE


SET Salary =
CASE WHEN Dno = 5THEN Salary + 2000
WHEN Dno = 4THEN Salary + 1500
WHEN Dno = 1THEN Salary + 3000

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 34


EXPANDED Block Structure of SQL
Queries

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 40


Table 7.2 Summary of SQL
Syntax

continued on next slide

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 59


Table 7.2 (continued)
Summary of SQL Syntax

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 60


Summary
 Complex SQL:
 Nested queries,
 joined tables (in the FROM clause),
 outer joins,
 aggregate functions,
 grouping

Copyright © 2017 Ramez Elmasri and Shamkant B. Navathe Slide 7- 61

You might also like