СКЛите упит: Изаберите, Где, ОГРАНИЧИТЕ, ПОМЕРИТЕ, Бројите, групишите према

Преглед садржаја:

Anonim

Да бисте написали СКЛ упите у СКЛите базу података, морате знати како функционирају клаузуле СЕЛЕЦТ, ФРОМ, ВХЕРЕ, ГРОУП БИ, ОРДЕР БИ и ЛИМИТ и како их користити.

Током овог водича научићете како се користе ове клаузуле и како писати СКЛите клаузуле.

У овом упутству ћете научити-

  • Читање података помоћу Селецт
  • Имена и алиаси
  • ГДЕ
  • Ограничавање и наручивање
  • Уклањање дупликата
  • Збирно
  • Група од
  • Упит и подупит
  • Поставите операције -УНИОН, пресеци
  • НУЛЛ руковање
  • Условни резултати
  • Уобичајени израз табеле
  • Напредни упити

Читање података помоћу Селецт

Клаузула СЕЛЕЦТ је главна изјава коју користите за постављање упита о СКЛите бази података. У клаузули СЕЛЕЦТ наводите шта да одаберете. Али пре клаузуле селецт, погледајмо одакле можемо одабрати податке помоћу клаузуле ФРОМ.

Клаузула ФРОМ користи се да би се назначило где желите да одаберете податке. У клаузули фром можете одредити једну или више табела или подупита за одабир података, као што ћемо видети касније у водичима.

Имајте на уму да за све следеће примере морате покренути склите3.еке и отворити везу са узором базе података као текућу:

Корак 1) У овом кораку,

  1. Отворите Мој рачунар и идите до следећег директоријума " Ц: \ склите " и
  2. Затим отворите " склите3.еке ":

Корак 2) Отворите базу података " ТуториалсСамплеДБ.дб " следећом командом:

Сада сте спремни за покретање било које врсте упита у бази података.

У клаузули СЕЛЕЦТ можете да изаберете не само име колоне, већ имате и пуно других опција да одредите шта да изаберете. Гласи:

СЕЛЕЦТ *

Ова наредба ће одабрати све ступце из свих референцираних табела (или потупита) у клаузули ФРОМ. На пример:

СЕЛЕЦТ *ОД ученикаУНУТАРЊЕ ПРИДРУЖИВАЊЕ Одељењима НА Студент.ДепартментИд = Департментс.ДепартментИд; 

Ово ће одабрати све колоне из табела ученика и табела одељења:

СЕЛЕЦТ име табеле. *

Ово ће изабрати све колоне само из табеле „назив табеле“. На пример:

ОДАБЕРИТЕ студенте. *ОД ученикаУНУТАРЊЕ ПРИДРУЖИВАЊЕ Одељењима НА Студент.ДепартментИд = Департментс.ДепартментИд;

Овим ћете одабрати све колоне само из табеле ученика:

Буквална вредност

Буквална вредност је константна вредност која се може навести у наредби селецт. Вредности буквално можете користити на исти начин као што користите имена колона у клаузули СЕЛЕЦТ. Ове литералне вредности ће се приказати за сваки ред из редова које враћа СКЛ упит.

Ево неколико примера различитих дословних вредности које можете одабрати:

  • Нумериц Литерал - бројеви у било ком формату попут 1, 2.55, ... итд.
  • Стринг литерали - Било који низ 'УСА', 'ово је узорак текста', ... итд.
  • НУЛЛ - НУЛЛ вредност.
  • Цуррент_ТИМЕ - Даће вам тренутно време.
  • ЦУРРЕНТ_ДАТЕ - ово ће вам дати тренутни датум.

То може бити корисно у неким ситуацијама када морате да изаберете константну вредност за све враћене редове. На пример, ако желите да изаберете све студенте из табеле Студенти, са новом колоном која се назива земља која садржи вредност „САД“, можете то учинити:

СЕЛЕЦТ *, 'УСА' АС АС ФРОМ Студентс;

Ово ће вам дати све колоне ученика, плус нова колона „Држава“ попут ове:

Имајте на уму да ова нова колона Земља заправо није нова колона додата у табелу. То је виртуелна колона, креирана у упиту за приказивање резултата и неће бити креирана у табели.

Имена и алиаси

Псеудоним је ново име колоне које вам омогућава да одаберете колону са новим именом. Псеудоними колона наведени су помоћу кључне речи „АС“.

На пример, ако желите да изаберете ступац Име студента који ће се враћати са „Име ученика“ уместо са „Име студента“, можете му дати псеудоним попут овог:

ОДАБЕРИТЕ ИМЕ УЧЕНИКА КАО „Име студента“ ИЗ ученика; 

Ово ће вам дати имена ученика са именом „Име ученика“ уместо „Име ученика“ овако:

Имајте на уму да је назив колоне и даље „Име ученика “; колона СтудентНаме је и даље иста, алиас се не мења.

Алиас неће променити име колоне; само ће променити име за приказ у клаузули СЕЛЕЦТ.

Такође имајте на уму да, кључна реч „АС“ није обавезна, алиас име можете да додате без ње, отприлике овако:

ОДАБЕРИТЕ ИМЕ УЧЕНИКА „Име ученика“ ИЗ ученика;

И даће вам потпуно исти излаз као и претходни упит:

Такође можете дати псеудониме табела, а не само колоне. Са истом кључном речи „АС“. На пример, можете ово:

СЕЛЕЦТ с. * ФРОМ Студенти АС с; 

Ово ће вам дати све колоне у табели Студенти:

Ово може бити врло корисно ако се придружите више од једне табеле; уместо да понављате пуно име табеле у упиту, свакој табели можете дати кратко име алиас. На пример, у следећем упиту:

ОДАБЕРИТЕ Име ученика, Одељења.Име одељењаОД ученикаУНУТАРЊЕ ПРИДРУЖИВАЊЕ Одељењима НА Студент.ДепартментИд = Департментс.ДепартментИд;

Овај упит ће одабрати свако име студента из табеле „Студенти“ са називом његовог одељења из табеле „Одељења“:

Међутим, исти упит се може написати овако:

