Slide 1/32 UCSD CSE132B
CSE 132B
SQL as Query Language (Part I)
- !
- "#$%&'(
()*
CSE 132B SQL as Query Language (Part I) - - PowerPoint PPT Presentation
CSE 132B SQL as Query Language (Part I)
Slide 1/32 UCSD CSE132B
()*
Slide 2/32 UCSD CSE132B
– Ai represents an attribute, Ri represents a relation – P is a predicate.
2 1 , , ,
2 1
m P A A A
n
Slide 3/32 UCSD CSE132B
Slide 4/32 UCSD CSE132B
Slide 5/32 UCSD CSE132B
Slide 6/32 UCSD CSE132B
Slide 7/32 UCSD CSE132B
select loan_number from loan where amount between 90000 and 100000
Slide 8/32 UCSD CSE132B
Slide 9/32 UCSD CSE132B
Slide 10/32 UCSD CSE132B
Slide 11/32 UCSD CSE132B
Slide 12/32 UCSD CSE132B
Slide 13/32 UCSD CSE132B
– percent % or *: matches any substring. – underscore _ or ?: matches any character.
Slide 14/32 UCSD CSE132B
– concatenation (using “||”) – converting from upper to lower case (and vice versa) – finding string length, extracting substrings, etc.
Slide 15/32 UCSD CSE132B
Slide 16/32 UCSD CSE132B
(select customer_name from depositor) except (select customer_name from borrower) (select customer_name from depositor) intersect (select customer_name from borrower) (select customer_name from depositor) union (select customer_name from borrower)
Slide 17/32 UCSD CSE132B
Slide 18/32 UCSD CSE132B
Slide 19/32 UCSD CSE132B
select distinct customer_name from borrower where customer_name not in (select customer_name from depositor ) select distinct customer_name from borrower where customer_name in (select customer_name from depositor )
Slide 20/32 UCSD CSE132B
Note: This query can be written in a much simpler manner. The formulation below is simply to illustrate SQL features.
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 )
Slide 21/32 UCSD CSE132B
select branch_name from branch where assets > some (select assets from branch where branch_city = ‘Brooklyn’) select distinct T.branch_name from branch as T, branch as S where T.assets > S.assets and S.branch_city = ‘ Brooklyn’
Slide 22/32 UCSD CSE132B
(5 < some ) = true
) = false
(5 ≠ some ) = true (since 0 ≠ 5) (read: 5 < some tuple in the relation) (5 < some ) = true (5 = some
Slide 23/32 UCSD CSE132B
Slide 24/32 UCSD CSE132B
(5 < all ) = false
) = true
(5 ≠ all ) = true (5 < all ) = false (5 = all
(since 5 ≠ 4 and 5 ≠ 6)
Slide 25/32 UCSD CSE132B
select customer_name from borrower where exists (select * from depositor where depositor.customer_name = borrower.customer_name)
Slide 26/32 UCSD CSE132B
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 ))
For each customer, we need to check whether the set of all branches he has
an account contains the set of all branches in Brooklyn.
Note that X – Y = Ø ⇔
X ⊆ Y
Slide 27/32 UCSD CSE132B
Slide 28/32 UCSD CSE132B
Slide 29/32 UCSD CSE132B
Relation borrower and loan Note: borrower information missing for L-260 and loan information missing for L-155
Slide 30/32 UCSD CSE132B
Slide 31/32 UCSD CSE132B
Slide 32/32 UCSD CSE132B
select customer_name from (depositor natural full outer join borrower ) where account_number is null or loan_number is null