SQL, nästlade delfrågor 3-19. Nästlade delfrågor. En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga.



Relevanta dokument
Relationsmodellen. Relations modellen är idag den mest änvända datamodellen för kommersiella

Andra relationella språk

Avancerad SQL Kapitel 4. Databaser: Avancerad SQL. sid SQL datatyper 1 Integritetsbegränsningar 3 Auktorisering 7 Inbäddad SQL 10 Dynamisk SQL 10

Relationsalgebra. Relationsalgebra består av en mängd operatorer som tar en eller två relationer som input och producerar en ny relation som resultat.

Grunderna i SQL del 1

Uppdelning. Relationell databasdesign, FB Teori Låt R vara ett relationsschema. R 1, R 2,..., R n är en uppdelning av

Informationssystem och Databasteknik, 2I-1100 HT2001. Relationsalgebra. Relationsalgebran är sluten: R 1 op R 2 R 3.

Laboration SQL. Kom igång.

Structured query language (SQL)

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Labb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14

Vyer, Prepared Statements, Triggers

Reducering till relationsscheman

Frågeoptimering. Frågeoptimering kapitel 14

Databasutveckling Microsoft T-SQL - Fortsättning. Funktioner GROUP BY HAVING Skapa databaser Skapa tabeller Lite om transaktioshantering

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Transaktioner. 1. Transaktioner 2. Samtidighet ( concurrency ) och lås. 3. Deadlock. Kap. 17. Informatik B: Databashantering med SQL Server

Övningar i SQL. SQLAccess.doc Ove Lundgren

Databasutveckling Introduktion till SQL och TSQL

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Lösningar till tentamen i EDAF75

Relationell databasdesign

Databasföreläsning. Del 2 lagrade procedurer, vyer och transaktioner

Lösningsförslag till Exempel tentamen

DIVISIONSEXEMPEL RELATIONSALGEBRA OCH SQL. r s använder vi för att uttrycka frågor där ordet alla figurerar:

WCMS-15, Webbutvecklare CMS

Databasspråket SQL - online.

SQL del 2. Christer Stuxberg Institutionen för Informatik och Media

Structured Query Language (SQL)

Ett databashanteringssystem (DBHS) skiljer sig från andra programmeringssystem bl.a.

ÖVERVAKNING AV SQL SERVER

08/11/13. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Deadline på tisdag

Databasspråket SQL - online.

Tentamen 4,5 hp Delkurs: Databaser och databasdesign 7,5hp Tentander: VIP2, MMD2, INF 31-60, ASP

TENTAMEN DATABASKUNSKAP ITEK12

Föreläsning 6: Introduktion av listor

Design och underhåll av databaser

Karlstads Universitet, Datavetenskap 1

Databasdesign. E-R-modellen

Vad är en databas? Databaser. Relationsdatabas. Vad är en databashanterare? Vad du ska lära dig: Ordlista

Tentamen i Databasteknik

SQL. Structured Query Language. Frågespråk för att används för. Kommandon. data åtkomst data manipulation

Databasspråket SQL - online.

Idag. 1. Från modell till databasstruktur. 2. Prata med databaser (frågepsråket SQL)

Från verklighet via modell till databas. Idag. Testa reglerna på varuhusmodellen. Från verklighet via modell till databas

E-R-modellen, E-R-diagram E-R-diagram. representerar entitetsmängder

Databaser. Vad du ska lära dig: Ordlista

Introduktion till frågespråket SQL (v0.91)

3. Dynamiska webbplatser, 20 Yhp (4 v)

1. PLSQL 2 2. Select into

TER3. Försättsblad till skriftlig tentamen vid Linköpings universitet G28 TEN1 Webprogrammering och databaser Tentamen IDA 1 (7)

Användarhandledning för SQL- och fönsterfilter

Sample exam questions. Database exam TIG058

Tentamen i Databasteknik

Databaser och SQL - en kort introduktion

Grunderna i SQL del 1

I denna laboration skriver jag inte ut resultatet på de flesta frågorna utan du kör dem själv i din miljö.

Du skall naturligtvis visa körexempel med output där det behövs i din rapport!

Vad är SQL? Introduktion till SQL

Databasspråket SQL - online.