СЕЛЕЦТ с.СтудентНаме, д.ДепартментНамеОД УЧЕНИКА КАО сУНУТАРЊА ПРИДРУЖИТИ Одељењима КАО д НА с.ДепартментИд = д.ДепартментИд; 
  • Табели ученика дали смо псеудоним "с", а одељењу табела "д".
  • Тада смо, уместо да користимо цело име табеле, користили њихове псеудониме да бисмо их упутили.
  • ИННЕР ЈОИН спаја две или више табела заједно користећи услов. У нашем примеру придружили смо табелу Студенти са табелом Одељења са колоном ДепартментИд. Ту је и детаљно објашњење ЗА УНУТАРЊЕ ПРИДРУЖИВАЊЕ у водичу „СКЛите Јоинс“.

Ово ће вам дати тачан излаз као претходни упит:

ГДЕ

Писање СКЛ упита користећи само клаузулу СЕЛЕЦТ са клаузулом ФРОМ, као што смо видели у претходном одељку, даће вам све редове из табела. Међутим, ако желите да филтрирате враћене податке, морате да додате клаузулу „ГДЕ“.

Клаузула ВХЕРЕ користи се за филтрирање скупа резултата које враћа СКЛ упит. Овако функционише клаузула ВХЕРЕ:

  • У клаузули ВХЕРЕ можете навести „израз“.
  • Тај израз ће се процијенити за сваки ред враћен из табеле (а) наведених у клаузули ФРОМ.
  • Израз ће се процијенити као логички израз, с резултатом труе, фалсе или нулл.
  • Тада ће се вратити само редови за које је израз оцењен са истинитом вредношћу, а они са лажним или ништавим резултатима ће се занемарити и неће бити укључени у скуп резултата.
  • Да бисте филтрирали скуп резултата помоћу клаузуле ВХЕРЕ, морате да користите изразе и операторе.

Списак оператора у СКЛите-у и како их користити

У следећем одељку ћемо објаснити како можете да филтрирате помоћу израза и оператора.

Израз је једна или више дословних вредности или колона међусобно комбинованих са оператором.

Имајте на уму да изразе можете користити и у клаузули СЕЛЕЦТ и у клаузули ВХЕРЕ.

У следећим примерима испробаћемо изразе и операторе и у клаузули селецт и у ВХЕРЕ клаузули. Да би вам показали како се изводе.

Постоје различите врсте израза и оператора које можете одредити на следећи начин:

СКЛите оператор спајања "||"

Овај оператор се користи за међусобно повезивање једне или више дословних вредности или колона. Даће један низ резултата из свих спојених литералних вредности или колона. На пример:

СЕЛЕЦТ 'Ид витх Наме:' || СтудентИд || СтудентНаме АС СтудентИдВитхНамеОД ученика;

Ово ће се спојити у нови псеудоним " СтудентИдВитхНаме ":

  • Вредност дословног низа „ Ид са именом:
  • са вредношћу колоне „ СтудентИд “ и
  • са вредношћу из колоне „ СтудентНаме

СКЛите ЦАСТ оператор:

Оператор ЦАСТ се користи за претварање вредности из типа података у други тип података.

На пример, ако имате нумеричку вредност ускладиштену као вредност низа попут ове „ '12 .5 ' “ и желите да је претворите у нумеричку вредност, можете да користите ЦАСТ оператор да бисте то урадили овако „ ЦАСТ ('12 .5' АС СТВАРНО) ". Или ако имате децималну вредност попут 12,5, а требате добити само целобројни део, можете га пребацити на цео број попут овог „ЦАСТ (12,5 АС ИНТЕГЕР)“.

Пример

У следећој наредби покушаћемо да претворимо различите вредности у друге типове података:

ОДАБЕРИ ЦАСТ ('12 .5 'КАО СТВАРНО) ТоРеал, ЦАСТ (12.5 КАО ИНТЕГЕР) КАО ТоИнтегер;

Ово ће вам дати:

Резултат је следећи:

  • ЦАСТ ('12 .5 'КАО СТВАРНО) - вредност '12 .5' је вредност низа, претвориће се у СТВАРНУ вредност.
  • ЦАСТ (12,5 АС ИНТЕГЕР) - вредност 12,5 је децимална вредност, претвориће се у целобројну вредност. Децимални део ће бити скраћен и постаје 12.

СКЛите аритметички оператори:

Узмите две или више нумеричких литералних вредности или нумеричких ступаца и вратите једну нумеричку вредност. Аритметички оператори подржани у СКЛитеу су:

  • Сабир „ + “ - дајте збир два операнда.
  • Одузимање " - " - одузима два операнда и доводи до разлике.
  • Множење „ * “ - производ два операнда.
  • Подсетник (модуло) „ % “ - даје остатак који је резултат дељења једног операнда другим операндом.
  • Подјела " / " - враћа резултате количника дијељењем лијевог и десног операнда.

Пример:

У следећем примеру ћемо испробати пет аритметичких оператора са дословно нумеричким вредностима у истом

клаузула за одабир:

СЕЛЕЦТ 25 + 6, 25-6, 25 * 6, 25% 6, 25/6;

Ово ће вам дати:

Приметите како смо овде користили наредбу СЕЛЕЦТ без клаузуле ФРОМ. А ово је дозвољено у СКЛитеу све док одаберемо буквалне вредности.

СКЛите оператери поређења

Упоредите два операнда међусобно и вратите тачно или нетачно на следећи начин:

  • " < " - враћа труе ако је леви операнд мањи од десног.
  • " <= " - враћа вредност труе ако је леви операнд мањи или једнак десном операнду.
  • " > " - враћа труе ако је леви операнд већи од десног.
  • " > = " - враћа труе ако је леви операнд већи или једнак десном операнду.
  • " = " и " == " - враћа труе ако су два операнда једнака. Имајте на уму да су оба оператора иста и међу њима нема разлике.
  • " ! = " и " <> " - враћа труе ако два операнда нису једнака. Имајте на уму да су оба оператора иста и међу њима нема разлике.

Имајте на уму да СКЛите истинску вредност изражава са 1, а лажну вредност са 0.

Пример:

СЕЛЕЦТ10 <6 АС '<', 10 <= 6 АС '<=',10> 6 АС '>', 10> = 6 АС '> =',10 = 6 АС '=', 10 == 6 АС '==',10! = 6 АС '! =', 10 <> 6 АС '<>';

