1. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 1 от 4
Тема 17. Клаузи, преобразуване, въвеждане и структура на функциите
Упражнение: Използване на конструкции SELECT за достъп до данните
инж. Красимир Дойчев kdoychev@gmail.com
Целта на настоящия урок е да затвърдите знанията си и придобиете умения за работа
с конструкцията Select и инструмента Query Analyzer.
В това упражнение ще използвате конструкции SELECT за извличане на данни от
таблицата Titles – Заглавия на книги на база данни Pubs. Това е примерна база данни,
съпътстваща Microsoft SQL Server, която моделира работата на фирма за
книгоразпространение.
Постепенно ще усложняваме конструкциите, като всяка конструкция SELECT след
първата ще се базира на предишните конструкции, тъй като ще имате повече яснота за
данните, които са включени в набора от резултати.
Предварителни сведения
Таблицата Titles съдържа следните полета (фиг. 1)
Поле Описание Поле Описание
Title_id идентификационен номер advance предплата
title заглавие на книгата royalty търговска отстъпка
type тип (за бизнес, кулинарна,
компютърна и др.)
ytd_sales брой продажби от началото на
годината до момента
pub_id идентификационен номер на
издателство
notes забележки
price цена pubdate дата на издаване
1. Отворете SQL Query Analyzer и се свържете с вашия локален сървър.
от меню Start - група Microsoft SQL Server - Query Analyzer
от Enterprise Manager - меню Tools
команда isqlw от командния промпт
2. Извлечете всички данни от таблица Titles на база данни Pubs
1. В панел Editor от прозорец Query въведете следния код на Transact-SQL:
Use Pubs
SELECT * FROM Titles
2. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 2 от 4
С конструкцията Use Pubs определяте базата данни Pubs, съдържаща таблицата, която
искате да разгледате. Чрез конструкция SELECT ... FROM извличате данни от таблица Titles,
намираща се в база данни Pubs. Символът "звезда" ("*") в списъка за избор указва, че трябва
да се извлекат данни от всички колони (полета) в таблицата.
2. Изпълнете конструкцията от менюто Query Execute, чрез клавиш F5 или бутон .
Наборът от резултати се появява в страница Grids на панел Results.
3. Извлечете данните от полетата Title_id, Title, Price и Ytd_sales в таблица Titles
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
4. Задайте условие, така че наборът от резултати да показва само тези записи,
чиято стойност в поле Price е по-голяма от $10
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Price > 10
Ако работите с оригиналната БД, трябва да виждате в резултата само 12 записа.
5. Задайте условие, така че наборът от резултати да показва само тези книги,
чиито заглавия започват с „The”.
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE (title LIKE 'the%')
Условието title LIKE 'the%' ограничава да се показват само записите подобни
на шаблона 'the%'. Операторът за сравнение с шаблон е LIKE, а шаблонът е ограден в
апострофи (клавишът с българско „Ч”). Използва се глобалният символ %, който
замества всички символи след „the”.
6. Задайте условие, така че наборът от резултати да показва само тези книги,
чиито продажби са между 4095 и 8780.
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Ytd_sales BETWEEN 4095 AND 8780
Условието Ytd_sales BETWEEN 4095 AND 8780 ограничава да се показват
само записите, на които полето Ytd_sales е между 4095 и 8780. Операторът за
сравнение с област е BETWEEN стойност1 AND стойност2. От резултата се вижда,
че Between действа като по-голямо или равно, а AND като по-малко или равно.
7. Задайте подреждане на резултата от конструкция в задача 4 най-напред по
цената в низходящ ред, а после по заглавието на книгата във възходящ ред.
USE Pubs
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Price > 10
3. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 3 от 4
ORDER BY Price DESC, Title
Книгите се подреждат по цена в обратен ред заради ключовата дума DESC (от
Descending – низходящ), а след това се подреждат по заглавия във възходящ ред, защото
когато не е указана ключова дума, се подразбира ASC (от Ascending – възходящ). Редът на
полетата указва първо по кое поле ще се извърши сортирането.
8. Групирайте данните в набора от резултати по полето Type, така че да се
върне средноаритметичната цена на типа книги за всички книги, които са с
цена по-голяма от $10. Резултатът да е сортиран по средноаритметична цена
в обратен ред.
USE Pubs
SELECT Type, AVG (Price) AS AvgPrice
FROM Titles
WHERE Price > 10
GROUP BY Type
ORDER BY AvgPrice DESC
В набора от резултати, който връща тази конструкция SELECT, редовете с еднаква
стойност за Type ще бъдат групирани заедно. Редовете, които не отговарят на условията в
клауза WHERE, ще бъдат елиминирани преди да се извърши някакъв вид групиране. За
всяка групировка ще бъде изчислена средноаритметичната стойност на цената, която ще се
появи под псевдонима AvgPrice.
Сега напишете сами SQL конструкция, която да връща вместо средноаритметичната
цена, максималната и минималната цена за типа.
9. За горния пример ограничете допълнително да се показват само записите, за
които средноаритметичната цена на типа книги е по-голяма от 18.
SELECT Type, AVG (Price) AS AvgPrice
FROM Titles
WHERE Price > 10
GROUP BY Type
HAVING AVG (Price)>18
ORDER BY AvgPrice DESC
Клауза HAVING се използва да филтрира редовете от групирания резултат.
Условието, което използва HAVING в случая, може да се провери едва след групиране, така
че то не може да бъде включено в клауза WHERE.
10. За предишния пример създайте таблица, която съдържа набора от резултати
USE Pubs
SELECT Type, AVG(Price) AS AvgPrice
INTO TypeAvgPrice
FROM Titles
WHERE Price > 10
GROUP BY Type
HAVING AVG (Price)>18
ORDER BY AvgPrice DESC
4. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 4 от 4
Конструкцията SELECT ще създаде нова таблица, наречена TypeAvgPrice. Таблицата
ще съдържа колона Type и колона AvgPrice, в които ще се появят стойностите от набора от
резултати.
След изпълнението, в страница Messages на панел Results се появява съобщение,
което показва броя на редовете, върху които е повлияла съответната операция.
Можете да видите новосъздадената таблица и да прегледате свойствата и
съдържанието й през Enterprise Manager. Ако таблицата не се вижда, щракнете с десния
бутон върху Tables на съответната база данни, в случая pubs, и изберете Refresh –
опресняване.
11. Покажете чрез SQL конструкция съдържанието на таблица TypeAvgPrice
USE Pubs
SELECT * FROM TypeAvgPrice
В страница Grids на панел Results се появява съдържанието на таблица TypeAvgPrice.
12. Изтрийте чрез SQL конструкция таблица TypeAvgPrice
USE Pubs
DROP TABLE TypeAvgPrice
В страница Messages на панел Results се появява съобщение, че командата е била
изпълнена успешно. Проверете дали таблицата се вижда в Enterprise Manager. Ако е
необходимо, направете опресняване - Refresh.
13. Затворете SQL Query Analyzer.
В следващото практическо упражнение ще се запознаете по-подробно с
аритметичните, сравнителните и логическите оператори и с някои често използвани
функции, които дават възможност да се отправят сложни запитвания към БД чрез
конструкцията SELECT. Ще се научите също да извличате данни от повече от една таблица,
използвайки вътрешни и външни съединения.
ЛИТЕРАТУРА
1. Microsoft. MSCE Microsoft SQL Server 2000 Проектиране и реализация на бази данни
Training kit. С., Софтпрес, 2001.
2. SQL Server Books Online