! Teori och praktik. ! Ändringar från förra året. ! Examination (tenta, projekt) LiU. ! Varför ni? ! Varför överhuvudtaget? LiU

D1. Create Domain TEXT30 char(30) Default INGET VÄRDE! ;

Databasspråket SQL - online.

Analytisk relationsdatabasdesign

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Dugga Datastrukturer (DAT036)

Databaskunskap 7,5 högskolepoäng Provmoment: Ladokkod: Tentamen ges för:

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Databaser och. SQL, utsökningar mot flera tabeller TENTA. # radnr (#) studnr (#) kursnr * tentadatum * betyg

Databaser - Design och programmering. Kursöversikt. Exempel: telefonbok. Varför databaser?

Support Manual HoistLocatel Electronic Locks

1. SQL 2. Utsökningar mot flera tabeller. 4. IN-operatorn 5. Join 6. Kartesisk produkt 7. Tabellalias

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

Tabeller och kolumner SQL. Lägga till en ny post. Lägga till en ny post

1.Lär känna MS SQL Observera. Tips. Förberedelse

732G16: Databaser - Design och programmering

Föreläsning 13 och 14: Binära träd

Rev No. Magnetic gripper 3

TDDC74 Programmering: Abstraktion och modellering Datortenta

Starta MySQL Query Browser

Informa5onsmodellering

9. Anonyma block 10. Clean code och läsbarhet 11. Variabeltyper och variabeldeklaration 12. Olika loopar: Basic, while och for loop

1. SQL DML (Data Manipulation Language) 2. Lägga till data. 4. Uppdatera data 5. Aktivera default value 6. Hantera datum 7.

Lösningsförslag, tentamen i Databaser

INNEHÅLL. Historik Vad är SQL Språkuppbyggnad SELECT Operatorer Logiska/Jämförelse SELECT med Alias och JOIN INSERT UPDATE DELETE

07/11/14. Databasteknik och informationssystem DD1370 F2. Allmänna frågor. Är Lab0 svårbegriplig? Nu: Clickers. Är Kurswebben svårbegriplig?

Databasteknik för D1, SDU1 m fl

TENTAMEN TDDB77 Databaser och Bioinformatik 22 augusti 2006, kl 14-18

13/11/14. Databasteknik och informationssystem DD1370 F3. Ett urval ur databasen bestäms av en SQL-fråga. Påminnelse: Vad är en Databas?

Databaser - Design och programmering

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Tentamen Databasteknik

Föreläsning 2: Översikt över ett databassystem

Frågespråk och SQL. nikos dimitrakas rum 2423

Statistikens grunder 1 och 2, GN, 15 hp, deltid, kvällskurs

VHDL och laborationer i digitalteknik

Introduktion till Jasmine 1.2 ODQL

Calculate check digits according to the modulus-11 method

Transkript:

SQL, nästlade delfrågor 3-19 Nästlade delfrågor SQL har en mekanism för nästling av delfrågor: En nästlda delfråga är ett select-from-where uttryck inom where-klausulen i en annan fråga. Delfrågor används för att utföra: (dvs., ) Test för mängdmedlemskap, in, not in: Ex.: Bestäm alla kunder som har både ett lån och ett konto. select distinct customer_name from borrower where customer_name in ( select customer_name from depositor ) (select customer_name from borrower) intersect (select customer_name from depositor) (select customer_name from depositor) except (select customer_name from borrower) delfrågor Ex.: Bestäm alla kunder som har ett konto men ej ett lån. select distinct customer_name from depositor where customer_name not in ( select customer_name from borrower ) Ex.: Bestäm alla kunder som har både ett konto och ett lån vid Perryridgegrenen. Obs! Kan skrivas enklare. select distinct customer_name from borrower, loan where borrower.loan_number = loan.loan_number and = Perryridge and (, customer_name ) in ( select, customer_name from depositor, account where depositor.account_number = account.account_number ) alla kunder med ett lån vid Perryridgegrenen. Gren- och kundnamn för kunder med konton. def. r s = { tt r t s} def. r s = { tt r t s}

