1. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев SQL Server Създаване на базиданни и таблици чрез конструкцията Create 1 от 5
Тема 23. Създаване, модифициране и изтриване на представяния (изгледи) чрез
конструкции на Transact SQL
Практическо упражнение
инж. Красимир Дойчев kdoychev@gmail.com
Целта на настоящия урок е да затвърдите знанията си и получите умения за
използване SQL конструкцията Create View за създаване на изгледи (представяния),
конструкцията Alter View за модифициране на изгледи и конструкцията Drop View за
премахване (изтриване) на изгледи. Чрез тези конструкции ще затвърдите знанията си и за
конструкцията Select.
В това упражнение ще използвате примерната база данни Pubs, съпътстваща Microsoft
SQL Server, която моделира работата на фирма за книгоразпространение.
Част от схемата на базата данни Pubs, включваща таблиците, които ще се използват в
упражнението, е представена на фиг.1.
фиг. 1 Част от схемата на база данни „Pubs”
1. Отворете SQL Query Analyzer и се свържете с вашия локален сървър.
от меню Start - група Microsoft SQL Server - Query Analyzer
от Enterprise Manager - меню Tools
команда isqlw от командния промпт
2. Създаване на изглед ViewAllTitles, който представя всички данни от таблица Titles.
В панел Editor на прозорец Query въведете следния код на Transact-SQL:
use Pubs
GO
CREATE VIEW dbo.ViewAllTitles
AS
SELECT * FROM Titles
GO
С конструкцията Use Pubs определяте базата данни Pubs, съдържаща таблиците,
върху които се базира изгледа.
В базата данни Pubs се създава изглед ViewAllTitles, който съдържа всички колони и
редове на таблицата Titles. Символът "звезда" ("*") в списъка за избор указва, че трябва да се
извлекат данни от всички колони (полета) в таблицата.
2. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев SQL Server Създаване на базиданни и таблици чрез конструкцията Create 2 от 5
Обърнете внимание на командата GO преди израза CREATE VIEW. Тя служи за
обозначаване на края на един пакет. Пакетът е група от една или повече конструкции на
Transact SQL, които се изпращат наведнъж от едно приложение към SQL Server за
изпълнение. SQL Server компилира конструкциите от пакета в отделна изпълнима единица,
наречена план за изпълнение. След това конструкциите от плана за изпълнение се
изпълняват една по една. В случая използването на GO е задължително поради изискването
CREATE VIEW да бъде единствената конструкция в един пакет. Командите GO са
необходими, за да изолират конструкцията CREATE VIEW от конструкциите USE и SELECT
около нея.
Можете да видите изгледа в прозореца Object Browser, който се показва в левия край
на Query Analyzer, когато се избере команда Tools> Object Browser>Show/Hide или чрез
клавиш F8. Ако съдържанието на прозореца не е актуализирано, изпълнете команда Refresh
или натиснете клавиш F5.
Забележка: Когато веднъж е създаден изглед или таблица, ако се опитате да ги
създадете отново, ще получите съобщение за грешка. В такъв случай първо трябва да
изтриете изгледа или таблицата и след това да ги създавате.
3. Изтриване на изгледи
use Pubs
GO
DROP VIEW ViewAllTitles
Изтрива изгледа ViewAllTitles.
4. Показване на резултатите от изгледа ViewAllTitles.
В панел Editor на прозорец Query въведете следния код на Transact-SQL:
use Pubs
GO
CREATE VIEW dbo.ViewAllTitles
AS
SELECT * FROM Titles
GO
SELECT * FROM ViewAllTitles
GO
Създава се изглед ViewAllTitles и наборът от резултати се появява в страница Grids на
панел Results.
5. Извлечете данните от полетата Title_id, Title, Price и Ytd_sales в таблица Titles
USE Pubs
GO
CREATE VIEW dbo.ViewTitles1
AS
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
3. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев SQL Server Създаване на базиданни и таблици чрез конструкцията Create 3 от 5
6. Задайте условие, така че наборът от резултати да показва само тези записи, чиято
стойност в поле Price е по-голяма от $10
USE Pubs
GO
CREATE VIEW dbo.ViewTitles2
AS
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Price > 10
Ако работите с оригиналната БД, трябва да виждате в резултата само 12 записа.
7. Модифицирайте изгледа чрез ALTER, като зададете условие, така че наборът от
резултати да показва само тези записи, чиято стойност в поле Price е по-голяма от
$20
USE Pubs
GO
ALTER VIEW dbo.ViewTitles2
AS
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Price > 20
Колко записа виждате сега
8. Задайте условие, така че наборът от резултати да показва само тези книги, чиито
заглавия започват с „The”.
USE Pubs
GO
CREATE VIEW dbo.ViewTitles3
AS
SELECT Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE (title LIKE 'the%')
Условието title LIKE 'the%' ограничава да се показват само записите подобни
на шаблона 'the%'. Операторът за сравнение с шаблон е LIKE, а шаблонът е ограден в
апострофи (клавишът с българско „Ч”). Използва се глобалният символ %, който
замества всички символи след „the”.
9. Задайте условие, така че наборът от резултати да показва само тези книги, чиито
продажби са между 4095 и 8780.
USE Pubs
GO
CREATE VIEW dbo.ViewTitles4
AS
SELECT Title_id, Title, Price, Ytd_sales
4. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев SQL Server Създаване на базиданни и таблици чрез конструкцията Create 4 от 5
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 като по-малко или равно.
10. Задайте подреждане на резултата от конструкция в задача 4 най-напред по цената в
низходящ ред, а после по заглавието на книгата във възходящ ред.
USE Pubs
GO
CREATE VIEW dbo.ViewTitles5
AS
SELECT
Top 50
Title_id, Title, Price, Ytd_sales
FROM Titles
WHERE Price > 10
ORDER BY Price DESC, Title
Книгите се подреждат по цена в обратен ред заради ключовата дума DESC (от
Descending – низходящ), а след това се подреждат по заглавия във възходящ ред, защото
когато не е указана ключова дума, се подразбира ASC (от Ascending – възходящ). Редът на
полетата указва първо по кое поле ще се извърши сортирането. Когато при създаване на
изглед се използва подреждане на записите чрез ORDER BY, задължително е преди списъка
с полета след Select да се използва ключовата дума Top. В противен случай се получава
съобщение за грешка. Top 50 означава, че се връщат първите 50 реда.
11. Групирайте данните в набора от резултати по полето Type, така че да се върне
средноаритметичната цена на типа книги за всички книги, които са с цена по-
голяма от $10. Резултатът да е сортиран по средноаритметична цена в обратен ред.
USE Pubs
GO
CREATE VIEW dbo.ViewTitles6
AS
SELECT
Top 100 Percent
Type, AVG (Price) AS AvgPrice
FROM Titles
WHERE Price > 10
GROUP BY Type
ORDER BY AvgPrice DESC
В набора от резултати, който връща тази конструкция SELECT, редовете с еднаква
стойност за Type ще бъдат групирани заедно. Редовете, които не отговарят на условията в
клауза WHERE, ще бъдат елиминирани преди да се извърши някакъв вид групиране. За
5. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев SQL Server Създаване на базиданни и таблици чрез конструкцията Create 5 от 5
всяка групировка ще бъде изчислена средноаритметичната стойност на цената, която ще се
появи под псевдонима AvgPrice. Top 100 Percent означава, че се връщат първите 100% реда
от набора резултати, т.е. всички редове.
Сега напишете сами SQL конструкция, която да връща вместо средноаритметичната
цена, максималната и минималната цена за типа. Вместо Create View използвайте Alter View.
12. За горния пример ограничете допълнително да се показват само записите, за които
средноаритметичната цена на типа книги е по-голяма от 18. Използвайте
модифициране с ALTER VIEW
USE Pubs
GO
ALTER VIEW dbo.ViewTitles6
AS
SELECT
Top 100 Percent
Type, AVG (Price) AS AvgPrice
FROM Titles
WHERE Price > 10
GROUP BY Type
HAVING AVG (Price)>18
ORDER BY AvgPrice DESC
Клауза HAVING се използва да филтрира редовете от групирания резултат.
Условието, което използва HAVING в случая, може да се провери едва след групиране, така
че то не може да бъде включено в клауза WHERE.
13. Използване на вътрешно съединение за извличане на данни от таблица Publishers и
таблица Titles в база данни Pubs:
USE Pubs
GO
CREATE VIEW dbo.ViewTitles7
AS
SELECT
Top 100 Percent
t.Title, p.Pub_name
FROM Publishers AS p INNER JOIN Titles AS t
ON p.Pub_id = t.Pub_id
ORDER BY Title ASC
ЛИТЕРАТУРА
1. Microsoft. MSCE Microsoft SQL Server 2000 Проектиране и реализация на бази данни
Training kit. С., Софтпрес, 2001.
2. SQL Server Books Online