Главно меню
Основни елементи на SQL
Стартиране на SQL Editor
Изпълнение на заявката
Добавяне на SQL конструкции
Клаузата GROUP BY
Текстови редактори
Версия за печат
Основни раздели
Основни елементи на SQL

Едно от основните предназначения на редактора на заявки е да позволи използването на SQL команди (които е прието да се наричат конструкции - statements), с помощта на които ще може да оперираме с таблиците, като отделни обекти.
Стандартът SQL се дефинира съвместно от ISO (International Organization for Standartization - Международна организация по стандартизация) и ANSI (American National Standards Institute - Американски национален институт по стандартите). В основата на SQL обаче са залегнали проучвания на лабораториите на IBM.
SQL съществува в три основни форми: интерактивен (interactive), статичен (static) и динамичен (dynamic). В много отношения те оперират еднакво, но се използват по различен начин.

Интерактивният SQL се използва за директно опериране върху дадена база данни, при което се получава разбираем резултат. При тази форма на SQL въведената форма се изпълнява веднага и се получава непосредствен резултат.

Статичният SQL се състои от конструкции, твърдо кодирани като част от приложението. Най-често в този случай се среща вграденият SQL (embedded SQL), като при него SQL модулите са неделима част от кода написан на някакъв друг език за програмиране. В този случай исходните данни се предават чрез променливи или параметри.

При динамичният SQL, кодът се генерира в процеса на изпълнение на приложението.

В DB Manager се използват и трите основни форми. Важно е да се знае, че динамичен SQL се използва при производните форми, но за да бъде облекчена работата на крайният клиент, заявките се въвеждат непосредствено в полетата, като е позволено използването и на опростен синтаксис (например замяната на предиката LIKE с ".." ).

Основните подразделения на SQL са:

  • Data Definition Language - DDL, наричан още език за описание на схеми (Shema Definition Language). В него са включени командите изграждащи обектите (таблици, индекси и др.).
  • Data Manipulation Language-DML, който представлява набор от команди, определящи какви стойности има в таблиците във всеки един момент.
  • Data Control Language-DCL, който дефинира правата на потребителите.

Тук не става думи за различни езици, а по скоро отделни групи на SQL в зависимост от тяхната функционална принадлежност. При DB Manager DDL е претърпял в някаква степен развитие. За описание на схемите и обектите се използват основно двумерни таблици. Идеята е да се доближим в максимална степен до описанието на конкретното бизнес приложение, а не до абстрактна структура.

Не всички данни при SQL са еднакви и с не всички може да се извършват манипулации. Най-очевидна е разликата между текст и числови стойности. Прието е числата да се сортират по възходящ или низходящ ред, а не да се подреждат по азбучен такъв. Както и в стандартните таблици, така и тук типа на данните в една колона (datatype), указва какви стойности е допустимо да съдържа. Всички записи в една колона трябва да бъдат от един и същи тип. Именно това различава таблиците на базите данни от електронните таблици на офис-приложенията.
Съдържание ...

Стартиране на SQL Editor

SQL Editor, в demo версията на продукта не е нищо повече от съвкупност от няколко текстови редактора, с помощта на които могат да бъдат генерирани, най-елементарни SQL заявки.
За да стартирате редактора е нужно да имате заредена SQL таблица или таблица на Paradox, dBase, FoxPro и др..
Не може да пишете SQL заявки за XML таблици. Всички манипулации, свързани с този вид таблица се реализират псредством друг вид технология, макар и крайният резултат да е един и същ.

Редакторът на заявки се състои от две части: управляваща и резултативна.

Управляващата част напомня на формата използвана за работа с таблици, но все пак съществуват и някои допълнения. Освен таблицата и полето за визуализация на структурата тук имаме и области за получавтоматично въвеждане на заявки. Тези области съдържат редактори на агрегатни функции.
Използването на агрегатни функции е обвързано с някои ограничения.
Например SUM и AVG могат да се използват само върху числови колони, докато COUNT, MAX и MIN върху всякакъв произволен тип данни.
При стартиране на SQL Editor на екрана ще се изведе празна таблица, така както е показано на фиг.1.
Стартирането се извършва посредством кликване на бутона за активиране на редактора.
- Бутон за активиране на SQL Editor
Това, което се вижда на екрана е елемент на управляващата част.
В demo версията не са включени модулите за графично моделиране на схеми. Премахването им е направено умишлено, като целта е да се проверти до каква степен табличният подход е ефективен в процеса на разработка на относително малки приложения.
Фиг.1. Общ изглед на управляващата част на SQL Editor
При първоначалното стартиране, автоматично се генерира DML SQL заявка, в която са включени клаузите SELECT и FROM. Ако работим с реално client/server приложение заявката ще има много по-сложна структура, но това не е тема на настоящите разглеждания.


