Professional Documents
Culture Documents
Lab Solutions.................................................................................................................................44
Lab2 Solutions!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! )) Lab % Solutions!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ). Lab ) Solutions!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! )8 Lab. Solutions!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .% Lab $ Solutions!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .$
Page |2
/rite sel in t2e Look for te:tbo: and noti7e t2at a bun72 o+ to'i7s a''ears t2at ad2eres to t2e S;L;C, statement! Cli70 on S L CT
Page |% %'TO Statement about 18 ro1s do1n9 it 1ill t2en a''ear a list at t2e bottom t2at gives "ou a 7ou'le suggestions! Cli70 on S L CT &am(les )Transact$SQL* +or a 7olle7tion o+ e:am'les S;L;C, statement! /e 1ill ta0e a loo0 on t2at in t2e ne:t module! /rite select statement in t2e Loo0 +or te:tbo: and "ou 1ill re7eive an even broader guide to 12at "ou 7an do in a sele7t statement! Lo7ate t2e Sear72 tab in t2e to'9 rig2t area and 7li70 it! /rite t2e 1ord Quer+ in t2e dro' do1n list bo: and 7li70 t2e button Sear72 to t2e rig2t! A+ter t2e sear72 is 7om'leted "ou re7eive .-- suggestions +or t2e sear72 o+ Quer+! ,2is 7an be tedious to go t2roug29 1e t2ere+ore 7om'lete t2e sear72 string in t2e same manner as man" ot2er sear72 engine 1or0: Ma0e sure "ou 1rite ,uer+ near o(timi-e. "ou t2en +ilter out ?ust about %. 2its +or relevant in+ormation! Add not &ml to t2e sear72 string so it loo0s li0e ,uer+ near o(timi-e not &ml! @ou are t2en do1n on about 16 2its! ,2is s2o1s "ou 2o1 'o1er+ul t2e sear72 me72anism is in SQL Server 8oo0s Online are! ,2is is ver" use+ul 12en s'e7i+i7 in+ormation is o+ interest! Cli70 t2e to'i7 about Quer+ Tunin! #ecommendations and let it load! #ind t2e S+nc /it" table of contents button at t2e toolbar! Cli70 t2at and "ou 1ill +ind t2at ot2er related in+ormation a''ears on t2at se7tion o+ t2e ,able O+ Content! Exercise 2 Start SQL Server Management Studio and 7onne7t t2e Ob?e7t ;:'lorer to t2e database engine using integrated! O'en a 3uer" 1indo19 t2en to t2e ne1 3uer" 1indo1 1rite:
,2is 3uer" re3uests in+ormation about t2e databases in t2e s"stem b" retrieving all 7olumns +rom t2e s"s!databases 7atalog vie1! ,a0e a loo0 at t2e result and s7roll to t2e rig2t! ,r" to +ind out 12at databases t2at 2ave t2e recover!"#o$el"$esc 7olumn set to #ULL!
Page |)
Additional in+ormation about t2e s!s $atabases 7atalog vie1 is to be +ound in Mi7roso+t SQL Server 2--. 8oo0s Online! *ust 1rite t2e name o+ t2is vie1 in t2e look %or te:tbo: at t2e &n$ex tab and "ou 1ill +ind it! ,o use a d"nami7 management vie19 1rite t2e +ollo1ing:
Exercice 3 SQL'() utilit! Start a ne1 7ommand 'rom't 1indo1! /rite s3l7md <F to revie1 t2e s1it72es available +or t2e utilit"! @ou 1ill in a moment ma0e use o+ t2e <i and <o s1it72es! #irst "ou 1ill 1or0 intera7tive 1it2 t2e utilit"! C2ange t2e statement to read ?ust s*lc#$ and +it to Enter ke! &% ,ro#,te$ -1./0 t+en !ou #anage$ to connect to local+ost0 $e%ault instance 1it+ 2in$o1s &ntegrate$ securit! 3evie1 t+e ,ro$uct $ocu#entation %or #ore in%or#ation i% necessar! At t+e ,ro#,t 1rite t+e %ollo1ing 4a%ter eac+ line +it t+e Enter ke!5: 1G US; Adventure/or0s2--8 2G S;L;C, name #4OM Produ7tion!Produ7tCategor" %G &O ,2e ans1er s2ould loo0 li0e t2e +ollo1ing: C(an)ed database conte*t to +,d-ent reWorks.//0+. name 11111111111111111111111111111111111111111111111111 ,ccessor!es
Page |. $!kes Clot(!n) Com2onents &3 ro4s a55ected' ;:it t2e SQLCM utilit" b" 1riting *uit and 2itting t2e ;nter 0e"! ;:it t2e 7ommand 'rom't! Start a ne1 3uer" 1indo1 in Management Studio b" 7li70ing t2e button 'e/ Quer+ at t2e to' le+t! /rite t2e +ollo1ing:
USE ,d-ent reWorks.//06 GO SELECT 7ame8 Gro 27ame FROM H manReso rces.#e2artment6
Save t2e +ile to C:Htem'H,2eQuer"!s3l! Start a ne1 7ommand 1indo1 and 1rite t2e +ollo1ing: s3l7md!e:e <i 7:Htem'H,2eQuer"!s3l <o 7:Htem'H,2e4esult!t:t 8ro1se to t2e +older 7:Htem'Hand revie1 t2e te:t+ile! En$ o% lab
Page |$
). min!
Page |7 Exercise 2 Continue to 1or0 1it2 t2e 'revious 3uer" and e:7lude t2ose ro1s t2at are - +or t2e 7olumn ListPri7e! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing!
9rod ct%# 11111111111 ?:3 ?:? ?:= ?:@ ?:0 >>@ >>0 >>>
7ame 111111111111111111111111111111 LL Mo nta!n Seat ,ssembly ML Mo nta!n Seat ,ssembly HL Mo nta!n Seat ,ssembly LL Road Seat ,ssembly ML Road Seat ,ssembly
Color 111111111111111 7ULL 7ULL 7ULL 7ULL 7ULL $lack $lack $lack
L!st9r!ce 1111111111 :<<8<3 :3@8:3 :>=8>. :<<8<3 :3@8:3 ?<>8>> ?<>8>> ?<>8>>
Exercise 3 Use t2e same 3uer"9 but t2is time "ou ?ust 1ant to see t2e ro1s t2at are JULL +or t2e Color 7olumn! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing!
9rod ct%# 11111111111 : . < 3 <:= >3@ >>3 >>? >>= 7ame 111111111111111111111111111111 ,d; stable Race $ear!n) $all $$ $all $ear!n) Headset $all $ear!n)s $lade Color 111111111111111 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL L!st9r!ce 11111111111 /8// /8// /8// /8// /8// >:8?@ ?<8>> :/:8.3 :.:83>
Exercise 7 Use t2e same 3uer"9 but t2is time "ou ?ust 1ant to see t2e ro1s t2at are not JULL +or t2e Color 7olumn! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing!
9rod ct%# 11111111111 <:@ <:0 <:> <./ >>. >>< >>@ >>0 7ame 111111111111111111111111111111 LL Crankarm ML Crankarm HL Crankarm C(a!nr!n) $olts Color 111111111111111 $lack $lack $lack S!l-er $lack $lack $lack $lack L!st9r!ce 11111111111 /8// /8// /8// /8// ?<>8>> ?<>8>> ?<>8>> ?<>8>>
Page |8
>>> Road1@?/ $lack8 ?. $lack ?<>8>>
Exercise 8 Jo19 7ombine t1o sear72 arguments in t2e 3uer" "ou 2ave been 1or0ing 1it2! @ou ?ust 1ant to see t2e ro1s t2at are not JULL +or t2e 7olumn Color9 and t2e 7olumn ListPri7e 2as a value greater t2an (ero! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing!
9rod ct%# 11111111111 =0/ @/= @/@ @/0 >>< >>@ >>0 >>> 7ame 111111111111111111111111111111 HL Road Frame 1 $lack8 ?0 HL Road Frame 1 Red8 ?0 S2ort1:// Helmet8 Red S2ort1:// Helmet8 $lack Color 111111111111111 $lack Red Red $lack $lack $lack $lack $lack L!st9r!ce 1111111111 :3<:8?/ :3<:8?/ <38>> <38>> ?<>8>> ?<>8>> ?<>8>> ?<>8>>
Exercise 9 Jo1 1e 1ant a re'ort t2at 7on7atenates t2e 7olumns Jame and Color +rom t2e Produ7tion!Produ7t table! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing! Ma0e sure "ou e:7lude ro1s t2at are JULL +or t2e 7olumn Color! Also noti7e t2e 7olumn name!
7ame ,nd Color 111111111111111111111111111111111111111111 LL Crankarm A $lack ML Crankarm A $lack HL Crankarm A $lack C(a!nr!n) $olts A S!l-er C(a!nr!n) 7 t A S!l-er C(a!nr!n) A $lack Mo nta!n1?// $lack8 33 A $lack Mo nta!n1?// $lack8 30 A $lack Mo nta!n1?// $lack8 ?. A $lack Road1@?/ $lack8 33 A $lack Road1@?/ $lack8 30 A $lack Road1@?/ $lack8 ?. A $lack &.?= ro4&s' a55ected'
Page |6
Exercise : Customi(e t2e 'revious 3uer" so t2e ans1er loo0s li0e t2e +ollo1ing!
7ame ,nd Color 11111111111111111111111111111111111111111111111111 7,MEA LL Crankarm 11 COLORA $lack 7,MEA ML Crankarm 11 COLORA $lack 7,MEA HL Crankarm 11 COLORA $lack 7,MEA C(a!nr!n) $olts 11 COLORA S!l-er 7,MEA C(a!nr!n) 7 t 11 COLORA S!l-er 7,MEA C(a!nr!n) 11 COLORA $lack
7,MEA 7,MEA 7,MEA 7,MEA 7,MEA Mo nta!n1?// $lack8 Mo nta!n1?// $lack8 Road1@?/ $lack8 33 Road1@?/ $lack8 30 Road1@?/ $lack8 ?. 30 ?. 11 11 11 11 COLORA $lack 11 COLORA $lack COLORA $lack COLORA $lack COLORA $lack
Exercise 8 Jo1 1e 1ould li0e to see t2e 7olumns Produ7tB and Jame +rom t2e Produ7tion!Produ7t table +iltered b" Produ7tB +rom )-- to .--! /rite a 3uer" t2at ma0es "our result set loo0 somet2ing li0e t2e +ollo1ing! ,r" to ma0e "our /=;4; 7lause as sim'le and readable as 'ossible!
9rod ct%# 11111111111 3// 3/: 3/. 3/< 3/3 3/? 3/= 3>3 3>? 3>= 3>@ 7ame 11111111111111111111111111111 LL H b HL H b Beyed Was(er E*ternal Lock Was(er < E*ternal Lock Was(er 3 E*ternal Lock Was(er > E*ternal Lock Was(er ? 9a!nt 9a!nt 9a!nt 9!nc( 1 S!l-er 1 $l e 1 Cello4 $olt
Exercise ; /e 1ould li0e to see t2e 7olumns Produ7tB 9 Jame and 7olor +rom t2e Produ7tion!Produ7t table restri7ted to t2e 7olors bla70 and blue! /rite a 3uer" t2at ma0es "our result set loo0 somet2ing li0e t2e +ollo1ing! ,r" to ma0e "our /=;4; 7lause as sim'le and readable as 'ossible!
P a g e | 1-
9rod ct%# 11111111111 <:@ <:0 <:> <.. =0/ @/0 @:: @..
7ame 11111111111111111111111111111111111 LL Crankarm ML Crankarm HL Crankarm C(a!nr!n) HL Road Frame 1 $lack8 ?0 S2ort1:// Helmet8 $lack S2ort1:// Helmet8 $l e LL Road Frame 1 $lack8 ?0 Mo nta!n1?// $lack8 30 Mo nta!n1?// $lack8 ?. Road1@?/ $lack8 33 Road1@?/ $lack8 30 Road1@?/ $lack8 ?.
color 11111111 $lack $lack $lack $lack $lack $lack $l e $lack $lack $lack $lack $lack $lack
Exercise 10 2il$car$s ,2is e:er7ise and t2e ne:t t2ree +ollo1ing 1ill ma0e use o+ 1ild7ards in ,ransa7t<SQL! ,o begin 1it29 1e 1ould li0e a re'ort on 'rodu7ts t2at begins 1it2 t2e letter S! /rite a 3uer" t2at retrieves t2e 7olumns Jame and ListPri7e +rom t2e Produ7tion!Produ7t table! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing! Order t2e result set b" t2e Jame 7olumn!
7ame 11111111111111111111111111111111111111111111111111 Seat L ) Seat 9ost Seat Stays Seat T be S(ort1Slee-e Class!c Dersey8 L S(ort1Slee-e Class!c Dersey8 M L!st9r!ce 11111111111 /8// /8// /8// /8// ?<8>> ?<8>> <38>> <38>> /8// /8//
S2ort1:// Helmet8 $l e S2ort1:// Helmet8 Red Steerer Stem &:3 ro4&s' a55ected'
Exercise 11 Jo1 1e 1ould li0e a re'ort on 'rodu7ts t2at begins 1it2 t2e letters S or A! /rite a 3uer" t2at retrieves t2e 7olumns Jame and ListPri7e +rom t2e Produ7tion!Produ7t table! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing! Order t2e result set b" t2e Jame 7olumn!
P a g e | 11
7ame 11111111111111111111111111111111111111111111111111 ,d; stable Race ,ll19 r2ose $!ke Stand ,WC Lo)o Ca2 Seat L ) Seat 9ost L!st9r!ce 1111111111 /8// :?>8// 08>> /8// /8// <38>> /8// /8//
Exercise 12 Ad?ust "our 3uer" so "ou retrieve ro1s t2at 2ave a Jame t2at begins 1it2 t2e letters SPO9 but is t2en not +ollo1ed b" t2e letter K! A+ter t2is (ero or more letters 7an e:ists! Order t2e result set b" t2e 'ame 7olumn!
7ame 11111111111111111111111111111111111111111111111111 S2ort1:// Helmet8 $lack S2ort1:// Helmet8 $l e S2ort1:// Helmet8 Red &< ro4&s' a55ected' L!st9r!ce 11111111111 <38>> <38>> <38>>
Exercise 13 /rite a 3uer" t2at retrieves uni,ue 7olors +rom t2e table Produ7tion!Produ7t! /e do not 1ant to see all t2e ro1s9 ?ust 12at 7olors t2at e:ist in t2e 7olumn Color! @our result set s2ould loo0 somet2ing li0e t2e +ollo1ing!
Color 111111111111111 7ULL $lack $l e Grey M lt! Red S!l-er S!l-erE$lack W(!te Cello4 &:/ ro4&s' a55ected'
Exercise 17 /rite a 3uer" t2at retrieves t2e uni3ue 7ombination o+ 7olumns Produ7tSub7ategor"B and Color +rom t2e Produ7tion!Produ7t table! #ormat and sort so t2e result set a77ordingl" to t2e +ollo1ing! /e do not 1ant an" ro1s t2at are JULL!in an" o+ t2e t1o 7olumns in t2e result!
P a g e | 12
9rod ctS bcate)ory%# 11111111111111111111 : : . . . < <: <: <: <. <? Color 111111111111111 S!l-er $lack Cello4 Red $lack Cello4 Red $l e $lack S!l-er Grey
Exercise 18 Somet2ing is L1rongM 1it2 t2e /=;4; 7lause in t2e +ollo1ing 3uer"! /e do not 1ant an" 4ed or 8la70 'rodu7ts +rom an" SubCategor" t2an t2ose 1it2 t2e value o+ 1 in 7olumn Produ7tSubCategor"B 9 unless t2e" 7ost bet1een 1--- and 2---! 6ote: ,2e L;#,CD +un7tion 1ill be 7overed in a +ort27oming module! SELECT 9rod ctS bCate)ory%# 8 LEFT&F7ameG8<?' ,S F7ameG 8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE Color %7 &+Red+8+$lack+' OR L!st9r!ce $ETWEE7 :/// ,7# ./// ,7# 9rod ctS bCate)ory%# " : OR#ER $C 9rod ct%# /rite t2e 3uer" in t2e editor and e:e7ute it! ,a0e a loo0 at t2e result set and t2en ad?ust t2e 3uer" so it delivers t2e +ollo1ing result set! Ti,: O'erator 're7eden7e is o+ten a sour7e o+ 7on+usion!
P a g e | 1%
:3 :3 :3 :3 :3 :. :. :. . . : : : : : &=< ro4&s' a55ected' HL HL HL HL HL HL HL HL Road Frame 1 Red8 =. Road Frame 1 Red8 33 Road Frame 1 Red8 30 Road Frame 1 Red8 ?. Road Frame 1 Red8 ?= Mo nta!n Frame 1 S!l-er8 3. Mo nta!n Frame 1 S!l-er8 33 Mo nta!n Frame 1 S!l-er8 30 ...... Road1<?/1W Cello48 33 Road1<?/1W Cello48 30 Mo nta!n1?// $lack8 3/ Mo nta!n1?// $lack8 3. Mo nta!n1?// $lack8 33 Mo nta!n1?// $lack8 30 Mo nta!n1?// $lack8 ?. Red Red Red Red Red S!l-er S!l-er S!l-er Cello4 Cello4 $lack $lack $lack $lack $lack :3<:8?/ :3<:8?/ :3<:8?/ :3<:8?/ :3<:8?/ :<=38?/ :<=38?/ :<=38?/ :@//8>> :@//8>> ?<>8>> ?<>8>> ?<>8>> ?<>8>> ?<>8>>
Exercise 19
Use the Production.Product table to return product name, color and list price for each product. For the color column, where there is NULL, replace it with the strin Unknown. 7ame 111111111111111111111111111111 ,d; stable Race $ear!n) $all $$ $all $ear!n) Headset $all $ear!n)s ..... HL $ottom $racket Road1@?/ $lack8 33 Road1@?/ $lack8 30 Road1@?/ $lack8 ?. &?/3 ro4&s' a55ected' Color 111111111111111 Unkno4n Unkno4n Unkno4n Unkno4n Unkno4n $lack $lack $lack L!st9r!ce 1111111111 /8// /8// /8// /8// :.:83> ?<>8>> ?<>8>> ?<>8>>
P a g e | 1)
-+ minutes
Exercise 2 )rite a &uer' that retrie#es the number of products in the Production.Product table that are included in a subcate or'. !he rows that ha#e NULL in column ProductSubcate or'$1 are considered to not be a part of an' subcate or'. HasS bCate)ory%# 1111111111111111 .>? &: ro4&s' a55ected' Notice that the result has a column name. (lso ta"e a loo" at the messa e 'ou recei#e from S2L Ser#er Exercise 3 /ow man' Products reside in each SubCate or'0 !he answer to this is retrie#able if 'ou write a &uer' that use the C3UN! a re ate function combined with a 453UP 6. clause. !he column ProductSubcate or'$1 is a candidate for buildin roups of rows when &uer'in the Production.Product table. .our result set should loo" somethin li"e the result below. Notice the column alias for the second column.
P a g e | 1.
9rod ctS bcate)ory%# 11111111111111111111 7ULL : . < 3 <3 <? <= <@ &<0 ro4&s' a55ected' Exercise 4
!r' to write two different &ueries to find out how man' products that do not ha#e a product subcate or'. 3ne &uer' without the )/757 clause and one &uer' usin a )/757 clause. !he rows that ha#e NULL in column ProductSubcate or'$1 are considered to not be a part of an' subcate or'. Tip8 $n the first we can use a difference between e%pressions to calculate the fi ure. 11111111111 ./> &: ro4&s' a55ected' !he other wa' usin a )/757 clause. 3bser#e the column alias. 7oS bCat 11111111111 ./> &: ro4&s' a55ected' Exercise 5 ( report is needed, the summar' of products in stoc". )rite a &uer' a ainst another table this time, the Production.Product$n#entor' table. 9rod ct%# 11111111111 : . < 3 <:= >>@ >>0 >>> T(eS m 11111111111 :/0? ::/> :<?. :<.. :<=: :?< :?? :>3
P a g e | 1$
Exercise 6 Continue to write on the &uer' in pre#ious e%ercise. (dd a )/757 clause that e%tracts the rows that ha#e the column Location$1 set to 4+ and limit the result to include 9ust summari:ed &uantities less then 1++. !ip8 now is the time to see the /(;$N4 clause in action. 9rod ct%# 11111111111 3>. 3>< 3>3 3>? 3>= 0:3 >3< T(eS m 11111111111 := .0 3 .? 33 >= 00
&@ ro4&s' a55ected' Exercise 7 $n this &uer' we also want to see what shelf the product is to be deli#ered from. (dd code to the pre#ious &uer'. S(el5 1111111111 $ $ $ $ $ 7E, 7E, 9rod ct%# 11111111111 3>. 3>< 3>3 3>? 3>= 0:3 >3< T(eS m 11111111111 := .0 3 .? 33 >= 00
&@ ro4&s' a55ected' Exercise )e would li"e to see the a#era e &uantit' for products where column Location$1 has the #alue of 1+. !he table Production.Product$n#entor' has the answer. T(e,-) 11111111111 .>? &: ro4&s' a55ected' Exercise ! !o continue to write on the pre#ious &uer', we would li"e to see the result b' shelf e%cludin rows that has the #alue of N<( in the column Shelf. )e also want to see a total a#era e based on shelf onl' and also for all products => rand total?@.
P a g e | 17
9rod ct%# S(el5 11111111111 1111111111 7ULL 7ULL 3@= , 3@@ , 3@0 , 7ULL , <:= $ <>0 $ 0:< E >3= E >3@ E 7ULL E <.@ F 7ULL F 30. L 30< L 303 L 30? L 30= L 30@ L 300 L 7ULL L &3@ ro4&s' a55ected' Exercise 1" )e want to "now number of members =rows@ and a#era e list price in the Production.Product table. !his should be rouped independentl' o#er the Color and the Class column. )e are not interested in an' rows where Color nor Class are null =)/757 Class $S N3! NULL (N1 Color $S N3! NULL@. /int8 thin" 453UP$N4 S7!S. Color 111111111111111 7ULL 7ULL 7ULL $lack $l e Red S!l-er S!l-erE$lack Cello4 Class 11111 H L M 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL T(eCo nt 11111111111 @: @= ?. @. .. <@ </ = <. ,-)9r!ce 111111111111111111111 :>.?8:3= 3=:8.0:: 0/>8=@/? >:@8@./> :/0:8<@:< :3<080>30 :./.8/=? =:8:> :/@.8..> T(e,-) 11111111111 <.0 3/3 <?< =.. 3?> <00 3/3 .?: .30 .33 .?? 33< 33< :@= 3?> :>= :@= 3?@ <.3 </? .>>
&> ro4&s' a55ected' Exercise 11 )e now want to e%amine the function 453UP$N4. !he followin &uer' enerates the result below the &uer' itself. !a"e a loo" and complete the &uer' so it results to the second result set. SELECT 9rod ctS bcate)ory%# 8 COU7T&7ame' as Co nted FROM 9rod ct!on.9rod ct
P a g e | 18
GROU9 $C ROLLU9 &9rod ctS bcate)ory%#' 9rod ctS bcate)ory%# 11111111111111111111 7ULL : . < 3 <. << <3 <? <= <@ 7ULL &<> ro4&s' a55ected' 6elow 'ou find the second result set, continue to write a complete &uer' so it i#es the followin answer. !he added column is for clarit' re ardin NULL. 9rod ctS bcate)ory%# 11111111111111111111 7ULL 7ULL : . < <3 <? <= <@ &<> ro4&s' a55ected' Co nted 11111111111 ./> ?/3 <. 3< .. : : . :: %sGrandTotal 11111111111 / : / / / / / / / Co nted 11111111111 ./> <. 3< .. 0 : < : : . :: ?/3
#an$ %unctions
Exercise 12 Use the ProductCate or' table in the Production schema to return each product name. )e also want them numbered, in alphabetical order8 Use the 53)ANUB675 function. #!ctOrder 11111111111111111111 : . < 3 &3 ro4&s' a55ected' Exercise 13 Use the 5(NC function to create the followin result set. .ou are supposed to ran" products b' their &uantit' in stoc" on different locations. 7ame 111111111111111 ,ccessor!es $!kes Clot(!n) Com2onents
P a g e | 16
Tip8 Choose Location$1 for the partitionin , on 2uantit' in descendin order. 3rder the result b' Location$1, 5(NC. (lso limit the result set to onl' show Location$1Ds *, E and 4.
7ame 11111111111111111111 Metal S(eet < Metal 9late : Metal S(eet ? Metal $ar . Metal 9late . Metal 9late < Metal S(eet @ Metal $ar : Metal S(eet = Metal S(eet . Metal S(eet 3 Metal S(eet : 9a!nt 1 S!l-er 9a!nt 1 $l e 9a!nt 1 Red 9a!nt 1 Cello4 9a!nt 1 $lack 9a!nt 1 $l e 9a!nt 1 Cello4 9a!nt 1 Red 9a!nt 1 $lack 9a!nt 1 S!l-er &.. ro4&s' a55ected' Locat!on%# 1111111111 . . . . . . . . . . . . < < < < < 3 3 3 3 3 H ant!ty 11111111 =>: =0> =0> 3>@ 33: 3.@ 3.@ 3/< <<: <.: <.: <:. 3> 3> 3: </ :@ <? .? .3 :3 :. R,7B 11111111111111111111 : . . 3 ? = = 0 > :/ :/ :. : : < 3 ? : . < 3 ?
P a g e | 2-
P a g e | 21
Germany Germany Germany Germany &./ ro4&s' a55ected Exercise 3 )e want information about orders. From the Sales.Sales3rder/eader table we want the Sales3rder$1, 3rder1ate and SalesPerson$1 colums. From the Sales.SalesPerson table we want the 6usiness7ntit'$1 =which identifies the sales person@, 6onus and the Sales.!1 =how much this person sold for 'et this 'ear@ columns. =(s an aside, note that 9oinin Sales3rder/eader to SalesPerson will restrict the result to nonH$nternet orders =order processed on the $nternet has 1 in the 3nline3rderFla , and has NULL for the SalesPerson$1 column.@ Note that the time portion below has been remo#ed from the 3rder1ate column for presentation purposes. Hessen 7ordr(e!n1West5alen Saarland Sa*ony
SalesOrder%# Order#ate 111111111111 11111111111 111111111111111111111 3<=?> .//:1/@1/: 3<==/ .//:1/@1/: 3<==: .//:1/@1/: 3<==. .//:1/@1/: 3<==< .//:1/@1/: 3<==3 .//:1/@1/: ..... @:>3> .//31/=1/: @:>?/ .//31/=1/: @:>?: .//31/=1/: @:>?. .//31/=1/: &<0/= ro4&s' a55ected'
Sales9erson%# $ s!nessEnt!ty%# $on s SalesCT# 1111111111111 1111111111111111 1111111111 .@> .@> .0. .0. .@= .0/ .@@ .@> .@> .@? .@> .@> .0. .0. .@= .0/ .@@ .@> .@> .@? =@//8// =@//8// ?///8// ?///8// .///8// ?///8// .?//8// =@//8// =@//8// 3://8// .0::/:.8@:?: .0::/:.8@:?: <:0><?=8.3=? <:0><?=8.3=? ?.//3@?8.<:< /8// <0?@:=<8=<<. .0::/:.8@:?: .0::/:.8@:?: 3??@/3?8/3?>
Exercise 4 Use abo#e &uer', add Gob!itle and remo#e the SalesPerson$1 and the 6usiness7ntit'$1 columns. .ou need to 9oin to the /uman5esources.7mplo'ee table. SalesOrder%# 111111111111 3<=?> 3<==/ 3<==: 3<==. ...... @:>3@ @:>30 @:>3> @:>?/ @:>?: @:>?. Order#ate 11111111111 .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: Dobt!tle 11111111111111111111 Sales Re2resentat!-e Sales Re2resentat!-e Sales Re2resentat!-e Sales Re2resentat!-e Sales Sales Sales Sales Sales Sales Re2resentat!-e Re2resentat!-e Re2resentat!-e Re2resentat!-e Re2resentat!-e Re2resentat!-e $on s 11111111 =@//.// =@//.// ?///.// ?///.// .?//.// =@//.// .?//.// =@//.// =@//.// 3://.// SalesCT# 11111111111111111 .0::/:.8@:?: .0::/:.8@:?: <:0><?=8.3=? <:0><?=8.3=? <0?@:=<8=<<. .0::/:.8@:?: <0?@:=<8=<<. .0::/:.8@:?: .0::/:.8@:?: 3??@/3?8/3?>
P a g e | 22
&<0/= ro4&s' a55ected' Exercise 5 Now use abo#e &uer' and 9oin to the Person.Person table. (dd the FirstName and LastName column and remo#e the Gob!itle, and Sales.!1 columns. $f 'ou stud' the forei n "e' relationships between the tables, 'ou mi ht notice that there is no direct forei n "e' relationship between the 7mplo'ee and the Person table. 6ut there is an indirect relationship throu h the 6usiness7ntit' table, since shince this is oneHtoHone relationship to both Person and 7mplo'ee, we actuall' donIt need this table in our &uer'.
SalesOrder%# 111111111111 3<=?> 3<==/ 3<==: 3<==. 3<==< ......... @:>3= @:>3@ @:>30 @:>3> @:>?/ @:>?: @:>?.
Order#ate 11111111111 .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/:
F!rst7ame 1111111111 Ts-! Ts-! DosJ DosJ L!nda DosJ D!ll!an Ts-! D!ll!an Ts-! Ts-! M!c(ael
Last7ame 111111111111111 Re!ter Re!ter Sara!-a Sara!-a M!tc(ell Sara!-a Carson Re!ter Carson Re!ter Re!ter $lyt(e
$on s 11111111 =@//.// =@//.// ?///.// ?///.// .///.// ?///.// .?//.// =@//.// .?//.// =@//.// =@//.// 3://.//
Exercise 6 Since we donIt return an' columns from the 7mplo'ee table, and the relationships for the 6usiness7ntit'$1 column are oneHtoHone, we actuall' donIt need the 7mplo'ee table in the &uer'. 5eHwrite abo#e &uer' to that 'ou remo#e the 7mplo'ee table from the &uer', and ma"e sure that the result is the same as from abo#e &uer'. Exercise 7 Now we donIt want the 6onus column an'more. ( ain, we can remo#e table from the &uer', because we ha#e oneHtoHone relationships. 5emo#e the 6onus column and the references to the SalesPerson table. SalesOrder%# 111111111111 3<=?> 3<==/ 3<==: 3<==. Order#ate 11111111111 .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: F!rst7ame 1111111111 Ts-! Ts-! DosJ DosJ Last7ame 111111111111111 Re!ter Re!ter Sara!-a Sara!-a
P a g e | 2%
...... @:>30 @:>3> @:>?/ @:>?: @:>?.
&<0/= ro4&s' a55ected' Exercise )e also want to see order details information. Use abo#e &uer' and 9oin it to the Sales.Sales3rder1etail table, from which 'ou return the Product$1 and 3rder2t' column. (lso, concatenate the FirstName and LastName columns into one column named SalesPerson. 3rder the rows b' the 3rder1ate, Sales3rder$1 columns.
SalesOrder%# 111111111111 3<=?> 3<=?> 3<=?> 3<=?> 3<=?> 3<=?> ...... @:>?. @:>?. @:>?. @:>?. @:>?. @:>?. @:>?. @:>?.
Order#ate 11111111111 .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/:
Sales9erson 11111111111111111 Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter M!c(ael M!c(ael M!c(ael M!c(ael M!c(ael M!c(ael M!c(ael M!c(ael $lyt(e $lyt(e $lyt(e $lyt(e $lyt(e $lyt(e $lyt(e $lyt(e
9rod ct%# 11111111111 @@= @@@ @@0 @@: @@. @@< >:/ >.3 >.= >./ @3< @3. >>3 >0?
Exercise !
Now we want the name of the product instead of the Product$1 column. .ou can et this b' 9oinin to the Production.Product table.
Order#ate 11111111111 .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//:1/@1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: Sales9erson 1111111111111111 Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter Ts-! Re!ter M!c(ael M!c(ael M!c(ael M!c(ael M!c(ael $lyt(e $lyt(e $lyt(e $lyt(e $lyt(e 9rod ct7ame 1111111111111111111111111111111 Mo nta!n1:// $lack8 3. Mo nta!n1:// $lack8 33 Mo nta!n1:// $lack8 30 Mo nta!n1:// S!l-er8 <0 Mo nta!n1:// S!l-er8 3. LL LL HL HL LL Mo nta!n Frame Mo nta!n Frame Mo nta!n Frame Mo nta!n Frame $ottom $racket 1 1 1 1 $lack8 30 S!l-er8 ?. $lack8 3. S!l-er8 3= OrderHty 11111111 : < : : : ? . : 3 <
SalesOrder%# 111111111111 3<=?> 3<=?> 3<=?> 3<=?> 3<=?> ...... @:>?. @:>?. @:>?. @:>?. @:>?.
P a g e | 2)
@:>?. .//31/=1/: M!c(ael $lyt(e Mo nta!n1?// S!l-er8 3. <
Exercise 1" Now 'ou want to use abo#e and limit so 'ou8 1. 3nl' see order with order #alue o#er 1++ +++ =Sub!otal column in order header table@ *. 3nl' see orders with order date of 'ear *++4. .ou can either limit this usin the 1(!7P(5! function to return the 'ear, or 'ou can use a ran e in the )/757 clause, as described in http8<<www."aras:i.com<S2LSer#er<infoAdatetime.asp, the >Searchin for datetime #alues? section.
SalesOrder%# 111111111111 =::03 =::03 =::03 =::03 =::03 =::03 =::03 ...... @:03@ @:03@ @:03@ @:03@ @:03@ @:03@
Order#ate 11111111111 .//31/:1/: .//31/:1/: .//31/:1/: .//31/:1/: .//31/:1/: .//31/:1/: .//31/:1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/: .//31/=1/:
Sales9erson 1111111111111111 S( %to S( %to S( %to S( %to S( %to S( %to S( %to Dae Dae Dae Dae Dae Dae 9ak 9ak 9ak 9ak 9ak 9ak
9rod ct7ame 1111111111111111111111111111111 S(ort1Slee-e Class!c Dersey8 S To r!n)1./// $l e8 3= To r!n)1</// $l e8 ?/ LL To r!n) Frame 1 $l e8 ?3 To r!n)1</// Cello48 ?3 To r!n)1./// $l e8 =/ To r!n)1:/// $l e8 =/ To HL HL To To HL r!n)1./// $l e8 =/ To r!n) Frame 1 $l e8 =/ To r!n) Handlebars r!n)1./// $l e8 3= r!n)1:/// Cello48 ?/ To r!n) Frame 1 Cello48 =/
Exercise 11 )e want to see information about countries and pro#inces. Goin the Countr'5e ion and the StatePro#ince tables =both in the Person schema@. Note that we want to "eep the countries for which there are no pro#incesJ Sort the result on countr' name and pro#ince name. Co ntry7ame 1111111111111111111111111 ,5)(an!stan ,lban!a ,l)er!a ,mer!can Samoa ,ndorra ,n)ola ...... ,rmen!a ,r ba , stral!a 9ro-!nce7ame 11111111111111111111 7ULL 7ULL 7ULL ,mer!can Samoa 7ULL 7ULL 7ULL 7ULL 7e4 So t( Wales
P a g e | 2.
, stral!a , stral!a , stral!a , stral!a ...... I!r)!n %slands8 $r!t!s( I!r)!n %slands8 U.S. Wall!s and F t na Cemen Kamb!a K!mbab4e &3/@ ro4&s' a55ected' H eensland So t( , stral!a Tasman!a I!ctor!a 7ULL I!r)!n %slands 7ULL 7ULL 7ULL 7ULL
Exercise 12 )rite a &uer' that retrie#es customers that ha#e not 'et placed an order. !his can be done usin an outer 9oin because the customer e%ists in the Sales.Customer table but not in the Sales.Sales3rder/eader table. .our result set should loo" similar to the followin . C stomer%# 11111111111 : . < 3 ? = ...... =>@ =>0 =>> @// @/: SalesOrder%# 111111111111 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL
&@/: ro4&s' a55ected' Exercise 13 Usin a full 9oin we can retrie#e a result set listin products that ha#e no product model name and product model names that is not assi ned to a specific product. )rite a &uer' that deli#ers the followin result set b' usin the tables Production.Product and Production.ProductBodel 9rod ct7ame 111111111111111111111111111111 ,d; stable Race $ear!n) $all $$ $all $ear!n) Headset $all $ear!n)s $lade LL Crankarm 9rod ctModel7ame 111111111111111111111 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL
P a g e | 2$
ML Crankarm 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL 7ULL &.:0 ro4&s' a55ected' 7ULL ML Road SeatESaddle : Road1<?/ HL Mo nta!n SeatESaddle : HL Road SeatESaddle : Mo nta!n13// LL Mo nta!n SeatESaddle : Road1??/ LL Road SeatESaddle .
&:@ ro4&s' a55ected' Step t(o) addin+ the a++re+ates* Goin in the table Sales.Sales3rder/eader and use the SUB and C3UN! functions for a re atin the #alues in L!otal SumM and LNo. of 3rdersM. .our result set should loo" li"e the followin .
$ s!nessEnt!ty%# F llname Total S m 7o. o5 Orders 1111111111111111 111111111111111111111111111111 111111111111111111111 1111111111111 .@> Ts-! Re!ter 0@:30=?8>=>? 3.>
P a g e | 27
.00 .@= .@3 .@0 Rac(el IaldeL L!nda M!tc(ell Ste2(en D!an) Garrett Iar)as ..3:./38/3.3 :.=3@@.>80.0 :<=>=.38=3>3 3<0/@:38.??3 :</ 3:0 30 .<3
.0@ .0: .0/ .@@ .03 ,my ,lberts S( %to 9amela ,nsman1Wol5e D!ll!an Carson Tete Mensa1,nnan 0>:>0<8=3<? @>.>:=38>==? 3/.>><08<?=: :.:?@>.@8:>:. .0:3>?080>3. <> .3. >? 3@< :3/
Exercise 2 )e will now write a &uer' that report sales b' 'ear and re ion. Use the tables Sales.Sales3rder/eader and Sales.Sales!erritor' for a list of #alues a re ated and then rouped b' 'ear and re ion. !he column Sub!otal in Sales.Sales3rder/eader shall be a re ated. !he 1(!7P(5! function will be used for presentation and roupin . Use the L7F! function to format the 5e ion column. .our result set should loo" li"e the followin . Cear 11111111111 .//: .//. .//< .//3 .//: .//. .//< .//3 .//: .//. .//< .//3 Re)!on 1111111111111111111111111 Un!ted B!n)dom Un!ted B!n)dom Un!ted B!n)dom Un!ted B!n)dom So t(4est So t(4est Canada Canada , stral!a , stral!a , stral!a , stral!a S mTotal 11111111111111111 .>:?>/8?:>3 :=/>@@08/<>. <>?:/..8/0=0 .@?/@.>8.@:= .>=:=//83=/. >//..>@83?.: @3/0:=38=//. <??<?0=8.0@> :</>/3@8:>@0 .:?3.03800<? 3::?/3<8=:@: <3=//>>8=>?=
&3/ ro4&s' a55ected' Exercise 3 )e want to see which emplo'ee ha#e been wor"in in more than one department. Use the tables Person. Person, /uman5esources.7mplo'ee and /uman5esources.7mplo'ee1epartment/istor'. !he C3UN! function in companion with 453UP 6. and /(;$N4 is used to find out the answer to our &uestion. .our result set should loo" li"e the followin . $ s!nessEnt!ty%# 1111111111111111 3 := ..3 Last7ame 1111111111 Walters $radley Ion) #2t. Co nt 11111111111 . . .
P a g e | 28
.<3 .?/ 7orman Word . <
)rite a &uer' that result in the followin . T!ny Sales Re2ort 11111111111111111111111111111111111111111 ,-era)e Order Ial eA 3/3=.>? Ma*!m n Order Ial eA ..3<?=.30 M!n!m m Order Ial eA :.<@ &< ro4&s' a55ected' Exercise 5 $n the pre#ious section 'ou wrote an outer 9oin to force all customers that not 'et ha#e placed an order =Customer$1 e%ists in the Sales.Customers table but not in the 3rders table@. !he followin &uer' is probabl' what 'ou wrote.
SELECT C.C stomer%#8 SOH.SalesOrder%# FROM Sales.C stomer ,S C LEFT OUTER DO%7 Sales.SalesOrderHeader ,S SOH O7 C.C stomer%# " SOH.C stomer%# WHERE SOH.SalesOrder%# %S 7ULL OR#ER $C C stomer%#
(nother wa' to achie#e the same result is b' usin the 7NC7P! operator. )rite a &uer' that combines two result sets and produce an e&ui#alent answer, without the column showin a lot of NULL, as the 3U!75 G3$N. $t should loo" li"e the followin . C stomer%# 11111111111 : . < 3 ? = ... =>0 =>> @// @/:
P a g e | 26
&@/: ro4&s' a55ected'
ListPrice name HHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHH EOF,,*F 5oadH1O+ 5ed, -* EOF,,*F 5oadH1O+ 5ed, 44 EOF,,*F 5oadH1O+ 5ed, 4, EOF,,*F 5oadH1O+ 5ed, O* EOF,,*F 5oadH1O+ 5ed, OEEPP,PP BountainH1++ Sil#er, E, EEPP,PP BountainH1++ Sil#er, 4* EEPP,PP BountainH1++ Sil#er, 44 EEPP,PP BountainH1++ Sil#er, 4, EEF4,PP BountainH1++ 6lac", E, =1+ row=s@ affected@ Exercise 7 )rite a &uer' that shows price and name of the 1 Q products that has the hi hest number of da's to manufacture. !he table to use is Production.Product. .our result set should loo" somethin li"e the result below. ListPrice name HHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHHHHHHHHHHH EOF,,*F 5oadH1O+ 5ed, -* EOF,,*F 5oadH1O+ 5ed, 44 EOF,,*F 5oadH1O+ 5ed, 4, EOF,,*F 5oadH1O+ 5ed, O* EOF,,*F 5oadH1O+ 5ed, O14OF,PP 5oadH4O+ 5ed, O, =- row=s@ affected@
P a g e | %-
P a g e | %1
&= ro4&s' a55ected' Exercise 3 )rite a &uer' that return all products that has the same price as the cheapest =lowest ListPrice@ !ourin 6i"e =ProductSubcate or'$1 S E@. Use the B$N=@ a re ate function in the sub&uer' to return the lowest ListPrice to the outer &uer'. !he result set should loo" li"e the followin . 7ame 11111111111111111111111111 To r!n)1</// $l e8 ?3 To r!n)1</// $l e8 ?0 To r!n)1</// $l e8 =. MMM To r!n)1</// Cello48 =. To r!n)1</// $l e8 33 To r!n)1</// $l e8 ?/ &:/ ro4&s' a55ected' Exercise 4 0art 11 ( list of countries =table8 Person.Countr'5e ion, column8 Name@ that hosts less then ten instances of StatePro#ince in table Person.StatePro#ince is what 'our boss wants. )rite a &uer' that satisfies 'our boss. Tip8 a sub&uer' usin /(;$N4 clause and a re ate function C3UN!=@ can do the 9ob. !he result set should loo" li"e the followin . 7ame 111111111111111111111111111 ,mer!can Samoa , stral!a Germany M!crones!a Un!ted B!n)dom Mars(all %slands 7ort(ern Mar!ana %slands 9ala I!r)!n %slands8 U.S. &> ro4&s' a55ected' 0art 21 5ewrite the &uer' as a G3$N, the same result set should be retrie#ed. /ere /(;$N4 and C3UN!=@ are as useful as in the pre#ious &uer'. Exercise 5 $n this &uer' we will put a sub&uer' in an e%pression in the S7L7C! list. )e would li"e to see a report on how the corporate salesmen are doin in their histor' of business =althou h some parameters in this e%ercise mi ht be missin for a correct result@.
P a g e | %2
( re ate the a#era e from column Sub!otal in table Sales.Sales3rder/eader as a sub&uer' =pa' attention to the NULL #alues in column SalesPerson$1@, then substract the rouped a#era es b' SalesPerson$1 in the outer &uer'. (lso, in the outer &uer' NULL #alues can cause confusin results. 5emember that NULL in the SalesPerson$1 column means $nternet sales, and those sales are of no interest for this &uer'. !he result set should loo" li"e the followin . Sales9erson%# 1111111111111 .03 .0: .@0 .0= .0> .0< Sales#!55 111111111111111111111 .0@:8@>3 1@/.:8>@? @/..8:=03 MMM 1?@:@83:@< 0?/<8:<03 :=?>8/?30
&:@ ro4&s' a55ected' Exercise 6 $n this e%ercise we will build the final &uer' in three steps. !he final result will show which bic'cles that costs 4++ to ,++ less than the a#era e bi"e. !he final &uer' will ma"e use of a deri#ed table to i#e us the answer. Step 11 Find out the a#era e ListPrice #alue in table Production.Product. 5estrict the rows 'ou wor" on to #alues 1, * and E in the column ProductSubcate or'$1. !he intermediate result set should be8
P a g e | %%
Road13?/ Red8 33 Road13?/ Red8 30 1:.08@3@ 1:.08@3@ 1:/3=8@3@ 1:/3=8@3@ 1:/3=8@3@ 1:/3=8@3@ 1:/3=8@3@
Mo nta!n1?// $lack8 30 Mo nta!n1?// $lack8 ?. Road1@?/ $lack8 33 Road1@?/ $lack8 30 Road1@?/ $lack8 ?. &>@ ro4&s' a55ected'
Step 31 Now, the final &uer'. )rap parentheses around the pre#ious &uer' and turn it into a deri#ed table, i#e it the alias RNI. 2uer' the deri#ed table for all its columns and use 67!)77N to e%tract bic'cles that are in the inter#al 4++ to ,++, remember, ne ati#e #alues indicates cheaper. 4i#e the 67!)77N a reflection of how it wor"s, from the smallest to the lar est #alue. !he final result set should loo" li"e the followin .
7ame 11111111111111111111111111111111111111111111111111 Mo nta!n1<// $lack8 <0 Mo nta!n1<// $lack8 3/ Mo nta!n1<// $lack8 33 Mo nta!n1<// $lack8 30 Road1??/1W Cello48 <0 Road1??/1W Cello48 3/ Road1??/1W Cello48 3. Road1??/1W Cello48 33 Road1??/1W Cello48 30 &> ro4&s' a55ected' #!55 11111111111 1?/=8@3@ 1?/=8@3@ 1?/=8@3@ 1?/=8@3@ 13==8.3@ 13==8.3@ 13==8.3@ 13==8.3@ 13==8.3@
.ou mi ht also want to tr' writin this usin a Common !able 7%pression =C!7, usin )$!/@, instead of a deri#ed table. Exercise 7 $n this e%ercise we will e%amine the correlated sub&uer'. First 'ou use a 9oin and then a correlated sub&uer' to do the same wor". (s a final part of this e%ercise 'ou will compare e%ecution plans between the two &ueries. 5emember if not 35175 6. is present in the &uer'K an' arbitrar' order will be chosen b' S2L Ser#er. 0art 11 !he followin &uer' reports the salesmen that had more than O+++ in bonus. )rite and e%ecute the &uer', sa#e it for further use. SELECT 9.F!rst7ame N + + N 9.Last7ame FROM Sales.Sales9erson S9 DO%7 H manReso rces.Em2loyee E O7 E.$ s!nessEnt!ty%# " S9.$ s!nessEnt!ty%# DO%7 9erson.9erson ,S 9 O7 E.$ s!nessEnt!ty%# " 9.$ s!nessEnt!ty%# WHERE $on s O ?///
P a g e | %)
!he result8
111111111111111111111 Ts-! Re!ter Dae 9ak Lynn Tso5l!as &< ro4&s' a55ected'
0art 21 5ewrite the &uer' and use a correlated sub&uer' instead. )hen 'ou are finished, sa#e the &uer' for part E of this e%ercise. 0art 31 Compare the both &ueries e%ecution plans. )hat differs0 !o do this, clic" the button >$nclude (ctual 7%ecution Plan?, and then the >7%ecute? button. )hen the &ueries are e%ecuted, 'ou will see an e%tra tab in the result window. Exercise $n this e%ercise 'ou will write a correlated sub&uer' usin 7N$S!S as the first e%ercise. !hen, as the second, the 9oin e&ui#alent &uer'. )e would li"e a report on the salesmen that are not assi ned to a store to co#er. !he table Sales.SalesPerson can be used as the outer &uer' table, the table Sales.Store is a candidate for the inner &uer'. $n the table Sales.Store 'ou ha#e a column b' the name SalesPerson$1, a sales person encountered in the Sales.SalesPerson but not in the Sales.Store table =6usiness7ntit'$1 column@ is of interest in this report. !he result should be8 Sales9erson%# 1111111111111 .=0 .03 .0@ .00 &3 ro4&s' a55ected' 0art 11 )rite the correlated sub&uer' usin 7N$S!S. 0art 21 )rite the G3$N e&ui#alent &uer' Exercise ! .ou will write a report on countin products and their belon in s in product cate ories and product subcate ories. (s a tool 'ou will use the Common !able 7%pression. !he e%ercise is di#ided into two parts before the final &uer' is complete. 0art 11 First 'ou write a &uer' that ather the result set followin . !able Production.Product and the a re ate function C3UN!=@ will be used. 9rod ctS bcate)ory%#
P a g e | %.
11111111111111111111 7ULL : . < <3 <? <= <@ &<0 ro4&s' a55ected' 0art 21 !urn the pre#ious &uer' into a C!7 b' wrappin parentheses around it, name it >!empSet? and specif' the column names as the s'nta% of C!7 specifies. !he C!7 columns should ha#e the names >ProdSub$1? and >CountedProds?. Create the C!7 and issue a S7L7C! T F53B !empSet to chec" functionalit'. $t should loo" li"e 9rodS b%# Co nted9rods 11111111111 111111111111 7ULL .:: : <. . 3< MMM <? : <= . <@ :: &<0 ro4&s' a55ected' !hen comment out the S7L7C! T F53B !empSet test&uer'. Now 9oin the table Production.ProductSubcate or' and the C!7 b' appropriate columns and use SUB=@ a re ate function to summari:e the C!7 column >CountedProds?. Ba"e the Goin an outer 9oin to catch the C!7 column ProdSub$1s #alue of NULL. !he final result set should loo" somethin li"e the followin . 9rod ctCate)ory%# 11111111111111111 7ULL : . < 3 S bCat 11111111111 / < :3 0 :. S m9rods 11111111111 .:: >@ :<3 <? .> 11111111111 ./> <. 3< .. MMM : : . ::
Warn!n)A 7 ll -al e !s el!m!nated by an a))re)ate or ot(er SET o2erat!on. &? ro4&s' a55ected'
P a g e | %$
P a g e | %7
P a g e | %8
!he result informs 'ou that an uncommitted transaction e%ists. $f a C3BB$!! !5(NS(C!$3N now is issued, e#er'bod' in the table ha#e a LastName of Pettersson, a restore of the database mi ht be at hand. Now, rollbac" the transaction.
Chec" the UU!5(NC3UN! #ariable. 7%ecute the S7L7C! command a ain to see what LastName is reported. Now the state of the database is what is was before 'our transaction started. Exercise 2 $n this e%ercise we will insert data in a table without trouble. (lthou h this the scope of this course do not co#er 11L, 'ou will create a table for insertion of data. .our instructor can answer an' &uestions the C57(!7 !(6L7 statement mi ht raise. Create the table b' writin and e%ecutin the followin .
CRE,TE T,$LE FdboG.FTem2C stomersG & FContact%#G F!ntG 7ULL8 FF!rst7ameG Fn-arc(arG&?/' 7ULL8 FLast7ameG Fn-arc(arG&?/' 7ULL8 FC!tyG Fn-arc(arG&</' 7ULL8 FState9ro-!nceG Fn-arc(arG&?/' 7ULL ' GO
$nsert data usin the ;(LU7S function. !r' to insert two rows of data. 1o this insertion of two rows in one batch and with onl' one ;alues function. No destination columns should be defined, althou h this is not recommended, 'ou do this for the outcome of this e%ercise. (lso, no NULL and 17F(UL! is to be put in the ;(LU7S=@.
!r' to insert the followin rows8 #o( 11 Column Contact$1 should be 1 Column FirstName should be Calen Column LastName should be 1elane' #o( 21 $nsert the followin row8 Column Contact$1 should be * Column FirstName should be /errman Column LastName should be Carlsson Column Cit' should be ;islanda Column StatePro#ince should be Cronober
P a g e | %6
.ou encountered an error messa e, readin the followin . Ms) :/@/>8 Le-el :=8 State :8 L!ne . T(e n mber o5 col mns 5or eac( ro4 !n a table -al e constr ctor m st be t(e same. !r' to insert the followin rows, notice that the last column reference is missin in both rows. No 17F(UL! or NULL should be present. #o( 11 Column Contact$1 should be E Column FirstName should be !ora Column LastName should be 7ri"sson Column Cit' should be 4udsmedsh'ttan #o( 21 $nsert the followin row8 Column Contact$1 should be 4 Column FirstName should be Charlie Column LastName should be Carpenter Column Cit' should be !appstrVm .ou encountered an error messa e, readin the followin . Ms) .:<8 Le-el :=8 State :8 L!ne : Col mn name or n mber o5 s 22l!ed -al es does not matc( table de5!n!t!on. Complete the $NS75! statement with the column list, tellin S2L Ser#er which columns to insert data into. !his is what 'ou alwa's should do.
)rite a S7L7C! statement to retrie#e all columns and rows from the table and e%ecute to 'our result. Exercise 3 /opefull' 'ou will encounter some issues re ardin an insert in this e%ercise. !he table Production.Product has some constraints due to its definition. $nsert a new row, the products name shall be 5acin 4i:mo. )or" 'our wa' throu h an' error messa es until the row has entered the table. Tip1 .ou can for 'our con#enience use 47!1(!7=@ for the dateHcolumns. Exercise 4 .ou will now use an $NS75!S7L7C! statement for insert into an e%istin table. !he followin &uer' will i#e 'ou the columns for an insert, ma"e sure 'ou follow 6est Practices and use a column list. Use the followin &uer' to construct an $NS75!S7L7C! statement for data input into LdboM.L!empCustomersM.
P a g e | )-
SELECT 9.$ s!nessEnt!ty%#8 9.F!rst7ame 8 9.Last7ame8 9,.C!ty 8 S9.7ame FROM 9erson.9erson ,S 9 DO%7 9erson.$ s!nessEnt!ty ,S $E O7 9.$ s!nessEnt!ty%#"$E.$ s!nessEnt!ty%# DO%7 9erson.$ s!nessEnt!ty,ddress ,S $E, O7 $E.$ s!nessEnt!ty%# " $E,.$ s!nessEnt!ty%# DO%7 9erson.,ddress 9, O7 $E,.,ddress%#"9,.,ddress%# DO%7 9erson.State9ro-!nce ,S S9 O7 9,.State9ro-!nce%# " S9.State9ro-!nce%# Exercise 5 $n this e%ercise we will e%amine insert performance differences. $f or if not the table tar eted for an insert ha#e inde%es defined, it will ma"e a difference. )e will also be aware of the importance of a column list when insertin data. !he followin !HS2L will be used in this e%ercise, write it and sa#e the file. 11 Em2ty t(e table 11 and 5l s( t(e b 55er and 2lan cac(es TRU7C,TE T,$LE dbo.Tem2C stomers GO #$CC #RO9CLE,7$UFFERS #$CC FREE9ROCC,CHE GO 11 %nsert data and meas re t(e t!me #ECL,RE QStart #,TET%ME.8 QSto2 #,TET%ME. SELECT QStart " SCS#,TET%ME&' %7SERT %7TO dbo.Tem2C stomers &Contact%#8 F!rst7ame8 Last7ame' SELECT $ s!nessEnt!ty%#8 F!rst7ame8 Last7ame FROM 9erson.9erson SELECT QSto2 " SCS#,TET%ME&' SELECT #,TE#%FF&ms8QStart8QSto2' as M!ll!Seconds First 'ou e%ecute the part to truncate the table and flush the . Second 'ou select and e%ecute the $NS75! statement from the declaration of #ariables to the 1(!71$FF=@ function. )ithout the column list the &uer' would not e%ecute, a couple of columns are missin in the $NS75! statement. 5ecord the output in milliseconds it too" to e%ecute. !his measurement is for the cold cache. Now, 9ust truncate the table, do not flush the buffer cache. 7%ecute the $NS75! statement a ain and record the time. !his measurement is for the warm cache. 5epeat the abo#e steps another time to see a fairl' accurate a#era e. !5UNC(!7 the table to prepare for the ne%t part of this e%ercise. !he ne%t !HS2L creates some inde%es to slow down the insert =but helps a lot with S7L7C!@. )rite it and sa#e it to 'our file.
P a g e | )1
CRE,TE U7%HUE CLUSTERE# %7#ER FUn!S e_Cl steredG O7 FdboG.FTem2C stomersG & FContact%#G ,SC ' GO CRE,TE 7O7CLUSTERE# %7#ER F7onCl stered_L7ameG O7 FdboG.FTem2C stomersG & FLast7ameG ,SC ' GO CRE,TE 7O7CLUSTERE# %7#ER F7onCl stered_F7ameG O7 FdboG.FTem2C stomersG & FF!rst7ameG ,SC '
Now is the time to measure the time it ta"es to insert data in inde%ed tables. !he wor"flow is the same this time. 7%ecute the part that truncates the table and flush the caches. Select and e%ecute the $NS75! statement from the declaration of #ariables to the 1(!71$FF=@ function. 5ecord the output in milliseconds it too" to e%ecute. !his measurement is for the cold cache. Now, 9ust truncate the table, do not flush the buffer cache. 7%ecute the $NS75! statement a ain and record the time. !his measurement is for the warm cache. 5epeat the abo#e steps another time to see a fairl' accurate a#era e.
Compare the time it too" this time and the pre#ious without inde%es. )hat difference can 'ou notice0 Exercise 6 $n this e%ercise we will deliberatel' encounter a series of error messa es to obser#e how S2L Ser#er ma"es use of different constraints for data inte rit'. !hese constraints are not alwa's implemented in the databases 'ou will wor" with bac" at 'our office, but it is preferred to ma"e use of the tools for data inte rit' S2L Ser#er e%pose when modelin a database schema. Objectives1 First 'ou will create a temporar' table populated from an e%istin table in (dwenture)or"s*++, and the tr' to push bac" the rows into the e%istin table. 1urin this process a series of errors will be raised. 3ote1 !his e%ercise is for lab e%perience, not a reflection of how common wor" with S2L Ser#er commonl' be carried out. 0art 11 )rite and e%ecute a S7L7C!...$N!3 statement that populates a table named W!emp!ab. !his local temporar' table shall ha#e si% columns selected from the Person.Person table, see below. ( filter must be applied, onl' LastName of X(chon X and X(ce#edoX shall be imported in the temporar' table.
P a g e | )2
!he columns from Person.Person table shall be. H 6usiness7ntit'$1 H Person!'pe H FirstName H LastName H !itle H 7mailPromotion ;erif' that two rows are imported b' &uer'in the table.
!he uni&ueness of records in Person.Person cannot be #iolated. !he Primar' Ce' tells us that S2L Ser#er will not o alon with this. )e must assi n new #alues to the "e' if an $NS75! shall ta"e place. !o do this we fetch the ma%imum #alue if 6usiness7ntit'$1 from Person.Person and UP1(!7 the temporar' table with two new #alues in two different manors. 0art 21 UP1(!7 the 6usiness7ntit'$1 column #ia a Sub2uer'. Use the B(N=@ function to fetch the ma%imum 6usiness7ntit'$1 from Person.Person and add Y1 to the 6usiness7ntit'$1 in 'our temporar' table the at the same time. Secondl', UP1(!7 the last row in 'our temporar' table usin the #alue in 6usiness7ntit'$1 column, in other words, add 1 to the e%istin #alue usin an UP1(!7 statement. !r' to do the $NS75! a ain, now when 'ou ha#e uni&ue #alues in the temporar' table. Luc"il' S2L Ser#er tells 'ou that this not is possible due a Forei n Ce' pointin to the Person.6usiness7ntit' table holdin the master records of indi#iduals in the database.
Ms) ?3@8 Le-el :=8 State /8 L!ne : T(e %7SERT statement con5l!cted 4!t( t(e FORE%G7 BEC constra!nt UFB_9erson_$ s!nessEnt!ty_$ s!nessEnt!ty%#U. T(e con5l!ct occ rred !n database U,d-ent reWorks.//0U8 table U9erson.$ s!nessEnt!tyU8 col mn +$ s!nessEnt!ty%#+. T(e statement (as been term!nated.
6efore we can enter new rows in the Person.Person table the Person.6usiness7ntit' table must ha#e entries of the new #alues of 6usiness7ntit'$1 in 'our temporar' table. )rite and e%ecute the followin twice to enter new #alues in the Person.6usiness7ntit' table8
P a g e | )%
Step 31 11 E*ec te t(e 5ollo4!n) t4!ce %nsert 9erson.$ s!nessEnt!ty Ial es&#EF,ULT8 #EF,ULT' $f 'ou ta"e a loo" at the table definition of the Person.6usiness7ntit' 'ou will notice the 6usiness7ntit'$1 column has an $17N!$!. specification, therefore 'ou onl' enter two 17F(UL!S. Now the 6usiness7ntit'$1 column has the two new #alues needed for insert into Person.Person. 6ecause application de#elopment and loo"ups of data are be'ond the scope of this course, we 9ust manipulate the tables directl'. !r' to do the $NS75! $N!3 Person.Person from 'our temporar' table a ain. !his time it should wor" fine. 1rop the temporar' table b' issuin the followin command.
P a g e | ))
Lab Solutions
Lab2 Solutions
Solutions !he followin 1O code snippets are su estions for the second module. Exercise 1
SELECT 9rod ct%#8 F7ameG8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct SELECT 9rod ct%#8 F7ameG8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE L!st9r!ce VO / SELECT 9rod ct%#8 F7ameG8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE Color %S 7ULL
Exercise 2
Exercise 3
Exercise 4
SELECT 9rod ct%#8 F7ameG8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE Color %S 7OT 7ULL SELECT 9rod ct%#8 F7ameG8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE Color %S 7OT 7ULL ,7# L!st9r!ce O /
Exercise 5
Exercise 6
SELECT F7ameG N + A + N Color ,S F7ame ,nd ColorG FROM 9rod ct!on.9rod ct WHERE Color %S 7OT 7ULL SELECT +7,MEA + N F7ameG N + 11 N Color ,S F7ame ,nd ColorG FROM 9rod ct!on.9rod ct WHERE Color %S 7OT 7ULL COLORA +
Exercise 7
Exercise
SELECT 9rod ct%#8 F7ameG FROM 9rod ct!on.9rod ct WHERE 9rod ct%# $ETWEE7 3// ,7# ?//
Exercise !
SELECT 9rod ct%#8 F7ameG8 Color FROM 9rod ct!on.9rod ct WHERE Color %7 &+$lack+8+$l e+'
P a g e | ).
Exercise 1"
SELECT F7ameG8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE F7ameG L%BE +sW+ OR#ER $C F7ameG
Exercise 11
SELECT F7ameG8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE F7ameG L%BE +FsaGW+ OR#ER $C F7ameG
Exercise 12
SELECT F7ameG8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE F7ameG L%BE +s2oFXkGW+ OR#ER $C F7ameG
Exercise 13
SELECT #%ST%7CT 9rod ctS bcate)ory%#8 Color FROM 9rod ct!on.9rod ct WHERE 9rod ctS bcate)ory%# %S 7OT 7ULL ,7# Color %S 7OT 7ULL OR#ER $C 9rod ctS bcate)ory%# ,SC8 Color #ESC
Exercise 15
SELECT 9rod ctS bCate)ory%# 8 LEFT&F7ameG8<?' ,S F7ameG 8 Color8 L!st9r!ce FROM 9rod ct!on.9rod ct WHERE Color %7 &+Red+8+$lack+' ,7# 9rod ctS bCate)ory%# " : OR L!st9r!ce $ETWEE7 :/// ,7# ./// OR#ER $C 9rod ct%# SELECT F7ameG8 %S7ULL&Color8 +Unkno4n+' ,S Color8 L!st9r!ce FROM 9rod ct!on.9rod ct
Exercise 16
Lab 3 Solutions
P a g e | )$
Exercise 1 Exercise 2
SELECT COU7T&*' FROM 9rod ct!on.9rod ct SELECT COU7T&9rod ctS bcate)ory%#' ,S HasS bCate)ory%# FROM 9rod ct!on.9rod ct
Exercise 3
SELECT 9rod ctS bcate)ory%# 8 COU7T&F7ameG' ,S Co nted9rod cts FROM 9rod ct!on.9rod ct GROU9 $C 9rod ctS bcate)ory%#
>irst
Exercise 7
SELECT COU7T&*' ,S 7oS bCat FROM 9rod ct!on.9rod ct WHERE 9rod ctS bcate)ory%# %S 7ULL
Exercise 8
SELECT 9rod ct%#8 SUM&S ant!ty' ,S T(eS m FROM 9rod ct!on.9rod ct%n-entory GROU9 $C 9rod ct%#
Exercise 9
SELECT 9rod ct%#8 SUM&S ant!ty' ,S T(eS m FROM 9rod ct!on.9rod ct%n-entory WHERE Locat!on%# " 3/ GROU9 $C 9rod ct%# H,I%7G SUM&S ant!ty' V ://
Exercise :
SELECT S(el58 9rod ct%# 8 SUM&S ant!ty' ,S T(eS m FROM 9rod ct!on.9rod ct%n-entory WHERE Locat!on%# " 3/ GROU9 $C 9rod ct%#8 s(el5 H,I%7G SUM&S ant!ty' V ://
Exercise 8
SELECT ,IG&H ant!ty' ,S T(e,-) FROM 9rod ct!on.9rod ct%n-entory W(ere Locat!on%# " :/
P a g e | )7
Exercise ;
SELECT 9rod ct%#8 S(el5 8 ,IG&H ant!ty' ,S T(e,-) FROM 9rod ct!on.9rod ct%n-entory WHERE Locat!on%# " :/ ,7# S(el5 VO +7E,+ GROU9 $C ROLLU9 &S(el58 9rod ct%#' OR#ER $C S(el5
Exercise 10 SELECT Color 8Class 8COU7T&*' ,S T(eCo nt 8,IG&L!st9r!ce' ,S ,-)9r!ce FROM 9rod ct!on.9rod ct WHERE Class %S 7OT 7ULL ,7# Color %S 7OT 7ULL GROU9 $C GROU9%7G SETS &&Color'8 &Class''
Exercise 11
SELECT 9rod ctS bcate)ory%# 8 COU7T&7ame' as Co nted 8 GROU9%7G&9rod ctS bcate)ory%#' ,S %sGrandTotal FROM 9rod ct!on.9rod ct GROU9 $C ROLLU9 &9rod ctS bcate)ory%#' OR#ER $C 9rod ctS bcate)ory%#
Exercise 12
SELECT ROW_7UM$ER&' OIER &OR#ER $C 7ame' ,S #!ctOrder 87ame FROM 9rod ct!on.9rod ctCate)ory OR#ER $C #!ctOrder SELECT 2.7ame8 !.Locat!on%#8 !.H ant!ty 8R,7B&' OIER &9,RT%T%O7 $C !.Locat!on%# OR#ER $C !.H ant!ty #ESC' ,S FR,7BG FROM 9rod ct!on.9rod ct%n-entory ! %77ER DO%7 9rod ct!on.9rod ct ,S 2 O7 !.9rod ct%# " 2.9rod ct%# WHERE Locat!on%# %7&.8<83' OR#ER $C Locat!on%#8 FR,7BG
Exercise 13
P a g e | )8
Lab ! Solutions
Exercise 4
P a g e | )6
Exercise 5
SELECT so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame 82rs.Last7ame 82.$on s FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 Sales.Sales9erson ,S 2 O7 so(.Sales9erson%# " 2.$ s!nessEnt!ty%# %77ER DO%7 H manReso rces.Em2loyee ,S e O7 2.$ s!nessEnt!ty%# " e.$ s!nessEnt!ty%# %77ER DO%7 9erson.9erson ,S 2rs O7 e.$ s!nessEnt!ty%# " 2rs.$ s!nessEnt!ty%#
Exercise 6
SELECT so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame 82rs.Last7ame 82.$on s FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 Sales.Sales9erson ,S 2 O7 so(.Sales9erson%# " 2.$ s!nessEnt!ty%# %77ER DO%7 9erson.9erson ,S 2rs O7 2.$ s!nessEnt!ty%# " 2rs.$ s!nessEnt!ty%#
Exercise 7
SELECT so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame 82rs.Last7ame FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 9erson.9erson ,S 2rs O7 so(.Sales9erson%# " 2rs.$ s!nessEnt!ty%#
Exercise
SELECT so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame N + + N 2rs.Last7ame ,S Sales9erson 8sod.9rod ct%# 8sod.OrderHty FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 9erson.9erson ,S 2rs O7 so(.Sales9erson%# " 2rs.$ s!nessEnt!ty%# %77ER DO%7 Sales.SalesOrder#eta!l ,S sod O7 so(.SalesOrder%# " sod.SalesOrder%# OR#ER $C Order#ate8 SalesOrder%#
P a g e | .Exercise !
SELECT so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame N + + N 2rs.Last7ame ,S Sales9erson 82.7ame ,S 9rod ct7ame 8sod.OrderHty FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 9erson.9erson ,S 2rs O7 so(.Sales9erson%# " 2rs.$ s!nessEnt!ty%# %77ER DO%7 Sales.SalesOrder#eta!l ,S sod O7 so(.SalesOrder%# " sod.SalesOrder%# %77ER DO%7 9rod ct!on.9rod ct ,S 2 O7 2.9rod ct%# " sod.9rod ct%# OR#ER $C Order#ate8 SalesOrder%#
Exercise 1"
SELECT so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame N + + N 2rs.Last7ame ,S Sales9erson 82.7ame ,S 9rod ct7ame 8sod.OrderHty FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 9erson.9erson ,S 2rs O7 so(.Sales9erson%# " 2rs.$ s!nessEnt!ty%# %77ER DO%7 Sales.SalesOrder#eta!l ,S sod O7 so(.SalesOrder%# " sod.SalesOrder%# %77ER DO%7 9rod ct!on.9rod ct ,S 2 O7 2.9rod ct%# " sod.9rod ct%# WHERE so(.S bTotal O :///// ,7# CE,R&so(.Order#ate' " .//3 OR#ER $C Order#ate8 SalesOrder%# Tip1 For abo#e &uer', S2L Ser#er cannot see" throu h an inde%, it can onl' do an inde% scan, on the 3rder1ate column if an inde% e%ists. 6elow &uer' allows thatK Notice the )/757 clause8
SELECT
P a g e | .1
so(.SalesOrder%# 8so(.Order#ate 82rs.F!rst7ame N + + N 2rs.Last7ame ,S Sales9erson 82.7ame ,S 9rod ct7ame 8sod.OrderHty FROM Sales.SalesOrderHeader ,S so( %77ER DO%7 9erson.9erson ,S 2rs O7 so(.Sales9erson%# " 2rs.$ s!nessEnt!ty%# %77ER DO%7 Sales.SalesOrder#eta!l ,S sod O7 so(.SalesOrder%# " sod.SalesOrder%# %77ER DO%7 9rod ct!on.9rod ct ,S 2 O7 2.9rod ct%# " sod.9rod ct%# WHERE so(.S bTotal O :///// ,7# so(.Order#ate O" +.//3/:/:+ ,7# so(.Order#ate V +.//?/:/:+ OR#ER $C Order#ate8 SalesOrder%# Exercise 11 SELECT c.7ame ,S Co ntry7ame 82.7ame ,S 9ro-!nce7ame FROM 9erson.Co ntryRe)!on ,S c LEFT OUTER DO%7 9erson.State9ro-!nce ,S 2 O7 c.Co ntryRe)!onCode " 2.Co ntryRe)!onCode OR#ER $C Co ntry7ame8 9ro-!nce7ame Exercise 12 SELECT C.C stomer%#8 SOH.SalesOrder%# FROM Sales.C stomer ,S C LEFT OUTER DO%7 Sales.SalesOrderHeader ,S SOH O7 C.C stomer%# " SOH.C stomer%# WHERE SOH.SalesOrder%# %S 7ULL OR#ER $C C stomer%# (bo#e results can also be achie#ed usin N3! 7N$S!S =as will be discussed in an upcomin module@8 SELECT C.C stomer%#8 7ULL ,S SalesOrder%# FROM Sales.C stomer ,S c WHERE 7OT ER%STS &SELECT * FROM Sales.SalesOrderHeader ,S so( WHERE so(.C stomer%# " c.C stomer%#' Exercise 13 SELECT 9.F7ameG ,S 9rod ct7ame 8 9M.F7ameG ,S 9rod ctModel7ame FROM 9rod ct!on.9rod ct ,S 9 FULL OUTER DO%7 9rod ct!on.9rod ctModel ,S 9M O7 2.9rod ctModel%# " 9M.9rod ctModel%# WHERE 9.F7ameG %S 7ULL OR 9M.F7ameG %S 7ULL
P a g e | .2
SELECT s2.$ s!nessEnt!ty%# 8 LEFT&9.5!rstname N + + N 9.lastname8</' ,S F llname FROM Sales.Sales9erson ,S S9 %77ER DO%7 H manReso rces.Em2loyee ,S E O7 E.$ s!nessEnt!ty%# " S9.$ s!nessEnt!ty%# %77ER DO%7 9erson.9erson ,S 9 O7 9.$ s!nessEnt!ty%# " E.$ s!nessEnt!ty%# Step t(o1 SELECT s2.$ s!nessEnt!ty%# 8 LEFT&9.5!rstname N + + N 9.lastname8</' ,S F llname 8 SUM&SOH.S bTotal' ,S FTotal S mG 8 COU7T&SOH.Sales9erson%#' ,S F7o. o5 OrdersG FROM Sales.Sales9erson ,S S9 %77ER DO%7 H manReso rces.Em2loyee ,S E O7 E.$ s!nessEnt!ty%# " S9.$ s!nessEnt!ty%# %77ER DO%7 9erson.9erson ,S 9 O7 9.$ s!nessEnt!ty%# " E.$ s!nessEnt!ty%# %77ER DO%7 Sales.SalesOrderHeader ,S SOH O7 S9.$ s!nessEnt!ty%# " SOH.Sales9erson%# GROU9 $C S9.$ s!nessEnt!ty%# 8 LEFT&9.5!rstname N + + N 9.lastname8</' Exercise 2 SELECT #,TE9,RT&year8Order#ate' ,S FCearG 8 LEFT&F7ameG8 .?' ,S Re)!on 8 SUM&S bTotal' ,S S mTotal FROM Sales.SalesOrderHeader ,S SOH DO%7 Sales.SalesTerr!tory ,S ST O7 SOH.Terr!tory%# " ST.Terr!tory%# GROU9 $C #,TE9,RT&year8 SOH.Order#ate'8 F7ameG OR#ER $C F7ameG #ESC 8 #,TE9,RT&year8Order#ate' ,SC Exercise 3 SELECT E.$ s!nessEnt!ty%# 8 LEFT&9.Lastname8:/' ,S Last7ame 8 COU7T&#H.#e2artment%#' ,S F#2t. Co ntG FROM H manReso rces.Em2loyee#e2artmentH!story ,S #H DO%7 H manReso rces.Em2loyee ,S E O7 #H.$ s!nessEnt!ty%# " E.$ s!nessEnt!ty%# DO%7 9erson.9erson ,S 9 O7 E.$ s!nessEnt!ty%# " 9.$ s!nessEnt!ty%# GROU9 $C E.$ s!nessEnt!ty%#8 9.Lastname H,I%7G COU7T&#H.#e2artment%#' O : Exercise 4 SELECT +M!n!m m Order Ial eA + N C,ST&M%7&S bTotal' ,S I,RCH,R&./'' ,S FT!ny Sales Re2ortG FROM Sales.SalesOrderHeader U7%O7
P a g e | .%
SELECT +Ma*!m n Order Ial eA + N C,ST&M,R&S bTotal' ,S I,RCH,R&./'' FROM Sales.SalesOrderHeader U7%O7 SELECT +,-era)e Order Ial eA + N C,ST&,IG&S bTotal' ,S I,RCH,R&./'' FROM Sales.SalesOrderHeader Exercise 5 SELECT C stomer%# FROM Sales.C stomer ERCE9T SELECT C stomer%# FROM Sales.SalesOrderHeader SELECT TO9&:/' L!st9r!ce8 F7ameG FROM 9rod ct!on.9rod ct OR#ER $C L!st9r!ce #ESC Exercise 7 SELECT TO9&:' 9ERCE7T L!st9r!ce8 F7ameG FROM 9rod ct!on.9rod ct OR#ER $C #aysToMan 5act re desc
Exercise 6
Lab% Solutions
!he followin &ueries are su estions for lab answers. Exercise 1
SELECT F7ameG FROM 9rod ct!on.9rod ct WHERE 9rod ctS bcate)ory%# " &SELECT 9rod ctS bcate)ory%# FROM 9rod ct!on.9rod ctS bcate)ory WHERE F7ameG " +Saddles+' SELECT F7ameG FROM 9rod ct!on.9rod ct WHERE 9rod ctS bcate)ory%# %7 &SELECT 9rod ctS bcate)ory%# FROM 9rod ct!on.9rod ctS bcate)ory WHERE F7ameG L!ke +$oW+'
Exercise 2
Exercise 3
SELECT 7ame FROM 9rod ct!on.9rod ct WHERE L!st9r!ce "& SELECT M%7&L!st9r!ce' FROM 9rod ct!on.9rod ct WHERE 9rod ctS bcate)ory%# " <'
Exercise 4 0art 11
P a g e | .) WHERE Co ntryRe)!onCode %7 &SELECT Co ntryRe)!onCode FROM 9erson.State9ro-!nce GROU9 $C Co ntryRe)!onCode H,I%7G COU7T&*' V :/'
0art 21
SELECT CR.F7ameG FROM 9erson.Co ntryRe)!on ,S CR DO%7 9erson.State9ro-!nce ,S S9 O7 CR.Co ntryRe)!onCode " S9.Co ntryRe)!onCode GROU9 $C CR.F7ameG H,I%7G COU7T&*'V:/
Exercise 5
SELECT so(.Sales9erson%# 8&SELECT ,IG&sod.S bTotal' FROM Sales.SalesOrderHeader ,S sod WHERE sod.Sales9erson%# %S 7OT 7ULL' 1 ,IG&S bTotal' ,S Sales#!55 FROM Sales.SalesOrderHeader ,S so( WHERE so(.Sales9erson%# %S 7OT 7ULL GROU9 $C so(.Sales9erson%#
Exercise 6 Step 11
SELECT ,IG&L!st9r!ce' FROM 9rod ct!on.9rod ct WHERE 9rod ctS bcate)ory%# %7 &:8.8<'
Step 21
SELECT 2..7ame 82..L!st9r!ce 1 &SELECT ,IG&2:.L!st9r!ce' FROM 9rod ct!on.9rod ct ,S 2: WHERE 2:.9rod ctS bcate)ory%# %7 &:8.8<'' ,S #!55 FROM 9rod ct!on.9rod ct ,S 2. WHERE 2..9rod ctS bcate)ory%# %7 &:8.8<'
Step 31 (s a deri#ed table8 SELECT * FROM &
P a g e | ..
SELECT 2..7ame 82..L!st9r!ce 1 &SELECT ,IG&2:.L!st9r!ce' FROM 9rod ct!on.9rod ct ,S 2: WHERE 2:.9rod ctS bcate)ory%# %7 &:8.8<'' ,S #!55 FROM 9rod ct!on.9rod ct ,S 2. WHERE 2..9rod ctS bcate)ory%# %7 &:8.8<' ' ,S * WHERE *.#!55 $ETWEE7 10// and 13//
Usin a common table e%pression8 W%TH * ,S & SELECT 2..7ame 82..L!st9r!ce 1 &SELECT ,IG&2:.L!st9r!ce' FROM 9rod ct!on.9rod ct ,S 2: WHERE 2:.9rod ctS bcate)ory%# %7 &:8.8<'' ,S #!55 FROM 9rod ct!on.9rod ct ,S 2. WHERE 2..9rod ctS bcate)ory%# %7 &:8.8<' ' SELECT * FROM * WHERE *.#!55 $ETWEE7 10// and 13//
Exercise 7 0art 21
SELECT 9.F!rst7ame N + + N 9.Last7ame FROM 9erson.9erson ,S 9 DO%7 H manReso rces.Em2loyee ,S E O7 E.$ s!nessEnt!ty%# " 9.$ s!nessEnt!ty%# WHERE ?/// V &SELECT $on s FROM Sales.Sales9erson S9 WHERE E.$ s!nessEnt!ty%# " S9.$ s!nessEnt!ty%#'
0art 31 Nothin , S2L Ser#er optimi:er e#aluates to the same plan. Exercise 0art 11
P a g e | .$ SELECT s2.$ s!nessEnt!ty%# FROM Sales.Sales9erson ,S s2 WHERE 7OT ER%STS &SELECT s.Sales9erson%# FROM Sales.Store ,S s WHERE s.Sales9erson%# " s2.$ s!nessEnt!ty%#'
0art 21
SELECT s2.$ s!nessEnt!ty%# FROM Sales.Sales9erson ,S s2 LEFT DO%7 Sales.Store ,S s O7 s.Sales9erson%# " s2.$ s!nessEnt!ty%# WHERE s.name %S 7ULL
Exercise !
11 T(e CTE W%TH Tem2Set &9rodS b%#8 Co nted9rods' ,S &SELECT 9rod ctS bcate)ory%#8 COU7T&9rod ct%#' FROM 9rod ct!on.9rod ct GROU9 $C 9rod ctS bcate)ory%#' 11 T(e H ery SELECT 9rod ctCate)ory%# 8 COU7T&9rod ctS bcate)ory%#' ,S S bCat 8 SUM&Co nted9rods' as S m9rods FROM 9rod ct!on.9rod ctS bcate)ory 9S R%GHT DO%7 Tem2Set T O7 &T.9rodS b%# " 9S.9rod ctS bcate)ory%#' GROU9 $C 9rod ctCate)ory%#
Lab + Solutions
Exercise " No solution code Exercise 1 No solution code
Exercise 2 The one (ith errors1 %7SERT %7TO FdboG.FTem2C stomersG I,LUES &:8+Balen+8+#elaney+' 8&.8+Herrman+8+Barlsson+8+I!slanda+8+Bronober)+' The one (ith no errors1
P a g e | .7
%7SERT %7TO FdboG.FTem2C stomersG I,LUES &:8+Balen+8+#elaney+8#EF,ULT8 #EF,ULT' 8&.8+Herrman+8+Barlsson+8+I!slanda+8+Bronober)+' Exercise 3 %7SERT %7TO 9rod ct!on.9rod ct &7ame8 9rod ct7 mber 8 Sa5etyStockLe-el8 Reorder9o!nt 8 StandardCost8 L!st9r!ce 8 #aysToMan 5act re8 SellStart#ate' I,LUES&+Rac!n)G!Lmo+8 +,$1:.<3+8 :/8 .8 ?/8 ./8 :8 GET#,TE&'' Exercise 4 %7SERT %7TO dbo.Tem2C stomers &Contact%#8 F!rst7ame8 Last7ame8 C!ty8 State9ro-!nce' SELECT 9.$ s!nessEnt!ty%#8 9.F!rst7ame 8 9.Last7ame8 9,.C!ty 8 S9.7ame FROM 9erson.9erson ,S 9 DO%7 9erson.$ s!nessEnt!ty ,S $E O7 9.$ s!nessEnt!ty%#"$E.$ s!nessEnt!ty%# DO%7 9erson.$ s!nessEnt!ty,ddress ,S $E, O7 $E.$ s!nessEnt!ty%# " $E,.$ s!nessEnt!ty%# DO%7 9erson.,ddress 9, O7 $E,.,ddress%#"9,.,ddress%# DO%7 9erson.State9ro-!nce ,S S9 O7 9,.State9ro-!nce%# " S9.State9ro-!nce%# Exercise 5 !he bi difference is not warm or cold cache =not so much data, althou h@, it is the inde%es that ma"es the bi difference. Exercise 6 The import into the temporar/ table1 11 9art : SELECT $ s!nessEnt!ty%#8 9ersonTy2e 8 F!rst7ame8 Last7ame 8 T!tle8 Ema!l9romot!on %7TO TTem2Tab FROM 9erson.9erson WHERE Last7ame %7 &+,c(on)+8+,ce-edo+' 11 C(eck select * 5rom TTem2Tab
The import bac$ to the 0erson*0erson table1 11 9art .A T(e 5!rst error. %7SERT %7TO 9erson.9erson &$ s!nessEnt!ty%#8 9ersonTy2e 8 F!rst7ame 8 Last7ame8 T!tle8 Ema!l9romot!on' SELECT * FROM TTem2Tab
P a g e | .8
11 Start 5!*!n)8 5!rst t(!s U9#,TE TTem2Tab SET $ s!nessEnt!ty%# " & SELECT M,R&$ s!nessEnt!ty%#' N : FROM 9erson.9erson ' 11 Second U2#ate TTem2Tab Set $ s!nessEnt!ty%# " $ s!nessEnt!ty%# N : W(ere F!rst7ame " +G sta-o+ and Last7ame " +,c(on)+ The import bac$ to the 0erson*0erson table continued1 11 9art < 11 E*ec te t(e 5ollo4!n) t4!ce %nsert 9erson.$ s!nessEnt!ty Ial es&#EF,ULT8 #EF,ULT' 4eri-ication1 SELECT * FROM 9erson.9erson WHERE Mod!5!ed#ate O +.//>1/.1/0+ 11 For an e*am2le o5 a date Exercise 7 U9#,TE 9erson.9erson SET F!rst7ame " +G rra+ 8 Last7ame " +T;on)+ WHERE $ s!nessEnt!ty%# " ./@0: U9#,TE 9rod ct!on.9rod ct SET L!st9r!ce " L!st9r!ce * :.: WHERE 9rod ctS bCate)ory%# " &SELECT 9rod ctS bCate)ory%# FROM 9rod ct!on.9rod ctS bCate)ory WHERE F7ameG " +Glo-es+'
Exercise
Exercise ! U9#,TE 9rod ct!on.9rod ctCate)ory SET 7ame " +9arts+ OUT9UT #ELETE#.7ame ,S F$e5oreG 8 %7SERTE#.7ame ,S F,5terG WHERE 9rod ctCate)ory%# " < Exercise 1" #ELETE FROM dbo.Tem2C stomers WHERE Last7ame " +Sm!t(+
P a g e | .6