0% found this document useful (0 votes)
44 views20 pages

ch4 2

rhzggebsdxc
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views20 pages

ch4 2

rhzggebsdxc
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 20

Null Values

 It is possible for tuples to have a null value for some of their


attributes
 The predicate ‘is null’ can be used to check for null values.
 E.g. Find all loan number which appear in the loan relation with
null values for amount.
select loan-number
from loan
where amount is null
 The result of any arithmetic expression involving null is null
 E.g. 5 + null returns null

Database System Concepts 4.1 ©Silberschatz, Korth and Sudarshan


Null Values and Three Valued Logic
 Any comparison with null returns unknown
 E.g. 5 < null or null <> null or null = null
 Three-valued logic using the truth value unknown
 OR: (unknown or true) = true
(unknown or false) = unknown
(unknown or unknown) = unknown
 AND: (true and unknown) = unknown
(false and unknown) = false
(unknown and unknown) = unknown
 NOT: (not unknown) = unknown
 “P is unknown”
If predicate P evaluates to unknown  true
 where clause predicate
 If evaluates to unknown  false

Database System Concepts 4.2 ©Silberschatz, Korth and Sudarshan


Null Values and Aggregates
 Total all loan amounts

select sum (amount)


from loan
 Above statement ignores null amounts
 Result is null  If there is no non-null amount
 All aggregate operations except count(*) ignore tuples with null
values on the aggregated attributes.
 The count of an empty collection is defined to be 0. All other
aggregates return null value.

Database System Concepts 4.3 ©Silberschatz, Korth and Sudarshan


Nested Subqueries
 SQL provides a mechanism for the nesting of subqueries.
 A subquery is a select-from-where expression that is nested
within another query.
 A common use of subqueries is to perform tests for
 Set membership
 Set comparisons
 Set cardinality

Database System Concepts 4.4 ©Silberschatz, Korth and Sudarshan


Set Membership
 Find all customers who have both an account and a loan at the
bank.
select distinct customer-name
from borrower
where customer-name in (select customer-name
from depositor)
 Find all customers who have a loan at the bank but do not have
an account at the bank
select distinct customer-name
from borrower
where customer-name not in (select customer-name
from depositor)

Database System Concepts 4.5 ©Silberschatz, Korth and Sudarshan


Membership in Arbitrary Relation
 Find all customers who have both an account and a loan at the
Perryridge branch
select distinct customer-name
from borrower, loan
where borrower.loan-number = loan.loan-number and
branch-name = “Perryridge” and
(branch-name, customer-name) in
(select branch-name, customer-name
from depositor, account
where depositor.account-number =
account.account-number)
 in and not in can used on enumerate sets.
 Find all customers who have a loan at the bank, and whose names
are neither Smith nor Jones
select distinct customer-name
from borrower
where customer-name not in (‘Smith’, ‘Jones’)

Database System Concepts 4.6 ©Silberschatz, Korth and Sudarshan


Set Comparison
 Find all branches that have greater assets than some branch
located in Brooklyn.
select distinct T.branch-name
from branch as T, branch as S
where T.assets > S.assets and
S.branch-city = ‘Brooklyn’
  using ‘> some’ clause

select branch-name
from branch
where assets > some
(select assets
from branch
where branch-city = ‘Brooklyn’)

Database System Concepts 4.7 ©Silberschatz, Korth and Sudarshan


Definition of Some Clause
 F <comp> some r t r s.t. (F <comp> t)
where <comp> can be <, <=, >=, =, <>

0 0
(5< some 5 ) = true (5< some ) = false
5
6
0 (5 <> some
0
(5 = some ) = true ) = true
5 5

 ‘= some’ is identical to in
 ‘<> some’ is not the same as not in

Database System Concepts 4.8 ©Silberschatz, Korth and Sudarshan


Definition of All Clause

 F <comp> all r t r (F <comp> t)

0 6
(5< all 5 ) = false (5< all ) = true
10
6
4 4
(5 = all ) = false (5  all ) = true
5 6

 ‘<> all’ is identical to not in