Ово ће дати отприлике ово:

СКЛите Паттерн Матцхинг Оператори

ЛИКЕ “ - користи се за подударање шаблона. Помоћу „ Свиђа ми се “ можете да тражите вредности које се подударају са узорком наведеним помоћу џокер знака.

Операнд с леве стране може бити литерална вредност низа или ступац низа. Узорак се може навести на следећи начин:

  • Садржи образац. На пример, СтудентНаме ЛИКЕ '% а%' - ово ће тражити имена ученика која садрже слово "а" на било којој позицији у колони СтудентНаме.
  • Почиње са узорком. На пример, „ СтудентНаме ЛИКЕ 'а%' “ - потражите имена ученика која почињу словом „а“.
  • Завршава се шаблоном. На пример, „ СтудентНаме ЛИКЕ '% а' “ - Потражите имена ученика која се завршавају словом „а“.
  • Подударање било ког појединачног знака у низу помоћу доњег слова "_". На пример, „ СтудентНаме ЛИКЕ 'Ј___' “ - Потражите имена ученика дужине 4 знака. Мора започети словом „Ј“, а може имати још било која три знака након слова „Ј“.

Примери подударања образаца:

  1. Нека имена ученика која почињу словом „ј“:
    ОДАБЕРИТЕ ИМЕ УЧЕНИКА ОД СТУДИЈА ГДЕ ИМЕ УЧЕНИКА КАО 'Ј%';

    Резултат:

  2. Нека се имена ученика завршавају словом „и“:
    ОДАБЕРИТЕ ИМЕ УЧЕНИКА ОД СТУДИЈА ГДЕ ИМЕ УЧЕНИКА КАО '% и'; 

    Резултат:

  3. Дохватите имена ученика која садрже слово 'н':
    ОДАБЕРИТЕ ИМЕ УЧЕНИКА ОД СТУДИЈА ГДЈЕ ИМЕ УЧЕНИКА КАО '% н%';

    Резултат:

„ГЛОБ“ - еквивалентан је оператеру ЛИКЕ, али ГЛОБ разликује велика и мала слова, за разлику од оператора ЛИКЕ. На пример, следеће две команде ће вратити различите резултате:

ОДАБЕРИТЕ 'Јацк' ГЛОБ 'ј%';ОДАБЕРИТЕ 'Јацк' КАО 'ј%';

Ово ће вам дати:

  • Прва наредба враћа 0 (нетачно) јер је ГЛОБ оператор осетљив на велика и мала слова, па „ј“ није једнако „Ј“. Међутим, друга изјава ће вратити 1 (тачно) јер оператор ЛИКЕ не разликује велика и мала слова, па је „ј“ једнако „Ј“.

Остали оператери:

СКЛите И.

Логички оператор који комбинује један или више израза. Вратиће труе, само ако сви изрази дају вредност "труе". Међутим, вратиће фалсе само ако сви изрази дају вредност "фалсе".

Пример:

Следећи упит ће тражити студенте који имају СтудентИд> 5, а СтудентНаме почиње словом Н, враћени студенти морају да испуњавају два услова:

СЕЛЕЦТ *ОД ученикаГДЕ (СтудентИд> 5) И (Име студента КАО 'Н%');

Као излаз, на горњој снимци екрана, ово ће вам дати само „Нанци“. Нанци је једина студенткиња која испуњава оба услова.

СКЛите ИЛИ

Логички оператор који комбинује један или више израза, тако да ако један од комбинованих оператора даје труе, тада ће вратити труе. Међутим, ако сви изрази дају фалсе, вратит ће фалсе.

Пример:

Следећи упит ће тражити студенте који имају СтудентИд> 5 или СтудентНаме почиње словом Н, враћени студенти морају да испуњавају најмање један од услова:

СЕЛЕЦТ *ОД ученикаГДЕ (СтудентИд> 5) ИЛИ (СтудентНаме КАО 'Н%');

Ово ће вам дати:

Као излаз, на горњој снимци екрана, ово ће вам дати име студента са словом „н“ у свом имену плус ИД ученика који има вредност> 5.

Као што видите, резултат се разликује од упита са оператором АНД.

СКЛите ИЗМЕЂУ

ИЗМЕЂУ се користи за одабир оних вредности које се налазе у распону од две вредности. На пример, „ Кс ИЗМЕЂУ И И З “ вратиће вредност труе (1) ако је вредност Кс између две вредности И и З. У супротном, вратиће вредност фалсе (0). „ Кс ИЗМЕЂУ И И З “ еквивалентно је „ Кс> = И И Кс <= З “, Кс мора бити веће или једнако И и Кс је мање или једнако З.

Пример:

У следећем примеру примера, написаћемо упит да бисмо добили ученике са вредностима Ид између 5 и 8:

СЕЛЕЦТ *ОД ученикаГДЕ ЈЕ УЧЕНИК ИЗМЕЂУ 5 И 8;

Ово ће дати само студентима са ИД-овима 5, 6, 7 и 8:

СКЛите ИН

Узима један операнд и листу операнда. Вратиће тачно ако је прва вредност операнда једнака вредности операнда са листе. Оператор ИН враћа труе (1) ако листа операнда садржи прву вредност операнда унутар својих вредности. У супротном, вратиће фалсе (0).

Овако: „ цол ИН (к, и, з) “. Ово је еквивалентно „ (цол = к) или (цол = и) или (цол = з) “.

Пример:

Следећи упит ће одабрати студенте само са ИД-овима 2, 4, 6, 8:

СЕЛЕЦТ *ОД ученикаГДЕ ЈЕ ИД УЧЕНИКА (2, 4, 6, 8);

Овако:

Претходни упит ће дати тачан резултат као следећи упит, јер су еквивалентни:

СЕЛЕЦТ *ОД ученикаГДЕ (СтудентИд = 2) ИЛИ (СтудентИд = 4) ИЛИ (СтудентИд = 6) ИЛИ (СтудентИд = 8);

Оба упита дају тачан излаз. Међутим, разлика између два упита је у томе што смо први упит користили оператор „ИН“. У другом упиту користили смо више оператора „ИЛИ“.

