Изявление SELECT

SQL Data Query Language се състои от един оператор SELECT. Този единствен оператор за търсене изпълнява всички операции на релационната алгебра. Колко просто, само един оператор. Но писането на заявки на езика SQL (грамотни заявки) в началото не е никак лесно. Трябва да научите, точно както трябва да се научите да решавате математически задачи или да създавате алгоритми за решаване на сложни комбинаторни задачи. Една и съща заявка може да бъде реализирана по няколко начина и въпреки че всички са правилни, те все още могат да варират значително във времето за изпълнение и това е особено важно за големи бази данни.

Синтаксисът на израза SELECT е както следва:

SELECT [ALL DISTINCT] "списък с полета>*)

Тук ключовата дума ALL означава, че резултатният набор от редове включва всички редове, които отговарят на условията на заявката. Това означава, че наборът от резултати може да съдържа идентични редове. И това е нарушение на принципите на релационната теория (за разлика от релационната алгебра, където по подразбиране е, че няма дубликати във всяка получена релация). Ключовата дума DISTINCT означава, че само отделни редове са включени в набора от резултати, т.е. дублиращите се редове с резултати не са включени в набора.

Символ *. (звездичка) означава, че наборът от резултати включва всички колони от оригиналните таблици на заявките.

Разделът FROM указва списък с релации на източник (таблици) за заявката.

В клаузата WHERE са посочени условия за избор на редове с резултати или условия за свързване на кортежи от изходни таблици, подобно на операцията за условно свързване в релационната алгебра.

Секцията ГРУПИРАНЕ ПО определя списък от полета за групиране.

В секцията HAVING се задават предикати-условия, които се налагат на всекигрупа.

Частта ORDER BY указва списък с полета за подреждане на резултатите, т.е. списък с полета, който определя реда на сортиране в получената релация. Например, ако първото поле на списъка е Фамилното име, а второто е Номерът на групата, тогава в получената релация учениците първо ще бъдат събрани по азбучен ред, а ако има съименници, те ще бъдат подредени във възходящ ред на номерата на групите.

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

    Предикати за сравнение < =, <>, >, =, Е NULL и НЕ Е NULL.

Ако в този кортеж (в този ред) указаният атрибут има недефинирана стойност, тогава предикатът IS NULL се оценява на TRUE, а предикатът IS NOT NULL се оценява на FALSE, в противен случай предикатът IS NULL се оценява на False, а предикатът IS NOT NULL се оценява на True.

Въвеждането на нулеви стойности доведе до необходимостта от модифициране на класическата двузначна логика и превръщането й в тризначна. Всички логически операции, извършвани с недефинирани стойности, са предмет на тази логика в съответствие с дадената таблица на истината:

A B

В условията за търсене могат да се използват всички разгледани по-рано предикати.

Отлагайки за известно време запознаването с групирането, нека разгледаме подробно първите три реда на оператора SELECT:

  • SELECT е ключова дума, която казва на СУБД, че тази команда е заявка. Всички заявки започват с тази дума, последвана от интервал. Може да бъде последван от метод за избор - с премахване на дубликати (DISTINCT) или без премахване (ALL, подразбира се по подразбиране). Това е последвано от разделен със запетаи списък на колони, които са избрани от заявката от таблици, илисимвол '*' (звездичка), за да изберете целия ред. Всички колони, които не са изброени тук, няма да бъдат включени в получената релация, съответстваща на изпълнението на командата. Това, разбира се, не означава, че те ще бъдат изтрити или информацията им ще бъде изтрита от таблиците, тъй като заявката не засяга информацията в таблиците - показва само данните.
  • FROM е ключова дума, като SELECT, която трябва да присъства във всяка заявка. Следва интервал и след това имената на таблиците, използвани като източник на информация. Ако е посочено повече от едно име на таблица, имплицитно се приема, че върху изброените таблици се изпълнява операцията за декартово произведение. На таблиците могат да се дават псевдоними, което е полезно за присъединяване на таблица към самата нея или за достъп до текущия запис на външна заявка от вложена подзаявка (вложените подзаявки не са обхванати тук).

Всички следващи раздели на оператора SELECT са незадължителни.

Най-простата SELECT заявка без незадължителни части съвпада само с декартов продукт. Например изразът

съответства на декартовото произведение на таблици R1 и R2. Израз

съответства на проекцията на декартовия продукт на две таблици върху две колони A от таблица R1 и B от таблица R2, като се запазват дубликати на всички редове, за разлика от операцията за проекция в релационната алгебра, където проекцията по подразбиране унищожава всички дублиращи се кортежи.

  • WHERE е ключова дума, последвана от предикат, условие, наложено на запис в таблицата, което той трябва да отговаря, за да бъде включен в селекцията, подобно на операцията за селекция в релационната алгебра.

Помислете за основатаданни, които симулират преминаването на сесия в някое учебно заведение. Нека се състои от три отношения R1, R2, R3. Ще приемем, че те са представени съответно от таблици Rl, R2 и R3.