Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
16.04.2013
Размер:
25.37 Кб
Скачать

Understanding SQL. Chapter 14 йурпмшъпчбойе ртедмпцеойс UNION ч ртедыеуфчхаэйи змбчби, нщ пвухцдбмй ТБЪМЙЮОЩЕ УРПУПВЩ ЛПФПТЩНЙ ЪБРТПУЩ НПЗХФ РПНЕЭБФШУС ПДЙО ЧОХФТШ ДТХЗПЗП. йНЕЕФУС ДТХЗПК УРПУПВ ПВЯЕДЙОЕОЙС НОПЗПЮЙУМЕООЩИ ЪБРТПУПЧ - ФП ЕУФШ ЖПТНЙТПЧБОЙЕ ЙИ Ч ПВЯЕДЙОЕОЙЕ. ч ЬФПК ЗМБЧЕ, ЧЩ ОБХЮЙФЕУШ ЙУРПМШЪПЧБФШ РТЕДМПЦЕОЙЕ UNION Ч SQL. UNION ПФМЙЮБЕФУС ПФ РПДЪБРТПУПЧ ФЕН ЮФП Ч ОЕН ОЙ ПДЙО ЙЪ ДЧХИ ( ЙМЙ ВПМШЫЕ ) ЪБРТПУПЧ ОЕ ХРТБЧМСАФУС ДТХЗЙН ЪБРТПУПН. чУЕ ЪБРТПУЩ ЧЩРПМОСАФУС ОЕЪБЧЙУЙНП ДТХЗ ПФ ДТХЗБ, Б ХЦЕ ЧЩЧПД ЙИ - ПВЯЕДЙОСЕФУС. пвяедйоеойе нопзпюйумеоощи ъбртпупч ч пдйо чЩ НПЦЕФЕ РПНЕУФЙФШ НОПЗПЮЙУМЕООЩЕ ЪБРТПУЩ ЧНЕУФЕ Й ПВЯЕДЙОЙФШ ЙИ ЧЩЧПД ЙУРПМШЪХС РТЕДМПЦЕОЙЕ UNION. рТЕДМПЦЕОЙЕ UNION ПВЯЕДЙОСЕФ ЧЩЧПД ДЧХИ ЙМЙ ВПМЕЕ SQL ЪБРТПУПЧ Ч ЕДЙОЩК ОБВПТ УФТПЛ Й УФПМВГПЧ. оБРТЙНЕТ ЮФПВЩ РПМХЮЙФШ ЧУЕИ РТПДБЧГПЧ Й ЪБЛБЪЮЙЛПЧ ТБЪНЕЭЕООЩИ Ч мПОДПОЕ Й ЧЩЧЕУФЙ ЙИ ЛБЛ ЕДЙОПЕ ГЕМПЕ ЧЩ НПЗМЙ ВЩ ЧЧЕУФЙ: SELECT snum, sname FROM Salespeople WHERE city = 'London' UNION SELECT cnum, cname FROM Customers WHERE city = 'London'; Й РПМХЮЙФШ ЧЩЧПД РПЛБЪБООЩК Ч тЙУХОЛЕ 14.1. лБЛ ЧЩ НПЦЕФЕ ЧЙДЕФШ, УФПМВГЩ ЧЩВТБООЩЕ ДЧХН ЛПНБОДБНЙ ЧЩЧЕДЕОЩ ФБЛ ЛБЛ ЕУМЙ ПОБ ВЩМБ ПДОБ. ъБЗПМПЧЛЙ УФПМВГБ ЙУЛМАЮЕОЩ, РПФПНХ ЮФП ОЙ ПДЙО ЙЪ УФПМВГПЧ ЧЩЧЕДЕООЩИ ПВЯЕДЙОЕОЙЕН, ОЕ ВЩМ ЙЪЧМЕЮЕО ОЕРПУТЕДУФЧЕООП ЙЪ ФПМШЛП ПДОПК ФБВМЙГЩ. уМЕДПЧБФЕМШОП ЧУЕ ЬФЙ УФПМВГЩ ЧЩЧПДБ ОЕ ЙНЕАФ ОЙЛБЛЙИ ЙНЕО ( УНПФТЙФЕ зМБЧХ 7, Ч ЛПФПТПК ПВУХЦДБЕФУС ЧЩЧПД УФПМВГПЧ ). лТПНЕ ФПЗП ПВТБФЙФЕ ЧОЙНБОЙЕ, ЮФП ФПМШЛП РПУМЕДОЙК ЪБРТПУ ЪБЛБОЮЙЧБЕФ- У ФПЮЛПК У ЪБРСФПК. пФУХФУФЧЙЕ ФПЮЛЙ У ЪБРСФПК ДБЕФ РПОСФШ SQL , ЮФП ЙНЕЕФУС ЕЭЕ ПДОП ЙМЙ ВПМЕЕ ЪБРТПУПЧ. =============== SQL Execution Log ============ | | | SELECT snum, sname | | FROM Salespeople | | WHERE city = 'London' | | UNION | | SELECT cnum, cname | | FROM Customers | | WHERE city = 'London'; | | ============================================= | | | | ----- -------- | | 1001 Peel | | 1004 Motika | | 2001 Hoffman | | 2006 Climens | | | ============================================= тЙУХОПЛ 14.1: жПТНЙТПЧБОЙЕ ПВЯЕДЙОЕОЙС ЙЪ ДЧХИ ЪБРТПУПЧ лпздб чщ нпцефе дембфш пвяедйоеойе нецдх ъбртпубнй ? лПЗДБ ДЧБ ( ЙМЙ ВПМЕЕ ) ЪБРТПУБ РПДЧЕТЗБАФУС ПВЯЕДЙОЕОЙА, ЙИ УФПМВГЩ ЧЩЧПДБ ДПМЦОЩ ВЩФШ УПЧНЕУФЙНЩ ДМС ПВЯЕДЙОЕОЙС. ьФП ПЪОБЮБЕФ, ЮФП ЛБЦДЩК ЪБРТПУ ДПМЦЕО ХЛБЪЩЧБФШ ПДЙОБЛПЧПЕ ЮЙУМП УФПМВГПЧ Й Ч ФПН ЦЕ РПТСДЛЕ ЮФП Й РЕТЧЩК, ЧФПТПК, ФТЕФЙК, Й ФБЛ ДБМЕЕ, Й ЛБЦДЩК ДПМЦЕО ЙНЕФШ ФЙР, УПЧНЕУФЙНЩК У ЛБЦДЩН. ъОБЮЕОЙЕ УПЧНЕУФЙНПУФЙ ФЙРПЧ - НЕОСЕФУС. ANSI УМЕДЙФ ЪБ ЬФЙН ПЮЕОШ УФТПЗП Й РПЬФПНХ ЮЙУМПЧЩЕ РПМ ДПМЦОЩ ЙНЕФШ ПДЙОБЛПЧЩК ЮЙУМПЧПК ФЙР Й ТБЪНЕТ, ИПФС ОЕЛПФПТЩЕ ЙНЕОБ ЙУРПМШЪХЕНЩЕ ANSI ДМС ЬФЙИ ФЙРПЧ СЧМСАФУС - УЙОПОЙНБНЙ. ( уНПФТЙФЕ рТЙМПЦЕОЙЕ B ДМС РПДТПВОПУФЕК ПВ ANSI ЮЙУМПЧЩИ ФЙРБИ. ) лТПНЕ ФПЗП, УЙНЧПМШОЩЕ РПМС ДПМЦОЩ ЙНЕФШ ПДЙОБЛПЧПЕ ЮЙУМП УЙНЧПМПЧ ( ЪОБЮЕОЙЕ РТЕДОБЪОБЮЕООПЗП ОПНЕТБ, ОЕ ПВСЪБФЕМШОП ФБЛПЕ ЦЕ ЛБЛ ЙУРПМШЪХЕНЩК ОПНЕТ ). иПТПЫП, ЮФП ОЕЛПФПТЩЕ SQL РТПЗТБННЩ ПВМБДБАФ ВПМШЫЕК ЗЙВЛПУФША ЮЕН ЬФП ПРТЕДЕМСЕФУС ANSI. фЙРЩ ОЕ ПРТЕДЕМЕООЩЕ ANSI, ФБЛЙЕ ЛБЛ DATA Й BINARY, ПВЩЮОП ДПМЦОЩ УПЧРБДБФШ У ДТХЗЙНЙ УФПМВГБНЙ ФБЛПЗП ЦЕ ОЕУФБОДБТФОПЗП ФЙРБ. дМЙОБ УФТПЛЙ ФБЛЦЕ НПЦЕФ УФБФШ РТПВМЕНПК. вПМШЫЙОУФЧП РТПЗТБНН ТБЪТЕЫБАФ РПМ РЕТЕНЕООПК ДМЙОЩ, ОП ПОЙ ОЕ ПВСЪБФЕМШОП ВХДХФ ЙУРПМШЪПЧБФШУС У UNION. у ДТХЗПК УФПТПОЩ, ОЕЛПФПТЩЕ РТПЗТБННЩ (Й ANSI ФПЦЕ) ФТЕВХАФ ЮФПВЩ УЙНЧПМШ- ОЩЕ РПМС ВЩМЙ ФПЮОП ТБЧОПК ДМЙОЩ. ч ЬФЙИ ЧПРТПУБИ ЧЩ ДПМЦОЩ РТПЛПОУХМШФЙТПЧБФШУС У ДПЛХНЕОФБГЙЕК ЧБЫЕК УПВУФЧЕООПК РТПЗТБННЩ. дТХЗПЕ ПЗТБОЙЮЕОЙЕ ОБ УПЧНЕУФЙНПУФШ - ЬФП ЛПЗДБ РХУФЩЕ ЪОБЮЕОЙС(NULL) ЪБРТЕЭЕОЩ Ч МАВПН УФПМВГЕ ПВЯЕДЙОЕОЙС, РТЙЮЕН ЬФЙ ЪОБЮЕОЙС ОЕПВИПДЙНП ЪБРТЕФЙФШ Й ДМС ЧУЕИ УППФЧЕФУФЧХАЭЙИ УФПМВГПЧ Ч ДТХЗЙИ ЪБРТПУБИ ПВЯЕДЙОЕОЙС. рХУФЩЕ ЪОБЮЕОЙС(NULL) ЪБРТЕЭЕОЩ У ПЗТБОЙЮЕОЙЕН NOT NULL, ЛПФПТПЕ ВХДЕФ ПВУХЦДБФШУС Ч зМБЧЕ 18. лТПНЕ ФПЗП, ЧЩ ОЕ НПЦЕФЕ ЙУРПМШЪПЧБФШ UNION Ч РПД- ЪБРТПУБИ, Б ФБЛЦЕ ОЕ НПЦЕФЕ ЙУРПМШЪПЧБФШ БЗТЕЗБФОЩЕ ЖХОЛГЙЙ Ч РТЕДМПЦЕОЙЙ SELECT ЪБРТПУБ Ч ПВЯЕДЙОЕОЙЙ. ( вПМШЫЙОУФЧП РТПЗТБНН РТЕОЕВТЕЗБАФ ЬФЙНЙ ПЗТБОЙЮЕОЙСНЙ. ) UNION й хуфтбоеойе дхвмйлбфпч UNION ВХДЕФ БЧФПНБФЙЮЕУЛЙ ЙУЛМАЮБФШ ДХВМЙЛБФЩ УФТПЛ ЙЪ ЧЩЧПДБ. ьФП ОЕЮФП ОЕУЧПКУФЧЕООПЕ ДМС SQL, ФБЛ ЛБЛ ПДЙОПЮОЩЕ ЪБРТПУЩ ПВЩЮОП УПДЕТ- ЦБФ DISTINCT ЮФПВЩ ХУФТБОСФШ ДХВМЙЛБФЩ. оБРТЙНЕТ ЪБРТПУ, ЮЕК ЧЩЧПД РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 14.2, SELECT snum, city FROM Customers; ЙНЕЕФ ДЧПКОХА ЛПНВЙОБГЙА ЪОБЮЕОЙК ( snum=1001, city=London ), РПФПНХ ЮФП НЩ ОЕ ХЛБЪБМЙ, ЮФПВЩ SQL ХУФТБОЙМ ДХВМЙЛБФЩ. пДОБЛП, ЕУМЙ НЩ ЙУРПМШЪХЕН =============== SQL Execution Log ============ | | | SELECT snum, city | | FROM Customers; | | ============================================= | | snum city | | ----- -------- | | 1001 London | | 1003 Rome | | 1002 San Jose | | 1002 Berlin | | 1001 London | | 1004 Rome | | 1007 San Jose | | | ============================================= тЙУХОПЛ 14.2: пДЙОПЮОЩК ЪБРТПУ У ДХВМЙТПЧБООЩН ЧЩЧПДПН UNION Ч ЛПНВЙОБГЙЙ ЬФПЗП ЪБРТПУБ У ЕНХ РПДПВОЩН Ч ФБВМЙГЕ рТПДБЧГПЧ, ФП ЬФБ ЙЪВЩФПЮОБС ЛПНВЙОБГЙС ВХДЕФ ХУФТБОЕОБ. тЙУХОПЛ 14.3 РПЛБЪЩЧБЕФ ЧЩЧПД УМЕДХАЭЕЗП ЪБРТПУБ. SELECT snum, city FROM Customers UNION SELECT snum, city FROM Salespeople.; =============== SQL Execution Log ============ | | | FROM Customers | | UNION | | SELECT snum, sity | | FROM Salespeople; | | ============================================= | | | | ----- -------- | | 1001 London | | 1002 Berlin | | 1007 San Jose | | 1007 New York | | 1003 Rome | | 1001 London | | 1003 Rome | | 1002 Barcelona | | 1007 San Jose | | | ----------------------------------------------- тЙУХОПЛ 14.3: UNION ХУФТБОСЕФ ДЧПКОПК ЧЩЧПД чЩ НПЦЕФЕ РПМХЮЙФШ ОЕЮФП РПИПЦЕЕ ( Ч ОЕЛПФПТЩИ РТПЗТБННБИ SQL, ЙУРПМШЪХС UNION ALL ЧНЕУФП РТПУФП UNION, ОБРПДПВЙЕ ЬФПЗП: SELECT snum, city FROM Customers UNION ALL SELECT snum, city FROM Salespeople; йурпмшъпчбойе уфтпл й чщтбцеойк у UNION йОПЗДБ, ЧЩ НПЦЕФЕ ЧУФБЧМСФШ ЛПОУФБОФЩ Й ЧЩТБЦЕОЙС Ч РТЕДМПЦЕОЙЙ SELECT ЙУРПМШЪХЕНЩЕ У UNION. ьФП ОЕ УМЕДХЕФ УФТПЗП ХЛБЪБОЙСН ANSI, ОП ЬФП РПМЕЪОБ Й ОЕПВЩЮОП ЙУРПМШЪХЕНБС ЧПЪНПЦОПУФШ. лПОУФБОФЩ Й ЧЩТБЦЕОЙС ЛПФПТЩЕ ЧЩ ЙУРПМШЪХЕФЕ, ДПМЦОЩ ЧУФТЕЮБФШ УПЧНЕУФЙНЩЕ УФБОДБТФЩ ЛПФПТЩЕ НЩ ЧЩДЕМСМЙ ТБОЕЕ. ьФБ УЧПКУФЧП РПМЕЪОП, ОБРТЙНЕТ, ЮФПВЩ ХУФБОБЧМЙЧБФШ ЛПННЕОФБТЙЙ ХЛБЪЩЧБАЭЙЕ ЛБЛПК ЪБРТПУ ЧЩЧЕМ ДБООХА УФТПЛХ. рТЕДРПМПЦЙН ЮФП ЧЩ ДПМЦОЩ УДЕМБФШ ПФЮЕФ П ФПН, ЛБЛЙЕ РТПДБЧГЩ РТПЙЪЧПДСФ ОБЙВПМШЫЙЕ Й ОБЙНЕОШЫЙЕ РПТСДЛЙ РП ДБФБН. нЩ НПЦЕН ПВЯЕДЙОЙФШ ДЧБ ЪБРТПУБ, ЧУФБЧЙЧ ФХДБ ФЕЛУФ ЮФПВЩ ТБЪМЙЮБФШ ЧЩЧПД ДМС ЛБЦДПЗП ЙЪ ОЙИ. SELECT a.snum, sname, onum, 'Highest on', odate FROM (Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MAX (amt) FROM Orders c WHERE c.odate = b.odate ) UNION SELECT a.snum, (sname, (onum ' Lowest on', odate FROM ( Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MIN (amt) FROM Orders c WHERE c.odate = b.odate ); чЩЧПД ЙЪ ЬФПК ЛПНБОДЩ РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 14.4. нЩ ДПМЦОЩ ВЩМЙ ДПВБЧЙФШ ДПРПМОЙФЕМШОЩК РТПВЕМ Ч УФТПЛХ 'Lowest on', ЮФПВЩ УДЕМБФШ ЕЕ УПЧРБДБАЭЕК РП ДМЙОЕ УП УФТПЛПК 'Highest on'. пВТБФЙФЕ ЧОЙНБОЙЕ ЮФП Peel ЧЩВТБО РТЙ ОБМЙЮЙЙ Й УБНПЗП ЧЩУПЛПЗП Й УБНПЗП ОЙЪЛПЗП ( ЖБЛФЙЮЕУЛЙ ПО ЕДЙОУФЧЕООЩК ) РПТСДЛБ ОБ 5 пЛФСВТС. фБЛ ЛБЛ ЧУФБЧМСЕНЩЕ УФТПЛЙ ДЧХИ ЬФЙИ ЪБРТПУПЧ ТБЪМЙЮОЩ, УФТПЛЙ ОЕ ВХДХФ ХУФТБОЕОЩ ЛБЛ ДХВМЙЛБФЩ. =============== SQL Execution Log ============ | | | AND b.amt = | | ( SELECT min (amt) | | FROM Orders c | | WHERE c.odate = b.odate); | | ============================================= | | | | ----- ------- ------ ---------- ----------- | | 1001 Peel 3008 Highest on 10/05/1990 | | 1001 Peel 3008 Lowest on 10/05/1990 | | 1001 Peel 3011 Highest on 10/06/1990 | | 1002 Serres 3005 Highest on 10/03/1990 | | 1002 Serres 3007 Lowest on 10/04/1990 | | 1002 Serres 3010 Lowest on 10/06/1990 | | 1003 Axelrod 3009 Highest on 10/04/1990 | | 1007 Rifkin 3001 Lowest on 10/03/1990 | =============================================== тЙУХОПЛ 14.4: чЩВПТ ОБЙЧЩУЫЙИ Й ОБЙОЙЪЫЙИ РПТСДЛПЧ, ПРТЕДЕМСЕНЩИ У РПНПЭША УФТПЛ йурпмшъпчбойе UNION у ORDER BY дП УЙИ РПТ, НЩ ОЕ ПЗПЧБТЙЧБМЙ ЮФП ДБООЩЕ НОПЗПЮЙУМЕООЩИ ЪБРТПУПЧ ВХДХФ ЧЩЧПДЙФШУС Ч ЛБЛПН ФП ПУПВПН РПТСДЛЕ. нЩ РТПУФП РПЛБЪЩЧБМЙ ЧЩЧПД УОБ- ЮБМБ ЙЪ ПДОПЗП ЪБРТПУБ Б ЪБФЕН ЙЪ ДТХЗПЗП. лПОЕЮОП, ЧЩ ОЕ НПЦЕФЕ РПМБЗБФШУС ОБ ЧЩЧПД РТЙИПДСЭЙК Ч РТПЙЪЧПМШОПН РПТСДЛЕ. нЩ ЛБЛ ТБЪ УДЕМБЕН ФБЛ ЮФПВЩ ЬФПФ УРПУПВ ДМС ЧЩРПМОЕОЙС РТЙНЕТПЧ ВЩМ ВПМЕЕ РТПУФЩН. чЩ НПЦЕФЕ, ЙУРПМШЪПЧБФШ РТЕДМПЦЕОЙЕ ORDER BY ЮФПВЩ ХРПТСДПЮЙФШ ЧЩЧПД ЙЪ ПВЯЕДЙОЕОЙС, ФПЮОП ФБЛ ЦЕ ЛБЛ ЬФП ДЕМБЕФУС Ч ЙОДЙЧЙДХБМШОЩИ ЪБРТПУБИ. дБЧБКФЕ РЕТЕУНПФТЙН ОБЫ РПУМЕДОЙК РТЙНЕТ ЮФПВЩ ХРПТСДПЮЙФШ ЙНЕОБ У РПНПЭША ЙИ РПТСДЛПЧЩИ ОПНЕТПЧ. ьФП НПЦЕФ ЧОЕУФЙ РТПФЙЧПТЕЮЙЕ, ФБЛПЕ ЛБЛ РПЧФПТЕОЙЕ ЙНЕОЙ Peel Ч РПУМЕДОЕК ЛПНБОДЕ, ЛБЛ ЧЩ УНПЦЕФЕ ХЧЙДЕФШ ЙЪ ЧЩЧПДБ РПЛБЪБООПЗП Ч тЙУХОЛЕ 14.5. SELECT a.snum, sname, onum, 'Highest on', odate FROM Salespeople a, Orders b WHERE a.snum = b.snum AND b.amt = ( SELECT MAX (amt) FROM Orders c WHERE c.odate = b.odate ) UNION SELECT a.snum, (sname, (onum, 'Lowest on', odat FROM Salespeople a, Orders b WHEREa.snum = b.snum AND b.amt = ( SELECT MIN (amt) FROM Orders c WHERE c.odate = b.odate ) ORDER BY 3; =============== SQL Execution Log ============ | ( SELECT min (amt) | | FROM Orders c | | WHERE c.odate = b.odate) | | ORDER BY 3; | | ============================================= | | | | ----- ------- ------ ---------- ----------- | | 1007 Rifkin 3001 Lowest on 10/03/1990 | | 1002 Serres 3005 Highest on 10/03/1990 | | 1002 Serres 3007 Lowest on 10/04/1990 | | 1001 Peel 3008 Highest on 10/05/1990 | | 1001 Peel 3008 Lowest on 10/05/1990 | | 1003 Axelrod 3009 Highest on 10/04/1990 | | 1002 Serres 3010 Lowest on 10/06/1990 | | 1001 Peel 3011 Highest on 10/06/1990 | =============================================== тЙУХОПЛ 14.5: жПТНЙТПЧБОЙЕ ПВЯЕДЙОЕОЙС У ЙУРПМШЪПЧБОЙЕН ORDER BY рПЛБ ORDER BY ЙУРПМШЪХЕФУС РП ХНПМЮБОЙА, НЩ ОЕ ДПМЦОЩ ЕЗП ХЛБЪЩЧБФШ. нЩ НПЦЕН ХРПТСДПЮЙФШ ОБЫ ЧЩЧПД У РПНПЭША ОЕУЛПМШЛЙИ РПМЕК, ПДОП ЧОХФТЙ ДТХЗПЗП Й ХЛБЪБФШ ASC ЙМЙ DESC ДМС ЛБЦДПЗП, ФПЮОП ФБЛЦЕ ЛБЛ НЩ ДЕМБМЙ ЬФП ДМС ПДЙОПЮ- ОЩИ ЪБРТПУПЧ. ъБНЕФШФЕ, ЮФП ОПНЕТ 3 Ч РТЕДМПЦЕОЙЙ ORDER BY ХЛБЪЩЧБЕФ ЛБЛПК УФПМВЕГ ЙЪ РТЕДМПЦЕОЙС SELECT ВХДЕФ ХРПТСДПЮЕО. фБЛ ЛБЛ УФПМВГЩ ПВЯЕДЙОЕОЙС - ЬФП УФПМВГЩ ЧЩЧПДБ, ПОЙ ОЕ ЙНЕАФ ЙНЕО, Й УМЕДПЧБФЕМШОП, ДПМЦОЩ ПРТЕДЕМСФШУС РП ОПНЕТХ. ьФПФ ОПНЕТ ХЛБЪЩЧБЕФ ОБ ЙИ НЕУФП УТЕДЙ ДТХЗЙИ УФПМВГПЧ ЧЩЧПДБ. ( уНПФТЙФЕ зМБЧХ 7 ПВУХЦДБАЭХА УФПМВГЩ ЧЩЧПДБ.) чоеыоее пвяедйоеойе пРЕТБГЙС ЛПФПТБС ВЩЧБЕФ ЮБУФП РПМЕЪОБ - ЬФП ПВЯЕДЙОЕОЙЕ ЙЪ ДЧХИ ЪБР- ТПУПЧ Ч ЛПФПТПН ЧФПТПК ЪБРТПУ ЧЩВЙТБЕФ УФТПЛЙ, ЙУЛМАЮЕООЩЕ РЕТЧЩН. оБЙВПМЕЕ ЮБУФП, ЧЩ ВХДЕФЕ ДЕМБФШ ЬФП, ФБЛ ЮФПВЩ ОЕ ЙУЛМАЮБФШ УФТПЛЙ ЛПФПТЩЕ ОЕ ХДПЧМЕФЧПТЙМЙ РТЕДЙЛБФХ РТЙ ПВЯЕДЙОЕОЙЙ ФБВМЙГ. ьФП ОБЪЩЧБЕФУС - ЧОЕЫОЙН ПВЯЕДЙОЕОЙЕН. рТЕДРПМПЦЙН ЮФП ОЕЛПФПТЩЕ ЙЪ ЧБЫЙИ ЪБЛБЪЮЙЛПЧ ЕЭЕ ОЕ ВЩМЙ ОБЪОБЮЕОЩ Л РТПДБЧГБН. чЩ НПЦЕФЕ ЪБИПФЕФШ ХЧЙДЕФШ ЙНЕОБ Й ЗПТПДБ ЧУЕИ ЧБЫЙИ ЪБЛБЪЮЙЛПЧ, У ЙНЕОБНЙ ЙИ РТПДБЧГПЧ, ОЕ ХЮЙФЩЧБС ФЕИ ЛФП ЕЭЕ ОЕ ВЩМ ОБЪОБЮЕО. чЩ НПЦЕФЕ ДПУФЙЮШ ЬФПЗП, ЖПТНЙТХС ПВЯЕДЙОЕОЙЕ ЙЪ ДЧХИ ЪБР- ТПУПЧ, ПДЙО ЙЪ ЛПФПТЩИ ЧЩРПМОСЕФ ПВЯЕДЙОЕОЙЕ, Б ДТХЗПК ЧЩВЙТБЕФ ЪБЛБЪ- ЮЙЛПЧ У РХУФЩНЙ(NULL) ЪОБЮЕОЙСНЙ РПМ snum. ьФПФ РПУМЕДОЙК ЪБРТПУ ДПМЦЕО ЧУФБЧМСФШ РТПВЕМЩ Ч РПМ УППФЧЕФУФЧХАЭЙЕ РПМА sname Ч РЕТЧПН ЪБРТПУЕ. лБЛ Й ТБОШЫЕ, ЧЩ НПЦЕФЕ ЧУФБЧМСФШ ФЕЛУФПЧЩЕ УФТПЛЙ Ч ЧБЫ ЧЩЧПД ЮФПВЩ ЙДЕОФЙЖЙГЙТПЧБФШ ЪБРТПУ ЛПФПТЩК ЧЩЧЕМ ДБООХА УФТПЛХ. йУРПМШЪПЧБОЙЕ ЬФПК НЕФПДЙЛЙ ЧП ЧОЕЫОЕН ПВЯЕДЙОЕОЙЙ, ДБЕФ ЧПЪНПЦОПУФШ ЙУРПМШЪПЧБФШ РТЕДЙЛБФЩ ДМС ЛМБУУЙЖЙЛБГЙЙ, Б ОЕ ДМС ЙУЛМАЮЕОЙС. нЩ ЙУРПМШЪПЧБМЙ РТЙНЕТ ОБИПЦДЕОЙС РТПДБЧГПЧ У ЪБЛБЪЮЙЛБНЙ ТБЪНЕЭЕООЩНЙ Ч ЙИ ЗПТПДБИ Й ТБОШЫЕ. пДОБЛП ЧНЕУФП РТПУФП ЧЩВПТБ ФПМШЛП ЬФЙИ УФТПЛ, ЧЩ ЧПЪНПЦОП ЪБИПФЙФЕ ЮФПВЩ ЧБЫ ЧЩЧПД РЕТЕЮЙУМСМ ЧУЕИ РТП- ДБЧГПЧ, Й ХЛБЪЩЧБМ ФЕИ, ЛФП ОЕ ЙНЕМ ЪБЛБЪЮЙЛПЧ Ч ЙИ ЗПТПДБИ, Й ЛФП ЙНЕМ. уМЕДХАЭЙК ЪБРТПУ, ЮЕК ЧЩЧПД РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 14.6, ЧЩРПМОЙФ ЬФП: SELECT Salespeople.snum, sname, cname, comm FROM (Salespeople, Customers WHERE Salespeople.city = Customers.city. UNION SELECT snum, sname, ' NO MATCH ', comm FROM (Salespeople WHERE NOT city = ANY ( SELECT city FROM Customers ) ORDER BY 2 DESC; =============== SQL Execution Log ============ | | | FROM Salespeople | | WHERE NOT city = ANYate) | | ( SELECT city | | FROM Customers) | | ORDER BY 2 DESC; | | ============================================= | | | | ----- ------- --------- ------------ | | 1002 Serres Cisneros 0.1300 | | 1002 Serres Liu 0.1300 | | 1007 Rifkin NO MATCH 0.1500 | | 1001 Peel Clemens 0.1200 | | 1001 Peel Hoffman 0.1200 | | 1004 Motika Clemens 0.1100 | | 1004 Motika Hoffman 0.1100 | | 1003 Axelrod NO MATCH 0.1000 | | | =============================================== тЙУХОПЛ 14. 6: чОЕЫОЕЕ ПВЯЕДЙОЕОЙЕ уФТПЛБ ' NO MATCH ' ВЩМБ ДПРПМОЕОБ РТПВЕМБНЙ, ЮФПВЩ РПМХЮЙФШ УПЧРБДЕОЙЕ РПМС cname РП ДМЙОЕ ( ЬФП ОЕ ПВСЪБФЕМШОП ЧП ЧУЕИ ТЕБМЙЪБГЙСИ SQL ). чФПТПК ЪБРТПУ ЧЩВЙТБЕФ ДБЦЕ ФЕ УФТПЛЙ ЛПФПТЩЕ ЙУЛМАЮЙМ РЕТЧЩК. чЩ НПЦЕФЕ ФБЛЦЕ ДПВБЧЙФШ ЛПННЕОФБТЙК ЙМЙ ЧЩТБЦЕОЙЕ Л ЧБЫЕНХ ЪБРТПУХ, Ч ЧЙДЕ ДПРПМОЙФЕМШОПЗП РПМС. еУМЙ ЧЩ УДЕМБЕФЕ ЬФП, ЧЩ ВХДЕФЕ ДПМЦОЩ ДПВБЧЙФШ ОЕЛПФПТЩК ДПРПМОЙФЕМШОЩК ЛПННЕОФБТЙК ЙМЙ ЧЩТБЦЕОЙЕ, Ч ФПК ЦЕ УБ- НПК РПЪЙГЙЙ УТЕДЙ ЧЩВТБООЩИ РПМЕК, ДМС ЛБЦДПЗП ЪБРТПУБ Ч ПРЕТБГЙЙ ПВЯЕДЙОЕОЙС. уПЧНЕУФЙНПУФШ UNION РТЕДПФЧТБЭБЕФ ЧБУ ПФ ДПВБЧМЕОЙС ДПРПМОЙФЕМШОПЗП РПМС ДМС РЕТЧПЗП ЪБРТПУБ, ОП ОЕ ДМС ЧФПТПЗП. йНЕЕФУС ЪБРТПУ ЛПФПТЩК ДПВБЧМСЕФ УФТПЛЙ Л ЧЩВТБООЩН РПМСН, Й ХЛБЪЩЧБЕФ УПЧРБДБЕФ МЙ ДБООЩК РТПДБЧЕГ У ЕЗП ЪБЛБЪЮЙЛПН Ч ЕЗП ЗПТПДЕ: SELECT a.snum, sname, a.city, ' MATCHED ' FROM Salespeople a, Customers b WHERE a.city = b.city UNION SELECT snum, sname, city, 'NO MATCH' FROM Salespeople WHERE NOT city = ANY ( SELECT city FROM Customers ) ORDER BY 2 DESC; тЙУХОПЛ 14,7 РПЛБЪЩЧБЕФ ЧЩЧПД ЬФПЗП ЪБРТПУБ. =============== SQL Execution Log ============ | | | WHERE a.city = b.city | | UNION | | SELECT snum,sname,city, 'NO MATCH' | | FROM Salespeople | | WHERE NOT city = ANYate) | | ( SELECT city | | FROM Customers) | | ORDER BY 2 DESC; | | ============================================= | | | | ----- ------- ------------ --------- | | 1002 Serres San Jose MATCHED | | 1007 Rifkin Barselona NO MATCH | | 1001 Peel London MATCHED | | 1004 Motika London MATCHED | | 1003 Axelrod New York NO MATCH | | | =============================================== тЙУХОПЛ 14. 7: чОЕЫОЕЕ ПВЯЕДЙОЕОЙЕ У РПМЕН ЛПННЕОФБТЙС ьФП ОЕ РПМОПЕ ЧОЕЫОЕЕ ПВЯЕДЙОЕОЙЕ, ФБЛ ЛБЛ ПОП ЧЛМАЮБЕФ ФПМШЛП ОЕУПЧРБДБАЭЙЕ РПМС ПДОПК ЙЪ ПВЯЕДЙОСЕНЩИ ФБВМЙГ. рПМОПЕ ЧОЕЫОЕЕЕ ПВЯЕДЙОЕОЙЕ ДПМЦОП ЧЛМАЮБФШ ЧУЕИ ЪБЛБЪЮЙЛПЧ ЙНЕАЭЙИ Й ОЕ ЙНЕАЭЙИ РТП- ДБЧГПЧ Ч ЙИ ЗПТПДБИ. фБЛПЕ ХУМПЧЙЕ ВХДЕФ ВПМЕЕ РПМОЩН, ЛБЛ ЧЩ ЬФП УНПЦЕФЕ ХЧЙДЕФШ (ЧЩЧПД УМЕДХАЭЕЗП ЪБРТПУБ РПЛБЪБО ОБ тЙУХОЛЕ 14,8 ) : SELECT snum, city, 'SALESPERSON - MATCH' FROM Salespeople WHERE NOT city = ANY (SELECT city FROM Customers) UNION SELECT snum, city, 'SALESPERSON - NO MATCH' FROM Salespeople WHERE NOT city = ANY (SELECT city FROM Customers)) UNION (SELECT cnum, city, 'CUSTOMER - MATCHED' FROM Customers WHERE city = ANY (SELECT city FROM Salespeople) UNION SELECT cnum, city, 'CUSTOMER - NO MATCH' FROM Customers WHERE NOT city = ANY (SELECT city FROM Salespeople)) ORDER BY 2 DESC; =============== SQL Execution Log =============== | | | FROM Salespeople) | | ORDER BY 2 DESC; | | | | ================================================ | | | | ---- -------- ------------------------ | | 2003 San Jose CUSTOMER - MATCHED | | 2008 San Jose CUSTOMER - MATCHED | | 2002 Rome CUSTOMER - NO MATCH | | 2007 Rome CUSTOMER - NO MATCH | | 1003 New York SALESPERSON - MATCHED | | 1003 New York SALESPERSON - NO MATCH | | 2001 London CUSTOMER - MATCHED | | 2006 London CUSTOMER - MATCHED | | 2004 Berlin CUSTOMER - NO MATCH | | 1007 Barcelona SALESPERSON - MATCHED | | 1007 Barcelona SALESPERSON - NO MATCH | | | ================================================== тЙУХОПЛ 1.8: рПМОПЕ ЧОЕЫОЕЕ ПВЯЕДЙОЕОЙЕ ( рПОСФОП, ЮФП ЬФБ ЖПТНХМБ ЙУРПМШЪХАЭБС ANY - ЬЛЧЙЧБМЕОФОБ ПВЯЕДЙОЕОЙА Ч РТЕДЩДХЭЕН РТЙНЕТЕ. ) уПЛТБЭЕООПЕ ЧОЕЫОЕЕ ПВЯЕДЙОЕОЙЕ У ЛПФПТПЗП НЩ ОБЮЙОБМЙ, ЙУРПМШЪХЕФ- У ЮБЭЕ ЮЕН ЬФПФ РПУМЕДОЙК РТЙНЕТ. ьФПФ РТЙНЕТ, ПДОБЛП, ЙНЕЕФ ДТХЗПК УНЩУМ. чУСЛЙК ТБЪ, ЛПЗДБ ЧЩ ЧЩРПМОСЕФЕ ПВЯЕДЙОЕОЙЕ ВПМЕЕ ЮЕН ДЧХИ ЪБРТПУПЧ, ЧЩ НПЦЕФЕ ЙУРПМШЪПЧБФШ ЛТХЗ- МЩЕ УЛПВЛЙ ЮФПВЩ ПРТЕДЕМЙФШ РПТСДПЛ ПГЕОЛЙ. дТХЗЙНЙ УМПЧБНЙ, ЧНЕУФП РТПУФП - query X UNION query Y UNION query Z; ЧЩ ДПМЦОЩ ХЛБЪБФШ, ЙМЙ ( query X UNION query Y )UNION query Z; ЙМЙ query X UNION ( query Y UNION query Z ); ьФП РПФПНХ, ЮФП UNION Й UNION ALL НПЗХФ ВЩФШ УЛПНВЙОЙТПЧБОЩ, ЮФПВЩ ХДБМСФШ ПДОЙ ДХВМЙЛБФЩ, ОЕ ХДБМ ДТХЗЙИ. рТЕДМПЦЕОЙЕ - ( query X UNION ALL query Y )UNION query Z; ОЕ ПВСЪБФЕМШОП ЧПУРТПЙЪЧЕДЕФ ФЕ ЦЕ ТЕЪХМШФБФЩ ЮФП РТЕДМПЦЕОЙЕ - query X UNION ALL( query Y UNION query Z ); ЕУМЙ ДЧПКОЩЕ УФТПЛЙ Ч ОЕН, ВХДХФ ХДБМЕОЩ. теъане фЕРЕТШ ЧЩ ЪОБЕФЕ ЛБЛ ЙУРПМШЪПЧБФШ РТЕДМПЦЕОЙЕ UNION, ЛПФПТПЕ ДБЕФ ЧПЪНПЦОПУФШ ПВЯЕДЙОСФШ МАВПЕ ЮЙУМП ЪБРТПУПЧ Ч ЕДЙОПЕ ФЕМП ЧЩЧПДБ. еУМЙ ЧЩ ЙНЕЕФЕ ТСД РПДПВОЩИ ФБВМЙГ - ФБВМЙГ, УПДЕТЦБЭЙИ РПИПЦХА ЙОЖПТНБГЙА, ОП РТЙОБДМЕЦБЭХА ТБЪОЩН РПМШЪПЧБФЕМСН Й ПИЧБФЩЧБАЭХА ТБЪМЙЮОЩЕ ПУПВЕООПУФЙ, ЧПЪНПЦОП - ЮФП ПВЯЕДЙОЕОЙЕ УНПЦЕФ ПВЕУРЕЮЙФШ РТПУФПК УРПУПВ ДМС УМЙСОЙС Й ХРПТСДПЮЙЧБОЙС ЧЩЧПДБ. бОБМПЗЙЮОП, ЧОЕЫ- ОЙЕ ПВЯЕДЙОЕОЙС ДБАФ ЧБН ОПЧЩК УРПУПВ ЙУРПМШЪПЧБОЙС ХУМПЧЙК, ОЕ ДМС ЙУЛМАЮЕОЙС ЧЩЧПДБ, Б ДМС ЕЗП НБТЛЙТПЧЛЙ ЙМЙ ПВТБВПФЛЙ ЕЗП ЮБУФЕК, ЛП- ЗДБ ЧУФТЕЮБЕФУС ХУМПЧЙЕ ПФМЙЮБАЭЕЕУС ПФ ФПЗП, ЛПФПТПЕ ОЕ ЧЩРПМОСЕФУС. ьФЙН ЪБЛБОЮЙЧБАФУС ОБЫЙ ЗМБЧЩ П ЪБРТПУБИ. чЩ ФЕРЕТШ ЙНЕЕФЕ ДПЧПМШОП РПМОПЕ РТЕДУФБЧМЕОЙЕ П РПЙУЛЕ ДБООЩИ Ч SQL. уМЕДХАЭЙК ЫБЗ ДПМЦЕО ЧЛМАЮБФШ ФП, ЛБЛ ЪОБЮЕОЙС ЧЧПДСФУС Ч ФБВМЙГЩ Й ЛБЛ ФБВМЙГЩ УПЪДБАФУС У УБНПЗП ОБЮБМБ. лБЛ ЧЩ ХЧЙДЙФЕ, ЪБРТПУЩ ЙОПЗДБ ЙУРПМШЪХАФУС ЧОХФТЙ ДТХЗЙИ ФЙРПЧ ЛПНБОД, ФБЛЦЕ ИПТПЫП ЛБЛ Й УБНЙ РП УЕВЕ. тбвпфб у SQL 1. уПЪДБКФЕ ПВЯЕДЙОЕОЙЕ ЙЪ ДЧХИ ЪБРТПУПЧ ЛПФПТПЕ РПЛБЪБМП ВЩ ЙНЕОБ, ЗПТПДБ, Й ПГЕОЛЙ ЧУЕИ ЪБЛБЪЮЙЛПЧ. фЕ ЙЪ ОЙИ ЛПФПТЩЕ ЙНЕАФ РПМЕ rating=200 Й ВПМЕЕ, ДПМЦОЩ ЛТПНЕ ФПЗП ЙНЕФШ УМПЧБ - " чЩУПЛЙК тЕКФЙОЗ ", Б ПУФБМШОЩЕ ДПМЦОЩ ЙНЕФШ УМПЧБ " оЙЪЛЙК тЕКФЙОЗ ". 2. оБРЙЫЙФЕ ЛПНБОДХ ЛПФПТБС ВЩ ЧЩЧЕМБ ЙНЕОБ Й ОПНЕТБ ЛБЦДПЗП РТПДБЧГБ Й ЛБЦДПЗП ЪБЛБЪЮЙЛБ ЛПФПТЩЕ ЙНЕАФ ВПМШЫЕ ЮЕН ПДЙО ФЕЛХЭЙК РПТСДПЛ. тЕЪХМШФБФ РТЕДУФБЧШФЕ Ч БМЖБЧЙФОПН РПТСДЛЕ. 3. уЖПТНЙТХКФЕ ПВЯЕДЙОЕОЙЕ ЙЪ ФТЕИ ЪБРТПУПЧ. рЕТЧЩК ЧЩВЙТБЕФ РПМ snum ЧУЕИ РТПДБЧГПЧ Ч San Jose; ЧФПТПК, РПМ cnum ЧУЕИ ЪБЛБЪЮЙЛПЧ Ч San Jose; Й ФТЕФЙК РПМ onum ЧУЕИ РПТСДЛПЧ ОБ 3 пЛФСВТС. уПИТБОЙФЕ ДХВМЙЛБФЩ НЕЦДХ РПУМЕДОЙНЙ ДЧХНС ЪБРТПУБНЙ, ОП ХУФТБОЙФЕ МАВХА ЙЪВЩФПЮОПУФШ ЧЩЧПДБ НЕЦДХ ЛБЦДЩН ЙЪ ЙИ Й УБНЩН РЕТЧЩН. ( рТЙНЕЮБОЙЕ: Ч ДБООЩИ ФЙРПЧЩИ ФБВМЙГБИ, ОЕ УПДЕТЦЙФУС ОЙЛБЛПК ЙЪВЩФПЮОПУФЙ. ьФП ФПМШЛП РТЙНЕТ. ) ( уН. рТЙМПЦЕОЙЕ A ДМС ПФЧЕФПЧ. )

Соседние файлы в папке Understanding SQL (rus - html)