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

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

Подготовка на таблици

Да си представим, че в нашата база данни се съхранява информация за тапета, представена в две таблици. Това е таблицата Oboi с полетата: id (уникален идентификатор), тип (тип тапет - хартия, винил и т.н.), цвят (цвят), struct (структура) и rgis (цена). Таблицата на Остатки (остатъци) с полетата id_oboi (позоваване на уникалния идентификатор на таблицата в Oboi) и брой (брой ролки в склада).


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

Обои



id



тип



color



struct



цена



1

36)
Хартия



Многоцветен



Релефен



569

)

2



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



бежов



гладка
)


1148



3



винил



оранжев



Подчертано



504



4



) Флизелин



бежов







5



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









1506



6
135)

Хартия



многоцветен



гладко



954
)


7



винил



кафяв







372



8








)



Подчертани



9801



9




Тъкан




Гладко



11665

В таблицата с останките - също и от

Остатки



id_oboi



брой







8



2



12











257) 5



16



6



7


)
7



24



8



32



9



11

Да започнем с описанието на поръчката използват различно в SQL.

Място в изречението Изберете различен

Отделеният аргумент трябва да бъде поставен веднага след ключовата дума Select query. Той се прилага за всички колони, посочени в офертата Select, тъй като ще изключи абсолютно идентични линии от резултата от заявката. По този начин, достатъчно е да посочите веднъж, когато пишете SQL заявката "select distinct". Изключение е използването на различни в рамките на агрегираните функции, които разглеждамемалко по-късно.



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

ИЗБЕРЕТЕ отделна Остатки.Сточ, отделни Oboi. .id = Ostatki.id_oboi

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

Прилагане на отделни в стандартните заявки

Очевидно е, че при компетентно конструиране на структурата на таблиците и тяхното запълване, в една единствена таблица, възникват ситуации, при които възникват абсолютно еднакви линии. Следователно, на практика е неуместно да се изпълни заявката "Избор на различен *" с проба от една таблица.
Представете си ситуация, в която трябва да разберем какъв вид тапети имаме, само за удобство на сортирането по вид:

ИЗБЕРЕТЕ Oboi.type ОТ Oboi поръчка по тип

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





книга



хартия



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


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



винил



винил



Тъкани



Флизелин



Флизелин

Както можете да видите, таблицата съдържа повтарящи се низове. Ако добавим към изречението, изберете различен:

ИЗБЕРЕТЕ отделен Oboi.type ОТ Oboi ред по тип

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

тип



Хартия



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



Винил



Тъкани



Флизелин

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

Прилагането на различни в рамките на агрегираните функции

Отделен аргумент SQL може да се използва с всяка агрегирана функция. Но за Min и Max, неговото приложение няма да има никакъв ефект, а при изчисляване на сумата или средната стойност рядко може да си представите ситуация, при която не е необходимо да се вземат под внимание повторенията. Да предположим, че искаме да знаем как е запълнен нашия склад и за това изпращаме заявка, която изчислява общия брой на ролките в склада:

SELECT sum (Ostatki.count) ОТ Ostatki

Ако променим на:

SELECT sum (отделен Ostatki.count) ОТ Ostatki

тогава ще получим само 119, защото тапета по членове 3 и 7 са на склад в една и съща сума. Очевидно е обаче, че този отговор е неправилен. Често SQL се използва с функцията Count. Така че, без затруднения, можем да разберем колко уникални видове тапети имаме изобщо:

SELECT count (отделен Oboi.type) ОТ OBOI

И получи резултата 5 - обикновен двоен слой хартия, винил, тъкани и бамбук. Вероятно всеки е видял типа на рекламата: "Само ние имаме повече от 20 вида различни тапети!", Което означава, че в този магазин не се правят десетки ролки и тапети.разнообразие от съвременни видове. Интересното е, че в една заявка можете да укажете няколко функции на Count с различния атрибут или без него. Това означава, че това е единствената ситуация, когато отделните в Select'e могат да бъдат няколко пъти.

Ако не искате да използвате аргумент

От отделния SQL израз, трябва да се откажете в един от двата случая:
  • Изпълнявате извадка от таблици и сте сигурни за уникалността на стойностите във всяка. В този случай използването на аргумента не е възможно, тъй като е допълнителна тежест за сървъра или клиента (в зависимост от типа на базата данни).
  • Страхувате се да загубите необходимите данни. Нека обясним.
  • Да предположим, че шефът ви моли да покажете списъка с тапети, които имате, с посочване на две колони - вид и цвят. По навик посочвате аргумента различен:


    ИЗБЕРЕТЕ отделни Oboi.type, Oboi.color ОТ ОБОИ ПОРЪЧКА ОТ Oboi.type

    И - загубете част от данните:

    Тип



    Цвят



    Хартия



    многоцветен


    420) Хартия двуслойна



    бежова



    винил



    кафяв

    435)
    Винил



    оранжев



    тъкани



    розов

    )

    Flizelin



    Бежово



    Flizelin



    Бяло

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

    тип

    471)
    цвят



    Хартия



    Многоцветен



    Хартия



    многоцветен



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





    Винил



    Кафяв



    винил



    оранжев



    тъкани
    526)

    Розов



    флизелин



    бял



    флизелин
    )


    Бук

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

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

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

    Свързани публикации