ࡱ> |~{'` 9bjbjLULU 4:.?.?TTTTp4L!Np      $"h%J Q   !f      ɺ"GTa,!0L!L%L%L%< "L! p p Question 1.  Consider the following tree  INCLUDEPICTURE "http://www.csbio.unc.edu/mcmillan/Media/comp521f10pset4p1tree.png" \* MERGEFORMATINET  A) Suppose this is an ISAM tree. Show the tree after inserting the following elements: (16, 17, 18) and then deleting the following elements: (11, 12, 16).  B) Suppose this is a B+ tree. Show the tree after inserting the following elements (16. 17, 18)  C) Now show tree from part B after deleting the following elements: (11, 12, 16). Assume the deletion algorithm tries to merge/redistribute with the right sibling if one exists.  Question 2.  Suppose we are bulk-loading a B-Tree. Pages are 4096 bytes, with 88 bytes of each used for headers. A key value takes 8 bytes, and a pointer to a tree node or row takes 8 bytes. A) What is the degree of the B-tree? 4096 88 = 4008 bytes available for data. 4008/8 = 501 8-byte objects: the tree can hold a maximum of 250 keys and 251 child pointers. The degree (or order) is the minimum allowable, which is half the capacity. 250/2 = 125. B) Each leaf node is to be loaded to a maximum occupancy of 0.8, and there are 1,000,000 rows. How many leaf nodes will there be? As above, a leaf node can hold up to 250 key/pointer pairs (we will have 8 bytes left over). 80% of 250 is 200. 1000000/200 = 5000 leaf nodes. C) How high will the tree be? In the bulk loading algorithm presented in the book, [almost] all internal nodes end up half full, so 125 keys and 126 pointers. 5000/126 = 40 nodes on the first level. These will all have 1 parent, so the height is 2. Alternately, ceil(log126(5000)) = 2. If you assume the internal nodes are full or 80% full, you get the same answer. (Partial credit can be given for 3, since its a little obscure whether you should count the leaf nodes as a level.) Question 3.  Suppose we are building a extensible hash index on a table of 1,000,000 rows. Key values are 8 bytes, a pointer to a row is 8 bytes, and a page is 4096 bytes. Each bucket needs 8 bytes at the end reserved for an overflow bucket pointer. Assume all keys are distinct. A) What is the (lowest possible) global depth? Bucket entries will be key/pointer pairs, so 16 bytes each. 4096-8 = 4088 bytes available. floor(4088/16) = 255 entries / bucket. 1000000/255 = at least 3922 buckets needed. Since the directory is always a power of 2 size, it will have at least 212 = 4096 entries, so the global depth is 12. B) What is the average occupancy of a bucket, assuming all buckets have a local depth equal to the global depth from part (A)? If all buckets have local depth equal to global depth, then every pointer in the directory points to a unique bucket. Thus, there are 4096 buckets. 4096 * 255 = capacity of 1044480. 1000000/1044480 ~= 95.7% occupancy. Question 4.  Consider the Extensible Hash structure shown on page 377 (Fig 11.6). A) Show the structure after removing the record with hash value 10. (This changes nothing except that the 10 is gone. Bucket C is empty) B) Show the structure from part A after adding two records with hash value 27. (Bucket D splits. The bucket pointed to by directory entry 011 contains 19*, 27*, 27*. The (new) bucket pointed to by directory entry 111 contains 15*, 7*.) C) Show the structure from part B after adding two records with hash value 28. (Bucket A2 splits. This requires the directory to double to have 16 entries. 0000 to 0111 point to the same buckets that 000 to 111 did. 1000 to 1111 point to the same entries that 000 to 111 did, except that 1100 points to a new bucket A3. A2 now contains 4*, 20*. A3 contains 12*, 28*, 28*. The global depth is 4. Buckets A2 and A3 have depth 4. All other buckets have the same depth they did before.) Question 5.  Draw query trees for the following relational algebra expressions based on the "movies.db" database's schema: A. first,last(movieId=2643 ^ sex ='F'(Customers  INCLUDEPICTURE "http://www.csbio.unc.edu/mcmillan/Media/join.png" \* MERGEFORMATINET Rentals))  B. first,last(sex='F'(Customers)  INCLUDEPICTURE "http://www.csbio.unc.edu/mcmillan/Media/join.png" \* MERGEFORMATINET movieId=2643(Rentals))  C. first,last(movieId=2643(sex='F'(Customers)  INCLUDEPICTURE "http://www.csbio.unc.edu/mcmillan/Media/join.png" \* MERGEFORMATINET Rentals))  D. first,last(sex='F'(Customers  INCLUDEPICTURE "http://www.csbio.unc.edu/mcmillan/Media/join.png" \* MERGEFORMATINET movieId=2643(Rentals)))  Question 6.  Use the following simple hashing scheme, key = CardNo % 4096, to build indexes for the "Rentals" and "Customers" tables of the movies.db database from problem sets #2 and #3 HYPERLINK "http://compgen.unc.edu/Courses/index.php/SQL_Queries" \o "SQL Queries"  using SQLite and Python. Use your index to answer the following questions. A. What is the occupancy of (number of records in) the largest, smallest, and average buckets? LargestSmallestAverage(Total)Customers15083117.23480189Rentals397912182229.559132234 B. Using your indices estimate the number of tests saved when joining Rentals and Customers in a query such as the following: SELECT C.first, C.last, R.date FROM Customers, Rentals WHERE C.CardNo=R.CardNo when compared to a heap-file organization of both relations? (Note: Assume that key matches are found on average after searching through half of either a heap-file or a hash bucket). Without indicies, we need to do a cross product: 480189 * 9132234 / 2 = 2,192,599,156,113 comparisons (!!!) With indicies, we need to do 539,081,639 comparisons. Example computation: sum([len(c) * len(r) for (c, r) in zip(customerIndex,    *+6 7 T U V a b c u x ! $ % & , 0 < = 89QT)456qs  jEh\q1Uhabh\q1H* habh\q1jMEh\q1UhF*h\q1H*hF*h\q15\ hF*h\q1jDh\q1Uj2h\q1Ujh\q1Ujh\q1Ujh\q1Ujh\q1Uh\q1 h\q10J8 *6 8 T V b d  @ & = _ )57Ew"gd\q1gd\q19 U4%?.24`df!^gd\q1gd\q1gd\q1 Ndf.02<PTbz|(*,.0H`bdnvxz| h\q10JjlhjUjeh\q1UjrbhjUj[h\q1Uj&XhjUjMQh\q1UhjjMhjUj!Gh\q1Ujh\q1U h\q1H*h\q1jFh\q1U=8^ !tv!Ucl|}!@!F!I!P!W!X!Y!\!]!`!a!d!e!h!z!{!!!!!!!!!88888!8"8%8&8)8*8-8C8D8888888999P9Q999hoUhShSCJOJQJaJ hShShS hjhjhjjh\q1U h\q10Jh\q1j;ph\q1UC!"*3;CD6kdp$$Iflr  X&u8@@ t0644 laytS $IfgdS $Ifgd\q1DNRU\cd6kdpq$$Iflr  X&u8@@ t0644 laytS $IfgdS $Ifgd\q1dlqv~6kd r$$Iflr  X&u8@@ t0644 laytS $IfgdS $Ifgd\q1  & > V W !!{!|!!8D8E88Q9999gd\q1^gd\q1^gd\q1rentalIndex)])/2 This saves 2,192,060,074,474 comparisons (99.975%) C. How many records must be searched in the hash index to find the total number of Rentals made by the customer named "LEONARD LEONARD"? That customer has id 845809. 845809 hashes to 2033. There are 1744 items in that bucket in rentals; we must search all of them. Turn in your code to generate the indexes, compute, and print out each of the three answers. Also include a print out of your result. 21h:p\q1/ =!8"8#8$8% Dd!<P  3 3"((Ddz  S ~A,4comp521f10pset4p1treecomp521f10pset4p1tree.pngb _.Fn_.FPNG  IHDRm$/(gAMA aIDATx^]]E;,{4"~@-%L)# E$~ >=P( "E <Ѓy @R@APBQ4Ŵ[}v{fgv@uwkgݙC!DtC  0$P) DY! D"h5)v^+(t+II=u o7 9I~$xqѓүNvϐ 8l*:H'" 7,`''׼d %*u_Me@[Df'N 3DDlPcX+5d~~7CR'@mVZ>M 4t+la' iQu?Lu?3vPcNep}!PdS7#F&Qp1">)>s@RBRCСcǎe>>":p͛7-? 5o+Vf~?~/,N2eǎu/l/e !"."=wTl @ݷAj#_>|xڵSN>|om6r; / ǯ0 Y&hc}! L#.\o,Y2bĈ{}|w۲e˙3g"g2w֭Gnذ_|衇P\"_}>9'|?޸q#!~0}G-ohiɷ-v>:N6 7o|ԩau?4۷'E:}b\u񳛳uZ@ K.Ő9qď>h޽ʽ#@WNJWxbSFtjppD)N|y}W2dYiq3f 6 _S@Թ:+': .]ڹsnjSO}T%.q1 _,Ti8O?_~]+ Faxر~ի`'w2VA]re׮]+VXll~Wꫯ~'OevDe\8 (.f6`\r~%*Vv]T yO@'NxEhbXDe>Wb~F1T_k@,c\i$ӂསP1 E<燇p(x,]=LxHzFpf?Qq{jGk# .{yxW ڀx1 4WgفcWh~f6x7o`-=mp%Nbۜ6}@ M;Î{R#u?J`K֋={so-972;]`PNϘ}%B=8=sB^RI@٧8ÇcpXJ{\w KR 3q&NK H18tGoZ8*$ѧuçNvÇ$a2sܹm۶g (+tE X2eŋoJͫ"@ݿ#G绾{wExQ6c4 zg|$={[ GݿϦMpj~̙3q7:3wVkҙUk: UZ}ާQ u_U=O'ޱWJ뺯T"RǧWR$6RE@E%hFru{{ǛHI7} t |  }?x`o*ޗp~۷{# t+7_Ω$_G}AN"Dݿ N%ŋ/sFf]ȝg-#~yG;J!vBo ӧO ,@]\WKeȳm{n'0j((ۉ?Yzc8cƌ &|w7nz?'YO3@mBHQ:4gΜ'|onq^~qTlMK=8ǏuV[YcoΝO8駟 ǿ eAP>Ǩ>'KTt㯿:ܼy7Jh߾}7?3opѢE0c(kϞ=ŨJK $?_juĉ ._~髖JEAB2vHL./ϱ|׮] g&)wX! ɯfoxbG+Wt3m]SN-[lĈ6l|SޝtԿ;̙+W [.{6OO6uYKAgϞ]jϮ pTOwzٖI~Y<ֺq?GygG plOwz6I~)$ǪQݣGdMDT۷FcB?>=VXDzV¹8:ݧ@,tIc}`ԺOI'ڊbWum[s7o bV¿OwM35–ǫ>:W` v{gtZ$ T/fbL젉ef;T):RHzn'.K'>vۅ{ΜOs} H~7EqNX8 GEwntX!u տ}ݿuN98~Q):T*(EzMߦ;w>ӧO4fn'T:zf'T{ȑtY??_;wcqu~vOc~1;l~1^?F{plY?C,YJ̙3{տCA[oe {~v2ɟf!}oEs+ Pfg.\&m}7@;.Jsj]> 7\4Oݧsk vqIpOݧS] o\D?qϙ>ggb8z_@W:Ka!~档\gD[컫U"T"4$?EX+_#a—_Bn_t3gW¯!k"PuMZopF+zzODqi_[{%/O=DWKZ/bEQ})¯K3JٯS[WvJD+ :^JuC{qT7Ԩr/5P\-nW(f4,<kgt*Q뺛'Z}ZW+hbRVs?O@FR}]kf,3 s=G¯oRECc^ooVtz߲SȆozRVsBؗT\ ̰)44õ\RenuuN~Dhe_K4AZu g/C{}WlnJ%̊}e; +Fm Vur:JJd~]k%|Vhe_W `QR@hz[G 6۔V,)'o [<8ҍZWv6)Okؒ)_GBr* -*t |~6Y7ϕ,+:Wu4Jsj1],k,|wuMZ}AMP _ʢHFu]OC]p٣Z6fvϗSIȌmw@Uj7f5}~Ek.(*S2ܙ+'`Ϛ5硗(x};wn}6Ͼ_]۷qmڳgO:o+)2$%i}'\-"@B/&DDu?2"@?5r^IENDB`X Dd" j  C FA.comp521f10pset4p1atreeb K L*,4Ψ+~v nn K L*,4Ψ+~PNG  IHDR&sRGBgAMA a cHRMz&u0`:pQ<PLTE  888111555---666999(((>>>$$$ 000...???+++777***222:::'''###"""&&&,,,IIIWWWSSS[[[\\\OOOJJJAAABBBFFFCCC^^^QQQDDD@@@HHHMMMYYYUUUTTTZZZwww}}}yyyuuu```qqqdddooolllfffhhhpppjjjxxxccc~~~nnnrrraaa;bpIDATx[WoeЊ֥-n֢UZFe .("FQ6aI ILyyxefrs1^ J}}@(P$M"7.B;I@ȼ&Ї>}C׃a/>}>>sЇ>x( @,8VT]PB7K;Xw\ݛޗbmQծWWR|Dz߾$Hs (u Ќե^.sXƳKNN+Y:^ioWuvQ>g,ywnepW戸WM˾qes~I?(ۥX=oNdN2}I[^iwfnI+MG!?T'w{FM4oFЇ>}C ӷ$L/:Iz@߲wܹ?I4cd1ID@V~<@FЇ7u!U*̷5~N!"\,hzw ,[Ηm 7 ?0s;4VoJ}=UTHE0p_Y)}.kVXL/?p 5}J˩l|ѫ?Q\PʼDo9GUS!e陦7}1[QbQNi@_ZRpjSCBBqjE{HcZ5H RZ6} #*C}'jrZN)T`Z5S %m*K锆U2NsTHEb%׹oqF1H%mlѷw,@_2DC NtCGGGGGGGGGGGGGGGGJEPY>'}CЇ>Cߢc C@~}}>=H:gOL?կ0}AЇ>@Ч____BCЇ>> I'V IENDB`Dd,ppj  C FA.comp521f10pset4p1btreeb_1v^ B6; hˆ0;:n31v^ B6; hˆ0PNG  IHDR'g&bgAMA aPLTE     888???!!!'''000;;;)))---===,,,:::"""&&&555*** 999>>>666222777%%%444111...###+++(((333<<<$$$///IIIUUUEEEXXX\\\CCCKKKVVVNNNRRRPPP___TTT@@@HHHMMMZZZYYYAAAGGG^^^FFFWWWQQQBBBSSS[[[JJJOOO]]]DDDLLLjjjfffwwwxxxrrrpppiiikkkgggzzzaaacccvvveeetttsss~~~|||mmmooo}}}hhhyyyuuulll```nnnqqqddd{{{bbbEcIDATx{@LJ,(ݖDED)C("5"P4MQꂢF]_i^R|&PP M0{BDYAYQWsg93gv?o7={f~c@ ) MY O53Pf I8 eD簰0Sg2A2 ˉ/!<>A>}??e 1y}g)}`}>>>BEV6|r̮>oj`W3s׹܋,,$}엫 mgeXʯohn_ =>/Ir16"?SrkG[ڸĬ+}u¾Hߞ~ ]`#L/ͬy.>]ǣ<]f=]脄1^~ۃ}Ș=}^V#{GCʁ}u/kWX_+jk.9`S8 !}z Uڿi;Dԭ_/|o¯EVł嬨}:vvP?\)u1.6#מ H}PJ*ndPKй;aSZA*;R荙_ n~>yu1L7l~ڻ2"5t0[`_ݼ/5R7.MsC]- 8 QuN'<rȘKQTgGe?ϛd]uћE,,iͻUJ+߱A>P$0Z ϛuVxy3yJ.a`?z#2Go"~Gt3qJ4 T8lkx̲ћ/,Ecq GF;f@ה^n/[JAҍ5(f>t(}:Laݩ >}H?C}`7~K=/.473p) }ro }`_~ |X`Ʀ>>//JG_>O$Ah]V/M-'s*f^?`YP w79y/1D~ϊCF4ǯ5w}L*bNRN~uY`* {;MTo7ygDeB0#NW5z7w T;5ik> {-T )C-0GMiߍ65nos+7;>+c[۫ưuD\'[_n}f/; ֩-8X& =}˚}Tӷ^_ۂz8 oA;%d w_#_dFğŸġo|oCo&!T)',+>%VN"X?O-0bCR"*f0usvZ`_J3?0Ț;vHoNo~XD~S ͓6pr FO *UN1MEN_3s/,;hkOdZ ? xv탭o(K 3yywǺ~>>KK߁Hg %9WC$s0^#c ɛQ^W~u 15>Bw+^6L.55$yXON-47;Ei8{+bw" ~K~jsZêLΒy6b/엟|@z=~k>Xcr|)-.խ;^YwU &Rx4 Z쥍K:ŝ $+ݬg$\an\n^:zb,R ʹEd?I4Y"V쥆}vS T[%PEKU8y/݂Rkۧ)?yC/,We<bk|1è^9tu.-t9]\ P%>Bۆ:kZ`U^]H'b봩;eoΜbmkz>.y_cLa)1 |N} @8(`}AiyW,gB_BGi}Hrc7:ÆtNe~7)ǴFhݧ}`H'ٚT 97 }٧٭3' ¦}RA)no /񸿯cu5״j!^AhvKӶ60:%~\ǮܟPsHJ5F;rO/}DSq$uii *}&ʗ6INdz.H;3e:Ew"m<9k% ?!^0h.4迧Rv1̣JJxTXeڰ>e@o!̗szT x-dyXePڰ>J'B+&;~^N~/utj5cX58)>]'٣SBXR N;Tż&C WstcO۩Q%.8yRП0Yթ)-NqcU<;#2MUS:K_ib&HťXCp qJ} 1aaR:軱4(ıTD?GKSpJ&a9'*ġ| LHN)4k} Mۓtb?PK}e?8q&N{,SUw}ܱr,cGt Nӧc$IgaHt NkkʩܣeF8f9Z9ʅTB󾦜b" jk4 б$1d2}pBP؇>R CJ!1Ϡd{Q>Qu/^sXٓ?As X?XzH:E)Ӫ)Q[^Ǡ u9eX0esQwqecN9e|8>QZΠV\r 9mݵhuM6l Xjʖ[rMD1JX)2RPmC mhky~ZGe=(a[sNIYr+~HPSI[2yߒږ}8o蹚'BhrKkIENDB`Dd,ssj  C FA.comp521f10pset4p1ctreebSa5@u0fͭ W2nSa5@u0fͭ PNG  IHDR%gAMA aPLTE     888???!!!'''000;;;)))---===,,,:::"""&&&555*** 999>>>666222777%%%444111...###+++(((333<<<$$$///IIIUUUEEEXXX\\\CCCKKKVVVNNNRRRPPP___TTT@@@HHHMMMZZZYYYAAAGGG^^^FFFWWWQQQBBBSSS[[[JJJOOO]]]DDDLLLjjjfffwwwxxxrrrpppiiikkkgggzzzaaacccvvveeetttsss~~~|||mmmooo}}}hhhyyyuuulll```nnnqqqddd{{{bbbEc]IDATx}@ ǧwN["$:BڵygEw%Xhb۬ޖu,V,nֽu4gsyf?=77̏т@(RA*;ᩦ ! '!@dbC&CfB:|?!@>A@>|#ceM{ | 7a'p| 7o*~ Or.>hai<()=KS^9gp+ˎC":SyvC;Y+"w@TT;1ƬO2Ε3tȭ[ڸĬ̯|zuH]ޝvJ]X#L;{٬9+.@>Myߧ#<֝f>Y͂ȄQ^~cە}Ȩ|^K[=!@#vR5U?Bu?א<\_ X޸Ao`27zsyz%1o;j D^'W tt龟R&}xꓷ| H skhV;9U%?@\Uy{ڹvqJsFo' rr50vǩ* d4G hf2&fMRخ:# DG!ƒ*=bc`ͯY!\3Ĭg[~.cyDk e0[ _8'5ƲGld.MC]-_PMng#<or˟(({lʌQR.:UMo]GGl"IuVcwd߅|HZ` *d+SeҔD @s=ĦGd2ՏHEslf(Zhl䗜̲T$Ea!X#tշJ6oyBXݓn+GQǺ̅"gq7%U ~ ȇ@>|[|aɧgf  rk# |u>38pΧ|-| | _ҩ_ο H?؍м7ǫ_Z>dyǫ•fAǦGƛpF4v,W1rtGY_;ѧ| ,Z4iC~,9竇qv]p6OG&۹/ޯAMC*/mס‹%@v2t}_udo*OMyԘ4džzٿiWKew J>QC|VUkx_=¬!a:U߼<պu-!~)a+CkKUe;HcP'q2FnU<%AVm@ Ml{+*:F9a}8N®_sϢ9/Ҥy!=٘®Qf8čWr᫩2_>>8E+}ݼJ5( L/ISdٯ.Qi땇@veE/_MQHdTeFt ְ Ӿ3EjuMK''l#Pi^O~kG]o@L d enoU~&$9 >Hv)#qǪR7i +b[ZAE/+]2վ{R(ДsrwJʣ.-k/v|;zL_U%il UNY{:_d T_aBɝJ}uǯK*̇t#Q|͵{?"hBWuD׿e125 ]B#ox:][e֒Vڼzz"|E,]Li/v0(-i8%Ŗ\w;숮$gNI/VUҙ8'p O| xMUݬ'%lMk BNҶ1|P)Ǩ09dpR%8Zɴ!@>䓚"aΗ":u#x:z$cTk  ȗXTF_~!tRx׮S pQH~|<ź'p*$?z _N3M'NQvXO'p*ztLOEZ1(I*mi!^#.OT0NZA\QQ] -ڥVj1yB_賺D M}: 򵫙/N[gBʠM}&=GnpO #A{ٌ^'\W{ 9F!+$qJ4^Sڜb"`"i`Dd*Sʜb!Jcca6.: iU>RqqWOL0s# )MNydyXu}r"R'7ío q/T~+^Nqʋ0eOx|asO*>S&|#^u؉~D^T85IQWxNRKpnp4U Npj |e 61)SB6w pKUHc`"HvӠ|,RF\,qȗI) 7iޘ0E"]&Ӭ ,6ql B.S?,Ɖc|D8mbFL NqWޱ53??52)8 :珘$ٟ9 2)8E)ZDrzч-(4JcmlZe_NsAM"h@"AėI -LCAPJyP P CB!( 2&A{õ /I9앹TڠY.(3M[rMA:b9s/u:Li~j9PFǨΠ A 5 SCOzlyHe-Nyeatb!_wHA7>=2H籗^ 'AYs)%0l22%9GC 50Fq屗^ Ώ'4]k;ߩ|F39kgBNe}'eWPuZ辘u>( <gBAYve|6r0 Ւ~XdL!%rD@_n깗Xۺ[P:s 5\jA| CB!( '$6!{@A R}y.IENDB`Dd!<P  3 3"((Dd!<P  3 3"((Dd`'<P  3 3"((Dd`'<P   3 3"((DdX^^   S :A joinalt join b's6Cx1ޒ]E.7kQeGns6Cx1ޒ]E.7kQPNG  IHDRiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs  IDATH UjbA_1~EQHqP! ABDS!ȃ!d|X=Mf2q]AUϩӮdH Dr|>?W~Aiuu6&BA`:#NNc>"F*Jsߓ< ÏEV%_^^np\Sh}}]onno"'6ݥ~/xH$"'b1VC͍nmll9B|RbxW,܌"\e1-qvK Ep4:^׳DG೼38 z.D,]Ǚk>sstpp@8 & ]QN2WvgOc"/_IENDB`SDdn 0 J  C &Ahw4_5a b]Sb8f)?G>Nn]Sb8f)?GPNG  IHDRxzPLTEٟ-IDATX=k@pO"bХ m ~lR䤆6ZSCƃ uJ&nU-"z%dQZhiyǏ[: fv_ncb~T\=QlF}wgeQ&,:/]+N<~#}`{S/esʿ6Ȗ7t}3#>~='o*>zY#7`~}ԿM3=k.=Lz-(~}(Pp@}Jy2JTQ]r=̳Ȣ=爎r'ǵc/.?|Nd RG%Ӛjr cBc>ҴMzkvOH2^/uK$N > vk;>" #${mכNgvUolj#(6w@+ΝMX>O';M )iIENDB`Dd11^   S :A joinalt join b's6Cx1ޒ]E.7kQQns6Cx1ޒ]E.7kQPNG  IHDRiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs  IDATH UjbA_1~EQHqP! ABDS!ȃ!d|X=Mf2q]AUϩӮdH Dr|>?W~Aiuu6&BA`:#NNc>"F*Jsߓ< ÏEV%_^^np\Sh}}]onno"'6ݥ~/xH$"'b1VC͍nmll9B|RbxW,܌"\e1-qvK Ep4:^׳DG೼38 z.D,]Ǚk>sstpp@8 & ]QN2WvgOc"/_IENDB`sDd 0 J  C &Ahw4_5b bra;G"vjXnra;G"vPNG  IHDRhsPLTEٟMIDATX͊@%X'P;B/ܛвM4ZEl aks.KmPHq| ZJݶot&9Dع7)hօ ( edpi ! Oj\p* Ι3Rn"@* 48)) |_]!Zqɠdȇ$p$! (j fc-,CX\+,X} L!4 Vt&BZ@ftL\+@s% '-{ ~rhNjqFh/ ]=T+|,'03!~} t&Dog ÈMj*"z=)C?^D}hAcG8o5P.:+"=YJ|T|^B TRf6bxt`3fq@+p59CqFMT0afT;%9ЊY`LcJ_M_X˭ҷIENDB`Dd11^   S :A joinalt join b's6Cx1ޒ]E.7kQ[ns6Cx1ޒ]E.7kQPNG  IHDRiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs  IDATH UjbA_1~EQHqP! ABDS!ȃ!d|X=Mf2q]AUϩӮdH Dr|>?W~Aiuu6&BA`:#NNc>"F*Jsߓ< ÏEV%_^^np\Sh}}]onno"'6ݥ~/xH$"'b1VC͍nmll9B|RbxW,܌"\e1-qvK Ep4:^׳DG೼38 z.D,]Ǚk>sstpp@8 & ]QN2WvgOc"/_IENDB`qDdn J  C &Ahw4_5cb6p$.{Vbn6p$.{VPNG  IHDR Z~PLTEٟKIDATX?k@pO"jQ2E2t,+tj$51 Ohu ] JCu" "%$[HwO@Kk[dݻ'*19Wu\1ƺV?IzN&sI@ )O `~+K'>Aw ſE㞕o|kaSݼ?x?C_׿G8|0~ƓaWѾ;J9nܟWɑP}) +mثw ꔖQ_ ؍ (bȓ 4ϒ \gI!Q׌KhTuw-QK=mYmϹm_IKޓ>İ;AW>\NMl?M O LHkKN}d3krnz{_/˭  >w\i?Gi ׾t%_gGL/ީ|܇K7 pJwIENDB`Dd11^   S :A joinalt joinb's6Cx1ޒ]E.7kQ'fns6Cx1ޒ]E.7kQPNG  IHDRiCCPICC ProfilexTkA6n"Zkx"IYhE6bk Ed3In6&*Ezd/JZE(ޫ(b-nL~7}ov r4 Ril|Bj A4%UN$As{z[V{wwҶ@G*q Y<ߡ)t9Nyx+=Y"|@5-MS%@H8qR>׋infObN~N>! ?F?aĆ=5`5_M'Tq. VJp8dasZHOLn}&wVQygE0  HPEaP@<14r?#{2u$jtbDA{6=Q<("qCA*Oy\V;噹sM^|vWGyz?W15s-_̗)UKuZ17ߟl;=..s7VgjHUO^gc)1&v!.K `m)m$``/]?[xF QT*d4o(/lșmSqens}nk~8X<R5 vz)Ӗ9R,bRPCRR%eKUbvؙn9BħJeRR~NցoEx pHYs  IDATH UjbA_1~EQHqP! ABDS!ȃ!d|X=Mf2q]AUϩӮdH Dr|>?W~Aiuu6&BA`:#NNc>"F*Jsߓ< ÏEV%_^^np\Sh}}]onno"'6ݥ~/xH$"'b1VC͍nmll9B|RbxW,܌"\e1-qvK Ep4:^׳DG೼38 z.D,]Ǚk>sstpp@8 & ]QN2WvgOc"/_IENDB`Dd J  C &A hw4_5db\U.IR܊#Umn\U.IR܊#UPNG  IHDR %PLTEٟYIDATXA@z  /POY{so"J MUҫ/vmE.TêYֆ&&iJwBh̛Uk$mDueSj(PF{0: DJP:`c A +yH]QK2pyN6.ϯy o ADžO5N^Tύ;p>ك#تZM 6f &Dp(Le@A.UM%7Q ~C Ǯ,k-0Ã70(9Yo>X(>xc0?/d! Ep|KQi,[uzFIڥO/VK9t&-āЎàٰkݒ ^|v̡"6 o+|{u{3Rݛrok2}ܧ_Txf>|.@=zLVu 4#=AD/¥a]N)EE]`}Gcd]8]G@ `gЁ%;ڍg8  fLu+IENDB`Dd`'<P  3 3"(($$If!vh5u5585@5@#vu#v#v8#v@:Vl t65u5585@ytS$$If!vh5u5585@5@#vu#v#v8#v@:Vl t65u5585@ytS$$If!vh5u5585@5@#vu#v#v8#v@:Vl t65u5585@ytSD`D \q1NormalCJ_HaJmH nHsH tHDA@D Default Paragraph FontRi@R  Table Normal4 l4a (k@(No ListF^`F \q1 Normal (Web)dd[$\$_H*W`* \q1Strong5\.X`. \q1Emphasis6]j@#j j Table Grid7:V0: *68TVbd@&=_)57Ew "   U 4 % ?oqr  `airzEFe}MNN 00000000000000000000000000000000000000000000000000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00000000000000000000 *8Vbd@&=)57Ew "   U ?qr  `zEFe}MNN @0@00000000000@0@0@0@0@0@0@0000000@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@0@00,0-0-0.0,00.00,00,00,0000,00,00,00,00,00 0AT:P @0@0@0@0@0@0@0@0@0@0@00F0@0@0@0@0@0@0@0 009!Dd99*qSU-_CCCCCX8@0(  B S  ?!*BMNVV^u1:MTV\^dV^ .;=H Vas@jlr)LPIN)4OP R S    t x ,-fgHM{ *0B333333333333333333333333333333333333333333333 K%\q1R2s]{jSHo`airz@x&L????=0@0000<@0p@UnknownGz Times New Roman5Symbol3& z Arial?5 z Courier NewW BatangArial Unicode MS"1h}&}&*~ +~ +!884d  BQ HX ?\q12 Question 1UNCUNCOh+'0l  ( 4 @LT\d Question 1UNC Normal.dotUNC2Microsoft Office Word@| @3A@ZG~՜.+,D՜.+,8 hp|  UNC+  '  Question 1 Title 8@ _PID_HLINKSA/X5http://compgen.unc.edu/Courses/index.php/SQL_Queries#  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWYZ[\]^_`abcdefghijlmnopqrtuvwxyz}Root Entry F"GData r1TableXL%WordDocument4:SummaryInformation(kDocumentSummaryInformation8sCompObjq  FMicrosoft Office Word Document MSWordDocWord.Document.89q