SQL, nästlade delfrågor 3-20 Jämförelse av mängder: SQL innehåller en some-klausul: Def.: F <comp> some r t r så att (F <comp> t ) där <comp> kan vara <,, >,, =, dvs. some står för åtminstone en, någon 0 (5 < some 5 ) = true 6 0 (5 < some 5 ) = false 0 (5 = some 5 ) = true (= some) in 0 (5 some 5 ) = true, ty 5 0 men ( some) / not in Ex.: Bestäm namnen på alla grenar som har större tillgångar än åtminstone någon gren belägen i Horseneck. Downtown North Town Perryridge Redwood Round Hill select distinct from branch where assets > some ( select distinct T. from branch as T, branch as S where T.assets > S.assets and S.city = Horseneck select assets from branch where branch_city = Horseneck ) assets 400000 1700000

SQL, nästlade delfrågor 3-21 Kardinalitet av mängder: SQL innehåller en all-klausul: Def.: F <comp> all r t r så att (F <comp> t ) där <comp> kan vara <,, >,, =, 0 (5 < all 5 ) = false 6 6 (5 < all 10 ) = true 4 (5 = all 5 ) = false (= all) / in 4 (5 all 6 ) = true ( all) not in Ex.: Bestäm namnen på alla grenar som har större tillgångar än alla grenar belägna i Horseneck. select distinct from branch where assets > all ( select assets from branch Downtown North Town Redwood Round Hil assets 400000 1700000 where branch_city = Horseneck )

SQL, nästlade delfrågor 3-22 Test för tomma relationer customer_name Johnsson SQL innehåller en exists och en not exists-klausul som returnerar true eller false beroende på om resultatet av en delfråga innehåller tupler eller ej: Def.: exists r r Ø not exists r r = Ø Obs!.: X Y = Ø X Y Ex.: Bestäm alla kunder som har ett konto i alla grenar belägna i Brooklyn. select distinct S.customer_name X Y from depositor as S where not exists ( (select from branch where branch_city = Brooklyn ) except (select R. from depositor as T, account as R where Hayes: Johnsson: Jones: Downtown Downtown Turner: Lindsay: Smith: Downtown Downtown Downtown T.account_number = R.account_number and S.customer_name = T.customer_name )) Y X grenar i Brooklyn Downtown Obs! Kan ej skrivas m.h.a. all. alla grenar där S.customer_name har ett konto Turner: Lindsay: Smith: Hayes: Johnsson: Jones: Round Hil Redwood Mianus Perryridge Downtown depositor account customer_name account_number account_number balance Hayes A-102 branch A-101 Downtown 500 Johnsson A-101 branch_city assets A-102 Perryridge 400 Johnsson A-201 Brooklyn 7100000 A-201 900 Jones A-217 Downtown Brooklyn 9000000 A-215 Mianus 700 Lindsay A-222 Mianus Horseneck 400000 A-217 750 Smith A-215 North Town Rye 3700000 A-222 Redwood 700 Turner A-305 Perryridge Horseneck 1700000 A-305 Round Hill 350 Pownal Bennington 300000 Redwood Palo Alto 2100000 Round Hill Horseneck 8000000

SQL, nästlade delfrågor 3-23 Test för avsaknad av dubblett-tupler SQL innehåller en unique-klausul och en not unique-klausul som returnerar true eller false beroende på om resultatet av en delfråga innehåller dubbletter eller ej: customer_name Hayes borrower customer_name loan_number Hayes L-16 Curry L-93 Hayes L-15 Jackson L-14 Jones L-17 Smith L-11 Smith L-23 Williams L-17 Ex.: Bestäm alla kunder som har högst ett konto i Perryridge grenen. select T.customer_name from depositor as T where unique ( select R.customer_name from account, depositor as R where T.customer_name = R.customer_name and R.account_number = account.account_number and account. = Perryridge ) Ex.: Bestäm alla kunder som har åtminstone två lån i Perryridgegrenen. select T.customer_name from borrower as T where not unique ( select R.customer_name from loan, borrower as R where loan loan_number amount L-11 Round Hill 900 L-14 Downtown 1500 L-15 Perryridge 1500 L-16 Perryridge 1300 L-17 Downtown 1000 L-23 Redwood 2000 L-93 Mianus 500 ) för R.customer_name =Hayes customer_name Hayes Hayes Ø för alla andra T.customer_name = R.customer_name and R.loan_number = loan.loan_number and loan. = Perryridge σ loan.loan_number = R.loan_number (loan ρ R (borrower)) loan_number amount R.custom R.loan_ er_name number L-11 Round Hill 900 Smith L-11 L-14 Downtown 1500 Jackson L-14 L-15 Perryridge 1500 Hayes L-15 L-16 Perryridge 1300 Hayes L-16 L-17 Downtown 1000 Jones L-17 L-17 Downtown 1000 Williams L-17 L-23 Redwood 2000 Smith L-23 L-93 Mianus 500 Curry L-93

