0% found this document useful (0 votes)
8 views18 pages

Lab 2

The document provides a tutorial on MySQL with a focus on a banking database example, detailing the structure of tables such as branch, customer, account, loan, depositor, borrower, and employee. It includes SQL commands for creating tables, accessing MySQL, executing queries, performing set operations, using aggregate functions, and modifying the database. Additionally, it discusses joined relations and provides examples of various SQL operations related to the banking context.
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)
8 views18 pages

Lab 2

The document provides a tutorial on MySQL with a focus on a banking database example, detailing the structure of tables such as branch, customer, account, loan, depositor, borrower, and employee. It includes SQL commands for creating tables, accessing MySQL, executing queries, performing set operations, using aggregate functions, and modifying the database. Additionally, it discusses joined relations and provides examples of various SQL operations related to the banking context.
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/ 18

MySQL Tutorial (2)

Introduction to Database
Banking Example
branch (branch-name, branch-city, assets)

customer (customer-name, customer-street,


customer-city)

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

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

depositor (customer-name, account-number)

borrower (customer-name, loan-number)

employee (employee-name, branch-name, salary)


SQL Script for creating
tables
 The SQL script for creating database
‘bank’ can be found at

http://www.cs.kent.edu/~nruan/bank_db.sql
http://www.cs.kent.edu/~nruan/bank_data.sql

Notice: we do not have permission to create database,


so you have to type command “use [your_account]” to
work on your database.
Command for accessing
MySQL
 Access linux server
>ssh hercules.cs.kent.edu

 Access MySQL
>mysql –u [username] –p
>Enter password:[password]
Query
 To find all loan number for loans made at the Perryridge
branch with loan amounts greater than $1100.

select loan_number from loan


where branch_name = ‘Perryridge’ and amount>1100;

 Find the loan number of those loans with loan amounts


between $1,000 and $1,500 (that is, $1,000 and $1,500)

select loan_number from loan


where amount between 1000 and 1500;
Query
 Find the names of 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’;

 Find the customer names and their loan numbers for all customers
having a loan at some branch.

select customer_name, T.loan_number, S.amount


from borrower as T, loan as S
where T.loan_number = S.loan_number;
Set Operation
 Find all customers who have a loan, an account, or both:

(select customer_name from depositor)


union
(select customer_name from borrower);

 Find all customers who have an account but no loan.


(no minus operator provided in mysql)
select customer_name from depositor
where customer_name not in
(select customer_name from borrower);
Aggregate function
 Find the number of depositors for each branch.

select branch_name, count (distinct customer_name)


from depositor, account
where depositor.account_number = account.account_number
group by branch_name;

 Find the names of all branches where the average account


balance is more than $500.

select branch_name, avg (balance)


from account
group by branch_name
having avg(balance) > 500;
Nested Subqueries
 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);
Nested Subquery
 Find the names of all branches that have greater assets
than all branches located in Horseneck.

select branch_name
from branch
where assets > all
(select assets
from branch
where branch_city = ‘Horseneck’);
Create View (new feature in
mysql 5.0)
 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);
Joined Relations
 Join operations take two relations and return as a result
another relation.
 These additional operations are typically used as subquery
expressions in the from clause
 Join condition – defines which tuples in the two relations
match, and what attributes are present in the result of the join.
 Join type – defines how tuples in each relation that do not
match any tuple in the other relation (based on the join
condition) are treated.
Joined Relations – Datasets for
Examples

 Relation loan  Relation borrower

 Note: borrower information missing for L-260 and loan


information missing for L-155
Joined Relations – Examples

 Select * from loan inner join borrower on


loan.loan-number = borrower.loan-number

loan-number branch-name amount customer-name loan-number

L-170 Downtown 3000 Jones L-170


L-230 Redwood 4000 Smith L-230
Example

 Select * from loan left join borrower on


loan.loan-number = borrower.loan-number

loan-number branch-name amount customer-name loan-number

L-170 Downtown 3000 Jones L-170


L-230 Redwood 4000 Smith L-230
L-260 Perryridge 1700 null null
Modification of Database
 Increase all accounts with balances over $800 by 7%, all
other accounts receive 8%.

update account
set balance = balance  1.07
where balance > 800;

update account
set balance = balance  1.08
where balance  800;
Modification of Database
 Increase all accounts with balances over $700 by 6%, all
other accounts receive 5%.

update account
set balance =case
when balance <= 700 then balance *1.05
else balance * 1.06
end;
Modification of Database
 Delete the record of all accounts with balances below the
average at the bank.
delete from account
where balance < (select avg (balance) from account);

 Add a new tuple to account

insert into account


values (‘A-9732’, ‘Perryridge’,1200);

You might also like