1. sql header of tables: –head(custoemrs) = (cid, cname, city, discnt) –head(orders) = (ordno,...
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.