5 4 7 група чрез използване на фразата
Обяснение. От концептуална гледна точка, ГРУПА ОТ оператор (група) пренарежда маса представени фраза от, на секции, или групи, така че всяка група от всички редове имат една и съща стойност на областта, посочена в израза GROUP BY. Това, разбира се, не означава, че на масата е физически пренаредени в базата данни. В този SP редове маса Пример групирани, така че една група включва всички редове за позиции Р1 до друг, всички редове за Р2 елементи, и така нататък. D. Освен това, всяка група пренаредени маса, отколкото на всеки източник линия на таблицата прилага SELECT израза. Всяка експресия в израза SELECT трябва да приеме една стойност за групата, т.е.. Д. Тя може да бъде или от областта, посочено в група на изречение от или аритметична експресия, включително тази област, постоянно или функция, такава като сума, която работи всичко стойности на това поле в група и тези стойности се свежда до една стойност.
Редовете на таблицата могат да бъдат групирани по всяка комбинация от своите области. Раздел 5.6 е пример, илюстриращ групирането на повече от едно поле. Имайте предвид, че GROUP BY клауза не означава ORDER BY (подредени по). За да се гарантира редът на представяне на резултатите от този пример с номера на частта, следва да уточни ORDER BY клауза ПОДРОБНОСТИ Стая след израза GROUP BY. Ако полето, на която се извършва стойностите на групата, съдържа всички нула стойности, всяка от които води до отделна група.
5.4.8. Използва се, когато клауза с GROUP BY
Издава за всеки, предоставени подробности за броя и общата стойност на доставките, с изключение на доставките с доставчика S1:
SELECT NOMER_DETALI, SUM (NUMBER)
КЪДЕТО NOMER_POSTAVSCHIKA = "S1"
GROUP BY NOMER_DETALI;
Редовете, които не отговарят на КЪДЕТО фраза, елиминирани преди да бъдат всяка група.
5.4.9. ИЗПОЛЗВАНЕ НА КАТО
Дайте номера на всички части, доставени от повече от един доставчик (същия пример, както в 5.2.5).
GROUP BY NOMER_DETALI
КАТО COUNT (*)> 1;
КАТО фраза играе същата роля за групите, а когато фраза за реда. (Разбира се, ако не е зададен фразата КАТО, той трябва да бъде посочен и условия GROUP BY.) С други думи, след като използва за изключване групи, точно както когато се използват за да се изключи линии. Изразяване в КАТО клауза трябва да приема една стойност за групата.
В пример 5.2.5 Доказано е, че тази заявка може да бъде формулиран без ГРУПА ОТ (без да се налага), използвайки корелативна подзаявка. Въпреки това, по примера 5.2.5 наистина е на базата на малко по-различно възприемане на логическата схема, свързана с определяне на отговора на този въпрос. Също така е възможно да се формулира заявка с по същество същата логика като в групата на вариант ОТ / КАТО, но без изричното използването на фрази GROUP BY и след като клаузи като цяло:
SELECT DISTINCT NOMER_DETALI
КЪДЕТО SPY.NOMER_DETALI = SPX.HOMEP_DETALI);
Друг вариант, в който вместо да се използва SPX маса Р, е вероятно по-ясно:
(SELECT COUNT (NOMER_POSTAVSCHIKA)
КЪДЕТО NOMER_DETALI = P. NOMER_DETALI);
Друга формулировка включва използването на СЪЩЕСТВУВА:
КЪДЕ SPX. NOMER_DETALI = R. NOMER_DETALI
КЪДЕ SPY. NOMER_DETALI = R. NOMER_DETALI
И SPY. NOMER_POSTAVSCHIK = SPX. NOMER_
Всички тези алтернативи, в някои отношения за предпочитане пред ГРУПА ОТ вариант / КАТО се дължи на факта, че те са най-малко логично разбрано по-добре и по-специално, не се нуждаят от тези допълнителни езикови конструкции. цели на първоначалния текст на естествен език - "Get номера за всички части, доставени от повече от един доставчик" - без съмнение, не е ясно, че самата група бъде това, което е необходимо, за да отговорим на този въпрос, и в нея, наистина, не е необходимо. Също така не е непосредствено очевидно, че е необходимо условие за които имат, но не и състояние, при. Вариант ГРУП-BY / КАТО повече като процесуално инструкция за решаване на проблема, отколкото само на ясна логическа формулирането на нейните създания. От друга страна, никой не може да отрече факта, че версията на групата по / КАТО повече лаконичен. Освен това, от своя страна, са някои от задачите на един и същ общ характер, за което GROUP BY и КАТО просто недостатъчно, поради което трябва да използвате един от алтернативните подходи. Един пример за този проблем е представен в Упражнение 5.24.
И накрая, GROUP BY дизайни са склонни да сериозно ограничение - тя работи само на едно ниво. Невъзможно е да се разделят всяка от тези групи в групи от по-ниско ниво, и така нататък. Д. и след това се прилага определен стандарт функция като сума или AVG за всяка група ниво 16.
5.5. СДРУЖЕНИЕ
Съюз на два комплекта е съвкупност от всички елементи, които принадлежат към една или и двете от оригиналните серии. Тъй като съотношението е зададена (набор от линии), може да се изгради комбиниране на две отношения. Резултатът ще бъде комплект, състоящ се от всички редове, включени в една или и двете от първоначалната връзка. Ако, обаче, този резултат сам по себе си трябва да е други начини, а не просто хетерогенна смес от низове, два оригинален отношения трябва да са съвместими да се комбинират. Неформално казано, и в двата аспекта линии трябва да бъде една и съща "форма". Що се отнася до SQL, вие двамата са съвместими електронни таблици за асоцииране (оператор съюз може да се прилага към тях), ако и само ако:
а) имат същия брой колони, например, m;
б) за всички I (I = 1,2 m) I-тата колона на първата таблица и I-тата колона на втората таблица са точно същия тип данни .;
- ако данните типа знак (р, р), а след това р трябва да бъде;
същото за колони, така и Q трябва да бъде еднакво за двете колони;
- ако data- тип • CHAR на (н), а след това трябва да бъде п. съща за двете колони;
- ако типът-VARCHAR на данни; (п), тогава п трябва да бъде еднакво за двете колони;
- Ако не е NULL е посочен за всяка от тези колони, същите спецификации трябва да бъдат за друга графа.
5.5.1. Заявки, които изискват използването на СЪЮЗ
За издаване на номера на части, които имат тегло 16 кг или по-достъпни доставчик S2 (или и двете).
Обяснение. SELECT клауза фраза, използвана в реда, в който те са написани, с изключение на самия SELECT фраза, която се прилага между КАТО клауза, и ORDER BY, ако има такива. В този пример, следователно, е възможно да си представим, че резултатът е следният.
1. ОТ. В резултат на обработката на ОТ клауза създава нова таблица, която е декартово произведение на P и SP таблици.
2. КЪДЕ. В Стъпка 1 всички редове са изключени резултат, който не отговаря влизане КЪДЕ. В този пример, изключените линии, които не отговарят на предиката:
R.NOMER-ДЕТАЙЛИ И R.TSVET SP.HOMEP_DETALI = ПО ( "Red", "Blue") и SP.KOAH5ECTBO> 200.
3. GROUP BY. След етап 2 е групирани по полеви стойности (полета), посочени в израза ГРУПА ОТ. В нашия пример, това поле R.NOMER-ЧАСТИ R.VES и R.TSVET. Забележка. Теоретично, като полето за обединение би било достатъчно да се използва само R.NOMER-детайли, както и R.VES R.TSVET еднозначно определя от номер на частта. Въпреки това, DB2 система не е наясно с този последен факт, а ако R.VES R.TSVET и ще бъдат пропуснати в групата на присъдата, с, в състояние на грешка се случи, тъй като те са включени в SELECT израз. Основният проблем тук е, че DB2 система не поддържа първични ключове. Вижте. Приложение А.
4. КАТО. Групи, които не отговарят на състояние SUM (брой)> 350 са изключени от резултата, получен в етап 3.
5. Изберете. Всяка група, получена в етап 4, за да чете генерира един ред на резултата. На първо място, групата се дава номер част, тегло, цвят на кожата, а максималният размер на доставките. На второ място, теглото се превръща в гр. Трето, подходящи места в резултат редове се добавят "тегло в грамове = 'две низ константи и" максимален обем на доставката ='.
6. ORDER BY. След етап 5 се подредени в съответствие с поредни на спецификацията чрез израза за да се получи краен резултат.
Разбира се, искането е доста сложен по-горе, но си представете какво върши работа. Редовната програма, например, в език COBOL, който изпълнява една и съща работа, тя може да достигне до девет страници, в сравнение със само девет линии, дадени по-горе. В този случай, работата изисква да се гарантира, че тази програма е въведена в експлоатация, много повече, отколкото е необходимо, за да се формулира заявка в SQL език на изпълнение. Повечето искания ще на практика, разбира се, във всеки случай, е много по-лесно, отколкото с него.
УПРАЖНЕНИЯ
Както и в предишната глава. Всички от следните упражнения са базирани на основата на доставчика-части-производствени данни (вж. Упражненията в раздел 3). Във всяка от тях искате да запишете на SELECT изявление за заявка, освен упражнение 15-18 и 26. За удобство, ние повтаряме тук структурата на разглеждания базата данни:
S (NOMER_POSTAVSCHIKA, NAME, държава, град)
P (NOMER_DETALI, име, цвят, тегло, град)
J (NOMER_IZDELIYA, името и мястото)
SPJ (NOMER_POSTAVSCHIKA, NOMER_DETALI, NOMER_IZDELIYA,
Във всяка секция упражненията са разположени приблизително по нарастваща сложност. Трябва да се опитате да направите поне някои от упражненията на белите дробове във всяка група. Упражнения 12-18 са доста трудно.
5.1. Дайте имената на продукти, които се доставят части доставчика S1.
5.2. цветови компоненти на издаване, предоставени от доставчика S1.
5.3. Списък на частите, доставени за всеки продукт в Лондон.
5.4. Издаване на редица продукти, с помощта на най-малко една част, предоставена от доставчика S1.
5.5. Издаване на брой доставчици, които доставят най-малко една част, предоставена от най-малко един доставчик, който предоставя най-малко една червена точка.
5.6. Издаване на брой доставчици, които имат състояние по-малко от това на S1 на доставчика.
5.7. Издаване на брой доставчици, които доставят части за всеки продукт с част P1 в размер по-голям от средния обем на доставките подробности P1 за този продукт. Забележка. В това упражнение ще трябва да използвате стандартната функция на AVG.
5.8. Повторете 5.3 и използване в решението си съществува.
5.9. Повторете 5.4 и използване в решението си съществува.
5.10. Направете списък с продуктите, които не се доставят всеки червен части доставчик в Лондон.
5.11. Направете списък с продуктите, за които всички подробности за доставчика доставя S1.
5.12. Списък на частите, доставени за всички продукти в Лондон.
5.13. Издаване на брой доставчици, които доставят една и съща позиция за всички продукти.
5.14. Направете списък с продуктите, за които най-малко предлагане са достъпни от доставчика S1 всички части.
За следните четири упражнения (5.15-5.18), конвертирате даден SQL изявление Изберете език обратно в тяхната равностойност в естествен език.
5.15. SELECT DISTINCT NOMER_IZDELIYA
Когато не СЪЩЕСТВУВА
КЪДЕТО SPJY.NOMER_IZDELIYA = SPJX. NOMER_
страниране на крайния публикувания документ ще бъде различен. се появява статия, а издателят. Заглавието препратките. анотирани C ++ позоваване на потребителя. Четене, MS: Addison -WesleyPublishingCompany. Inc. Kunz, J. С. J. М. Clayton, и.
20Nar49; AF11777. Helene Weigel Брехт (W), Barbara Брехт. PublishingCompany. работодател под наем. 0 251pr50; 11150R60. Уест PublishingCompany E адвокатите кооперативен PublishingCompany. Jr. 0 17NovV9; 13R473. Addison Галерия на американското изкуство.
и P. В. Галвин - Операционни системи Концепции - Addison -WesleyPublishingCompany. A.S. Godbole - операционни системи - Tata McGraw. Първи курс по математическа статистика, AddisonWesleyPublishingCompany. 1973 4. B.L.Van дер Waerden, математическа.
ф Penulis Сиърс, Франсис У. Penerbit Калифорния. Addison -WesleyPublishingCompany Tahun 1982 Jumlah 1 eksemplar Subyek. е Penulis Файнман, Richard P. Penerbit Калифорния. Addison -WesleyPublishingCompany Tahun 1963 Jumlah 4 eksemplar Subyek.