ИН оператор је еквивалентан употреби више оператора ОР. „ ВХЕРЕ СтудентИд ИН (2, 4, 6, 8) “ је еквивалентан „ ВХЕРЕ (СтудентИд = 2) ОР (СтудентИд = 4) ОР (СтудентИд = 6) ОР (СтудентИд = 8);

Овако:

СКЛите НОТ ИН

Операнд "НОТ ИН" је супротан ИН оператору. Али са истом синтаксом; потребан је један операнд и листа операнда. Вратиће тачно ако вредност првог операнда није једнака вредности операнда са листе. тј. вратиће труе (0) ако листа операнда не садржи први операнд. Овако: „ цол НОТ ИН (к, и, з) “. Ово је еквивалентно са " (цол <> к) АНД (цол <> и) АНД (цол <> з) ".

Пример:

Следећи упит ће одабрати студенте са ИД-овима који нису једнаки од ових ИД-ова 2, 4, 6, 8:

СЕЛЕЦТ *ОД ученикаГДЕ студент није био (2, 4, 6, 8);

Овако

Претходном упиту дајемо тачан резултат као следећи упит, јер су еквивалентни:

СЕЛЕЦТ *ОД ученикаГДЕ (СтудентИд <> 2) АНД (СтудентИд <> 4) АНД (СтудентИд <> 6) АНД (СтудентИд <> 8);

Овако:

На горњем снимку екрана,

Користили смо више неједнаких оператора „<>“ да бисмо добили списак ученика који нису једнаки ни следећим Ид-овима 2, 4, 6 или 8. Овај упит ће вратити све остале студенте осим ове листе Ид-а.

СКЛите ПОСТОЈИ

Оператори ЕКСИСТС не узимају ниједан операнд; након њега је потребна само клаузула СЕЛЕЦТ. Оператор ЕКСИСТС ће вратити труе (1) ако се из клаузуле СЕЛЕЦТ врате било који редови, а фалсе (0) ако уопште нема враћених редова из СЕЛЕЦТ клаузуле.

Пример:

У следећем примеру ћемо одабрати назив одељења ако ИД одељења постоји у табели ученика:

СЕЛЕЦТ ИМЕ одељењаОД Одељења КАО дГДЕ ПОСТОЈИ (ОДАБЕРИТЕ ОДЕЉЕНО ОД СТУДЕНАТА КАО ГДЈЕ д.ДепартментИд = с.ДепартментИд);

Ово ће вам дати:

Вратиће се само три одељења „ ИТ, физика и уметност “. А назив одељења „ Математика “ се неће вратити, јер на њему нема ученика, па одељење Ид не постоји у табели ученика. Због тога је оператор ЕКСИСТС игнорисао одељење „ Математика “.

СКЛите НЕ

Обрне резултат претходног оператора који долази након њега. На пример:

  • НЕ ИЗМЕЂУ - Вратиће се тачно ако ИЗМЕЂУ врати нетачно и обрнуто.
  • НОТ ЛИКЕ - Вратиће се тачно ако ЛИКЕ врати фалсе и обрнуто.
  • НОТ ГЛОБ - Вратиће тачно ако ГЛОБ врати фалсе и обрнуто.
  • НЕ ПОСТОЈИ - Вратиће се тачно ако ПОСТОЈИ врати нетачно и обрнуто.

Пример:

У следећем примеру ћемо користити оператор НОТ са оператором ПОСТОЈИ да бисмо добили имена одељења која не постоје у табели Студенти, што је обрнути резултат оператора ЕКСИСТС. Дакле, претрага ће се вршити путем одељења Ид који не постоји у табели одељења.

СЕЛЕЦТ ИМЕ одељењаОД Одељења КАО дГДЕ НЕ ПОСТОЈИ (СЕЛЕЦТ ДепартментИдОД УЧЕНИКА КАО сВХЕРЕ д.ДепартментИд = с.ДепартментИд);

Излаз :

Вратиће се само одељење „ Математика “. Будући да је одељење „ Математика “ једино одељење, које не постоји у табели ученика.

Ограничавање и наручивање

СКЛите Ордер

СКЛите Ордер је сортирање резултата по једном изразу или више њих. Да бисте наручили скуп резултата, морате користити клаузулу ОРДЕР БИ како следи:

  • Прво морате навести клаузулу ОРДЕР БИ.
  • Клаузула ОРДЕР БИ мора бити наведена на крају упита; иза ње се може навести само клаузула ЛИМИТ.
  • Наведите израз којим ћете поредати податке, овај израз може бити име колоне или израз.
  • После израза можете одредити опционални правац сортирања. Било ДЕСЦ, да бисте наредили силазне податке или АСЦ да бисте наредили растуће податке. Да нисте навели ниједну од њих, подаци би били сортирани растуће.
  • Можете да наведете више израза користећи „,“ између себе.

Пример

У следећем примеру ћемо одабрати све студенте поредане по именима, али у опадајућем редоследу, а затим по називу одељења у растућем редоследу:

СЕЛЕЦТ с.СтудентНаме, д.ДепартментНамеОД УЧЕНИКА КАО сУНУТРАШЊИ ПРИДРУЖИТИ Одељења КАО д НА с.ДепартментИд = д.ДепартментИдНАРУЧИТЕ д.ДепартментНаме АСЦ, с.СтудентНаме ДЕСЦ;

Ово ће вам дати:

  • СКЛите ће прво распоредити све студенте према називима њихових одељења у растућем редоследу
  • Тада ће се за сваки назив одељења сви студенти под тим називом одељења приказивати у опадајућем редоследу према њиховим именима

СКЛите ограничење:

Можете ограничити број редова које враћа ваш СКЛ упит помоћу клаузуле ЛИМИТ. На пример, ЛИМИТ 10 ће вам дати само 10 редова и занемарити све остале редове.

У клаузули ЛИМИТ можете одабрати одређени број редова почев од одређеног положаја помоћу клаузуле ОФФСЕТ. На пример, „ ЛИМИТ 4 ОФФСЕТ 4 “ ће игнорисати прва 4 реда и вратио је 4 реда почевши од петог реда, тако да ћете добити редове 5,6,7 и 8.