SQL, komplexa frågor 3-24 Komplexa frågor select-from-where konstruktion Invecklade frågor kan vara omöjliga att skriva som ett enda SQL-block eller m.h.a. mängdoperatorerna. en (temporär) relation Härledda relationer SQL tillåter att ett delfrågeuttryck används i from-klausulen. Resultatet för delfrågan i from-klausulen måste ges ett namn och attributen kan döpas om. Ex.: (Alternativ till having-klausulen) Bestäm den genomsnittsliga kontobalansen för alla grenar där denna är större än 500. select, avg_balance from ( select, avg (balance) from account group by ) as branch_avg (, avg_balance) where avg_balance > 500 Obs! Ingen having-klausul används, attributen i delfrågans resultat användas i select och where. Ex.: Bestäm maximum för grenarnas totala kontobalans. select max(sum_balance) from ( select, sum (balance) from account group by ) as branch_total (, sum_balance) )? Kunde frågan uttryckas med having select, avg (balance) from account group by having avg (balance) > 500 branch_total Downtown 500 Perryridge 400 1650 Mianus 700 Redwood 700 Round Hill 350 sum_balance account account_number balance A-101 Downtown 500 A-102 Perryridge 400 A-201 900 A-215 Mianus 700 A-217 750 A-222 Redwood 700 A-305 Round Hill 350

SQL, komplexa frågor 3-25 Strukturering av frågor genom nedbrytning with-klausulen gör det möjligt att definiera en temporär relation (vy) som bara finns tillgänglig under behandling av frågan där with ingår. ide: Det är enklare att uttrycka en invecklad fråga om den bryts ner i fler delfrågor. Ex.: Bestäm alla konton med maximumbalansen. with max_balance(value) as max_balance select max(balance) value from account 900 select account_number from account, max_balance where account.balance = max_balance.value Kunde uttryckas som en nästlad (men mera svårtolkad) fråga - hur? Ex.: Bestäm alla grenar där det totala beloppet i kontona är större än genomsnittet för grenarnas totala belopp. with balance_total(, sum_balance) as select, sum (balance) from account group by account account_number balance A-101 Downtown 500 A-102 Perryridge 400 A-201 900 A-215 Mianus 700 A-217 750 A-222 Redwood 900 A-305 Round Hill 350 with balance_total_avg(value) as balance_total_avg select avg (sum_balance) value from balance_total 716.67 select from balance_total, balance_total_avg where balance_total.sum_balance > balance_total_avg.value bralance_total Downtown 500 Perryridge 400 1650 Mianus 700 Redwood 700 Round Hill 350 sum_balance

SQL, vyer 3-26 Vyer Hittills har vi antagit att relationerna är de som faktiskt finns lagrade i databasen. I vissa fall är det inte önskvärt att en användare ser hela den logiska modellen. En vy ger en mekanism med vilken viss data kan gömmas för vissa användare. Varje relation som inte tillhör den konceptuella modellen men som görs synlig för en användare som en virtuell relation kallas en vy. T.ex.: antag att vissa personer ej behöver se kunders lånebelopp. Då kunde följande relation (här uttryckt i SQL) göras synlig för dem istället för relationerna borrower och loan: select customer_name, loan_number, from borrower, loan where borrower.loan_number = loan.loan_number customer_name loan_number Adams L-16 Perryridge Curry L-93 Mianus Hayes L-15 Perryridge Jackson L-14 Downtown Jones L-17 Downtown Smith L-11 Round Hill Smith L-23 Redwood Williams L-17 Downtown En vy defingeras m.h.a. create view-satsen som har formen: create view v as < frågeuttryck > där < frågeuttryck > är ett legalt SQL-uttryck och v namnet på den virtuella relation som vyn genererar. En definition av en vy skapar inte en ny relation genom att evaluera frågeuttrycket - uttrycket substitueras i frågor där vy-namnet ingår. En vy används i SQL på samma sätt som en relation.

