22
©Silberschatz, Korth and Sudarsha 5.1 Database System Concepts Enterprise

©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

Embed Size (px)

Citation preview

Page 1: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.1Database System Concepts

E-R Diagram for a Banking Enterprise

Page 2: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.2Database System Concepts

Rel. Schema for a Banking Enterprise

branch (branch-name, branch-city, assets)

customer (customer-name, customer-street, customer-only)

account (account-number, branch-name, balance)

loan (loan-number, branch-name, amount)

depositor (customer-name, account-number)

borrower (customer-name, loan-number)

Page 3: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.3Database System Concepts

The select Clause - distinct

SQL allows duplicates in relations as well as in query results.

To force the elimination of duplicates, insert the keyword distinct after select.

Find the names of all branches in the loan relations, and remove duplicates

select distinct branch_namefrom loan;

The keyword all specifies that duplicates not be removed.

select all branch_namefrom loan;

Page 4: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.4Database System Concepts

The where Clause

SQL includes a between comparison operator E.g. Find the loan number of those loans with loan

amounts between $900 and $1000 (that is, $900 and $1000)

First in Relational Algebra

select loan_numberfrom loanwhere amount between 900 and 1000;

loan_number (amount ≥ 900 AND amount ≤ 1000 (loan))

Page 5: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.5Database System Concepts

The from Clause

The from clause lists the relations involved in the query

corresponds to the Cartesian product operation of the relational algebra.

Find the Cartesian product borrower x loan

Find the name, loan number of all customers having a loan at the Perryridge branch. (Natural Join)

select customer_name, borrower.loan_numberfrom borrower, loanwhere borrower.loan_number = loan.loan_number

and branch_name = ‘Perryridge’;

customer_name,loan_number (branch_name = ‘Perryridge’ (borrower loan))

select from borrower, loan;

Page 6: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.6Database System Concepts

The Rename Operation

The SQL allows renaming relations and attributes using the as clause: old_name as new_name

Find the name and loan number of all customers; rename the column name loan_number as loan_id.

select customer_name, borrower.loan_number as loan_idfrom borrower, loanwhere borrower.loan_number = loan.loan_number;

select distinct T.branch_name from branch T, branch S where T.assets > S.assets and S.branch_city = ‘Brooklyn’;

Find the names of all branches that have greater assets than some branch located in Brooklyn.

Page 7: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.7Database System Concepts

String Operations SQL includes a string-matching operator for comparisons on character

strings. Patterns are described using two special characters:

percent (%). The % character matches any substring.

underscore (_). The _ character matches any character. Find the names of all customers whose street includes the substring

“Main”.

select customer_namefrom customerwhere customer_street like ‘%Main%’;

Match the name “Main%”

like ‘Main\%’ escape ‘\’ SQL supports a variety of string operations such as

concatenation (using “||”)

converting from upper to lower case (and vice versa)

finding string length, extracting substrings, etc.

Page 8: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.8Database System Concepts

Ordering the Display of Tuples

List in alphabetic order the names of all customers having a loan in Perryridge branch

select distinct customer_namefrom borrower, loanwhere borrower loan_number = loan.loan_number

and branch_name = ‘Perryridge’order by customer_name;

We may specify desc for descending order or asc for ascending order, for each attribute; ascending order is the default.

E.g. order by customer_name desc

Page 9: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.9Database System Concepts

Set Operations

The set operations union, intersect, and except operate on relations and correspond to the relational algebra operations

Each of the above operations automatically eliminates duplicates; to retain all duplicates use the corresponding multiset versions union all, intersect all and minus all.

Suppose a tuple occurs m times in r and n times in s, then, it occurs:m + n times in r union all s

min(m,n) times in r intersect all s

max(0, m – n) times in r minus all s

Page 10: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.10Database System Concepts

Set Operations

Find all customers who have a loan, an account, or both:

(select customer_name from depositor)minus(select customer_name from borrower);

(select customer_name from depositor)intersect(select customer_name from borrower);

Find all customers who have an account but no loan.

(select customer_name from depositor)union(select customer_name from borrower);

