1. sql header of tables: –head(custoemrs) = (cid, cname, city, discnt) –head(orders) = (ordno,...

21
1. SQL • Header of tables: – Head(Custoemrs) = (cid, cname, city, discnt) – Head(Orders) = (ordno, month, cid, pid, qty, dollars) – Head(Products) = (pid, pname, city, quantity, price) – Head(Agents) = (aid, aname, city, percent)

Upload: cuthbert-cummings

Post on 01-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

1. SQL

• Header of tables:– Head(Custoemrs) = (cid, cname, city, discnt)– Head(Orders) = (ordno, month, cid, pid, qty,

dollars)– Head(Products) = (pid, pname, city, quantity,

price)– Head(Agents) = (aid, aname, city, percent)

1.1 SQL basic - projection

• List all customer name

• Select cname from customers

• Select distinct cname from customers

1.1 SQL basic - where

• List all customers who live in Dallas– Select cid, cname from customers where city

= 'Dallas'

• List all customers who live in Dallas and discount is bigger than 5.– Select cid, cname from customers where city

= ‘Dallas’ and discnt > 5

1.1 SQL basic - join

• List all customer (cid and cname) who ordered comb– Select distinct c.cid, c.cname from customers

c, products p, orders o where c.cid = o.cid and p.pid = o.pid and p.pname = 'comb'

• List all agents (aid, aname) who have customers who live in ‘Dallas’– Select distinct a.aid, a.aname from customers

c, agents a, orders o where c.cid = o.cid and a.aid = o.aid and c.city = 'Dallas'

1.1 SQL basic - group by

• List the total order amount (dollars) of each customer (cid)– Select cid, sum(dollars) from orders group by

cid

• List total order amount (dollars) of each customer (cid, cname)– Select o.cid, c.cname, sum(o.dollars) from

customers c, orders o where c.cid = o.cid group by o.cid , c.cname

1.1 SQL basic - group by

• List total order amount (dollars) of each customer (cid, cname) whose total order amount is more than 1500– Select o.cid, c.cname, sum(o.dollars) as

total_sales from customers c, orders o where c.cid = o.cid group by o.cid, c.cname having sum(dollars) > 1500

1.2 SQL advanced - join

• For each agent (aid, aname) count the number of customers who place orders with them.– Select a.aid, a.aname, count(cid) as

number_of_customers from agents a, orders o where a.aid = o.aid group by a.aid, a.aname

1.2 SQL advanced - join

• For each agent (aid, aname) count the number of customers who place orders with them. If an agent does not have any orders with any customer, his/her info should also be included in the result.– Select a.aid, a.aname, count(cid) as

number_of_customers from agents a left join orders o on a.aid = o.aid group by a.aid, a.aname

1.2 SQL advanced – MAX/MIN

• List agents (aid, aname) who sold most products (dollars).– select a.aid, a.aname from agents a, orders o

where a.aid = o.aid group by a.aid, aname having sum(dollars) >= all (select sum(dollars) from orders group by aid )

1.2 SQL advanced – MAX/MIN

• List agents (aid, aname) who sold most products (dollars) in jan.– select a.aid, a.aname from agents a, orders o

where a.aid = o.aid and o.month = 'jan' group by a.aid, aname having sum(dollars) >= all (select sum(dollars) from orders where month = 'jan' group by aid)

1.2 SQL advanced – MAX/MIN

• List products (pid, pname) that are ordered most (qty) by customers who live in Dallas– select p.pid, p.pname from products p, orders o,

customers c – where p.pid = o.pid and c.cid = o.cid and c.city =

'Dallas'– group by p.pid, p.pname– having sum(qty) >= all – (select sum(qty) from orders o, customers c where

c.cid = o.cid and c.city = 'Dallas' group by o.pid)

1.2 SQL advanced – All

• List agents (aid, aname) who place orders with all customers in Dallas– Select a.aid, a.aname from agents a where

not exists (select * from customers c where c.city = 'dallas' and not exists (select * from orders o where o.cid = c.cid and o.aid = a.aid))

1.2 SQL advanced – All

• List customers (cid, cname) who order all the products produced in Newark– select c.cid, c.cname from customers c where

not exists (select * from products p where city = 'Newark' and not exists (select * from orders o where o.pid = p.pid and o.cid = c.cid))

2. Advance SQL topics

• Transact SQL

• Stored Procedure

• User Defined Function

• Cursor

• Trigger

• View

2.2 Stored Procedure

create proc count_customer_by_city@city char(10),@counter int outputas select @counter = count(*) from customers where city = @cityreturn

• declare @mycounter int• exec count_customer_by_city 'Dallas', @mycounter

output• select @mycounter

2.3 UDFcreate function total_dollars(@customerid char(4))returns moneyasbegin declare @sum money select @sum = sum(dollars) from orders where cid = @customerid return @sumEnd

• SELECT *, zhoupf.total_dollars(cid) as total_order_amount FROM customers

• select * from zhoupf.total_dollars('c001')• exec zhoupf.total_dollars('c001')

2.3 UDF• CREATE FUNCTION total_avg_orders (@customerid char(4) )• RETURNS @total_avg_orders_tab TABLE• (• total_order money,• avg_order money• )• AS• BEGIN• INSERT @total_avg_orders_tab• SELECT sum(dollars), avg(dollars)• FROM orders • WHERE cid = @customerid• RETURN• END

• select * from total_avg_orders('c001') //This is correct because the return value is a table

2.5 Trigger

• create table Boston_Customers (

• cid char(4) not null,

• cname varchar(15),

• city varchar(15), discnt decimal(10,2), primary key(cid) );

2.5 Trigger

• create trigger insert_customer• on customers• after insert• as• insert into Boston_customers select * from inserted I

where I.city = ‘Boston’

• insert into customers values ('c019', 'Tony', 'Boston', 16)• select * from boston_customers

3. ER diagram

• Entity (has attributes)

• Relationship (can also has attributes)– Many-to-many relationship– Many-to-one relationship– One-to-one relationship

3. ER diagram

• NU library– Each borrower has a borrower_id, name.– Each library staff has a staff_id, name.– Each (type) book has a ISBN, name, author,

number_of_copies.– Each borrower can borrow multiple books. Each

(type) of book can be borrowed by multiple borrowers.– When a borrower borrows a book from a staff, the

borrow date and return date will be recorded.