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

12. клас · Модул 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 генерира например:

Правила на записа: скоби, запетаи, ред

  • Име на атрибут от няколко думи (или с тире) се огражда с квадратни скоби: [Дата на раждане], [e-mail]. Query Design ги слага сам; в SQL View ги пишеш ти. Без тях SELECT Дата на раждане FROM Ученик; дава грешка.
  • Колоните излизат в реда, в който ги изброиш след SELECT — не в реда от схемата: SELECT Номер, Фамилия, Име FROM Ученик;
  • Повтарящите се редове не изчезват сами: SELECT Предмет FROM Предмети; връща „математика“ три пъти. В това SQL се различава от проекцията в релационната алгебра, където резултатът е множество.

Базата „Училище“ — същата като в учебника

Упражненията към урока вървят направо в браузъра, върху базата от учебника: таблицата Ученик със схемата от фиг. 14.5 и десетте ученика от фиг. 15.4, таблиците Учител и Предмети от фиг. 23.2 и записаната заявка Списък от печ. 59. Всяка задача се проверява автоматично — пиши заявката и натискай „Изпълни“.

База „Училище“

Учебникът, Модул 3: фиг. 14.5, 15.4 и 23.2

Ученик

  • PKIDAutoNumber
  • КласShort Text
  • НомерNumber
  • ИмеShort Text
  • ПрезимеShort Text
  • ФамилияShort Text
  • Дата на ражданеDate/Time
  • Място на ражданеShort Text
  • ЕГНShort Text
  • СнимкаOLE Object

Клас и Номер заедно също са уникални — втори „12а“ с номер 1 не се приема.

Учител

  • PKIDAutoNumber
  • Име на учителShort Text
  • Фамилия на учителShort Text
  • e-mailShort Text

Предмети

  • PKIDAutoNumber
  • ПредметShort Text
  • КласShort Text
  • FKID УчителNumber

Връзки

  • Предмети.[ID Учител] → Учител.ID (външен ключ, много към едно)
  • Ученик.Клас — Предмети.Клас (общ атрибут, без външен ключ)

Записани заявки — пази се кодът им, не резултатът; ползват се като таблица във FROM

Списък · печ. 59

SELECT Номер, Име, Презиме, Фамилия FROM Ученик;

УчителПредмет · съединение — урок 23

SELECT Предмет, Клас, [Име на учител], [Фамилия на учител], [e-mail]
FROM Учител INNER JOIN Предмети ON Предмети.[ID Учител] = Учител.ID;
  • Имената с интервал или тире се пишат в квадратни скоби: [Дата на раждане], [e-mail].
  • Тук главните и малките букви в имената на кирилица имат значение: Ученик, не ученик (в Access нямат).
  • Датите са във вида ГГГГ-ММ-ДД, а Снимка е празна (NULL) — в браузъра няма снимки.

Базата в браузъра е SQLite, не Access, но заявките SELECT … FROM се пишат еднакво — включително квадратните скоби. Разлики има две: тук ученик и Ученик са различни имена, а датите са във вида ГГГГ-ММ-ДД.

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

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