Имајте на уму да је клаузула ОФФСЕТ необавезна, можете је написати као „ ЛИМИТ 4, 4 “ и она ће вам дати тачне резултате.

Пример :

У следећем примеру ћемо помоћу упита вратити само 3 ученика почев од студентског броја 5:

СЕЛЕЦТ * ФРОМ Студенти ОГРАНИЧИТЕ 4,3;

Ово ће вам дати само три ученика почев од 5. реда, па ће вам дати редове са СтудентИд 5, 6 и 7:

Уклањање дупликата

Ако ваш СКЛ упит врати двоструке вредности, можете користити кључну реч " ДИСТИНЦТ " да бисте уклонили те дупликате и вратили различите вредности. Након рада кључа ДИСТИНЦТ можете навести више колона.

Пример:

Следећи упит ће вратити дупликате „вредности назива одељења“: Овде имамо дупликате вредности са именима ИТ, Физика и Уметност.

СЕЛЕЦТ д.ДепартментНамеОД УЧЕНИКА КАО сУНУТАРЊА ПРИДРУЖИТИ Одељењима КАО д НА с.ДепартментИд = д.ДепартментИд;

Ово ће вам дати двоструке вредности за назив одељења:

Приметите како постоје двоструке вредности за име одељења. Сада ћемо користити ДИСТИНЦТ кључну реч са истим упитом да бисмо уклонили те дупликате и добили само јединствене вредности. Овако:

СЕЛЕЦТ ДИСТИНЦТ д.ДепартментНамеОД УЧЕНИКА КАО сУНУТАРЊА ПРИДРУЖИТИ Одељењима КАО д НА с.ДепартментИд = д.ДепартментИд;

Ово ће вам дати само три јединствене вредности за колону назива одељења:

Збирно

СКЛите агрегати су уграђене функције дефинисане у СКЛитеу које ће групирати више вредности из више редова у једну вредност.

Ево агрегата које СКЛите подржава:

СКЛите АВГ ()

Враћен просек за све к вредности.

Пример:

У следећем примеру ћемо добити просечну оцену коју су студенти добили на свим испитима:

СЕЛЕЦТ АВГ (Марк) ФРОМ Маркс;

Ово ће вам дати вредност "18.375":

Ови резултати потичу од збрајања свих вредности оцене подељених њиховим бројањем.

ЦОУНТ () - ЦОУНТ (Кс) или ЦОУНТ (*)

Приказује укупан број броја приказа к вредности. Ево неколико опција које можете да користите са ЦОУНТ:

  • ЦОУНТ (к): Броји само к вредности, где је к име колоне. Занемарит ће НУЛЛ вриједности.
  • Бројање (*): Бројање свих редова из свих колона.
  • ЦОУНТ (ДИСТИНЦТ к): Можете одредити ДИСТИНЦТ кључну реч пре к, која ће добити број различитих вредности к.

Пример

У следећем примеру ћемо добити укупан број одељења са ЦОУНТ (ДепартментИд), ЦОУНТ (*) и ЦОУНТ (ДИСТИНЦТ ДепартментИд) и како се разликују:

ОДАБЕРИТЕ ЦОУНТ (ИД одељења), ЦОУНТ (ДИСТИНЦТ ДепартментИд), ЦОУНТ (*) ОД ученика;

Ово ће вам дати:

Гласи:

  • ЦОУНТ (ДепартментИд) ће вам дати број свих одељења ИД, а занемарити ће нулл вредности.
  • ЦОУНТ (ДИСТИНЦТ ДепартментИд) дају вам различите вредности ДепартментИд, које су само 3. Које су три различите вредности назива одељења. Приметите да у имену студента постоји 8 вредности назива одељења. Али само три различите вредности које су математика, информатика и физика.
  • ЦОУНТ (*) броји број редова у табели ученика који су 10 редова за 10 ученика.

ГРОУП_ЦОНЦАТ () - ГРОУП_ЦОНЦАТ (Кс) или ГРОУП_ЦОНЦАТ (Кс, И)

Агрегатна функција ГРОУП_ЦОНЦАТ спаја вишеструке вредности у једну вредност зарезом да би их раздвојила. Има следеће опције:

  • ГРОУП_ЦОНЦАТ (Кс): Ово ће повезати сву вредност к у један низ, зарезом "," који се користи као сепаратор између вредности. НУЛЛ вредности ће се занемарити.
  • ГРОУП_ЦОНЦАТ (Кс, И): Ово ће спојити вредности к у један низ, при чему се вредност и користи као сепаратор између сваке вредности уместо подразумеваног сепаратора ','. НУЛЛ вредности ће такође бити занемарене.
  • ГРОУП_ЦОНЦАТ (ДИСТИНЦТ Кс): Ово ће повезати све различите вредности к у један низ, зарезом "," који се користи као сепаратор између вредности. НУЛЛ вредности ће се занемарити.

Пример ГРОУП_ЦОНЦАТ (Име одељења)

Следећи упит ће повезати све вредности назива одељења из табеле ученика и одељења у једну стринг раздвојену зарезом. Дакле, уместо да вратимо листу вредности, по једну вредност у сваком реду. Вратиће само једну вредност у један ред, са свим вредностима одвојеним зарезом:

СЕЛЕЦТ ГРОУП_ЦОНЦАТ (д.ДепартментНаме)ОД УЧЕНИКА КАО сУНУТАРЊА ПРИДРУЖИТИ Одељењима КАО д НА с.ДепартментИд = д.ДепартментИд;

Ово ће вам дати:

Ово ће вам дати списак вредности имена 8 одељења спојених у једну нит раздвојену зарезом.

Пример ГРОУП_ЦОНЦАТ (ДИСТИНЦТНаме одељења)

Следећи упит ће повезати различите вредности имена одељења из табеле ученика и одељења у једну стринг раздвојену зарезом:

СЕЛЕЦТ ГРОУП_ЦОНЦАТ (ДИСТИНЦТ д.ДепартментНаме)ОД УЧЕНИКА КАО сУНУТАРЊА ПРИДРУЖИТИ Одељењима КАО д НА с.ДепартментИд = д.ДепартментИд;

Ово ће вам дати:

