1> use evelyn
1> /*								*/
2> /* 1.  Message for imported/domestic products			*/
3> /* Using one if-else construct twice to test each condition	*/
4> /* (Japan or USA)						*/
5> /*								*/
6> if exists (select s.suppnum
7> 	   from product p, supplier s
8> 	   where p.suppnum = s.suppnum
9> 	   and country = 'JAPAN')
10> begin
11> 	select prodname, " Imported product, extra tax required"
12> 	from product p, supplier s
13> 	where p.suppnum = s.suppnum
14> 	and country = 'JAPAN'
15> end 
16> else
17> 	select prodname, "Domestic product, no tax"
18> 	from product p, supplier s
19> 	where p.suppnum = s.suppnum
20> 	and country = 'USA'
 prodname                                                   
 -------------------- ------------------------------------- 
 memory tripler        Imported product, extra tax required 
 memory manager        Imported product, extra tax required 
 memory8               Imported product, extra tax required 

(3 rows affected)
1> /*								*/
2> if exists (select s.suppnum
3> 	   from product p, supplier s
4> 	   where p.suppnum = s.suppnum
5> 	   and country = 'USA')
6> begin
7> 	select prodname, "Domestic product, no tax"
8> 	from product p, supplier s
9> 	where p.suppnum = s.suppnum
10> 	and country = 'USA'
11> end 
12> else
13> 	select prodname, " Imported product, extra tax required"
14> 	from product p, supplier s
15> 	where p.suppnum = s.suppnum
16> 	and country = 'JAPAN'
 prodname                                      
 -------------------- ------------------------ 
 z_connector          Domestic product, no tax 
 bugbane              Domestic product, no tax 
 tax time             Domestic product, no tax 
 money master         Domestic product, no tax 
 mortgage minder      Domestic product, no tax 
 landlord logs        Domestic product, no tax 
 cook & book          Domestic product, no tax 
 home poll kit        Domestic product, no tax 
 star systems         Domestic product, no tax 
 paper dolls          Domestic product, no tax 
 more paper dolls     Domestic product, no tax 
 typing test          Domestic product, no tax 
 teach yourself greek Domestic product, no tax 
 blood & guts         Domestic product, no tax 
 C++ for kids         Domestic product, no tax 
 bug stories          Domestic product, no tax 
 nt guru              Domestic product, no tax 
 how multi is media?  Domestic product, no tax 

(18 rows affected)
1> /*								*/
2> /* Same question, generalized using case statement.		*/
3> /* Adding one more supplier and product for testing "else".	*/
4> /*								*/
5> insert into supplier
6> values (888, 'The Olde Curiosity Shoppe', 'Threadneedle Lane', 'London',
7>  null, 'England', 'NW6 A3T', null, null, null)
(1 row affected)
1> insert into product
2> values (2001, 'chinese abacus', null, null, 1.0, null, null, 888)
(1 row affected)
1> select * from supplier
2> where suppnum = 888
 suppnum name                 street               city                 state
	 country              zip        ctrycode areacode phone   
 ------- -------------------- -------------------- -------------------- ----- 
	-------------------- ---------- -------- -------- ------- 
     888 The Olde Curiosity S Threadneedle Lane    London               NULL 
	 England              NW6 A3T    NULL     NULL     NULL    

(1 row affected)
1> select * from product
2> where suppnum = 888
 prodnum     prodname             type        
	 description                                        weight   
	 price                    giftadd                  suppnum 
 ----------- -------------------- ------------ 
	-------------------------------------------------- --------- 
	------------------------ ------------------------ ------- 
        2001 chinese abacus       NULL        
	 NULL                                                    1.00
	                     NULL                     NULL     888 

