Лого на 91. НЕГ „Проф. Константин Гълъбов“

Модул 3 · Урок 15

Езикът SQL. Заявки

Историята и природата на SQL — непроцедурен език за заявки. Заявки за извличане, най-простият SELECT и трите начина за създаване на заявки в Access.

Езикът SQL — история

Едгар Код включва в 12-те изисквания и това: работата с релационната БД да се извършва със специализиран език, базиран на релационната алгебра. През 70-те колегите му от IBM Доналд Чембърлейн и Реймънд Бойс разработват такъв език, наречен SEQUEL (Structured English QUEry Language). Скоро името е съкратено на SQL (първоначалното се оказва запазена марка), но много специалисти и до днес го произнасят сикуел.

  • Първата СУРБД с SQL — IBM, 1978 г.
  • SQL е стандартизиран от ISO през 1986 г.
  • Днес почти всяка СУБД го поддържа — включително MS Access.

SQL не е процедурен език

C# е процедурен език, SQL е непроцедурен (декларативен). Разликата в едно изречение:

Ключово

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

В оригиналния SQL няма нито оператор за присвояване, нито оператори за цикъл. Понятието, което най-добре характеризира езика, е заявка (query) — формализирано и параметризирано обръщение към РБД за извличане, променяне или преструктуриране на данни. Ние само изпращаме заявки към базата. В Access заявките може да се създават и визуално, но резултатът — това, което се изпраща към базата — винаги е SQL код, който може да се разгледа и редактира.

Заявки за извличане

Най-често използваната група заявки. При изпращането им се извършват операции с таблиците на базата (по правилата на релационната алгебра) и се получава резултат, който неизменно е таблица — дори да е един ред (мощност 1), една колона (степен 1), една стойност или нищо.

Резултатът не принадлежи на ядрото

Резултатната таблица е временно съществуващ „поглед" към данните. Системата съхранява кода (логиката) на заявката, не резултата — при всяко изпълнение заявката работи с актуалните данни, а те се менят във времето.

Заявките за извличане се изграждат, като се посочват:

  • източникът на данни — всяка таблица ИЛИ резултат от предишна заявка (оттам „вложени“ заявки);
  • условията, на които данните трябва да отговарят.

Заявки от тип SELECT

Синтаксисът на най-простата заявка за извличане:

SELECT атрибут1 {, атрибут2, …} FROM име_на_таблица;

Клаузата SELECT изброява атрибутите за извличане (поне един); клаузата FROM посочва таблицата източник. Ако искаме всички атрибути — знакът * („всички атрибути“).

  • SELECT и FROM са ключови думи — интерпретаторът не различава малки и главни букви (select = SELECT), но традицията е ключовите думи с главни.
  • Заявката завършва с ; — както в процедурните езици.
  • Списъкът атрибути се разделя със запетаи.

Три начина за създаване на заявки в Access

НачинИнструментКакво изисква
РъченSQL View — директно писане на SQL кодотлично познаване на синтаксиса
ПолуавтоматиченQuery Design (Query by example)познаване на принципите, не на стриктния синтаксис
АвтоматиченQuery Wizard (Съветник)минаване през последователни стъпки в определен ред

В Query Design избираме таблица (или заявка — за вложени заявки!), с двойно щракване добавяме атрибути и получаваме справочната таблица с параметри. Access генерира например:

Бележка

SELECT Ученик.Номер, Ученик.Име … FROM Ученик; — програмата поставя пред всеки атрибут името на таблицата и точка. При една таблица това не е задължително и заявката може да се опрости до SELECT Номер, Име, Презиме, Фамилия FROM Ученик;

Задача от учебника

Упражнявай заявки и на справочния сайт w3schools.com/sql — интерактивен е, с демонстрационната база Northwind. А коя операция на релационната алгебра реализира най-простият SELECT? (Отговор: проекцията.)

Какво трябва да запомниш

  • SQL: SEQUEL на Чембърлейн и Бойс → IBM 1978 → ISO стандарт 1986.
  • SQL е декларативен: казваме КАКВО искаме, не КАК да се направи.
  • Резултатът от заявка за извличане винаги е таблица и не принадлежи на ядрото.
  • Съхранява се логиката на заявката, не резултатът.
  • SELECT списък_атрибути FROM таблица; — реализира проекция; * = всички атрибути.
  • Access: ръчен (SQL View), полуавтоматичен (Query Design), автоматичен (Wizard) — резултатът винаги е SQL.