Find all customers who have both a loan and an account.

Page 11: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.11Database System Concepts

Aggregate Functions

These functions operate on the multiset of values of a column of a relation, and return a value

avg: average valuemin: minimum valuemax: maximum valuesum: sum of valuescount: number of values

Page 12: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.12Database System Concepts

Aggregate Functions - Group by

Find the number of depositors in the bank.select count (distinct customer_name)from depositor;

Find the number of depositors for each branch.

Note: Attributes in select clause outside of aggregate functions must appear in group by list

select branch_name, count (distinct customer_name)from depositor, accountwhere depositor.account_number = account.account_numbergroup by branch_name;

Page 13: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.13Database System Concepts

Aggregate Functions – Having Clause

Find the names of all branches where the average account balance is more than $1,200.

Note: predicates in the having clause are applied after the formation of groups whereas predicates in the where clause are applied before forming groups

select branch_name, avg (balance)from accountgroup by branch_namehaving avg (balance) > 1200;

Find the average account balance at the Perryridge branch.

select avg (balance)from accountwhere branch_name = ‘Perryridge’;

Page 14: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.14Database System Concepts

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, and set cardinality.

Page 15: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.15Database System Concepts

Example Query

Find all customers who have both an account and a loan at the bank.

Find all customers who have a loan at the bank but do not have an account at the bank

select distinct customer_namefrom borrowerwhere customer_name not in (select customer_name from depositor);

select distinct customer_namefrom borrowerwhere customer_name in (select customer_name from depositor);

Page 16: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.16Database System Concepts

Example Query

Find all customers who have both an account and a loan at the Perryridge branch

Note: Above query can be written in a much simpler manner. The formulation above is simply to illustrate SQL features.

select distinct customer_namefrom borrower, loanwhere borrower.loan_number = loan.loan_number and branch_name = “Perryridge” and (branch_name, customer_name) in

(select branch_name, customer_namefrom depositor, accountwhere depositor.account_number =

account.account_number);

Page 17: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.17Database System Concepts

Set Comparison

Find all branches that have greater assets than some branch located in Brooklyn.

Same query using > some clause

select branch_namefrom branchwhere assets > some

(select assetsfrom branchwhere branch_city = ‘Brooklyn’);

select distinct T.branch_namefrom branch as T, branch Swhere T.assets > S.assets and S.branch_city = ‘Brooklyn’;

Page 18: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.18Database System Concepts

Definition of Some Clause

F <comp> some r t r s.t. (F <comp> t)Where <comp> can be:

056

(5< some ) = true

05

0

) = false

5

05(5 some ) = true (since 0 5)

(read: 5 < some tuple in the relation)

(5< some

) = true(5 = some

(= some) inHowever, ( some) not in

Page 19: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.19Database System Concepts

Definition of all Clause

F <comp> all r t r (F <comp> t)

056

(5< all ) = false

610

4

) = true

5

46(5 all ) = true (since 5 4 and 5 6)

(5< all

) = false(5 = all

( all) not inHowever, (= all) in

Page 20: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.20Database System Concepts

Example Query

Find the names of all branches that have greater assets than all branches located in Brooklyn.

select branch_namefrom branchwhere assets > all

(select assetsfrom branchwhere branch_city = ‘Brooklyn’);

Page 21: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.21Database System Concepts

Test for Empty Relations

The exists construct returns the value true if the argument subquery is nonempty.

exists r r Ø not exists r r = Ø

Page 22: ©Silberschatz, Korth and Sudarshan5.1Database System Concepts E-R Diagram for a Banking Enterprise

©Silberschatz, Korth and Sudarshan5.22Database System Concepts

Example Query Find all customers who have an account at all branches

located in Brooklyn.select distinct S.customer_name

from depositor Swhere not exists (

(select branch_namefrom branchwhere branch_city = ‘Brooklyn’)

minus(select R.branch_namefrom depositor T, account Rwhere T.account_number = R.account_number and S.customer_name = T.customer_name));

Note that X – Y = Ø X Y Note: Cannot write this query using = all and its variants