(1 row affected)
1> /*								*/
2> select prodname, "TaxInfo"=     
3>   case
4>     when country = 'USA' then "Domestic product, no tax"
5>     when country = 'JAPAN' then "Imported product, extra tax required"
6>     else "Product of unknown origin"
7>   end
8> from product p, supplier s
9> where p.suppnum = s.suppnum
 prodname             TaxInfo                              
 -------------------- ------------------------------------ 
 z_connector          Domestic product, no tax             
 bugbane              Domestic product, no tax             
 memory tripler       Imported product, extra tax required 
 memory manager       Imported product, extra tax required 
 memory8              Imported product, extra tax required 
 tax time             Domestic product, no tax             
 money master         Domestic product, no tax             
 mortgage minder      Domestic product, no tax             
 landlord logs        Domestic product, no tax             
 cook & book          Domestic product, no tax             
 home poll kit        Domestic product, no tax             
 star systems         Domestic product, no tax             
 paper dolls          Domestic product, no tax             
 more paper dolls     Domestic product, no tax             
 typing test          Domestic product, no tax             
 teach yourself greek Domestic product, no tax             
 blood & guts         Domestic product, no tax             
 C++ for kids         Domestic product, no tax             
 bug stories          Domestic product, no tax             
 nt guru              Domestic product, no tax             
 how multi is media?  Domestic product, no tax             
 chinese abacus       Product of unknown origin            

(22 rows affected)

/*								*/
/* 2. Case or isnull (not nullif) to show change in order/detail*/
/* if all orders shipped "today" (was Nov. 25th).		*/
/*								*/
1> select ordnum, prodnum, isnull(shipdate, getdate()) as AllShipped
2> from orderdetail
3> go
 ordnum      prodnum     AllShipped                 
 ----------- ----------- -------------------------- 
          84        1099        Nov 25 2002  7:35PM 
          84        1255        Nov 25 2002  7:35PM 
          81        1357        Nov 25 2002  7:35PM 
          87        1106        Nov 25 2002  7:35PM 
          87        2113        Jan  4 1999 12:00AM 
          87        1794        Nov 25 2002  7:35PM 
          87        1083        Nov 25 2002  7:35PM 
          91        2111        Jan  3 1999 12:00AM 
          89        1199        Jan  4 1999 12:00AM 
          89        2050        Jan  4 1999 12:00AM 
          85        1794        Jan  2 1999 12:00AM 
          90        2110        Jan  2 1999 12:00AM 
          95        1255        Nov 25 2002  7:35PM 
          95        1108        Nov 25 2002  7:35PM 
          95        1105        Nov 25 2002  7:35PM 
          99        2047        Nov 25 2002  7:35PM 
          99        2050        Nov 25 2002  7:35PM 
          92        2050        Nov 25 2002  7:35PM 
          93        1105        Nov 25 2002  7:35PM 
          94        1108        Nov 25 2002  7:35PM 
          81        2050        Jan  1 1999 12:00AM 
          84        2050        Jan  5 1999 12:00AM 
          85        2050        Jan  5 1999 12:00AM 
          86        1083        Jan  5 1999 12:00AM 
          91        1107        Jan  5 1999 12:00AM 
          93        2050        Jan  5 1999 12:00AM 
          94        1083        Jan  5 1999 12:00AM 
          95        1083        Jan  5 1999 12:00AM 
          86        1105        Jan  5 1999 12:00AM 
          87        1105        Jan  5 1999 12:00AM 
          81        1106        Jan  5 1999 12:00AM 
          99        2049        Nov 25 2002  7:35PM 
          86        2000        Nov 25 2002  7:35PM 
          87        2000        Jan  5 1999 12:00AM 
          99        2000        Nov 25 2002  7:35PM 

(35 rows affected)

2> /* 3a.  Average and maximum price for products selling at < $35 */
3> /*								*/
4> select avg(price) AvgPrice, max(price) MaxPrice
5> from product
6> where price < 35
 AvgPrice                 MaxPrice                 
 ------------------------ ------------------------ 
                    22.63                    29.99 

