muzruno.com

SQL отделни: описание, примери, свойства

Често, когато се използва SQL за извличане на информация от таблици, потребителят получава излишни данни, което се състои в наличието на абсолютно еднакви дублиращи се редове. За да изключите тази ситуация, използвайте отделния аргумент на SQL в клаузата Избор. В тази статия ще разгледаме примери за използването на този аргумент, както и ситуации, при които е по-добре да се изостави аргументът.

Преди да започнем да разглеждаме конкретни примери, ще създадем няколко необходими таблици в базата данни. sql отделен

Подготовка на маси

Представете си, че в базата данни има съхранена информация за тапета, представена в две таблици. Това е таблицата Oboi (тапет) с идент. № на полета (уникален идентификатор), тип (тип тапет - хартия, винил и др.), Цвят, структура и цена. И таблицата "Другики" (остатъци) с полетата id_oboi (позоваване на уникалния идентификатор в таблицата Oboi) и броя (броя на ролите в склада).

Попълнете таблиците с данни. В таблицата с тапет добавете 9 записа:

Oboi

идентификатор

тип

цвят

структура

цена

1

хартия

многоцветен

релефни

56.9

2

Двуслойна хартия

бежов

гладък

114,8

3

винил

оранжев

релефни

504

4

Нетъкани румени ръкавици

бежов

релефни

1020.9

5

Двуслойна хартия

бежов

гладък

150,6

6

хартия

многоцветен

гладък

95.4

7

винил

кафяв

гладък

372

8

Нетъкани румени ръкавици

бял

релефни

980,1

9

кърпа

розов

гладък

1166.5

В таблицата с останалите има и девет записа:

Ostatki

id_oboi

броене

1

8

2

12

3

24

4

9

5

16

6

7

7

24

8

32

9

11

Нека да започнем, като опишем как да използваме разликата в SQL.

Поставете различно в клаузата Избор

Различният аргумент трябва да бъде поставен непосредствено след избирането на ключова дума в заявките. Той се прилага незабавно към всички колони, посочени в клаузата за избиране, тъй като ще изключи абсолютно еднакви редове от резултата от заявката. Поради това е достатъчно да се уточни "изберете отделно", когато пишете SQL заявката. Единственото изключение е използването на отделни вътрешни функции, които ще разгледаме малко по-късно. sql изберете отделно

Трябва да се помни, че повечето СУБД не разпознават заявката ви по следния начин:

ИЗБЕРЕТЕ отличителните Другики, отделни Oboi. *

От Обой

ВЪТРЕШНО ПРЕКЪСВАНЕ Другите в Oboi.id = Ostatki.id_oboi

Тук аргументът се посочва няколко пъти или се указва веднъж, но преди втората, третата или друга избираема колона. Ще получите грешка с препратка към неточности в синтаксиса.

Използване на отделни в стандартните заявки



Очевидно е, че при правилната конструкция на таблицата и нейното запълване в една таблица ситуациите се изключват, когато се срещат абсолютно еднакви струни. Следователно, изпълнението на заявката "Select distinct *" с избор от една таблица е практически непрактично. различен в sql

Представете си ситуация, в която трябва да разберете какъв тип тапет имаме, само за удобство, сортиране по тип:

SELECT Oboi.type

ОТ Oboi ред по тип

И получаваме резултата:

тип

хартия

хартия

Двуслойна хартия

Двуслойна хартия

винил

винил

кърпа

Нетъкани румени ръкавици

Нетъкани румени ръкавици

Както можете да видите, в таблицата има дублирани редове. Ако добавим към отделната клауза за избор:

ИЗБЕРЕТЕ отделен тип Oboi

ОТ Oboi ред по тип

тогава получаваме резултата, без да повтаряме:

тип

хартия

Двуслойна хартия

винил

кърпа

Нетъкани румени ръкавици