Database System Concepts 4.9 ©Silberschatz, Korth and Sudarshan


Example Query
 Find the names of all branches that have greater assets than all
branches located in Brooklyn.
select branch-name
from branch
where assets > all
(select assets
from branch
where branch-city = ‘Brooklyn’)

Database System Concepts 4.10 ©Silberschatz, Korth and Sudarshan


Test for Empty Relations
 The exists construct returns the value true if the argument
subquery is nonempty.
 exists r  r  Ø
 not exists r  r = Ø
 Find all customers who have both an account and a loan at the
bank
select customer-name
from borrower
where exists (select *
from depositor
where depositor.customer-name =
borrower.customer-name)

Database System Concepts 4.11 ©Silberschatz, Korth and Sudarshan


Example Query
 Find all customers who have an account at all branches located
in Brooklyn.
select distinct S.customer-name
from depositor as S
where not exists (
(select branch-name
from branch
where branch-city = ‘Brooklyn’)
except
(select R.branch-name
from depositor as T, account as R
where T.account-number = R.account-number and
S.customer-name = T.customer-name))

Database System Concepts 4.12 ©Silberschatz, Korth and Sudarshan


Test for Absence of Duplicate Tuples
 The unique construct tests whether a subquery has any
duplicate tuples in its result.

Database System Concepts 4.13 ©Silberschatz, Korth and Sudarshan


Example Query
 Find all customers who have at most one account at the Perryridge
branch.
select T.customer-name
from depositor as T
where unique (
select R.customer-name
from account, depositor as R
where T.customer-name = R.customer-name and
R.account-number = account.account-number and
account.branch-name = ‘Perryridge’)
 Find all customers who have at least two accounts at the Perryridge
branch.
select distinct T.customer-name
from depositor T
where not unique (
select R.customer-name
from account, depositor as R
where T.customer-name = R.customer-name and
R.account-number = account.account-number and
account.branch-name = ‘Perryridge’)
Database System Concepts 4.14 ©Silberschatz, Korth and Sudarshan
Views
 Provide a mechanism to hide certain data from the view of
certain users.
 To create a view:

create view v as <query expression>


where
 <query expression> : any legal expression
 v : view name
 To delete a view:

drop view v

Database System Concepts 4.15 ©Silberschatz, Korth and Sudarshan


Example Query
 A view consisting of branches and their customers
create view all-customer as
(select branch-name, customer-name
from depositor, account
where depositor.account-number = account.account-number)
union
(select branch-name, customer-name
from borrower, loan
where borrower.loan-number = loan.loan-number)

 Find all customers of the Perryridge branch

select customer-name
from all-customer
where branch-name = ‘Perryridge’

Database System Concepts 4.16 ©Silberschatz, Korth and Sudarshan


Complex Queries
 Two ways of composing multiple SQL blocks to express a
complex query:
 derived relations
 with clause

Database System Concepts 4.17 ©Silberschatz, Korth and Sudarshan


Derived Relations
 SQL allows a subquery expression to be used in the from clause
 Find the average account balance of those branches where the
average account balance is greater than $1200.
select branch-name, avg-balance
from (select branch-name, avg (balance)
from account
group by branch-name)
as result (branch-name, avg-balance)
where avg-balance > 1200

Database System Concepts 4.18 ©Silberschatz, Korth and Sudarshan


With Clause
 with clause allows views to be defined locally to a query, rather
than globally.
 Find all accounts with the maximum balance
with max-balance(value) as
select max(balance)
from account
select account-number
from account, max-balance
where account.balance = max-balance.value

Database System Concepts 4.19 ©Silberschatz, Korth and Sudarshan


Example Query
 Find all branches where the total account deposit is greater than
the average of the total account deposits at all branches

with branch-total (branch-name, value) as


select branch-name, sum (balance)
from account
group by branch-name
with branch-total-avg(value) as
select avg (value)
from branch-total
select branch-name
from branch-total, branch-total-avg
where branch-total.value >= branch-total-avg.value

Database System Concepts 4.20 ©Silberschatz, Korth and Sudarshan

You might also like