(1 row affected)
1> /*								*/
2> /* 3b.  Increase price in 5% increments; keep maximum =< $40.	*/
3> /*								*/
4> while (select max(price) from product
5>        where price <35) <= 40
6> begin
7>   select prodname, price
8>   from product
9>   where price < 35
10>   update product
11>   set price = price * 1.05
12>   where price < 35
13> end
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             19.99 
 paper dolls                             19.99 
 more paper dolls                        19.99 
 memory manager                          19.99 
 typing test                             29.99 
 home poll kit                           19.99 
 money master                            29.00 
 blood & guts                            29.99 
 bug stories                             20.00 
 nt guru                                 20.00 
 how multi is media?                     20.00 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             20.99 
 paper dolls                             20.99 
 more paper dolls                        20.99 
 memory manager                          20.99 
 typing test                             31.49 
 home poll kit                           20.99 
 money master                            30.45 
 blood & guts                            31.49 
 bug stories                             21.00 
 nt guru                                 21.00 
 how multi is media?                     21.00 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             22.04 
 paper dolls                             22.04 
 more paper dolls                        22.04 
 memory manager                          22.04 
 typing test                             33.06 
 home poll kit                           22.04 
 money master                            31.97 
 blood & guts                            33.06 
 bug stories                             22.05 
 nt guru                                 22.05 
 how multi is media?                     22.05 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             23.14 
 paper dolls                             23.14 
 more paper dolls                        23.14 
 memory manager                          23.14 
 typing test                             34.72 
 home poll kit                           23.14 
 money master                            33.57 
 blood & guts                            34.72 
 bug stories                             23.15 
 nt guru                                 23.15 
 how multi is media?                     23.15 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             24.30 
 paper dolls                             24.30 
 more paper dolls                        24.30 
 memory manager                          24.30 
 home poll kit                           24.30 
 bug stories                             24.31 
 nt guru                                 24.31 
 how multi is media?                     24.31 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             25.51 
 paper dolls                             25.51 
 more paper dolls                        25.51 
 memory manager                          25.51 
 home poll kit                           25.51 
 bug stories                             25.53 
 nt guru                                 25.53 
 how multi is media?                     25.53 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             26.79 
 paper dolls                             26.79 
 more paper dolls                        26.79 
 memory manager                          26.79 
 home poll kit                           26.79 
 bug stories                             26.80 
 nt guru                                 26.80 
 how multi is media?                     26.80 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             28.13 
 paper dolls                             28.13 
 more paper dolls                        28.13 
 memory manager                          28.13 
 home poll kit                           28.13 
 bug stories                             28.14 
 nt guru                                 28.14 
 how multi is media?                     28.14 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             29.53 
 paper dolls                             29.53 
 more paper dolls                        29.53 
 memory manager                          29.53 
 home poll kit                           29.53 
 bug stories                             29.55 
 nt guru                                 29.55 
 how multi is media?                     29.55 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             31.01 
 paper dolls                             31.01 
 more paper dolls                        31.01 
 memory manager                          31.01 
 home poll kit                           31.01 
 bug stories                             31.03 
 nt guru                                 31.03 
 how multi is media?                     31.03 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             32.56 
 paper dolls                             32.56 
 more paper dolls                        32.56 
 memory manager                          32.56 
 home poll kit                           32.56 
 bug stories                             32.58 
 nt guru                                 32.58 
 how multi is media?                     32.58 

