Упражнение 8

 

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

 

І. Заявки за избор (SELECT Query)

Избират и показват данни от различни таблици с подходящо филтриране или сортиране. Могат да изискват въвеждане на стойности от потребителя и тогава ги наричаме параметрични. Ако използват обобщаващи функции (сума, максимум, минимум, средно и др., то те са от тип Total)

1.      Видове заявки за избор

a)      Сортиращи заявки – показват данните, подредени във възходящ или низходящ ред по една или няколко колони

b)      Филтриращи заявки – показват само данните, които удовлетворяват определени критерии, приложени в една или няколко колони

c)      Заявки, използващи изчисляеми полета

d)      Обобщаващи заявки (Totals)

2. Сортиращи заявки (фиг. 1) – използват възходящо (Ascending) или низходящо (Descending) сортиране. При избор на повече от една колона за сортиране то се извършва най-напред по най-лявата и след това тези записи, които имат едни и същи стойности в нея се сортират по следващите по същото правило.


 

3. Филтриращи заявки (фиг. 1) – използват реда Criteria: за въвеждане на всички критерии, които трябва да бъдат изпълнени едновременно (свързват се с логическата операция And )  и реда or: за записване на алтернативните критерии (свързани с «или»).

Заявките за търсене по зададен критерии се реализират като след подбора на полетата в Design View в нужните полета на  реда Criteria се въведат логически изрази, осигуряващи желаното подмножество от данни в полето. При въвеждане на критерия могат да се използват както други полета, включително от други  таблици, така и да се пишат по-сложни изрази, в които участват функции. Изразите могат да се въвеждат с Expression Builder (Фиг. 2) В зависимост от вида на логическия израз и вида на полето заявката може да формира:

§         търсене на точно съответствие ако в реда Criteria на съответното поле се въвде = и конкретната търсена стойност от съответния на полето тип (числов, текст, логически, дата/час или брояч

§         търсене по шаблон в който при формирането на критериите за търсене се използуват глобалните символи:

-       * , заместващ всички възможни символи на всички възможни места;

-       ?,  заместващ всички възможни символи на съответното място;

-       # , заместващ всички възможни символи цифри на съответното място;

§         търсене по зададена област от стойности ако в реда  Criteria на съответното поле се въведе логическо условие, което започва с един от операторите за сравнение <, <=, >, >=, <>, =, between, like, след който се въвеждат  стойностите, които трябва да  са от съответствуващия на полето и на оператора за сравнение тип.


Задача 1.  Отворете базата Northwind и направете заявка, която показва информация за продуктите от таблица Products, подредени по азбучен ред. Отменете подреждането по имена и сортирайте в низходящ ред по цена. Без да отменяте сортирането, подредете продуктите отново по азбучен ред.

Задача 2.  Отворете базата Northwind и направете заявка, която показва информация за продуктите от таблица Products, които имат цена между 10 и 50. сортирайте ги във възходящ ред по цена. Без да отменяте сортирането, подредете продуктите отново по азбучен ред.

 

4.         Използване на формули и функции в заявките

Изчислими полета се използуват за получаване на данни, които не се съхраняват в таблиците на базата данни но могат да се изчислят посредством съществуващи данни. Това може да стане във всяка заявка за търсене с изчислими полета. За използване на вградени функции и писане на формули Access предлага помощник – Expression Builder (Фиг. 2). Той се стартира чрез бутона Build от лентата или от контекстното меню на поле от заявката (фиг. 3).

Създаването на поле, съдържащо функции или формули става по следния начин:

1.      избира се празно поле в Design изгледа на заявката, където ще се пише формулата.

2.      извиква се Expression Builder чрез бутона Build (фиг. 3).

3.      в прозореца на Expression Builder се изписва нужната формула, като се търсят таблици и групи функции в лявата част на прозореца от Фиг. 3, избират се техните полета или функции от другите две части чрез двукратно кликване, свързват се с нужните операции от лентата с операциите. При затваряне на прозореца на Expression Builder с ОК въведената формула се изписва в  полето на заявката.

Разрешените операции зависят от типа на полето и можете да ги видите в Expression Builder (Фиг. 3):  за събиране +, изваждане -, умножение *, деление / , целочислено деление \, степенуване  ^, остатък от целочислено деление Mod. При изчисление на изразите се ползува правилото за изчисление от ляво на дясно при спазване на приоритета на аритметичните операции.

 


 

4.      чрез командата Property от контекстното меню на полето с формулата се отваря прозореца Field Property, където можем да зададем разбираемо име, формат и описание наполето с формулата.

 

 

Задача 3.  Отворете базата Northwind и направете заявка, използваща таблици Suppliers и products и съдържаща име на компания, име на продукт и поле с име total price  което показва общата стойност на продуктите за всеки продукт  за всяка компания. ( за всеки продукт на дадена компания цената на опаковката се умножава по броя на опаковките )

Задача 4.  В базата Northwind  направете заявка, използваща таблици Suppliers и products и съдържаща име на компания, име на продукт и поле с име total_Q_price  което показва общата стойност на заявките за всеки продукт  за всяка компания. ( за всеки продукт на дадена компания цената на опаковката се умножава по броя на опаковките и по заявеното количество )

 

По – важни функции, достъпни чрез билдера.

1. Обобщаващи функции – прилагат се върху съдържанието на избран стълб в заявката, като се извършва групиране по всички полета в заявката, в които не се използват обобщаващи функции. Самите обобщаващи функции се прилагат не върху цялата колона, а поотделно върху всяка от групите и за всяка група резултатът се записва в нейния ред.  Използват се следните агрегатни функции:

o                             Countвръща броя на редовете (във всяка група) отговарящи на указано условие, което не е задължително. В случай че има условие първо се изпълнява агрегатната функция, а после се проверява условието.

o                             Sum - връща сумата на стойностите (във всяка група) отговарящи на указано условие

o                             Avgсредно аритметично

o                             Max – намира максималния елемент (във всяка група)

o                             Min - намира минималния елемент (във всяка група)

Обобщаващите функции се избират от групата SQL Aggregate, но най-често се избират от реда Total на заявките от тип Total

 


 

2. Функции за дата и време

o       Date() – връща днешна дата

o       Time() - връща часа в момента

o       Now() - връща днешна дата + часа в момента

o       Weekday(num) – връща номера на деня, съответстващ на числото (остатък при деление на 7)

o       Isdate(expr) – проверява дали изразът в скобите е дата За истина връща     -1, за лъжа - 0

 

            3. Математически функции

o       Round(expression [,numdecimalplaces]) - закръглява

o       Sqr(number)

o       Log(number) – при основа е

o       Int(number) – връща цялата част

o       Sgn(number) – връща 1  ако числото е положително, 0 ако е 0 и -1 ако е отрицателно

o       Exp(number)

 

4. Функции за работа с низове

o       Trim(string) – връща същия низ, но без водещите или завършващите празни интервали

o       String(number, character) - повтаря character number пъти

o       StrComp(string1, string2) – сравнява двата низа връща 1  ако първия е по-голям, 0 ако са еднакви и -1 втория е по-голям

o       Len(string) – връща броя символи в низа

o       Left(string, length) – връща левите length на брой символа на низа string

o       Right(string, length) – връща десните length на брой символа на низа string

o       Mid(string, start[, length])- връща length на брой символа на низа string като започва от позиция  start

o       InStr(string1, string2 )- връща номера на позицията, от която първият низ започва във втория

o       Replace(expression, find, replace[, start[, count[, compare]]])заменя подниз find на низ expression с друг низ replace.

 

5.     Обобщаващи заявки (от тип Total)

Чрез тях се прилагат обобщаавщите функции. Те се създават като във вече направена заявка в Design View се добави редът Total: от който се избират обобщаващите функции. Вмъкването на реда става като се кликне върху бутона Total (Фиг. 5). Във всяко от полетата на реда Total: трябва да бъде избрана някаква функция. В случай че никъде в реда не е избрано “Group By” заявката просто прилага избраните в реда Total: функции върху съответните колони и връща един ред, в който записва резултатите от всяка колона.

Функцията  Group By предизвиква обединяване на всички записи, които имат една и съща стойност в съответната колонка и представянето им с един ред. Тогава приложените в други колони обобщаващи функции се прилагат поотделно за всяка група, формирана с “Group By

 


 

Задача 5. Да се направи заявка, която показва имената, адресите, градовете и областите за компании от  таблицата Suppliers, и онези техни продукти от Products, чиито заявено количество Quantity от Order  Details e по-малко от 5 или по-голямо от 100.

 

Задача 6. Да се направи заявка, която показва имената, адресите, градовете и областите за компании от  таблицата Suppliers, заявените продукти от Products и общото им количество Quantity от Order  Details. Сортираите заявката по име на компания.

Задача 7. Аа се направи заявка,съдържаща име на компания и име на продукт (таблици Suppliers и products) която показва:

a)      Най- скъпия продукт във всяка компания , като покажете и после скриете цената.

b)      Най- евтиния продукт във всяка компания, като покажете и после скриете цената.

c)      Продуктът, за който има най-голяма поръчка.

d)      Продуктът, за който има най-малка поръчка.

Задача 8. Да се направи заявка, съдържаща

a)      име на компания , име на продукт и total price (таблици Suppliers и products) която показва общата стойност на заявките за всеки продукт  за всяка компания. ( за всеки продукт на дадена компания цената на опаковката се умножава по броя на опаковките )

b)      име на компания и total price (таблици Suppliers и products) която показва общата стойност на заявките за всяка компания. ( за всеки продукт на дадена компания цената на опаковката се умножава по броя на опаковките и така получените произведения се събират)

Задача 9. Да се направи заявка, съдържаща име на продукт, цена и трето поле, в което е записано името, града, окръга и адреса на компанията доставчик . Последното поле да се нарече Supplier