1> /* Advanced SQL Programming Fall 2002*/ 2> /* */ 3> /* In-class/take-home exercises, Oct. 14th */ 4> /* */ 5> use evelyn 1> /* */ 2> /* Which products shipped and when. */ 3> /* */ 4> select distinct p.prodnum, 5> substring(name, 1, 20), substring(description, 1, 30), 6> convert(char(10), shipdate, 101) 7> from product p, orderdetail od 8> where p.prodnum = od.prodnum 9> and description is not null 10> and shipdate is not null prodnum ----------- -------------------- ------------------------------ ---------- 1083 money master pers checking 01/05/1999 1105 home poll kit take the pulse of america 01/05/1999 1107 mortgage minder know where you stand 01/05/1999 1794 memory8 8 Meg mem 01/02/1999 2000 cook & book record your recipes 01/05/1999 2050 tax time 1995 edition 01/01/1999 2050 tax time 1995 edition 01/04/1999 2050 tax time 1995 edition 01/05/1999 2111 memory tripler 50% or more 01/03/1999 (9 rows affected) 1> /* */ 2> /* Products with higher prices than those sold by Above Avg Arts.*/ 3> select s.name Supplier, p.name Product, price 4> from product p, supplier s 5> where p.suppnum = s.suppnum 6> and price > any 7> (select price 8> from product p, supplier s 9> where p.suppnum = s.suppnum 10> and s.name = 'Above Average Arts') 11> order by price, s.name Supplier Product price -------------------- -------------------- ------------------------ Emu Sister Prdctns nt guru 20.00 Emu Sister Prdctns bug stories 20.00 Emu Sister Prdctns how multi is media? 20.00 Hi Finance! money master 29.00 Above Average Arts typing test 29.99 Above Average Arts blood & guts 29.99 Above Average Arts C++ for kids 39.99 Hi Finance! mortgage minder 39.99 TrendMaster star systems 39.99 Soft Stuff bugbane 49.00 Above Average Arts teach yourself greek 49.99 Hi Finance! tax time 49.99 Hi Finance! landlord logs 89.99 Total Recall memory tripler 119.99 Connectix Co. z_connector 149.00 Total Recall memory8 400.00 (16 rows affected) 1> /* */ 2> /* Products with higher price than any sold by Above Avg Arts.*/ 3> /* */ 4> select s.name Supplier, p.name Product, price 5> from product p, supplier s 6> where p.suppnum = s.suppnum 7> and price > all 8> (select price 9> from product p, supplier s 10> where p.suppnum = s.suppnum 11> and s.name = 'Above Average Arts') 12> order by price, s.name Supplier Product price -------------------- -------------------- ------------------------ Hi Finance! landlord logs 89.99 Total Recall memory tripler 119.99 Connectix Co. z_connector 149.00 Total Recall memory8 400.00 (4 rows affected) 1> /* */ 2> /* Products obtained from US suppliers: */ 3> /* */ 4> /* Using a join - */ 5> /* */ 6> select p.name, country 7> from product p, supplier s 8> where p.suppnum = s.suppnum 9> and country = 'USA' name country -------------------- -------------------- z_connector USA bugbane USA tax time USA money master USA mortgage minder USA landlord logs USA cook & book USA home poll kit USA star systems USA paper dolls USA more paper dolls USA typing test USA teach yourself greek USA blood & guts USA C++ for kids USA bug stories USA nt guru USA how multi is media? USA (18 rows affected) 1> /* */ 2> /* Using subquery with EXISTS - */ 3> /* */ 4> select name 5> from product p 6> where exists 7> (select * 8> from supplier s 9> where p.suppnum = s.suppnum 10> and country = 'USA') name -------------------- z_connector bugbane tax time money master mortgage minder landlord logs cook & book home poll kit star systems paper dolls more paper dolls typing test teach yourself greek blood & guts C++ for kids bug stories nt guru how multi is media? (18 rows affected) 1> /* */ 2> /* Using subquery without EXISTS - */ 3> /* */ 4> select name, suppnum 5> from product 6> where suppnum in 7> (select suppnum 8> from supplier 9> where country = 'USA') name suppnum -------------------- -------- z_connector 111 bugbane 222 tax time 444 money master 444 mortgage minder 444 landlord logs 444 cook & book 555 home poll kit 555 star systems 555 paper dolls 666 more paper dolls 666 typing test 666 teach yourself greek 666 blood & guts 666 C++ for kids 666 bug stories 777 nt guru 777 how multi is media? 777 (18 rows affected) 1> /* */ 2> /* Customers living in same city and state as supplier. */ 3> /* */ 4> /* Using subqueries */ 5> /* */ 6> select convert(char(20), (rtrim(fname) + ' ' + lname)), city, state 7> from customer 8> where city in 9> (select city 10> from supplier) 11> and state in 12> (select state 13> from supplier) 14> order by lname city state -------------------- -------------------- ----- lauren Menendez NY NY deathmask-z Boston MA SAM khandasamy NY NY merit mokoperto Boston MA kimiko sato Seattle WA (5 rows affected) 1> /* */ 2> /* Check with a join */ 3> /* */ 4> select convert(char(20), (rtrim(fname) + ' ' + lname)), 5> convert(char(10), c.city), convert(char(2), c.state), 6> s.name, convert(char(10), s.city), convert(char(10), s.state) 7> from customer c, supplier s 8> where c.city = s.city 9> and c.state = s.state 10> order by lname name -------------------- ---------- -- -------------------- ---------- ---------- lauren Menendez NY NY Hi Finance! NY NY deathmask-z Boston MA Above Average Arts Boston MA SAM khandasamy NY NY Hi Finance! NY NY merit mokoperto Boston MA Above Average Arts Boston MA kimiko sato Seattle WA TrendMaster Seattle WA (5 rows affected) 1> /* */ 2> /* Customers with the same postal code. */ 3> /* */ 4> /* Self-join */ 5> /* */ 6> select c1.fname, c1.lname, c1.postcode 7> from customer c1, customer c2 8> where c1.postcode = c2.postcode 9> and c1.lname <> c2.lname 10> and isnull(c1.fname, "?") <> isnull(c2.fname, "?") fname lname postcode -------------------- -------------------- ---------- phillip aziz 01867 felipe le blanc 01867 NULL deathmask-z 02110 merit mokoperto 02110 (4 rows affected) 1> /* */ 2> /* List customers in postal code order. */ 3> /* Better: Group by postal code; count; only */ 4> /* show where count greater than 1. */ 5> /* */ 6> select fname, lname, postcode 7> from customer 8> order by postcode fname lname postcode -------------------- -------------------- ---------- phillip aziz 01867 felipe le blanc 01867 NULL deathmask-z 02110 merit mokoperto 02110 SAM khandasamy 10028 lauren Menendez 11215 Pete Peters 14502 LI-REN WONG 20906 pete pete rs 78730 geoff lowell McBaird 94608 ruby archer 94609 kimiko sato 98104 (12 rows affected) 1> /* */ 2> select postcode, count(postcode) as #_of_Cust 3> from customer 4> group by postcode 5> having count(postcode) > 1 postcode #_of_Cust ---------- ----------- 01867 2 02110 2 (2 rows affected) 1> /* */ 2> /* Customers who bought the same products. */ 3> /* */ 4> /* Single query: */ 5> /* */ 6> select distinct fname, lname, p.name 7> from customer c, ordermaster m, orderdetail d, product p 8> where c.custnum = m.custnum 9> and m.ordnum = d.ordnum 10> and d.prodnum = p.prodnum 11> and p.name in 12> (select name 13> from customer c, ordermaster m, orderdetail d, product p 14> where c.custnum = m.custnum 15> and m.ordnum = d.ordnum 16> and d.prodnum = p.prodnum 17> group by name 18> having count(name) > 1) 19> order by p.name fname lname name -------------------- -------------------- -------------------- phillip aziz home poll kit felipe le blanc home poll kit phillip aziz memory8 felipe le blanc memory8 phillip aziz money master merit mokoperto money master pete pete rs tax time SAM khandasamy tax time felipe le blanc tax time merit mokoperto tax time geoff lowell McBaird tax time phillip aziz z_connector SAM khandasamy z_connector (13 rows affected) 1> /* */ 2> /* Check using view: */ 3> /* */ 4> drop view purchases 1> create view purchases 2> as 3> select distinct fname, lname, name Product 4> from customer c, ordermaster m, orderdetail d, product p 5> where c.custnum = m.custnum 6> and m.ordnum = d.ordnum 7> and d.prodnum = p.prodnum 1> /* */ 2> select * from purchases 3> order by Product fname lname Product -------------------- -------------------- -------------------- merit mokoperto blood & guts phillip aziz bugbane phillip aziz cook & book phillip aziz home poll kit felipe le blanc home poll kit kimiko sato landlord logs ruby archer memory tripler phillip aziz memory8 felipe le blanc memory8 phillip aziz money master merit mokoperto money master ruby archer mortgage minder SAM khandasamy nt guru pete pete rs paper dolls pete pete rs tax time SAM khandasamy tax time felipe le blanc tax time merit mokoperto tax time geoff lowell McBaird tax time phillip aziz z_connector SAM khandasamy z_connector (21 rows affected) 1> /* Use view in self-join */ 2> select distinct p1.fname, p1.lname, p1.Product 3> from purchases p1, purchases p2 4> where p1.Product = p2.Product 5> and p1.lname <> p2.lname 6> order by p1.Product fname lname Product -------------------- -------------------- -------------------- phillip aziz home poll kit felipe le blanc home poll kit phillip aziz memory8 felipe le blanc memory8 phillip aziz money master merit mokoperto money master pete pete rs tax time SAM khandasamy tax time felipe le blanc tax time merit mokoperto tax time geoff lowell McBaird tax time phillip aziz z_connector SAM khandasamy z_connector (13 rows affected) 1> /* */ 2> dump tran evelyn with no_log