Езикът 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.
- Имена от няколко думи — в квадратни скоби; между атрибутите — запетаи.