Синтаксис на оператори от езика SQL
Езикът SQL (Structured Query Language), произнасящо се и “sequel”, е непроцедурен, ориентиран основно за работа с релационен модел на базата от данни. За разлика от “записно-ориентираните” езици той е “множествено-ориентиран” и работи направо с множество от записи. Той е намерил широко разпространение и на практика е единственият стандарт в тази област. Стандартизиран е като SQL-92, но има многобройни версии и конкретни диалекти. В ход е приемането на нов стандарт с елементи на обектния подход – SQL-93. Както изяснява Фабиан Паскал SQL е проектиран като подезик за работа с данни, за да бъде използуван във връзка със съществуващите програмни езици (С, Кобол, Фортран) с цел създаване на приложения за работа с бази от данни. Почти всички системи за управление на бази от данни (СУБД) го използуват като един от работните си езици. Той служи и като интерфейс към непрограмируемите потребителски инструменти за работа с базата от данни. В СУБД MS Access те са:
Query be Examрle (QBE) – команден визуален език, с който се попълват проектантските правила за извеждане на заявки по зададен табличен образец;
Query by Prompt (QBP) – команден визуален език, с който се дефинират таблиците на базата от данни и връзките им;
Query by Form (QBF) – команден визуален език за специфициране на екранни форми.
В тези инструменти могат да се попълват директно и SQL оператори, като за целта трябва да се познава синтаксисът им. SQL има два компонента:
Data Definition Language (DDL) - език за дефиниране на данните от таблиците на базата от данни и връзките между тях;
Data Manipilation Language (DML) – език за обработка на данните: за извеждания, както за добавяне, изменение и отстраняване на данни.
Най-напред ще бъдат разгледани операторите на езика за манипулиране с данните – DML. Ще се покаже как с тях се осъществяват релационните операции: проекция, селекция, съединение, обединение; потребителските операции за изменения: корекции, добавяне, отстраняване; операциите за агрегиране. След това ще се покаже как става създаването на нови таблици с езика за дефиниране на данни – DDL. Последното се прави за пълнота на изложението, тъй като, то става много по-лесно с графичния потребителски интерфейс (GUI) на Access.
Оператори за манипулиране на данните
Основният широко използуван за извеждания оператор е SELECT със своите клаузи. Той се използува основно за селектиране на записи от заявена таблица. Освен това се прлага и за проектиране и съединяване на таблици. Неговата пълна форма е:
- SELECT <списък от имена на колони>
- FROM <списък от имена на таблици, от които са колоните>
- WHERE <логически израз за избор на редове>
- ORDER BY <списък от свойства, по които се сортира>
- GROUP BY <списък от свойства, по които се агрегира>
- НAVING <логически израз за избор от групите>;
- Клаузата FROM e задължителнa. Останалите клаузи не са задължителни и могат да се използуват в различен ред. Клаузата HAVING може да се използува само след клаузата GROUP BY.
- Операторът SELECT може да сдържа и следните предикати:
- ALL – по подразбиране обработва всички записи;
- DISTINKTROW – изключва повтарящи се записи;
- DISTINCT <списък от имена на колони> – изключва записи с повтарящи се стойности на свойства от списъка;
- TOPn – обработва първите n на брой записи;
- BOTTOMn – обработва последните n на брой записи.
Заявката с оператор за селекция се задава от основния изглед на текущата база от данни чрез последователността от опции:Queries*New*DesignView*OK*Close*View*SQL View.
Разглежданите по-нататък примери ще работят с базата от данни за доставки и пласмент на битова техника в малко предприятие.
Използуване на оператор SELECT за задаване на условия
Условията в SQL се формират като логически изрази със следните, подредени по приоритет оператори: =, >, <, <> (неравно), >=, <=, IN (в), LIKE (като), BETWEEN…AND… (между…и…), IS NULL (е нула), AND (и), OR (или), NOT (не).
Използуване на оператор SELECT с вградени функции
Вградените функции в SQL са: сума (SUM), преброяване (COUNT), средно аритметично (AVG), минимум (MIN), максимум (MAX), стандартно отклонение (StDev), вариация (Var). Има и математически функции, функции за стрингове, както и функции за дата и преобразуване на данните.
Използуване на оператор SELECT за агрегиране по групи
С помощта на клаузата GROUP BY записите се групират в логически групи. За тези групи могат да се изпълняват различни вградени функции и да се получават агрегирани стойности.
Използуване на оператор SELECT за подзаявки (релационно деление-Division)
Релационното деление е операция, при която по зададено условие се отделят записи от една таблица и се търси съответствието им в друга таблица, получена като предишна заявка. В някои литературни източници тази релационна операция се нарича множествено селектиране или работа с подзаявки.
Използуване на оператор JOIN за релационната операция за съединение
Релационното съединение има три основни разновидности: естествено (вътрешно) съединение и две външни (ляво и дясно) съединения. При естественото съединение се съединяват само записите с еднакви стойности в управляващото (общото) поле. То е подмножество на “тета” съединението, за което в SQL-92 се допускат операторите <=, <, >, >=. Лявото и дясното външни съединения работят съответно с ляво/дясно разположена по отношение на операцията съединение водеща таблица. Това означава, че съединението се прави за всички записи от водещата таблица, независимо дали има информация за тях в другата таблица. В случай, че няма информация, съответните полета остават празни.
Използува се операторът SELECT с клауза за естествено съединение INNER JOIN, за лявостояща водеща таблица – LEFT JOIN, a за дясностояща водеща таблица – RIGHT JOIN. Синтаксисът на оператора е:
SELECT <списък от имена на колони>
FROM <име на таблица 1>
INNER JOIN / LEFT JOIN / RIGHT JOIN <име на таблица 2> ON <условие за =>;
Използуване на оператор UNION за теоретико-множествената операция обединение
Операцията обединение изисква обединяваните таблици да имат еднакви проектни макети, тъй като тя събира всички записи от двете таблици в една обща таблица. Допуска се да се изберат само някои колони от началните таблици за новата такава. В този случай се изхвърлят повтарящите се записи т.е. извършва се автоматично и операцията проекция. Синтаксисът на оператора е:
- (SELECT <списък от имена на колони>
- FROM <име на таблица 1>)
- UNION/ALL/CORESPONDING/BY <списък от имена на колони>
- (SELEСT <списък от имена на колони>
- FROM <име на таблица 2>);
- Избираемите колони имат следното значение:
- ALL – резултатът включва и повтарящите се редове;
- CORESPONDING – резултатът включва само общата колона;
- BY – резултатът включва списък от колони.
Оператори за изменения на данните в таблиците
Операторите за изменения на таблиците са: за вмъкване на редове-INSERT, за внасяне на корекции-UPDATE, за отстраняване -DELETE.
Изпозуване на оператор за вмъкване INSERT
С оператора за вмъкване INSERT може да се решава аналогична на съединението задача. Тогава обаче резултаът не е заявка, а разширение на основната таблица т.е. прави се поддържане на базата от данни.
Операторът INSERT добавя записи в дадена таблица. Той може да добавя редове един по един или цяла нова таблица. Естествено добавянето на отделни редове става много по-просто в директния режим на Access, както вече беше обяснено в първия том на тази книга. Добавянето на цяла таблица обаче става много по-ефективно и гъвкаво с оператора INSERT на SQL. То е необходимо при поддържането на базата от данни, когато се добавят масово нови данни или когато се работи в мрежова среда и се формира централната база от данни от локалните такива. И тук двете таблици трябва да са с еднакви структури и еднакви типове на данните. Особено трябва да се внимава да не се допускат грешки при главните ключове и индексирането.
Синтаксисът на оператора е:
INSERT INTO <таблица 1>
SELECT*
FROM <таблица 2>;
Изпозуване на оператор за корекции UPDATE
Операторът за корекции също може да прави единични или групови корекции. Както и при вмъкването изменението в отделни редове става много по-просто в директния режим на Access, както вече беше обяснено в първата част на тази книга. Груповите корекции обаче са твърде мощен апарат и стават наведнъж с помощта на оператора UPDATE на SQL. То е необходимо при поддържането на базата от данни, когато се коригират масово данни или когато се работи в мрежова среда и се актуализира централната база от данни. Синтаксисът на оператора е:
UPDATE <име на таблица>
SET < име на поле= стойност>
WHERE <име на поле> <условие>; – незадължителна клауза
Изпозуване на оператор за отстраняване DELETE
Операторът за oтстраняване също може да се използува за единични и групови отстранявания на цели редове. Както и при корекциите отстраняването на отделни редове става много по-просто в директния режим на Access, както вече беше обяснено в първата част на тази книга. Груповите отстранявания стават наведнъж с помощта на оператора DELETE на SQL. Те са необходими при поддържането на базата от данни, когато се отстраняват масово данни или когато се работи в мрежова среда и се актуализира централната база от данни.
Синтаксисът на оператора е:
DELETE *
FROM < име на таблица>
WHERE <име на поле> <условие>;
Даже и да бъдат посочени отделни полета, отстраняват се цели редове от таблицата.
Оператори за дефиниране на данните в таблиците
Операторите от езика за дефиниране на данните в таблиците дават възможност за създаване и поддържане на базата от данни като осигураяват свойството „независимост”. Основните оператори за дефиниране на данните са за създаване на: таблица, на домен (област от стойности на променливи) и на виртуална таблица-изглед.
Изпозуване на оператор за създаване на нови таблици
CREATE TABLE
Операторът за създаване на таблици се дава тук за пълнота на изложението. По-лесно и надеждно е създаването на таблиците с помощта на графичните средства Query by Example. Синтаксисът на оператора CREATE TABLE е както следва:
CREATE TABLE <име на таблица>({<списък от свойства тип на данни>
/NOT NULL
/DEFAULT <подразбираща се стойност>
/CONSTRAINT <име на ограничение>
/PRIMARY KEY <име на свойство>
/UNIQUE ({<име на свойство>})
/ REFERENCES ({<име на таблица, външно име>})
/CHECK (<условие за търсене>)
/ON DELETE <условие за цялост>
/ON UPDATE <условие за цялост>;
Тук знаците / и {…} показват съответно незадължителна клауза и множество. За всяко свойство се задават ограниченията и проверките за условие и цялост (ако има такива) и едва след това се преминава към следващото свойство. Ограничението за прост главен ключ PRIMARY KEY допуска за една таблица само един главен ключ. Всеки главен ключ автоматично получава опциите за ненулева стойност и се индексира. Ограниченията в клаузата CONSTRAINT се задават само, ако имаме главни ключове или уникални полета. Уникалните полета получават автоматично ненулева стойност. Ограничението UNIQUE дава указание за съставен главен ключ, като колоните които включва получават автоматично ненулева стойност. Външните главни ключове се задават чрез ограничението REFERENCES.
Условията за цялост осигуряват връзките между родителските таблици и таблиците-наследници при операциите за отстраняване DELETE и корекции UPDATE. В стандарта са дефинирани следните условия:
SET NULL – отстраняване на ред в родителска таблица предизвиква отстраняване на всички, свързани с него редове в таблица-наследник.
CASCADE – отстраняване на ред в родителска таблица предизвиква поставяне на нули в свързаните с него редове от таблицата-наследник.
NO ACTION – не позволява отстраняване на редове от родителска таблица, свързани с редове от таблица-наследник.
SET DEFAULT – отстраняване на ред в родителска таблица предизвиква поставянето по подразбиране на зададена стойност в свързаните с него редове от таблицата-наследник.
В SQL2 могат да се правят отделни декларации за създаване на домени и ограничения. В декларациите на домени се изнася типа на данните, а в тези на ограничения – проверки за цялост. Синтаксисът на оператор за дефиниране на домен е както следва:
CREATE DOMAIN <име на свойство> AS <тип на данни (дължина)>
CHECK (условие)
DEFAULT <подразбираща се стойност>;
Както се вижда тук се дават някои от ограниченията за цялостност като дължина на полето, допустими стойности на полето, подразбираща се стойност на полето. Когато тези декларации са направени отделно в домените, те могат да се изпуснат в декларацията на таблицата. Предвидени са и оператори за разделяне и внасяне на промени както таблиците, така и в домените съответно: DROP DOMAIN, DROP TABLE и ALTER DOMAIN, ALTER TABLE. Операторът за ограничения, дефинирани отделно от дефинициите на домени и таблици, има синтаксис:
CREATE ASSERTION < име на ограничение>
CHECK <условие>;
За отстраняване на ограниченията е предвиден операторът DROP ASSERTION.
Създаване на виртуални таблици (изгледи)- Views
Създаването на виртуални таблици (изгледи) става с оператора CREATE VIEW, който има синтаксис:
CREATE VIEW<име на изглед> (<списък от имена на свойства>)
AS SELECT <списък от имена на свойства>
FROM <име на таблица>
WHERE <условие>;
Тук операторът SELECT има познатия смисъл и синтаксис. За да отразява измененията в базата от данни, изгледът трябва да отговаря на следните условия:
- да има релационна структура;
- може да съдържа операции SELECT;
- може да съдържа операции за проекция;
- може да сдържа операции за обединение;
- може да съдържа операции за естествено съединение;
- да бъде дефиниран само с една таблица;
- да не съдържа предикат DISTINCT;
- да не съдържа производни свойства;
- да не съдържа подвъпроси с втори, включен в първия SELECT;
- да не съдържа агрегиращи или включващи HAVING клаузи.
Сходни статии:
- Основни елементи на езика C Езикът С е структурен език , много мощен и гъвкав. Първата разработка е на Денис Ричи съвместно с Кен Томпсън през 1972. Като всеки език и той се характеризира със...
- Оператори на Google По-големите търсачки и в частност Гугъл поддържат няколко броя оператора, които са специални с това, че указват по-голяма специфика при търсенето по дадена дума или израз, както определяне и задаване...
- Общ модел за достъп на данни чрез ADO.NET Какво представлява ADO.NET ADO.NET е: Еволюционен, по-гъвкав наследник на ADO Система предназначена за несвързани среди Модел за програмиране със съвременна поддръжка на XML Множество от класове, интерфейси, структури и списъци,...