Същност на запитванията
Посредством запитване, потребителят извлича от базата с данни нужната му информация. Запитването е обект на базата от данни на Access и чрез него се извличат от множеството записи тези, отговарящи на зададени критерии.
Най-често се използва т.нар. селектиращо запитване (select query). Чрез такова запитване могат да се извличат данни от една или няколко таблици, да се анализират получените чрез тях резултати и да се правят промени в базата от данни.
Други видове запитвания са: кръстосано запитване (crosstab query), което показва резюмирани стойности от едно поле и ги подрежда в колони и редове; актуализиращо запитване (action query), което осъществява актуализация на множество записи за едно действие, като се ползва за създаване на нова таблица, за изтриване, добавяне и правене на промени в записи; свързващо запитване (union query), което комбинира полета от две и повече таблици; изпращащо (преминаващо) запитване (pass-through query), което изпраща команди до SQL база от данни; дефиниращо запитване (data-definition query), чрез което се създават, актуализират и изтриват таблици от Access базата от данни, посредством SQL оператори.
Обратно към началото
Създаване на запитване без ползване на Query Wizard
За създаване на запитване без да се ползват възможностите на Query Wizard, трябва да се изпълнят следните стъпки:
1. В прозорец Database се активизира подпрозорец Query.
2. Натиска се бутон New. Access извежда New Query диалоговата кутия. Избира се от различните възможности Design View и се натиска бутон ОК.
Access извежда Select Query диалоговия прозорец и върху него отваря Show Table диалоговия прозорец, в които са имената на таблиците и запитванията в отворената база от данни.
3. В диалоговия прозорец Show Table се избира името на таблицата, в която се съдържат нужните данни и след това се натиска бутон Add. В резултат на това в Query прозореца се извежда списък с полетата на избраната таблица.
4. Натиска се бутон Close, за затваряне на диалоговият прозорец Show Table.
Ако са добавени няколко таблици, то Access свързва автоматично таблиците по съответстващите им полета, когато предварително са създадени връзки между таблиците при създаване на базата от данни. Ако обаче такива връзки не са създадени, то Access създава такива автоматично, при положение, че открие между таблиците кореспондиращи си полета (полета със съвпадащи имена и тип на данните в тях). Последната възможност е връзките между таблиците да се направят за нуждите на запитването в прозорец Select Query.
За съхраняване в базата от данни на създадено запитване, трябва да се изпълни следната последователност от действия:
1. Изпълнява се команда File | Save или се натиска бутон Save от стандартната ивица с бутони.
2. Ако запитването се записва за пръв път, се отваря диалогов прозорец Save as, в който трябва да се въведе името на запитването и да се натисне бутон ОК. Името на запитването може да е до 64 символа и да съдържа интервали.
Обратно към началото
Изгледи в Query прозореца
Query прозорецът има няколко изгледа:
Design view - за създаване на запитване или за промяна на съществуващо запитване (вж. Фиг. 6.1.);
Datasheet view - за разглеждане на данните, извлечени чрез запитването;
SQL view - за въвеждане на SQL оператор за създаване или промяна на запитването.
Обратно към началото
Включване на полета от таблица в запитването
След като са включени таблиците, на базата на които ще се създава запитването, трябва да се включат нужните полета в него.
4.1. Включване на поле в запитването
Избира се нужното поле от списъка над QBE мрежата и се “провлачва” до Field реда в мрежата или се чуква в полето Field, и от падащия списък се избира името на полето.
4.2. Включване на няколко полета едновременно в запитването
Избират се няколко полета чрез клавиш Ctrl и чукване върху всяко едно от тях. След това се включват избраните няколко полета, така както се включва едно поле в запитването (вж. 4.1.).
4.3. Включване на всички полета от списъка в запитването
Когато е нужно да се включат всички полета от таблица или запитване, то има възможност да се използват два подхода - да се изберат всички полета от списъка и да се включат като група в QBE мрежата или да се избере и включи звездичката (*), стояща в началото на списъка от полета. Трябва да се има предвид, че двата подхода създават различни запитвания: Ако се включат полетата в група, то само тези полета съставят запитването. Ако по късно се наложи да се модифицира структурата на таблицата, която обработва запитването, то трябва промените да се отразят и в самото запитване. В случаите, когато се ползва звездичката, то всички промени които се правят в структурата на таблицата автоматично се отразяват в запитването.
Обратно към началото
Подреждане, вмъкване и отстраняване на полета. Промяна ширината на колоните от мрежата
След като полетата са включени в QBE мрежата на заявката, то може да се наложи да се променят местата им. Промяната на местата на полетата се отразява в подреждането на информацията, извлечена чрез запитването.
За преместване на поле, първо то трябва да въде избрано чрез селектора на колона от мрежата. След това селектора се “хваща” и премества на нова позиция.
За вмъкване на поле, първо се избира полето от списъка с полета. След това то се “провлачва” до позиция в мрежата, където е необходимо. С отпускане бутона на мишката, полето се появява в QBE мрежата.
За отстраняване на поле, първо се избира полето чрез селектора му. След това се натиска клавиш Del или се изпълнява Edit | Delete. За отстраняване на всички полета от мрежата едновременно се изпълнява командата Edit | Clear Grid.
За промяна ширината на колоните от мрежата трябва да се постави показалеца на мишката върху границата между два селектора на полета. След това показалецът се премества наляво за да бъде намалена (или надясно - за да бъде увеличена) ширината на колона от QBE мрежата. За задаване оптималната ширина на колона, трябва да се постави маркера между два селектора на колони от мрежата и двукратно да се щракне с левия бутон на мишката, което води до задаване на оптимална ширина за колоната, намираща се в ляво спрямо моментната позиция на показалеца на мишката.
Обратно към началото
Промяна имената на полетата в запитване
За промяна име на поле в запитването вж. Фиг. 6.3.
7. Задаване последователността за сортиране
Обратно към началото
Задаване последователността за сортиране
Когато се стартира едно запитване, може да се желае данните да бъдат подредени в някаква последователност.
За задаване на начина на подреждане на данните в Datasheet View вж. Фиг. 6.4.
Възможностите между които трябва да избира потребителят са: сортиране в нарастващ ред - от 0 до 9 и от A към Z (Ascending); сортиране в намаляващ ред - от 9 към 0 и от Z към А (Descending).
По аналогичен начин се задава сортиране на стойностите в няколко полета едновременно, като сортирането е в зависимост и от положението на полетата в QBE мрежата - т.е. сортира се първо по най-лявото поле, след това по полето отдясно.
Забележка: не могат да се сортират Memo и OLE полета.
Обратно към началото
Задаване на критерии за запитването
За ограничаване броя на извежданите записи от едно запитване, трябва да се посочат критерии за него. Например, може да се въведе един прост критерий - за извличане само на студентите от град Свищов, може да се зададе критерий за полето Grad - Свищов. Критериите могат да бъдат и много по сложни - представени с израз.
На Фиг. 6.5. е посочено как се задава критерий чрез директното му изписване в QBE мрежата. Конкретно посоченият в примера критерий може да се изпише като: Свищов, =Свищов, “Свищов” и =”Свищов”.
На Фиг. 6.6. е посочено как трябва да се въведе критерий за обработка на поле от тип Date, когато настройката в Control Panel е за дата от тип “dd.mm.yyyy г.”. За такива случаи трябва да се ползва функцията DateValue за преобразуване на стринг в дата. В примера от Фиг. 6.6. е показано запитване за извличане на стойности от полетата Fn, Grad и Bdate за студентите родени през 1968 г.
Обратно към началото
Изключване на полета от Dynaset
За изключване на едно поле от Dynaset се ползва реда Show от QBE мрежата. Пример за това е представен на Фиг. 6.7.
Обратно към началото
Ползване на глобални символи в запитване
Когато се създава едно запитване, може да е нуждо да се извлекат само имената на студентите, чиито фамилии започват с буквата “П” или завършват на “ВА”.
За такива цели е предвидено използването на глобалните символи “?” и “*”.
На Фиг. 6.8. е представено запитване, чрез което се извличат данни за студентите, чиито имена започват с буквата “П”. В мрежата се въвеждат само двата символа П*, а Access променя написаното на Like “П*”.
На Фиг. 6.9. е представен вариант на запитване, чрез което се извличат записи за студентите, чиито фамилии не започват с буквата “П”. Изписването е Not П*, което Access променя на Not Like “П*”.
За извеждане само на имена, в които втората буква е буквата “И” трябва да се ползва записването ?И*, което Access преобразува в Like “?И*”. Понеже в използването на глобалният символ “?” има доста особености, затова на Фиг. 6.10. е представен пример за съвместното използване на “?” с “*”, включително и резултатата от изпълнението на запитването.
Обратно към началото
Ползване на “And” и “Or” в едно поле
За задаването на различни критерии в едно поле, трябва да се ползват оператори And и Or. Например, за извличане на данните за студентите от Свищов ИЛИ София, то в полето Grad на запитването трябва да се укаже “Свищов” Or “София” (вж. Фиг. 6.11).
Обратно към началото
Ползване на “And” в различни полета
За задаване на критерии в различни полета, трябва отделните критерий да се въведат в различни полета, но на един ред - реда Criteria от QBE-мрежата. На Фиг. 6.12. е показан пример за задаване на условието за извличане на студентите, които са от Свищов и получават стипендия по-висока от 310 лв. т.е. условието е Grad=“Свищов” And St>310.
Обратно към началото
Ползване на “Or” в различни полета
За задаване на критерии в различни полета, трябва отделните критерий да се въведат в различни полета, и освен това - в различни редове от редовете Criteria от QBE-мрежата. На Фиг. 6.13. е показан пример за задаване на условието за извличане на студентите, които са (или) от Свищов ИЛИ получават стипендия по-висока от 310 лв. т.е. условието е Grad=“Свищов” Or St>310.
Обратно към началото
Едновременно ползване на And и Or
Когато е нужно да се конструира запитване, което да извлича имената на студентите, започващи с букви от А до П, и допълнителните критерии са, тези студенти да са от Свищов или да получават стипендия по-висока от 310 лв., т.е. условията са: (Ime <= ”П” And Grad = ”СВИЩОВ”) Or (Ime <= ”П” And St > 310), то запитването трябва да изглежда по начина показан на Фиг. 6.14.
Обратно към началото
Създаване на изчисляеми полета
Когато се добавят полета към запитването при неговото конструиране, не съществува ограничение да се ползват само полетата от таблица или запитване. Може да се укаже създаването на изчисляеми (calculated fields).
На Фиг. 6.15. е показано как се създава ново изчисляемо поле с име Nov razmer и как се задава израз за осъществяване на нужните пресмятания над данните.
Обратно към началото
Запитване на базата на повече от една таблица
Няма ограничение в едно запитване да се ползват данните само от една таблица. На Фиг. 6.16 е показан такъв пример.
От Фиг. 6.16. се вижда, че в резултатната таблица ще участват данни от полетата Fn и Ime на таблицата Stud и полето ISP на таблицата Spec. Ако връзката между таблиците е създадена предварително, то тя автоматично се появява при включването на таблиците в прозорец Query. В противен случай, връзката трябва да се създаде ръчно в този прозорец.
Обратно към началото
Пресмятане на стойности чрез запитване
Често се налага да бъдат създавани запитвания за обработка на стойности от таблица, а не за извличане на отделни полета от таблица. За тази цел се използват т.нар. обобщаващи (total query, aggregate query) запитвания. В следващата таблица са изведени типовете пресмятания, достъпни в Access.
Функция
Резултат
Допуска се за:
Sum
Сбор на стойностите от полето.
Number, Date/Time, Currency, and AutoNumber
Avg
Средна аритметична стойност на стойностите от полето.
Number, Date/Time, Currency, and AutoNumber
Min
Най-малката стойност от полето.
Text, Number, Date/Time, Currency, and AutoNumber
Max
Най-високата стойност от полето.
Text, Number, Date/Time, Currency, and AutoNumber
Count
Брой на стойностите от полето, несъдържащи стойност Null (blank).
Text, Memo, Number, Date/Time, Currency, AutoNumber, Yes/No, and OLE Object
StDev
Стандартно отклонение на стойностите от полето.
Number, Date/Time, Currency, and AutoNumber
Var
Вариране (variance) на стойностите от полето.
Number, Date/Time, Currency, and AutoNumber
Обратно към началото
Пресмятане на стойност над всички записи от таблица
Чрез реализиране на действия над всички записи от таблицата е възможно да се получи резултатна информация от обработката на отделни полета от таблицата. На Фиг. 6.17 е показано примерно запитване за пресмятане на общата стойност на всички стипендии, както и на средната стипендия получавана от студентите.
Резултата се извежда в т.нар. snapshot, в който не се допуска редактиране на стойностите.
Обратно към началото
Пресмятане на стойност над група записи от таблица
Възможно е пресмятане на стойности над група записи от таблица. Например, на Фиг. 6.18. е показано запитване и получените чрез него резултати - от кои населени места и по колко студенти има от всяко населено място. Групирането се извършва по полето Grad, а преброяването може да стане по полето Ime или всяко едно от останалите полета на таблицата.
Възможните за използване оператори са представени в таблицата:
Оператор
Действие
Group By
Определя групите над които ще се извършват операциите. На Фиг. 6.18. например е показано използване на Group By за определяне на групи по населени места.
Expression
Създава изчисляемо поле, включващо обобщаващи функции.
Where
Определя критерий за поле, което не се използва за формиране на група. Ако се избере тази опция, Access няма да включи полето в резултатната таблица, тъй като се изчиства Show check box..
Създаване на параметрични запитвания
Ако често се стартира едно селектиращо запитване, но е нужно то да се стартира с различни критерии, трябва да се отдели време за да се създаде параметрично запитване. При стартиране на едно такова запитване, Access отваря диалогов прозорец в който се посочват стойности за критериите при текущото изпълнение на запитването.
Създаване на параметрично запитване за един критерий
Описанието на цялостния процес е представен на Фиг. 7.1.
Създаване на параметрично запитване за няколко критерия
Допустимо е създаване на запитване, което изисква въвеждането на няколко параметрични стойности. При това може да бъдат задавани параметри за отделните полета или няколко параметъра за едно поле.
На Фиг. 7.2. е представено запитване, в което има едновременно задавене на параметри в едно поле и на параметър в две полета, чрез което се извличат записи от таблицата Stud, като се иска извличане на записите, които отговарят на условието - факултетните номера на студентите да са между 900000 и 910000, и същевременно да са от град Свищов.
Обратно към началото
Създаване на Crosstab query
Възможно е създаване на Crosstab query (кръстосано запитване, запитване за сечение) за представяне на данните в компактен вид, във формат на електронна таблица. Този вид запитване представя голям обем от данни в лесен за възприемане вид.
За създаване на запитване от този вид, трябва да се включат в запитването полетата от таблицата (таблиците) на базата на които се създава запитването. След това, с изпълнение на командата Query | Crosstab query в QBE мрежата се визуализират редовете Total и Crosstab. На следваща стъпка се уточнява с падащият списък от Crosstab полето за всеки запис кое поле (полета) ще се ползват като редове (Row Heading) и кое поле (полета) ще се ползват като колони (Column Heading). В Total клетката на полето, на базата на което ще се пресмятат стойности, от падащият списък се избира Count (както е в примера на Фиг. 7.3.) за преброяване на стойностите (или Sum, Max и т.н.), а в клетката Crosstab стойността Value.
На Фиг. 7.3. е представен пример за създаване на кръстосано запитване, като в редовете са изброени градовете, от където са студентите, а в колоните - (номерата на) специалностите на студентите. В пресечните точки на колоните и редовете е изведен броя на студентите от съответната специалност и град, получаващи стипендия. Предимствата на кръстосаното запитване не могат да проличат ясно от този пример, тъй като самата изходна таблица Stud, съдържа ограничено количество записи.
Обратно към началото
Използване на SQL в Access
Structured Query Language (SQL) е език, често използван в запитванията, актуализациите и управлението на данните в релационните бази от данни. Към всяко запитване създавано от потребителя чрез QBE мрежата Access автоматично генерира SQL оператор. За потребители запознати с SQL е по-удобно да създават запитванията си чрез него, вместо да изучават особеностите на работа с QBE мрежата на запитванията в Access.
За да се отвори диалогов прозорец, съдържащ съответният на зададеното QBE мрежата запитване SQL SELECT оператор, е нужно от прозореца в който е разработвано запитването (с QBE мрежата) да се изпълни командата View | SQL View. След като се направят нужните корекции в SQL прозореца, той се затваря чрез ново превключване към QBE мрежата чрез View | Design View. Направените промени в SELECT оператора се отразяват в QBE мрежата.
Общият вид на оператор SELECT е:
SELECT [predicate] { * | table.* | [table.]field1 [AS alias1] [, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE criteria]
[GROUP BY groupfieldlist]
[HAVING groupcriteria]
[ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]] ]
[WITH OWNERACCESS OPTION]
SELECT операторът има следните части:
Част
Описание
predicate
Един от следните предикати: ALL, DISTINCT, DISTINCTROW или TOP. Използват се за ограничаване на броя на връщаните от оператора записи. Ако не е уточнено - по подразбиране се приема ALL.
*
Задава, че се извличат всички полета от посочената таблица.
table
Името на таблицата от която се извличат записи.
field1, field2
Имена на полета, съдържащи нужните данни. Ако са няколко полета - то чрез последователността им се задава и последователността на връщаните данни.
alias1, alias2
Имена използвани за имена на колоните в резултатната таблица вместо оригиналните имена от изходната таблица.
tableexpression
Име на таблица или таблици от които се извличат данни.
externaldatabase
Име на външна база от данни.
criteria
Условия на които трябва да отговарят записите, за да бъдат включени в резултатната таблица.
groupfieldlist
Имена на полета (максимум 10) използвани за групиране на записите в резултатната таблица. Поредността на тези полета определя и нивата на групиране от най-високото към най-ниското ниво.
groupcriteria
Израз, определящ кои групиращи записи да бъдат включени в резултатната таблица.
field1, field2
Имена на полета по които се сортират записите в резултатната таблица.
OWNERACCESS
OPTION
При работа в група тази декларация се използва заедно със запитването, за да се даде на потребителя стартиращ запитването същите права, както на останалите членове на групата.