SQL, vyer 3-27 Ex.: create view loan_customer as select customer_name, loan_number, from borrower, loan where borrower.loan_number = loan.loan_number loan_customer customer_name loan_number Adams L-16 Perryridge Curry L-93 Mianus Hayes L-15 Perryridge Jackson L-14 Downtown Jones L-17 Downtown Smith L-11 Round Hill Smith L-23 Redwood Williams L-17 Downtown Vyns attributnamn kan specifiseras explicit, t.ex. create view loan_customer(customer_name, number, ) as select customer_name, loan_number, from borrower, loan where borrower.loan_number = loan.loan_number loan_customer customer_name number Adams L-16 Perryridge Curry L-93 Mianus Hayes L-15 Perryridge Jackson L-14 Downtown Jones L-17 Downtown Smith L-11 Round Hill Smith L-23 Redwood Williams L-17 Downtown

SQL, Modifikation av databasen 3-28 Modifikation av databasen Strykning delete from r where P Söker fram alla tupler t i relation r för vilka P(t) gäller, varefter tuplerna avlägsnas från r. Ex.: Stryk alla account tupler vid -grenen och Downtown-grenen. delete from account where = or = Downtown account account_number balance A-101 Downtown 500 A-102 Perryridge 400 A-201 900 A-215 Mianus 700 A-217 750 A-222 Redwood 700 A-305 Round Hill 350 Ex.: Stryk alla konton vid varje gren belägen i staden Brooklyn. delete from account where in (select from branch where branch_city = Brooklyn ) branch branch_city assets Brooklyn 7100000 Downtown Brooklyn 9000000 Mianus Horseneck 400000 North Town Rye 3700000 Perryridge Horseneck 1700000 Pownal Bennington 300000 Redwood Palo Alto 2100000 Round Hill Horseneck 8000000 Downtown

SQL, Modifikation av databasen 3-29 OBS! Ex.: Stryk posten för alla konton med balanser under genomsnittet vid banken delete from account where balance < some (select avg (balance) from account) Problem: När vi stryker tupler, förändras genomsnittsbalansen. Lösning i SQL: ges av RA: r r E 1. Beräkna avg(balance) och bestäm vilka tupler som skall strykas 2. Stryk alla tupler hittade ovan (dvs. ingen omberäkning av genomsnittet eller omtestning av tupler). account account_number balance A-101 Downtown 500 A-102 Perryridge 400 A-201 900 A-215 Mianus 700 A-217 750 A-222 Redwood 700 A-305 Round Hill 350 avg(balance) 514.29

SQL, Modifikation av databasen 3-30 Insättning eller insert into r values <konstant> insert into r <frågeuttryck> insert into table1 select * from table1 Frågan evalueras vilket ger en mängd tupler, varefter tuplerna insätts (ty r r E i RA). en oändlig mängd tupler insätts ej Ex.: insert into account values ( A-973,,850) eller insert into account(branch_name,balance, account_number) values (,850, A-973 ) insert into account values ( A-980, Redwood,null)

SQL, Modifikation av databasen 3-31 Uppdatering update r set <nytt värde> update r set <nytt värde> where <legal where-klausul konstruktion> case-sats case when P 1 then result 1 when P 2 then result 2... when P n then result n else result 0 end update r set A = <case-sats> Förändrar ett attributs värde i alla eller en del av tuplerna i relation r. Ex.: Öka alla konton med 5%. update account set balance = balance * 1.05 Ex.: Öka alla konton med balanser över 500 med 6% update account set balance = balance * 1.06 where balance > 500 Ex.: Öka alla konton med balanser över 500 med 6%, alla andra konton ökas med 5%. update account set balance = balance * 1.06 where balance > 500 update account set balance = balance * 1.05 where balance <= 500 Obs! ordningen är av betydelse alt.: update account set balance = case when balance <= 500 then balance * 1.05 else balance * 1.06 end