Приметите како се резултат разликује од претходног резултата; враћене су само три вредности које су различита имена одељења, а дуплиране вредности су уклоњене.

ГРОУП_ЦОНЦАТ (Име одељења, '&') Пример

Следећи упит ће спојити све вредности колоне назива одељења из табеле ученика и одељења у један низ, али са знаком '&' уместо зареза као сепаратора:

СЕЛЕЦТ ГРОУП_ЦОНЦАТ (д.ДепартментНаме, '&')ОД УЧЕНИКА КАО сУНУТАРЊА ПРИДРУЖИТИ Одељењима КАО д НА с.ДепартментИд = д.ДепартментИд;

Ово ће вам дати:

Обратите пажњу на то како се знак "&" користи уместо подразумеваног знака "," за раздвајање вредности.

СКЛите МАКС () и МИН ()

МАКС (Кс) вам враћа највишу вредност од Кс вредности. МАКС ће вратити НУЛЛ вредност ако су све вредности к нулл. Док вам МИН (Кс) враћа најмању вредност од Кс вредности. МИН ће вратити НУЛЛ вредност ако су све вредности Кс нулл.

Пример

У следећем упиту користићемо функције МИН и МАКС да бисмо добили највишу оцену и најнижу оцену из табеле „ Ознаке “:

СЕЛЕЦТ МАКС (Марк), МИН (Марк) ФРОМ Маркс;

Ово ће вам дати:

СКЛите СУМ (к), Укупно (к)

Обоје ће вратити збир свих к вредности. Али они се разликују у следећем:

  • СУМ ће вратити нулу ако су све вредности нуле, али Тотал ће вратити 0.
  • ТОТАЛ увек враћа вредности са покретном зарезом. СУМ враћа целу вредност ако су све к вредности цели број. Међутим, ако вредности нису цели број, вратиће вредност са покретном тачком.

Пример

У следећем упиту користићемо СУМ и зброј да бисмо добили збир свих оцена у табелама „ Ознаке “:

ИЗБОР ЗБОРА (Ознака), УКУПНО (Ознака) ИЗ Ознака;

Ово ће вам дати:

Као што видите, ТОТАЛ увек враћа покретну тачку. Али СУМ враћа целобројну вредност, јер су вредности у колони „Означи“ можда у целобројним вредностима.

Разлика између примера СУМ и УКУПНО:

У следећем упиту показаћемо разлику између СУМ-а и УКУПНО када добију СУМ НУЛЛ вредности:

ИЗБОР ЗБОРА (Ознака), УКУПНО (Ознака) ОД ОЗНАКА ГДЕ ТестИд = 4;

Ово ће вам дати:

Имајте на уму да не постоје ознаке за ТестИд = 4, тако да постоје нулл вредности за тај тест. СУМ враћа нулу као празно, док ТОТАЛ враћа 0.

Група од

Клаузула ГРОУП БИ користи се за одређивање једне или више колона које ће се користити за груписање редова у групе. Редови са истим вредностима биће сакупљени (поређани) заједно у групе.

За било који други ступац који није укључен у групу по ступцима, можете да користите агрегатну функцију за њега.

Пример:

Следећи упит ће вам дати укупан број ученика присутних на сваком одељењу.

СЕЛЕЦТ д.ДепартментНаме, ЦОУНТ (с.СтудентИд) КАО СтудентсЦоунтОД УЧЕНИКА КАО сУНУТРАШЊИ ПРИДРУЖИТИ Одељења КАО д НА с.ДепартментИд = д.ДепартментИдГРОУП БИ д. Одељење Име;

Ово ће вам дати:

Клаузула ГРОУПБИ ДепартментНаме групираће све студенте у групе по једно за свако име одељења. За сваку групу „одељења“ рачунаће студенте.

ХАВИНГ клаузула

Ако желите филтрирати групе које је вратила клаузула ГРОУП БИ, можете одредити клаузулу "ХАВИНГ" са изразом иза ГРОУП БИ. Израз ће се користити за филтрирање ових група.

Пример

У следећем упиту ћемо одабрати она одељења на којима су само два ученика:

СЕЛЕЦТ д.ДепартментНаме, ЦОУНТ (с.СтудентИд) КАО СтудентсЦоунтОД УЧЕНИКА КАО сУНУТРАШЊИ ПРИДРУЖИТИ Одељења КАО д НА с.ДепартментИд = д.ДепартментИдГРОУП БИ д. Одељење ИмеИМАЈУЋИ БРОЈ (с.СтудентИд) = 2;

Ово ће вам дати:

Клаузула ХАВИНГ ЦОУНТ (С.СтудентИд) = 2 филтрираће враћене групе и враћати само оне групе које на себи садрже тачно два ученика. У нашем случају, Одељење за уметност има 2 ученика, па је приказано у излазу.

СКЛите упит и подупит

Унутар било ког упита можете користити други упит било у СЕЛЕЦТ, ИНСЕРТ, ДЕЛЕТЕ, УПДАТЕ или унутар другог подупита.

Овај угнежђени упит назива се подупит. Сада ћемо видети неколико примера употребе подупита у клаузули СЕЛЕЦТ. Међутим, у водичу за модификовање података видећемо како можемо да користимо потупите са изразом ИНСЕРТ, ДЕЛЕТЕ и УПДАТЕ.

Коришћење потупита у примеру клаузуле ФРОМ

У следећи упит ћемо укључити подупит унутар клаузуле ФРОМ:

СЕЛЕЦТс.СтудентНаме, т.МаркОД УЧЕНИКА КАО сИННЕР ЈОИН(СЕЛЕЦТ ИД студента, МаркИЗ ТЕСТА КАО тУНУТАРЊЕ ПРИДРУЖИВАЊЕ Ознаке као м НА т.ТестИд = м.ТестИд) ОН с.СтудентИд = т.СтудентИд;

Упит:

 СЕЛЕЦТ ИД студента, МаркИЗ ТЕСТА КАО тУНУТАРЊЕ ПРИДРУЖИВАЊЕ Ознаке као м НА т.ТестИд = м.ТестИд

Горњи упит се овде назива подупит јер је угнежђен унутар клаузуле ФРОМ. Приметите да смо му дали надимак „т“ да бисмо се могли позвати на колоне враћене из њега у упиту.

