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

Understanding SQL. Chapter 12. йурпмшъпчбойе претбфптб EXISTS феретш, лпздб чщ иптпып пъоблпнмеощ у рпдъбртпубнй, НЩ НПЦЕН ЗПЧПТЙФШ П ОЕЛПФПТЩИ УРЕГЙБМШОЩИ ПРЕТБФПТБИ ЛПФПТЩЕ ЧУЕЗДБ ВЕТХФ РПДЪБРТПУЩ ЛБЛ БТЗХНЕОФЩ. чЩ ХЪОБЕФЕ П РЕТЧПН ЙЪ ЙИ Ч ЬФПК ЗМБЧЕ. пУФБМШОЩЕ ВХДХФ ПРЙУБО Ч УМЕДХАЭЕК ЗМБЧЕ. пРЕТБФПТ EXISTS ЙУРПМШЪХЕФУС ЮФПВЩ ХЛБЪБФШ РТЕДЙЛБФХ, - РТПЙЪЧПДЙФШ МЙ РПДЪБРТПУХ ЧЩЧПД ЙМЙ ОЕФ. ч ЬФПК ЗМБЧЕ, ЧЩ ХЪОБЕФЕ ЛБЛ ЙУРПМШЪПЧБФШ ЬФПФ ПРЕТБФПТ УП УФБОДБТФОЩНЙ Й ( ПВЩЮОП ) УППФОЕУЕООЩНЙ РПДЪБРТПУБНЙ. нЩ ВХДЕН ФБЛЦЕ ПВУХЦДБФШ УРЕГЙБМШОЩЕ ТБЪНЩЫМЕОЙС ЛПФПТЩЕ РЕТЕКДХФ Ч ЙЗТХ ЛПЗДБ ЧЩ ВХДЕФЕ ЙУРПМШЪПЧБФШ ЬФПФ ПРЕТБФПТ ЛБЛ ПФОПУЙФЕМШОЩК БЗТЕЗБФ, ЛБЛ РХУФПК ХЛБЪБФЕМШ NULL, Й ЛБЛ ПРЕТБФПТ вХМ. лТПНЕ ФПЗП, ЧЩ НПЦЕФЕ РПЧЩУЙФШ ЧБЫ РТПЖЕУУЙПОБМШОЩК ХТПЧЕОШ ПФОПУЙФЕМШОП РПДЪБРТПУПЧ ЙУУМЕДХС ЙИ Ч ВПМЕЕ УМПЦОЩИ РТЙЛМБДОЩИ РТПЗТБННБИ ЮЕН ФЕ ЛПФПТЩЕ НЩ ЧЙДЕМЙ ДП УЙИ РПТ. лбл тбвпфбеф EXISTS? EXISTS - ЬФП ПРЕТБФПТ, ЛПФПТЩК РТПЙЪЧПДЙФ ЧЕТОПЕ ЙМЙ ОЕЧЕТОПЕ ЪОБЮЕОЙЕ, ДТХЗЙНЙ УМПЧБНЙ, ЧЩТБЦЕОЙЕ вХМ ( УН. зМБЧХ 4 ДМС ПВЪПТБ ЬФПЗП ФЕТНЙОБ ). ьФП ПЪОБЮБЕФ ЮФП ПО НПЦЕФ ТБВПФБФШ БЧФПОПНОП Ч РТЕДЙЛБФЕ ЙМЙ Ч ЛПНВЙОБГЙЙ У ДТХЗЙНЙ ЧЩТБЦЕОЙСНЙ вХМ ЙУРПМШЪХАЭЙНЙ вХМЕЧЩЕ ПРЕТБФПТЩ AND, OR, Й NOT. пО ВЕТЕФ РПДЪБРТПУ ЛБЛ БТЗХНЕОФ Й ПГЕОЙЧБЕФ ЕЗП ЛБЛ ЧЕТОЩК ЕУМЙ ФПФ РТПЙЪЧПДЙФ МАВПК ЧЩЧПД ЙМЙ ЛБЛ ОЕЧЕТОЩК ЕУМЙ ФПФ ОЕ ДЕМБЕФ ЬФПЗП. ьФЙН ПО ПФМЙЮБЕФУС ПФ ДТХЗЙИ ПРЕТБФПТПЧ РТЕДЙЛБФБ, Ч ЛПФПТЩИ ПО ОЕ НПЦЕФ ВЩФШ ОЕЙЪЧЕУФОЩН. оБРТЙНЕТ, НЩ НПЦЕН ТЕЫЙФШ, ЙЪЧМЕЛБФШ МЙ ОБН ОЕЛПФПТЩЕ ДБООЩЕ ЙЪ ФБВМЙГЩ ъБЛБЪЮЙЛПЧ ЕУМЙ, Й ФПМШЛП ЕУМЙ, ПДЙО ЙМЙ ВПМЕЕ ЪБЛБЪЮЙЛПЧ Ч ЬФПК ФБВМЙГЕ ОБИПДСФУС Ч San Jose ( ЧЩЧПД ДМС ЬФПЗП ЪБРТПУБ РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 12.1 ): SELECT cnum, cname, city FROM Customers WHERE EXISTS ( SELECT * FROM Customers WHERE city = " San Jose' ); чОХФТЕООЙК ЪБРТПУ ЧЩВЙТБЕФ ЧУЕ ДБООЩЕ ДМС ЧУЕИ ЪБЛБЪЮЙЛПЧ Ч San Jose. пРЕТБФПТ EXISTS ЧП ЧОЕЫОЕН РТЕДЙЛБФЕ ПФНЕЮБЕФ, ЮФП ОЕЛПФПТЩК ЧЩЧПД ВЩМ РТПЙЪЧЕДЕО РПДЪБРТПУПН, Й РПУЛПМШЛХ ЧЩТБЦЕОЙЕ EXISTS ВЩМП РПМОЩН РТЕДЙЛБФПН, ДЕМБЕФ РТЕДЙЛБФ ЧЕТОЩН. рПДЪБРТПУ( ОЕ УППФОЕУЕООЩК ) ВЩМ ЧЩРПМОЕО ФПМШЛП ПДЙО ТБЪ ДМС ЧУЕЗП ЧОЕЫОЕЗП ЪБРТПУБ, Й УМЕДПЧБ- =============== SQL Execution Log ============ | | | SELECT snum, sname, city | | FROM Customers | | WHERE EXISTS | | (SELECT * | | FROM Customers | | WHERE city = 'San Jose'); | | ============================================= | | cnum cname city | | ----- -------- ---- | | 2001 Hoffman London | | 2002 Giovanni Rome | | 2003 Liu San Jose | | 2004 Grass Berlin | | 2006 Clemens London | | 2008 Cisneros San Jose | | 2007 Pereira Rome | ============================================= тЙУХОПЛ 12.1 йУРПМШЪПЧБОЙЕ ПРЕТБФПТБ EXISTS ФЕМШОП ЙНЕЕФ ПДОП ЪОБЮЕОЙЕ ЧП ЧУЕИ УМХЮБСИ. рПЬФПНХ EXISTS, ЛПЗДБ ЙУРПМШЪХЕФУС ЬФЙН УРПУПВПН, ДЕМБЕФ РТЕДЙЛБФ ЧЕТОЩН ЙМЙ ОЕЧЕТОЩН ДМС ЧУЕИ УФТПЛ УТБЪХ, ЮФП ЬФП ОЕ ФБЛ ХЦ РПМЕЪОП ДМС ЙЪЧМЕЮЕОЙС ПРТЕДЕМЕООПК ЙОЖПТНБГЙЙ. чщвпт уфпмвгпч у рпнпэша EXISTS ч ЧЩЫЕХРПНСОХФПН РТЙНЕТЕ, EXISTS ДПМЦЕО ВЩФШ ХУФБОПЧМЕО ФБЛ ЮФПВЩ МЕЗЛП ЧЩВТБФШ ПДЙО УФПМВЕГ, ЧНЕУФП ФПЗП, ЮФПВЩ ЧЩВЙТБФШ ЧУЕ УФПМВГЩ ЙУРПМШЪХС Ч ЧЩВПТЕ ЪЧЕЪДХ( SELECT *) ч ЬФПН УПУФПЙФ ЕЗП ПФМЙЮЙЕ ПФ РПДЪБРТПУБ ЛПФПТЩК ( ЛБЛ ЧЩ ЧЙДЕМЙ ТБОЕЕ Ч зМБЧЕ 10 НПЗ ЧЩВТБФШ ФПМШ- ЛП ПДЙО УФПМВЕГ ) . пДОБЛП, Ч РТЙОГЙРЕ ПО НБМП ПФМЙЮБЕФУС РТЙ ЧЩВПТЕ EXISTS УФПМВГПЧ, ЙМЙ ЛПЗДБ ЧЩВЙТБАФУС ЧУЕ УФПМВГЩ, РПФПНХ ЮФП ПО РТПУФП ЪБНЕЮБЕФ - ЧЩРПМОСЕФУС ЙМЙ ОЕФ ЧЩЧПД ЙЪ РПДЪБРТПУБ - Б ОЕ ЙУРПМШЪХЕФ ЧЩЧЕДЕООЩЕ ЪОБЮЕОЙС. йурпмшъпчбойе EXISTS у уппфоеуеоощнй рпдъбртпубнй ч УППФОЕУЕООПН РПДЪБРТПУЕ, РТЕДМПЦЕОЙЕ EXISTS ПГЕОЙЧБЕФУС ПФДЕМШОП ДМС ЛБЦДПК УФТПЛЙ ФБВМЙГЩ ЙН ЛПФПТПК ХЛБЪБОП ЧП ЧОЕЫОЕН ЪБРТПУЕ, ФПЮОП ФБЛЦЕ ЛБЛ Й ДТХЗЙЕ ПРЕТБФПТЩ РТЕДЙЛБФБ, ЛПЗДБ ЧЩ ЙУРПМШЪХЕФЕ УППФОЕУЕООЩК РПДЪБРТПУ. ьФП ДБЕФ ЧПЪНПЦОПУФШ ЙУРПМШЪПЧБФШ EXISTS ЛБЛ ЧЕТОЩК РТЕДЙЛБФ, ЛПФПТЩК ЗЕОЕТЙТХЕФ ТБЪМЙЮОЩЕ ПФЧЕФЩ ДМС ЛБЦДПК УФТПЛЙ ФБВМЙГЩ ХЛБЪБООПК Ч ПУОПЧОПН ЪБРТПУЕ. уМЕДПЧБФЕМШОП ЙОЖПТНБГЙС ЙЪ ЧОХФТЕООЕЗП ЪБРТПУБ, ВХДЕФ УПИТБОЕОБ, ЕУМЙ ЧЩЧЕДЕОБ ОЕРПУТЕДУФЧЕООП, ЛПЗДБ ЧЩ ЙУРПМШЪХЕФЕ EXISTS ФБЛЙН УРПУПВПН. оБРТЙНЕТ, НЩ НПЦЕН ЧЩЧЕУФЙ РТПДБЧГПЧ ЛПФПТЩЕ ЙНЕАФ НОПЗПЮЙУМЕООЩИ ЪБЛБЪЮЙЛПЧ ( ЧЩЧПД ДМС ЬФПЗП ЪБРТПУБ РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 12.2 ): SELECT DISTINCT snum FROM Customers outer WHERE EXISTS ( SELECT * FROM Customers inner WHERE inner.snum = outer.snum AND inner.cnum < > outer.cnum ); =============== SQL Execution Log ============ | | | SELECT DISTINCT cnum | | FROM Customers outer | | WHERE EXISTS | | (SELECT * | | FROM Customers inner | | WHERE inner.snum = outer.snum | | AND inner.cnum < > outer.cnum); | | ============================================= | | cnum | | ----- | | 1001 | | 1002 | ============================================= тЙУХОПЛ 12. 2: йУРПМШЪПЧБОЙЕ EXISTS У УППФОЕУЕООЩН РПДЪБРТПУПН дМС ЛБЦДПК УФТПЛЙ-ЛБОДЙДБФБ ЧОЕЫОЕЗП ЪБРТПУБ ( РТЕДУФБЧМСАЭЕК ЪБЛБЪЮЙЛБ РТПЧЕТСЕНПЗП Ч ОБУФПСЭЕЕ ЧТЕНС ), ЧОХФТЕООЙК ЪБРТПУ ОБИПДЙФ УФТПЛЙ ЛПФПТЩЕ УПЧРБДБАФ УП ЪОБЮЕОЙЕН РПМ snum ( ЛПФПТПЕ ЙНЕМ РТПДБЧЕГ ), ОП ОЕ УП ЪОБЮЕОЙЕН РПМ cnum ( УППФЧЕФУФЧХАЭЕЗП ДТХЗЙН ЪБЛБЪЮЙЛБН ). еУМЙ МАВЩЕ ФБЛЙЕ УФТПЛЙ ОБКДЕОЩ ЧОХФТЕООЙН ЪБРТПУПН, ЬФП ПЪОБЮБЕФ, ЮФП ЙНЕАФУС ДЧБ ТБЪОЩИ ЪБЛБЪЮЙЛБ ПВУМХЦЙЧБЕНЩИ ФЕЛХЭЙН РТПДБЧГПН ( ФП ЕУФШ РТПДБЧГПН ЪБЛБЪЮЙЛБ Ч ФЕЛХЭЕК УФТПЛЕ-ЛБОДЙДБФБ ЙЪ ЧОЕЫОЕЗП ЪБ- РТПУБ ). рТЕДЙЛБФ EXISTS РПЬФПНХ ЧЕТЕО ДМС ФЕЛХЭЕК УФТПЛЙ, Й ОПНЕТ РТПДБЧГБ РПМ (snum) ФБВМЙГЩ ХЛБЪБООПК ЧП ЧОЕЫОЕН ЪБРТПУЕ ВХДЕФ ЧЩЧЕДЕОП. еУМЙ ВЩМ DISTINCT ОЕ ХЛБЪБО, ЛБЦДЩК ЙЪ ЬФЙИ РТПДБЧГПЧ ВХДЕФ ЧЩВТБО ПДЙО ТБЪ ДМС ЛБЦДПЗП ЪБЛБЪЮЙЛБ Л ЛПФПТПНХ ПО ОБЪОБЮЕО. лпнвйобгйс йъ EXISTS й пвяедйоеойс пДОБЛП ДМС ОБУ НПЦЕФ ВЩФШ РПМЕЪОЕЕ ЧЩЧЕУФЙ ВПМШЫЕ ЙОЖПТНБГЙЙ ПВ ЬФЙИ РТПДБЧГБИ Б ОЕ ФПМШЛП ЙИ ОПНЕТБ. нЩ НПЦЕН УДЕМБФШ ЬФП ПВЯЕДЙОЙЧ ФБВМЙГХ ъБЛБЪЮЙЛПЧ У ФБВМЙГЕК рТПДБЧГПЧ ( ЧЩЧПД ДМС ЪБРТПУБ РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 12.3 ): SELECT DISTINCT first.snum, sname, first.city FROM Salespeople first, Customers second WHERE EXISTS ( SELECT * FROM Customers third WHERE second.snum = third.snum AND second.cnum < > third.cnum ) AND first.snum = second.snum; =============== SQL Execution Log ============ | | | SELECT DISTINCT first.snum, sname, first.city | | FROM Salespeople first, Customers second | | WHERE EXISTS | | (SELECT * | | FROM Customers third | | WHERE second.snum = third.snum | | AND second.cnum < > third.cnum) | | AND first.snum = second.snum; | | ============================================= | | cnum cname city | | ----- -------- ---- | | 1001 Peel London | | 1002 Serres San Jose | ============================================= тЙУХОПЛ 12.3: лПНВЙОБГЙС EXISTS У ПВЯЕДЙОЕОЙЕН чОХФТЕООЙК ЪБРТПУ ЪДЕУШ - ЛБЛ Й Ч РТЕДЩДХЭЕН ЧБТЙБОФЕ, ЖБЛФЙЮЕУЛЙ УППВЭБЕФ, ЮФП РУЕЧДПОЙН ВЩМ ЙЪНЕОЕО. чОЕЫОЙК ЪБРТПУ - ЬФП ПВЯЕДЙОЕОЙЕ ФБВМЙГЩ рТПДБЧГПЧ У ФБВМЙГЕК ъБЛБЪЮЙЛПЧ, ОБРПДПВЙЕ ФПЗП ЮФП НЩ ЧЙДЕМЙ РТЕЦДЕ. оПЧПЕ РТЕДМПЦЕОЙЕ ПУОПЧОПЗП РТЕДЙЛБФБ ( AND first.snum = second.snum ) ЕУФЕУФЧЕООП ПГЕОЙЧБЕФУС ОБ ФПН ЦЕ УБНПН ХТПЧОЕ ЮФП Й РТЕДМПЦЕОЙЕ EXISTS. ьФП - ЖХОЛГЙПОБМШОЩК РТЕДЙЛБФ УБНПЗП ПВЯЕДЙОЕОЙС, УТБЧОЙЧБАЭЙК ДЧЕ ФБВМЙГЩ ЙЪ ЧОЕЫОЕЗП ЪБРТПУБ Ч ФЕТНЙОБИ РПМ snum, ЛПФПТПЕ СЧМСАФУС ДМС ОЙИ ПВЭЙН. йЪ-ЪБ вХМЕЧБ ПРЕТБФПТБ AND, ПВБ ХУМПЧЙС ПУОПЧОПЗП РТЕДЙЛБФБ ДПМЦОЩ ВЩФШ ЧЕТОЩ Ч РПТСДЛЕ ДМС ЧЕТОПЗП РТЕДЙЛБФБ. уМЕДПЧБФЕМШОП, ТЕЪХМШФБФЩ РПДЪБРТПУБ ЙНЕАФ УНЩУМ ФПМШЛП Ч ФЕИ УМХЮБСИ ЛПЗДБ ЧФПТБС ЮБУФШ ЪБРТПУБ ЧЕТОБ, Б ПВЯЕДЙОЕОЙЕ - ЧЩРПМОЙНП. фБЛЙН ПВТБЪПН, ЛПНВЙОБГЙС ПВЯЕДЙОЕОЙС Й РПДЪБРТПУБ НПЦЕФ УФБФШ ПЮЕОШ НПЭОЩН УРПУПВПН ПВТБВПФЛЙ ДБООЩИ. йурпмшъпчбойе NOT EXISTS рТЕДЩДХЭЙК РТЙНЕТ ДБМ РПОСФШ ЮФП EXISTS НПЦЕФ ТБВПФБФШ Ч ЛПНВЙОБГЙЙ У ПРЕТБФПТБНЙ вХМ. лПОЕЮОП, ФП ЮФП СЧМСЕФУС УБНЩН РТПУФЩН УРПУПВПН ДМС ЙУРПМШЪПЧБОЙС Й ЧЕТПСФОП ОБЙВПМЕЕ ЮБУФП ЙУРПМШЪХЕФУС У EXISTS - ЬФП ПРЕТБФПТ NOT. пДЙО ЙЪ УРПУПВПЧ ЛПФПТЩН НЩ НПЗМЙ ВЩ ОБКФЙ ЧУЕИ РТПДБЧ- ГПЧ ФПМШЛП У ПДОЙН ЪБЛБЪЮЙЛПН ВХДЕФ УПУФПСФШ Ч ФПН, ЮФПВЩ ЙОЧЕТФЙТПЧБФШ ОБЫ РТЕДЩДХЭЙК РТЙНЕТ. ( чЩЧПД ДМС ЬФПЗП ЪБРТПУБ РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 12.4:) SELECT DISTINCT snum FROM Customers outer WHERE NOT EXISTS ( SELECT * FROM Customers inner WHERE inner.snum = outer.snum AND inner.cnum < > outer.cnum ); EXISTS й бзтезбфщ пДОБ ЧЕЭШ ЛПФПТХА EXISTS ОЕ НПЦЕФ УДЕМБФШ - ЧЪСФШ ЖХОЛГЙА БЗТЕЗБФБ Ч РПДЪБРТПУЕ. ьФП ЙНЕЕФ ЪОБЮЕОЙЕ. еУМЙ ЖХОЛГЙС БЗТЕЗБФБ ОБИПДЙФ МАВЩЕ УФТПЛЙ ДМС ПРЕТБГЙК У ОЙНЙ, EXISTS ЧЕТЕО, ОЕ ЧЪЙТБС ОБ ФП, ЮФП ЬФП - ЪОБЮЕОЙЕ ЖХОЛГЙЙ ; ЕУМЙ ЦЕ БЗТЕЗБФОБС ЖХОЛГЙС ОЕ ОБИПДЙФ ОЙЛБЛЙИ УФТПЛ, EXISTS ОЕРТБЧЙМЕО. =============== SQL Execution Log ============ | | | SELECT DISTINCT snum | | FROM Salespeople outer | | WHERE NOT EXISTS | | (SELECT * | | FROM Customers inner | | WHERE inner.snum = outer.snum | | AND inner.cnum < > outer.cnum); | | ============================================= | | cnum | | ----- | | 1003 | | 1004 | | 1007 | ============================================= тЙУХОПЛ 12.4: йУРПМШЪПЧБОЙЕ EXISTS У NOT рПРЩФЛБ ЙУРПМШЪПЧБФШ БЗТЕЗБФЩ У EXISTS ФБЛЙН УРПУПВПН, ЧЕТПСФОП РПЛБЦЕФ ЮФП РТПВМЕНБ ОЕЧЕТОП ТЕЫБМБУШ ПФ ОБЮБМБ ДП ЛПОГБ. лПОЕЮОП, РПДЪБРТПУ Ч РТЕДЙЛБФЕ EXISTS НПЦЕФ ФБЛЦЕ ЙУРПМШЪПЧБФШ ПДЙО ЙМЙ ВПМЕЕ ЙЪ ЕЗП УПВУФЧЕООЩИ РПДЪБРТПУПЧ. пОЙ НПЗХФ ЙНЕФШ МАВПК ЙЪ ТБЪМЙЮОЩИ ФЙРПЧ ЛПФПТЩЕ НЩ ЧЙДЕМЙ ( ЙМЙ ЛПФПТЩК НЩ ВХДЕН ЧЙДЕФШ ). фБЛЙЕ РПДЪБРТПУЩ, Й МАВЩЕ ДТХЗЙЕ Ч ОЙИ, РПЪЧПМСАФ ЙУРПМШЪПЧБФШ БЗТЕ- ЗБФЩ, ЕУМЙ ОЕФ ДТХЗПК РТЙЮЙОЩ РП ЛПФПТПК ПОЙ ОЕ НПЗХФ ВЩФШ ЙУРПМШЪП- ЧБОЩ. уМЕДХАЭЙК ТБЪДЕМ РТЙЧПДЙФ ЬФПНХ РТЙНЕТ. ч МАВПН УМХЮБЕ, ЧЩ НПЦЕФЕ РПМХЮЙФШ ФПФ ЦЕ УБНЩК ТЕЪХМШФБФ ВПМЕЕ МЕЗЛП, ЧЩВТБЧ РПМЕ ЛПФПТПЕ ЧЩ ЙУРПМШЪПЧБМЙ Ч БЗТЕЗБФОПК ЖХОЛГЙЙ, ЧНЕУФП ЙУРПМШЪПЧБОЙС УБНПК ЬФПК ЖХОЛГЙЙ. дТХЗЙНЙ УМПЧБНЙ, РТЕДЙЛБФ - EXISTS (SELECT COUNT (DISTINCT sname) FROM Salespeople) - ВХДЕФ ЬЛЧЙЧБМЕОФЕО - EXISTS (SELECT sname FROM Salespeople) ЛПФПТЩК ВЩМ РПЪЧПМЕО ЧЩЫЕ. впмее хдбюощк ртйнет рпдъбртпуб чПЪНПЦОЩЕ РТЙЛМБДОЩЕ РТПЗТБННЩ РПДЪБРТПУПЧ НПЗХФ УФБОПЧЙФШУС НОП- ЗПЛТБФОП ЧЛМБДЩЧБЕНЩНЙ. чЩ НПЦЕФЕ ЧЛМБДЩЧБФШ ЙИ ДЧБ ЙМЙ ВПМЕЕ Ч ПДЙОПЮОЩК ЪБРТПУ, Й ДБЦЕ ПДЙО ЧОХФТШ ДТХЗПЗП. фБЛ ЛБЛ НПЦОП ТБУУНПФТЕФШ ОЕВПМШЫПК ЛХУПЛ ЮФПВЩ РПМХЮЙФШ ЧУА ЛБТФЙОХ ТБВПФЩ ЬФПК ЛПНБОДЩ, ЧЩ НПЦЕФЕ ЧПУРПМШЪПЧБФШУС УРПУПВПН Ч SQL, ЛПФПТЩК НПЦЕФ РТЙОЙНБФШ ТБЪМЙЮОЩЕ ЛПНБОДЩ ЙЪ ВПМШЫЙОУФЧБ ДТХЗЙИ СЪЩЛПЧ. йНЕЕФУС ЪБРТПУ ЛПФПТЩК ЙЪЧМЕЛБЕФ УФТПЛЙ ЧУЕИ РТПДБЧГПЧ ЛПФПТЩЕ ЙНЕАФ ЪБЛБЪЮЙЛПЧ У ВПМШЫЕ ЮЕН ПДОЙН ФЕЛХЭЙН РПТСДЛПН. ьФП ОЕ ПВСЪБФЕМШОП УБ- НПЕ РТПУФПЕ ТЕЫЕОЙЕ ЬФПК РТПВМЕНЩ, ОП ПОП РТЕДОБЪОБЮЕОП УЛПТЕЕ РПЛБЪБФШ ХМХЮЫЕООХА МПЗЙЛХ SQL. чЩЧПД ЬФПК ЙОЖПТНБГЙЙ УЧСЪЩЧБЕФ ЧУЕ ФТЙ ОБЫЙ ФЙРПЧЩИ ФБВМЙГЩ: SELECT * FROM Salespeople first WHERE EXISTS ( SELECT * FROM Customers second WHERE first.snum = second.snum AND 1 < ( SELECT COUNT (*) FROM Orders WHERE Orders.cnum = second.cnum )); чЩЧПД ДМС ЬФПЗП ЪБРТПУБ РПЛБЪЩЧБЕФУС Ч тЙУХОЛЕ 12.5. =============== SQL Execution Log ============ | | | FROM Salespeople first | | WHERE EXISTS | | (SELECT * | | FROM Customers second | | WHERE first.snum = second.snum | | AND 1 < | | (SELECT CONT (*) | | FROM Orders | | WHERE Orders.cnum = second.cnum)); | | ============================================= | | cnum cname city comm | | ----- -------- ---- -------- | | 1001 Peel London 0.17 | | 1002 Serres San Jose 0.13 | | 1007 Rifkin Barselona 0.15 | ============================================= тЙУХОПЛ 12.5: йУРПМШЪПЧБОЙЕ EXISTS У ЛПНРМЕЛУОЩН РПДЪБРТПУПН нЩ НПЗМЙ ВЩ ТБЪПВТБФШ ЧЩЫЕХРПНСОХФЩК ЪБРТПУ РТЙНЕТОП ФБЛ: вЕТЕН ЛБЦДХА УФТПЛХ ФБВМЙГЩ рТПДБЧГПЧ ЛБЛ УФТПЛХ-ЛБОДЙДБФ( ЧОЕЫОЙК ЪБРТПУ ) Й ЧЩРПМОСЕН РПДЪБРТПУЩ. дМС ЛБЦДПК УФТПЛЙ-ЛБОДЙДБФБ ЙЪ ЧОЕЫОЕЗП ЪБРТПУБ, ВЕТЕН Ч УППФЧЕФУФЧЙЕ ЛБЦДХА УФТПЛХ ЙЪ ФБВМЙГЩ ъБЛБЪЮЙЛПЧ( УТЕДОЙК ЪБРТПУ ). еУМЙ ФЕЛХЭБС УФТПЛБ ЪБЛБЪЮЙЛПЧ ОЕ УПЧРБДБЕФ У ФЕЛХЭЕК УФТПЛПК РТПДБЧГБ( Ф.Е. ЕУМЙ first.snum < > second.snum ), РТЕДЙЛБФ УТЕДОЕЗП ЪБРТПУБ ОЕРТБЧЙМЕО. чУСЛЙК ТБЪ, ЛПЗДБ НЩ ОБИПДЙН ЪБЛБЪЮЙЛБ Ч УТЕДОЕН ЪБРТПУЕ ЛПФПТЩК УПЧРБДБЕФ У РТПДБЧГПН ЧП ЧОЕЫОЕН ЪБРТПУЕ, НЩ ДПМЦОЩ ТБУУНБФТЙЧБФШ УБН ЧОХФТЕООЙК ЪБРТПУ ЮФПВЩ ПРТЕДЕМЙФШ, ВХДЕФ МЙ ОБЫ УТЕДОЙК РТЕДЙЛБФ ЪБРТПУБ ЧЕТЕО. чОХФТЕООЙК ЪБРТПУ УЮЙФБЕФ ЮЙУМП РПТСДЛПЧ ФЕЛХЭЕЗП ЪБЛБЪЮЙЛБ ( ЙЪ УТЕД- ОЕЗП ЪБРТПУБ ). еУМЙ ЬФП ЮЙУМП ВПМШЫЙК ЮЕН 1, РТЕДЙЛБФ УТЕДОЕЗП ЪБРТПУБ ЧЕТЕО, Й УФТПЛЙ ЧЩВЙТБАФУС. ьФП ДЕМБЕФ EXISTS РТЕДЙЛБФ ЧОЕЫОЕЗП ЪБРТПУБ ЧЕТОЩН ДМС ФЕЛХЭЕК УФТПЛЙ РТПДБЧГБ, Й ПЪОБЮБЕФ, ЮФП РП ЛТБКОЕК НЕТЕ ПДЙО ЙЪ ФЕЛХЭЙИ ЪБЛБЪЮЙЛПЧ РТП- ДБЧГБ ЙНЕЕФ ВПМЕЕ ЮЕН ПДЙО РПТСДПЛ. еУМЙ ЬФП ОЕ ЛБЦЕФУС ДПУФБФПЮОП РПОСФОЩН ДМС ЧБУ Ч ЬФПК ФПЮЛЕ ТБЪВПТБ РТЙНЕТБ, ОЕ ЧПМОХКФЕУШ. уМПЦОПУФШ ЬФПЗП РТЙНЕТБ - ИПТПЫБ ОЕЪБЧЙУЙНП ПФ ФПЗП, ЛБЛ ЮБУФП ВХДЕФЕ чЩ ЙУРПМШЪПЧБФШ ЕЕ Ч ДЕМПЧПК УЙФХБГЙЙ. пУОПЧОБС ГЕМШ РТЙНЕТПЧ ФБЛПЗП ФЙРБ УПУФПЙФ Ч ФПН, ЮФПВЩ РПЛБЪБФШ ЧБН ОЕЛПФПТЩЕ ЧПЪНПЦОПУФЙ ЛПФПТЩЕ НПЗХФ ПЛБЪБФШУС Ч ДБМШОЕКЫЕН РПМЕЪОЩНЙ. рПУМЕ ТБВПФЩ УП УМПЦОЩНЙ УЙФХБГЙСНЙ РПДПВОП ЬФПК, РТПУФЩЕ ЪБРТПУЩ ЛП- ФПТЩЕ СЧМСАФУС ОБЙВПМЕЕ ЮБУФП ЙУРПМШЪХЕНЩНЙ Ч SQL, РПЛБЦХФУС чБН ЬМЕ- НЕОФБТОЩНЙ. лТПНЕ ФПЗП, ЬФПФ ЪБРТПУ, ДБЦЕ ЕУМЙ ПО ЛБЦЕФУС ХДПВОЩН, ДПЧПМШОП ЙЪЧЙМЙУ- ФЩК УРПУПВ ЙЪЧМЕЮЕОЙС ЙОЖПТНБГЙЙ Й ДЕМБЕФ НОПЗП ТБВПФЩ. пО УЧСЪЩЧБЕФ ФТЙ ТБЪОЩИ ФБВМЙГЩ ЮФПВЩ ДБФШ ЧБН ЬФХ ЙОЖПТНБГЙА, Б ЕУМЙ ФБВМЙГ ВПМШЫЕ ЮЕН ЪДЕУШ ХЛБЪБОП, ВХДЕФ ФТХДОП РПМХЮЙФШ ЕЕ ОБРТСНХА (ИПФС ЬФП ОЕ ЕДЙОУФЧЕООЩК УРПУПВ, Й ОЕ ПВСЪБФЕМШОП МХЮЫЙК УРПУПВ Ч SQL). чПЪНПЦОП ЧБН ОХЦОП ХЧЙДЕФШ ЬФХ ЙОЖПТНБГЙА ПФОПУЙФЕМШОП ТЕЗХМСТОПК ПУОПЧЩ - ЕУМЙ, ОБРТЙНЕТ, ЧЩ ЙНЕЕФЕ РТЕНЙА Ч ЛПОГЕ ОЕДЕМЙ ДМС РТПДБЧГБ ЛПФПТЩК РПМХЮЙМ НОПЗПЮЙУМЕООЩЕ РПТСДЛЙ ПФ ПДОПЗП ЪБЛБЪЮЙЛБ. ч ЬФПН УМХЮБЕ, ПО ДПМЦЕО ВЩМ ВЩ ЧЩЧЕУФЙ ЛПНБОДХ, Й УПИТБОЙФШ ЕЕ ЮФПВЩ ЙУРПМШЪПЧБФШ УОПЧБ Й УОПЧБ РП НЕТЕ ФПЗП ЛБЛ ДБООЩЕ ВХДХФ НЕОСФШУС ( МХЮЫЕ ЧУЕЗП УДЕМБФШ ЬФП У РПНПЭША РТЕДУФБЧМЕОЙС, ЛПФПТПЕ НЩ ВХДЕН РТПИПДЙФШ Ч зМБЧЕ 20 ). теъане EXISTS, ИПФС ПО Й ЛБЦЕФУС РТПУФЩН, НПЦЕФ ВЩФШ ПДОЙН ЙЪ УБНЩИ ОЕРПОСФОЩИ ПРЕТБФПТПЧ SQL. пДОБЛП, ПО ПВМБДБЕФ ЗЙВЛПУФША Й НПЭОПУФША. ч ЬФПК ЗМБЧЕ, ЧЩ ЧЙДЕМЙ Й ПЧМБДЕМЙ ВПМШЫЙОУФЧПН ЧПЪНПЦОПУФЕК ЛПФПТЩЕ EXISTS ДБЕФ ЧБН. ч ДБМШОЕКЫЕН, ЧБЫЕ РПОЙНБОЙЕ ХМХЮЫЕООПК МПЗЙЛЙ РПДЪБРТПУБ ТБУЫЙТЙФУС ЪОБЮЙФЕМШОП. уМЕДХАЭЙН ЫБЗПН ВХДЕФ ПЧМБДЕОЙЕ ФТЕН ДТХЗЙНЙ УРЕГЙБМШОЩНЙ ПРЕТБФП- ТБНЙ ЛПФПТЩЕ ВЕТХФ РПДЪБРТПУЩ ЛБЛ БТЗХНЕОФЩ, ЬФП - ANY, ALL, Й SOME. лБЛ ЧЩ ХЧЙДЙФЕ Ч зМБЧЕ 13, ЬФП - БМШФЕТОБФЙЧОЩЕ ЖПТНХМЙТПЧЛЙ ОЕЛПФПТЩИ ЧЕЭЕК ЛПФПТЩЕ ЧЩ ХЦЕ ЙУРПМШЪПЧБМЙ, ОП ЛПФПТЩЕ Ч ОЕЛПФПТЩИ УМХЮБСИ, НПЗХФ ПЛБЪБФШУС ВПМЕЕ РТЕДРПЮФЙФЕМШОЩНЙ. тбвпфб у SQL 1. оБРЙЫЙФЕ ЪБРТПУ ЛПФПТЩК ВЩ ЙУРПМШЪПЧБМ ПРЕТБФПТ EXISTS ДМС ЙЪЧМЕЮЕОЙС ЧУЕИ РТПДБЧГПЧ ЛПФПТЩЕ ЙНЕАФ ЪБЛБЪЮЙЛПЧ У ПГЕОЛПК 300. 2. лБЛ ВЩ ЧЩ ТЕЫЙМЙ РТЕДЩДХЭХА РТПВМЕНХ ЙУРПМШЪХС ПВЯЕДЙОЕОЙЕ ? 3. оБРЙЫЙФЕ ЪБРТПУ ЙУРПМШЪХАЭЙК ПРЕТБФПТ EXISTS ЛПФПТЩК ЧЩВЕТЕФ ЧУЕИ РТПДБЧГПЧ У ЪБЛБЪЮЙЛБНЙ ТБЪНЕЭЕООЩНЙ Ч ЙИ ЗПТПДБИ ЛПФПТЩЕ ЙНЙ ОЕ ПВУМХЦЙЧБАФУС. 4. оБРЙЫЙФЕ ЪБРТПУ ЛПФПТЩК ЙЪЧМЕЛБМ ВЩ ЙЪ ФБВМЙГЩ ъБЛБЪЮЙЛПЧ ЛБЦДПЗП ЪБЛБЪЮЙЛБ ОБЪОБЮЕООПЗП Л РТПДБЧГХ ЛПФПТЩК Ч ДБООЩК НПНЕОФ ЙНЕЕФ РП ЛТБКОЕК НЕТЕ ЕЭЕ ПДОПЗП ЪБЛБЪЮЙЛБ ( ЛТПНЕ ЪБЛБЪЮЙЛБ ЛПФПТПЗП ЧЩ ЧЩВЕТЕФЕ ) У РПТСДЛБНЙ Ч ФБВМЙГЕ рПТСДЛПЧ ( РПДУЛБЪЛБ: ЬФП НПЦЕФ ВЩФШ РПИПЦЕ ОБ УФТХЛФХТХ Ч РТЙНЕТЕ У ОБЫЙН ФТЕИ-ХТПЧОЕЧЩН РПДЪБР- ТПУПН ). ( уН. рТЙМПЦЕОЙЕ A ДМС ПФЧЕФПЧ. )

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