По този начин, ако данните бяха правилно въведени в таблиците, веднага след обаждането или искането на купувачите ще можем да отговорим, че течните тапети, стъклените стени и акрилните тапети не са налични в магазина. Като се има предвид, че асортиментът в магазините обикновено не се ограничава до сто тапети, би било доста трудоемко да се сканира списъкът на не-уникални видове.

Използване на отделни в съвкупните функции

SQL разликата може да се използва с всяка агрегатна функция. Но за Мин и Макс неговото използване няма да има никакво въздействие и при изчисляването на сумата или средната стойност рядко е възможно да си представим ситуация, при която няма да е необходимо да се вземат под внимание повторенията.

Да приемем, че искаме да знаем колко нашият склад е пълен и затова изпращаме заявка, която изчислява общия брой ролки в склада:

SELECT сума (Ostatki.count)

От Други

Заявката ще върне отговор 143. Ако променим:

SELECT сума (отделен бройкит)

От Други

тогава получаваме само 119, защото тапетите по членове 3 и 7 са на склад в същото количество. Очевидно обаче е, че този отговор е неправилен.

Най-често SQL се използва с функцията Count. Така че, без затруднения, можем да разберем колко уникални вида тапети обикновено имаме:

SELECT брой (отделен тип Oboi.type)

От Обой

И да получите резултат 5 - хартия обикновени и двуслойни, винил, плат и нетъкан. Разбира се, всеки видя реклама като: "Само че имаме повече от 20 вида различни тапети!", Което означава, че в този магазин няма няколко десетки рула от всичко, но тапети от най-различни модерни типове.

Интересното е, че в една заявка можете да определите няколко функции Count с или без отделен атрибут. Това е, че това е единствената ситуация, в която отделно в Select може да присъства няколко пъти.

Кога трябва да отхвърля използването на аргумент

Използването на отделен аргумент на SQL трябва да бъде отхвърлено по един от двата начина:

  1. Избирате от таблици и сте сигурни в уникалността на стойностите във всяка от тях. В този случай използването на аргумента е нецелесъобразно, защото това е допълнително натоварване на сървъра или клиента (в зависимост от вида СУБД).
  2. Страхувате се от загуба на необходимите данни. Ще обясним.

Да предположим, че шефът ви помоли да покажете списък с тапети, които имате, като посочите само две колони - тип и цвят. По навик, вие посочвате разликата в аргумента:

ИЗБЕРЕТЕ отличителните типове Oboi.type, Oboi.color

От Обой

ПОРЪЧАЙ ОТ Oboi.type

И - изгубете някои от данните:

тип

цвят

хартия

многоцветен

Двуслойна хартия

бежов

винил

кафяв

винил

оранжев

кърпа

розов

Нетъкани румени ръкавици

бежов

Нетъкани румени ръкавици

бял

Може да се окаже, че имаме само един тип тапети от хартия (конвенционални и двупластови), въпреки че всъщност дори в нашата малка маса те имат две статии (резултатът не е различен):

тип

цвят

хартия

многоцветен

хартия

многоцветен

Двуслойна хартия

бежов

Двуслойна хартия

бежов

винил

кафяв

винил

оранжев

кърпа

розов

Нетъкани румени ръкавици

бял

Нетъкани румени ръкавици

бежов

Следователно, както при писането на всяка заявка, с отделен аргумент, човек трябва да внимава и правилно да реши проблема с приложението си в зависимост от задачата.

Алтернативно различно

Обратното на отделения аргумент е аргументът "Всички". Когато го използвате, дублираните линии се запазват. Но тъй като по подразбиране DBMS смята, че е необходимо да отпечатате всички стойности, All аргументът е по-скоро спецификатор, отколкото истински функционален аргумент. ясно описание на sqlНадяваме се, че сега разбирате, когато се използва отделен (SQL). Описанието ви даде пълна информация за целесъобразността на прилагането на този аргумент при решаване на различни проблеми. В края на краищата, както се оказа, дори такъв прост аргумент в приложението му крие много осезаема вероятност да загубят някои данни и да извлекат неточната информация.

Споделяне в социалните мрежи:

сроден