Овај упит ће вам дати:

У нашем случају,

  • с.СтудентНаме се бира из главног упита који даје име ученика и
  • т.Ознака је изабрана из подупита; то даје оцене које је добио сваки од ових ученика

Употреба подупита у примеру клаузуле ВХЕРЕ

У следећи упит ћемо укључити подупит у клаузулу ВХЕРЕ:

СЕЛЕЦТ ИМЕ одељењаОД Одељења КАО дГДЕ НЕ ПОСТОЈИ (СЕЛЕЦТ ДепартментИдОД УЧЕНИКА КАО сВХЕРЕ д.ДепартментИд = с.ДепартментИд);

Упит:

ИЗАБЕРИ ИД одељењаОД УЧЕНИКА КАО сВХЕРЕ д.ДепартментИд = с.ДепартментИд

Горњи упит се овде назива подупит јер је угнежђен у клаузулу ВХЕРЕ. Подупит ће вратити вредности ДепартментИд које ће користити оператер НЕ ПОСТОЈИ.

Овај упит ће вам дати:

У горњем упиту смо изабрали одељење на којем није уписан ниједан студент. Који је овде одељење "Математика".

Сет Оператионс - УНИОН, Интерсецт

СКЛите подржава следеће СЕТ операције:

УНИЈА И УНИЈА СВЕ

Комбинује један или више скупова резултата (група редова) враћених из више СЕЛЕЦТ израза у један скуп резултата.

УНИОН ће вратити различите вредности. Међутим, УНИОН АЛЛ неће и укључиће дупликате.

Имајте на уму да ће име колоне бити име колоне наведено у првој наредби СЕЛЕЦТ.

Пример УНИЈЕ

У следећем примеру добићемо листу ДепартментИд из табеле студената и листу ДепартментИд из табеле одељења у истој колони:

ОДАБЕРИТЕ Одељење КАО ОдељењеУЊЕНО ОД студенатаУНИЈАИЗАБЕРИ ИД одељења из одељења;

Ово ће вам дати:

Упит враћа само 5 редова који су различите вредности ИД одељења. Обратите пажњу на прву вредност која је нула вредност.

Пример СКЛите УНИОН АЛЛ

У следећем примеру добићемо листу ДепартментИд из табеле студената и листу ДепартментИд из табеле одељења у истој колони:

ОДАБЕРИТЕ Одељење КАО ОдељењеУЊЕНО ОД студенатаУНИОН АЛЛИЗАБЕРИ ИД одељења из одељења;

Ово ће вам дати:

Упит ће вратити 14 редова, 10 редова из табеле ученика и 4 из табеле одељења. Имајте на уму да у враћеним вредностима постоје дупликати. Такође имајте на уму да је име колоне наведено у првој наредби СЕЛЕЦТ.

Сада, да видимо како ће УНИОН сви дати различите резултате ако УНИОН АЛЛ заменимо УНИОН-ом:

СКЛите ИНТЕРСЕЦТ

Враћа вредности које постоје у оба комбинована скупа резултата. Вредности које постоје у неком од комбинованих резултата биће занемарене.

Пример

У следећем упиту ћемо одабрати вредности одељења одељења које постоје у табелама студенти и одељења у колони одељења одељења:

ИЗАБЕРИ ОДЕЉЕНО ОД студенатаПресециИЗАБЕРИ ИД одељења из одељења;

Ово ће вам дати:

Упит враћа само три вредности 1, 2 и 3. Које су вредности које постоје у обе табеле.

Међутим, вредности нулл и 4 нису укључене, јер вредност нулл постоји само у табели ученика, а не у табели одељења. А вредност 4 постоји у табели одељења, а не у табели ученика.

Због тога су и вредности НУЛЛ и 4 занемарене и нису укључене у враћене вредности.

ОСИМ

Претпоставимо да ако имате две листе редова, лист1 и лист2, а желите редове само са листе1 која не постоји у листи2, можете да користите клаузулу "ОСИМ". Клаузула ЕКСЦЕПТ упоређује две листе и враћа оне редове који постоје у листи1, а не постоје у листи2.

Пример

У следећем упиту ћемо одабрати вредности одељења ИД које постоје у табели одељења, а не постоје у табели ученика:

ИЗАБЕРИ ИД одељења из одељењаОСИМИЗАБЕРИ ИД одељења од студената;

Ово ће вам дати:

Упит враћа само вредност 4. Што је једина вредност која постоји у табели одељења, а не постоји у табели ученика.

НУЛЛ руковање

Вредност „ НУЛЛ “ је посебна вредност у СКЛите-у. Користи се за представљање вредности која је непозната или недостаје. Имајте на уму да се нулл вредност потпуно разликује од вредности „ 0 “ или празног „“. Будући да је 0 и празна вредност позната вредност, нулл вредност је непозната.

НУЛЛ вредности захтевају посебно руковање у СКЛитеу, сада ћемо видети како се рукује НУЛЛ вредностима.

Потражите НУЛЛ вредности

Не можете користити оператер нормалне једнакости (=) за претрагу нулл вредности. На пример, следећи упит претражује студенте који имају нулту вредност одељења:

СЕЛЕЦТ * ФРОМ Студенти ВХЕРЕ ДепартментИд = НУЛЛ;

Овај упит неће дати резултат:

Будући да НУЛЛ вредност није једнака ниједној другој вредности која укључује саму нулу, зато није вратила ниједан резултат.

  • Међутим, да би упит успео, морате да користите оператор „ИС НУЛЛ“ да бисте потражили нулл вредности на следећи начин:
ОДАБЕРИТЕ * ОД ученика ГДЕ ЈЕ ОДЕЉЕЊЕ НУЛО;

Ово ће вам дати:

Упит ће вратити оне студенте који имају нулл вредност ДепартментИд.

  • Ако желите да добијете оне вредности које нису нуле, онда морате да користите оператор " НИЈЕ НУЛЛ " попут овог:
ОДАБЕРИТЕ * ОД студената ГДЕ ОДЕЉЕЊЕ НИЈЕ НУЛО;

Ово ће вам дати:

Упит ће вратити оне студенте који немају вредност НУЛЛ ДепартментИд.