(8 rows affected)
(8 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             34.19 
 paper dolls                             34.19 
 more paper dolls                        34.19 
 memory manager                          34.19 
 home poll kit                           34.19 
 bug stories                             34.21 
 nt guru                                 34.21 
 how multi is media?                     34.21 

(8 rows affected)
(8 rows affected)
(0 rows affected)

3> /*  Note:  On second round, setting condition to $39.99, after*/
4> /*  inspecting result of price increases.			*/
5> /*								*/
6> select avg(price) AvgPrice, max(price) MaxPrice
7> from product
8> where price < 39.99
 AvgPrice                 MaxPrice                 
 ------------------------ ------------------------ 
                    35.95                    36.45 

(1 row affected)
1> --
2> --  Important:  Will need result later!
3> --  Checked result at this point:  Original MaxPrice is $29.99	
4> --
5> /*								*/
6> /* 3b.  Increase price in 5% increments; keep maximum =< $40.	*/
7> /*								*/
8> while (select max(price) from product
9>        where price <35) <= 40
10> begin
11>   select prodname, price
12>   from product
13>   where price < 35
14>   update product
15>   set price = price * 1.05
16>   where price < 35
17> end
(0 rows affected)
1> /*								*/
2> /* 3c.  Take the prices back down again.			*/
3> /*								*/
4> while (select max(price) from product
5>        where price <39.99) >= 29.99
6> begin
7>   select prodname, price
8>   from product
9>   where price < 39.99
10>   update product
11>   set price = price * 0.95
12>   where price < 39.99
13> end
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             35.90 
 paper dolls                             35.90 
 more paper dolls                        35.90 
 memory manager                          35.90 
 typing test                             36.45 
 home poll kit                           35.90 
 money master                            35.25 
 blood & guts                            36.45 
 bug stories                             35.92 
 nt guru                                 35.92 
 how multi is media?                     35.92 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             34.10 
 paper dolls                             34.10 
 more paper dolls                        34.10 
 memory manager                          34.10 
 typing test                             34.63 
 home poll kit                           34.10 
 money master                            33.49 
 blood & guts                            34.63 
 bug stories                             34.12 
 nt guru                                 34.12 
 how multi is media?                     34.12 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             32.40 
 paper dolls                             32.40 
 more paper dolls                        32.40 
 memory manager                          32.40 
 typing test                             32.90 
 home poll kit                           32.40 
 money master                            31.81 
 blood & guts                            32.90 
 bug stories                             32.42 
 nt guru                                 32.42 
 how multi is media?                     32.42 

(11 rows affected)
(11 rows affected)
(0 rows affected)
 prodname             price                    
 -------------------- ------------------------ 
 cook & book                             30.78 
 paper dolls                             30.78 
 more paper dolls                        30.78 
 memory manager                          30.78 
 typing test                             31.25 
 home poll kit                           30.78 
 money master                            30.22 
 blood & guts                            31.25 
 bug stories                             30.79 
 nt guru                                 30.79 
 how multi is media?                     30.79 

(11 rows affected)
(11 rows affected)
(0 rows affected)
/*								*/
/* 4a.  Stored proc to make product list for indiv. suppliers	*/
/*								*/
/* In case I have it already:					*/
/*								*/
1> drop procedure prod_list
1>
2> create procedure prod_list @supno integer
3> as
4> select prodnum, prodname, price
5> from product
6> where suppnum = @spno
7> go
1> prod_list 666
2> go
 prodnum     prodname             price                    
 ----------- -------------------- ------------------------ 
        2047 paper dolls                             19.99 
        2049 more paper dolls                        19.99 
        1099 typing test                             29.99 
        1104 teach yourself greek                    49.99 
        1108 blood & guts                            29.99 
        1109 C++ for kids                            39.99 

(6 rows affected)
(return status = 0) 
/*								*/

2> /* 4b. Stored proc to find employee birth date and age		*/
3> /*								*/
4> create procedure birthday @empno char(9)
5> as
6> select empnum, fname, lname, 
7>   convert(char(12), bday, 101) Birthday,
8>   datediff(yy, bday, getdate()) Age
9> from employee
10> where empnum = @empno
1> /*								*/
2> /*  Test:							*/
3> /*								*/
4> birthday '222222221'
 empnum    fname                lname                Birthday     Age         
 --------- -------------------- -------------------- ------------ ----------- 
 222222221 Bill                 Bloomfeld            09/09/1979            23 

(1 row affected)
(return status = 0) 
1> /*								*/
2> /* 4c.  Stored proc. to look up customer credit card number.	*/
3> /*								*/
4> create procedure creditcheck @custid char(9)
5> as
6> select @custid = substring(@custid, 1, 3) + '%'
7> select custnum, creditcard
8> from ordermaster
9> where custnum like @custid
1> /*								*/
2> /*  Test:							*/
3> /*								*/
4> creditcheck '777777779'
 custnum   creditcard           
 --------- -------------------- 
 777777779 7777 7777 6663       
 777777778 777766661234X        
 777777778 777766661234X        

(3 rows affected)
(return status = 0) 
1> /*								*/
2> creditcheck '111'	
 custnum   creditcard           
 --------- -------------------- 
 111334444 7777 7777 7777 7777  
 111333333 00001111222233334444 
 111222222 1234333331114123     
 111444444 111112111121111      
 111223333 1111222233334444     
 111334444 X7777 7777           

(6 rows affected)
(return status = 0) 
1> /*								*/
2> dump tran evelyn with truncate_only