SQL, Modifikation av databasen 3-32 Modifikation av vyer Problem: En vy är virtuell om en vy uppdateras skall ändringarna göras i de verkliga relationerna i databasens logiska modell. Ex.: create view loan_info as select customer_name, amount from borrower, loan where borrower.loan_number = loan.loan_number insert into loan_info values ( Curry,850) loan_info customer_name amount Adams 1300 Curry 500 Hayes 1500 Jackson 1500 Jones 1000 Smith 900 Smith 2000 Williams 1000 borrower customer_name loan_number Adams L-16 Curry L-93 Hayes L-15 Jackson L-14 Jones L-17 Smith L-11 Smith L-23 Williams L-17 Curry null loan loan_number amount L-11 Round Hill 900 L-14 Downtown 1500 L-15 Perryridge 1500 L-16 Perryridge 1300 L-17 Downtown 1000 L-23 Redwood 2000 L-93 Mianus 500 null null 850 Efter insättningen borde en referens av loan_info ge resultatet men select customer_name, amount from borrower, loan where borrower.loan_number = loan.loan_number ger fortfarande loan_info customer_name amount Adams 1300 Curry 500 Hayes 1500 Jackson 1500 Jones 1000 Smith 900 Smith 2000 Williams 1000 Curry 850

SQL, Modifikation av databasen 3-33 Lösning: Vyer får ändast modifieras under vissa, stränga, villkor (villkoren varierar i olika batadaser) Generellt, säges en SQL vy vara modifierbar (insättning, strykning och uppdatering är tillåtet) om följande villkor är uppfylda: from-klausulen innehåller endast en databasrelation select-klausulen innehåller endast attributnamn från denna relation, och inga uttryck, aggregat eller distinct-nyckelord. Varje attribut som ej listas i select-klausulen får anta värdet null. ingen group by- eller having-klausul ingår i frågan. SQL innehåller en with check option-klausul som kan användas i creat view-konstruktionen. Hindrar att en insättning eller uppdatering utförs om det nya värdet ej uppfyller where-klausulens villkor.

SQL, Transaktioner 3-34 Transaktioner En transaktion består av en sekvens av frågor och / eller satser som modifierar databasen. SQL-standarden specifierar att: en transaktion startar då en SQL-sats utförs en transaktion avslutas av en Commit work eller Rollback work sats. Commit work De förändringar som gjorts i databasen under transaktionen görs permanenta. Rollback work De förändringar som gjorts återtas. Databasens tillstånd efter transaktionen är det samma som då transaktionen inleddes. Databassystemet garanterar att en pågående transaktion återtas i felsituationer (t.ex. systemcrash) I SQL-1999 standarden ingår ett begin atomic <satser> end block för att utmärka satserna i en transaktion.

SQL, Join 3-35 Join (f.o.m SQL-92) Join typer: join villkor: inner join natural left outer join on <predikat> right outer join using (A 1, A 2,... A n ) full outer join select * from borrower natural inner join loan select * from borrower, loan where borrower.loan_number = loan.loan_number borrower natural inner join loan customer_name loan_number amount Adams L-16 Perryridge 1300 Curry L-93 Mianus 500 Hayes L-15 Perryridge 1500 Jackson L-14 Downtown 1500 Jones L-17 Downtown 1000 Smith L-11 Round Hill 900 Smith L-23 Redwood 2000 Williams L-17 Downtown 1000 select * from borrower inner join loan using (borrower.loan_number, loan.loan_number ) select * from borrower inner join loan on borrower.loan_number = loan.loan_number customer_name borrower. loan. loan_number loan_number amount Adams L-16 L-16 Perryridge 1300 Curry L-93 L-93 Mianus 500 Hayes L-15 L-15 Perryridge 1500 Jackson L-14 L-14 Downtown 1500 Jones L-17 L-17 Downtown 1000 Smith L-11 L-11 Round Hill 900 Smith L-23 L-23 Redwood 2000 borrower Williams L-17 loan L-17 Downtown 1000 customer_name loan_number loan_number amount Adams L-16 L-11 Round Hill 900 Curry L-93 L-14 Downtown 1500 Hayes L-15 L-15 Perryridge 1500 Jackson L-14 L-16 Perryridge 1300 Jones L-17 L-17 Downtown 1000 Smith L-11 L-23 Redwood 2000 Smith L-23 L-93 Mianus 500 Williams L-17