Езикът 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.