Условни резултати

Ако имате листу вредности и желите да изаберете било коју од њих на основу неких услова. За то би услов за одређену вредност требало да буде тачан да би био изабран.

ЦАСЕ израз ће проценити ову листу услова за све вредности. Ако је услов тачан, вратиће ту вредност.

На пример, ако имате колону „Оцена“ и желите да на основу вредности оцене изаберете текстуалну вредност на следећи начин:

- „Одлично“ ако је оцена виша од 85.

- „Врло добро“ ако је оцена између 70 и 85.

- „Добро“ ако је оцена између 60 и 70.

Тада за то можете да користите израз ЦАСЕ.

Ово се може користити за дефинисање неке логике у клаузули СЕЛЕЦТ тако да можете одабрати одређене резултате у зависности од одређених услова, на пример иф наредбу.

ЦАСЕ оператор се може дефинисати са различитим синтаксама на следећи начин:

  1. Можете користити различите услове:
СЛУЧАЈКАДА услов1 ОНДА резултат1КАДА услов2 ОНДА резултат2КАДА услов3 ОНДА резултат3 ... ОСТАЛО резултатнКРАЈ
  1. Или можете да користите само један израз и ставите различите могуће вредности између којих можете да бирате:
ЦАСЕ изразКАДА вредност1 ОНДА резултат1КАДА вредност2 ОНДА резултат2ВХЕН валуе3 ТХЕН ресулт3… ЕЛСЕ рестулнКРАЈ

Имајте на уму да је клаузула ЕЛСЕ необавезна.

Пример

У следећем примеру ћемо користити израз ЦАСЕ са НУЛЛ вредношћу у колони Ид одељења у табели Студенти да бисмо приказали текст „Нема одељења“ на следећи начин:

СЕЛЕЦТИме студента,СЛУЧАЈКАДА ОДЕЉЕЊЕ НИСТА ОНДА „Нема одељења“ЕЛСЕ одељењеИдЕНД АС ДепартментИдОД ученика;
  • Оператор ЦАСЕ ће проверити вредност ДепартментИд да ли је нула или не.
  • Ако је то НУЛЛ вредност, тада ће изабрати дословну вредност 'Но Департмент' уместо вредност ДепартментИд.
  • Ако није нулл вредност, изабраће вредност колоне ДепартментИд.

Ово ће вам дати излаз као што је приказано доле:

Уобичајени израз табеле

Уобичајени изрази табеле (ЦТЕ) су подупити који су дефинисани унутар СКЛ израза са датим именом.

Има предност над подупитима јер је дефинисан из СКЛ израза и олакшаће читање, одржавање и разумевање упита.

Уобичајени израз табеле може се дефинисати стављањем клаузуле ВИТХ испред наредби СЕЛЕЦТ на следећи начин:

ВИТХ ЦТЕнамеКАО(Наредба СЕЛЕЦТ)СЕЛЕЦТ, УПДАТЕ, ИНСЕРТ или упдате упдате овде ИЗ ЦТЕ

ЦТЕнаме “ је било које име које можете дати за ЦТЕ, а можете га користити да бисте се касније позвали на њега. Имајте на уму да на ЦТЕ-има можете дефинисати СЕЛЕЦТ, УПДАТЕ, ИНСЕРТ или ДЕЛЕТЕ израз

Сада, да видимо пример како се користи ЦТЕ у клаузули СЕЛЕЦТ.

Пример

У следећем примеру дефинисаћемо ЦТЕ из наредбе СЕЛЕЦТ, а затим ћемо га користити касније за други упит:

ВИТХ АллДепартментсКАО(СЕЛЕЦТ ИД одељења, име одељењаОД Одељења)СЕЛЕЦТс.СтудентИд,с.СтудентНаме,а.Име одељењаОД УЧЕНИКА КАО сИННЕР ЈОИН АллДепартментс АС ОН ОН с.ДепартментИд = а.ДепартментИд;

У овом упиту смо дефинисали ЦТЕ и дали му име „ АллДепартментс “. Овај ЦТЕ је дефинисан из СЕЛЕЦТ упита:

 СЕЛЕЦТ ИД одељења, име одељењаОД Одељења

Затим, након што смо дефинисали ЦТЕ, користили смо га у СЕЛЕЦТ упиту који долази иза њега.

Имајте на уму да, уобичајени изрази табеле не утичу на излаз упита. То је начин да дефинишете логички приказ или подупит како бисте их поново користили у истом упиту. Уобичајени изрази табеле су попут променљиве коју декларишете и поново је користите као подупит. Само израз СЕЛЕЦТ утиче на излаз упита.

Овај упит ће вам дати:

Напредни упити

Напредни упити су они упити који садрже сложене спојеве, подупите и неке агрегате. У следећем одељку видећемо пример напредног упита:

Тамо где добијамо,

  • Имена одељења са свим студентима за свако одељење
  • Ученици именују раздвојена зарезом и
  • Приказ одсека у којем су најмање три ученика
СЕЛЕЦТд.ДепартментНаме,ЦОУНТ (с.СтудентИд) Број ученика,ГРОУП_ЦОНЦАТ (Име студента) КАО студентиОД Одељења КАО дУНУТРАШЊЕ ПРИДРУЖИВАЊЕ студентима КАО НА с.ДепартментИд = д.ДепартментИдГРОУП БИ д.ДепартментНамеИМАЈУ БРОЈ (с.СтудентИд)> = 3;

Додали смо клаузулу ЈОИН да бисмо из табеле Департмани преузели ДепартментНаме. Након тога смо додали клаузулу ГРОУП БИ са две агрегатне функције:

  • „ЦОУНТ“ за бројање ученика за сваку групу одељења.
  • ГРОУП_ЦОНЦАТ за спајање ученика за сваку групу зарезом одвојеним у један низ.
  • Након ГРОУП БИ, користили смо клаузулу ХАВИНГ за филтрирање одељења и одабир само оних одељења која имају најмање 3 ученика.

Резултат ће бити следећи:

Резиме:

Ово је био увод у писање СКЛите упита и основе испитивања базе података и како можете филтрирати враћене податке. Сада можете писати сопствене СКЛите упите.