Пример:

Ако използваме някоя от по-високите версии на DB Manager, е възможно да се наложи генерирането на таблица, посредством SQL. Да приемем, че таблицата носи наименование Products и съдържа информация за група изделия. Товага в резултативната част ще се визуализира следният код:


CREATE TABLE Products

pNo INTEGER NOT NULL PRIMARY KEY ,
pCode CHAR(10) NOT NULL,
pName CHAR(20) NOT NULL,
Group CHAR(20) ;


Най-общо тази конструкция ще генерира една празна таблица. Ако обаче добавяме редове към таблицата, то тогава ще бъде въведен следният текст:

   INSERT INTO Products VALUES (200, 'B1802AA', 'One-hole basin mixer', 'Dual Control');

Какъв точно текст ще бъде генериран зависи от редица фактори, като типа на базата данни, с колко на брой таблици работим и т.н.

Резултативната област на SQL Editor се активира при натискане на съответния бутон от командният панел.
- Бутон за активиране на резултативната област от SQL Editor
За да се върнем към управляващите модули е нужно да кликнем върху бутончето, нямиращо се в ляво.
- Бутон за активиране на командната област на SQl Editor
При генерацията на заявката в горната част на полето се извежда коментар, който не подлежи на обработка, но съдържа информация относно използваният стандарт, разделът, дата и час на генериране на заявката. Когато се работи с локална база от данни след FROM се задава логическият път до използваната таблица (или таблици).
Фиг.2. Автоматично генерирана SQL заявка.
Забележка: При изпълнение на SQL заявката ще се изпълни това, което се съдържа в полето SQL. Ако потребителят внесе някакви корекции, те ще бъдат отчетени от интерпретатора, но няма да се отразят при генерирането на резултатните форми (виж съответния раздел).
Съдържание ...

Изпълнение на заявката

Ако въведената или автоматично генерирана заявка е коректна, то нейното изпълнение ще доведе до извличане на изискуемата информация от СУБД.
Макар конструкцията SELECT да изглежда много просто, на практика тя позволява усложнено оценяване и обработка на данните, в зависимост от конкретните нужди на различните потребители.
За разлика от други редактори, в които изходната информация не се подрежда в някакъв предварително установен вид, при DB Manager не е така. Тук резултатът от изпълнението представлява таблица на всички полета, включени в заявката. Дори да използвате специалните клаузи на SQL, имащи отношение към извеждането на информацията, то това не би довело до промени в нейния вид.
Независимо, че е възможно да се изберат всички колони, посредством опционалното съкращение '*', при автоматичното генериране на SQL от локална таблица ще се извърши указване на полетата във вида:

   Таблица .Наименование на полето

Макар подобен подход да не изглежда елегантно като решение той е полезен, когато генерираме хетерогенна таблица, съдържанието на която се извлича от няколко различни по тип локални таблици (например dBase и Paradox).
Полетата с текстова информация ще бъдат изведени като MEMO, а тези с графична като GRAPHIC. Що се отнася до записите на аудио-информация, за тях се използват BLOB полета.

Структурата на таблицата може да се види в дясната чат на работната област.
- Бутон за активиране на заявката
На фиг.3. е показано генериране на заявката от фиг.2. В случая се извлича информация от локална таблица, която съдържа две полета за графика и едно за неформатирани, текстови документи.
Фиг.3. Изпълнение на SQl заявката
Забележка: В така генерираната таблица не може да правите съществени промени в смисъл, размер на шрифта, цвят на колоните, подравняване и др. Това може да извършите ако генерирате SQL таблица.
Добавянето на таблица, към вече изготвена заявка се извършва посредством предвиденият за това бутон.
- Бутон за добавяне на таблица към съществуваща заявка
В този случай към съществуващата заявка ще се добавят полетата на активната таблица таблица.
Съдържание ...

Добавяне на SQL конструкции

Съществуват три основни способа за добавяне на конструкции към заявката.
Първият е почти изцяло визуален и не е включен в демо версията. При него се генерират схеми, въз основа на които се извършва автоматична проверка и генериране на крайната заявка.
При вторият всички действия са частично автоматизирани. Не е необходимо да се изписват наименованията на полетата и какво трябва да се прави с тях, а просто се използва набор от предварително въведени стойности.

Пример:

Нека съдържанието на таблицата, съдържаща информация за произведениет продукти да бъде сортирано по серия на изделието и код.
В този случай ще се наложи да се използва клаузата ORDER BY, така както е показано по-долу:

   ORDER BY ProductSeries, ProductCode

Вместо да изписваме това е достатъчно да изберем Sorting, след което да укажем кои полета ще бъдат определящи при определяне последователността на извеждане на изходните данни така, както е показано на фиг.4.


При третият заявките се редактират ръчно, посредством предвидените за целта текстови редактори.

Фиг.4. Въвеждане на критерии за сортиране
Съдържание ...

Клаузата GROUP BY


Съществува клауза, за която се налага да бъде отделено специално място в настоящите разглеждания. Тази калуза е GROUP BY. Посредством нея можем да дефинираме подмножество от стойности в конкретна колона и да приложим агрегатна функция върху това множество.
Подмножеството е група от редове, имащи обща стойност за дадена колона, различни от колоната върху която се изчислява агрегатната функция.


Пример:

   SELECT ProductCode
   FROM C:\DBM\Data\V001.DB V001
   GROUP BY ProductCode



Независимо, че дори демо версията позволява да се генерират подобен род клаузи, все пак са нужни специфични познания в областта на базите данни и работата с SQL за да получим правилен резултат.


Пример:

Да предположим, че желаем да получим информация за най-големите продажби, на изделия, чиято стойност е над 38.50 USD. В случая е невъзможно да използваме агрегатни функции в клаузата WHERE освен ако не използваме подзаявка), защото предикатите се оценяват срещу един отделен ред, докато агрегатните функции се оценяват срещу групи от редове. В по-строгите интерпретации на ISO SQL, някой заявки просто ще бъдат отхвърлени, като лишени от логика.
В случая е по-добре да се използва клаузата HAVING, тъй като тя дефинира критериите, които служат за елиминиране на определени групи от изходните данни, точно така както WHERE прави това за отделните редове.

Правилната конструкция би следвало да изглежда така:


Правилна конструкция:

   SELECT ProductCode
   FROM C:\DBM\Data\V001.DB V001
   GROUP BY ProductCode, SaleDate
   HAVING MAX ( ProductPrice ) >38.50


Клаузата HAVING не може да рефенира колоната дата на продажбата (SaleDate), защото тя има повече от една стойност за конкретна, изходна група.



Все пак GROUP BY е само една от клаузите използвани в SQL, а и разгледаните примери са относително елементарни. Ако работим с няколко различни по тип бази от данни и се налага да правим сложни извлечения, едва ли ще можем да се справим единствено с това, което ни предлага като възможности SQl Editor.
Фиг.5. Генериране на GROUP BY клауза
Съдържание ...

Текстови редактори

Както вече бе споменато съществуват няколко различни възможности за редактиране съдържанието на една заявка. Независимо, че автоматичното генериране спестява време, то резултатът получен от него не винаги е достатъчно ефективен.

Пример:

Нека генерираме заявка, в резултат на която трябва да получим всички покупко-продажби, чиято стойност надвишава тази на направените на 10.01.2006 год. или преди тази дата, осъществени от клиенти, които са ресор на търговец в Лондон.

   SELECT *
   FROM Orders
   WHERE Current > ALL ( SELECT Current FROM Orders WHERE NOT EventDate > '10/01/2006')
   AND ProductNo IN ( SELECT p.ProductNo
   FROM Customers c, SalesPeople s
   WHERE c.City
   LIKE 'London' AND s.ProductNo = c.ProductNo)



Дори така генерираният пример може да бъде оптимизиран. Достатъчно е да разполагаме с информация дали преди посочената дата има извършени покупко-продажби или не.

Редакциите могат да бъдат извършвани или в специалнои предвидените за това области на SQL Editor или спомощтта на познатият ви текстови редактор.
За да се прехвърли съдържанието на заявката в него е достатъчно да кликнете двукратно в работната област или да активирате редактора посредством съответния бутон.
- Бутон за активиране на текстовия редактор
След акто сме внесли измененията в заявката тя може да бъде прехвърлена обратно в съответното поле на SQL Editor за последващо изпълнение.
Фиг.6. Редактиране на завката посредством RTF Editor
Забележка: При demo версията на програмата се използва съвсем елементарен редактор за формиране на завките, който на практика не разполага с никакви възможности за проверка на синтаксиса на заявката, за маркиране на клаузите и т.н.. Такъв тип редактори се използват в професионалните версии на продукта.
Съдържание ...
Copyright © 2003 -2006 G-System Group
* DDL - Data Definition Language
* DML - Data Manipulation Language
* DCL - Data Control Language
office@g-92.com
support@g-92.com