SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 1 от 7
Тема 17. Клаузи, преобразуване, въвеждане и структура на функциите
инж. Красимир Дойчев kdoychev@gmail.com
В предишните уроци се запознахте със създаването и администрирането на основните
обекти на БД в SQL Server чрез основния инструмент Enterprise Manager, който предоставя
графичен потребителски интерфейс.
Целта на настоящия раздел е да разширите знанията си за работа с SQL Server, като
се научите да създавате конструкции на езика Transact SQL и ги изпълнявате в SQL Query
Analyzer. В настоящия урок ще се запознаете с основите на Transact SQL и клаузите на една
от най-често употребяваните конструкции – конструкцията Select.
Задачи
1. Запознаване с основите на Transact SQL
2. Запознаване с интерфейса и работата с SQL Query Analyzer
3. Работа с конструкцията Select
1. Въведение в Transact-SQL
Зад всички операции с БД, които изпълнявахме досега с Enterprise Manager, се
генерираха конструкции на Transact-SQL. Това е основният език на MS SQL Server чрез
който се дефинират, управляват и манипулират данни.
Transact-SQL ви позволява да администрирате инстанции на SQL Server; да създавате
и управлявате обекти; да вмъквате, извличате, модифицирате и изтривате всички данни в
таблиците на SQL Server. Transact-SQL е разширение на стандарта SQL, публикуван от
Националния институт по стандартите на САЩ (ANSI) и Международната организация за
стандартизация (ISO).
Основни компоненти на Transact-SQL са:
 DDL (data definition language) - език за дефиниране на данни
 DCL (data control language) - език за управление на данни
 DML (data manipulation language) - език за манипулиране на данни.
Езикът за дефиниране на данни (Data definition language) се използва за дефиниране
и управление на всички атрибути и свойства на базата данни, включително структури на
редове, дефиниции на колони, ключови колони, местоположение на файлове и използване на
паметта. Една DDL конструкция поддържа дефинирането или декларирането на обекти на
базите данни, например бази данни, таблици и изгледи. За всеки клас обекти съществуват
обикновено конструкции CREATE, ALTER и DROP (например CREATE TABLE, ALTER
TABLE и DROP TABLE).
Повечето DDL конструкции имат следната форма:
CREATE име_на_обект - създава обект с посоченото име
ALTER име_на_обект – променя обект с посоченото име
DROP име_на_обект - премахва обект с посоченото име
Езикът за управление на данни (Data control language) се използва u управление на
разрешенията върху обекти на базата данни. Разрешенията се управляват чрез конструкции
GRANT и REVOKE от SQL-92 и Transact-SQL конструкцията DENY.
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 2 от 7
Конструкция GRANT разрешава на един потребител на текущата база данни да
работи с данните в тази база или да изпълнява конкретни конструкции на Transact-SQL.
Конструкция REVOKE премахва предоставено или отказано преди разрешение на
потребител в текущата база данни.
Конструкция DENY отказва разрешение на един акаунт за сигурност в текущата база
данни и се предотвратява възможността този акаунт за сигурност да наследи разрешението
чрез членството му в група или роля.
Езикът за манипулиране на данни (Data manipulation language) се използва за
избиране, вмъкване, актуализиране и изтриване на данни от обектите, дефинирани чрез
DDL.
Конструкция SELECT извлича редове от базата данни и активира избирането на един
или повече или колони от една или повече таблици.
Конструкция INSERT добавя нов ред в една таблица или изглед.
Конструкция UPDATE променя данните в една таблица.
Конструкция DELETE премахва редове от една таблица.
2. Работа с SQL Query Analyzer
SQL Server 2000 предлага набор от инструменти, които ви дават възможност да
използвате Transact-SQL за взаимодействие с бази данни на SQL. Този набор инструменти
включва SQL Query Analyzer и помощните програми isqlw, isql и osql, изпълнявани от
командния промпт.
SQL Query Analyzer е инструмент с графичен потребителски интерфейс (graphical user
interface, GUI), който предоставя възможност да се проектират, тестват и изпълняват
конструкции на Transact-SQL, съхранени процедури, пакети и скриптове.
SQL Query Analyzer може да се стартира по следните начини:
 от меню Start - група Microsoft SQL Server - Query Analyzer
 от Enterprise Manager - меню Tools
 команда isqlw от командния промпт
След стартиране се появява диалогов прозорец, в който трябва да се посочи с кой
екземпляр на SQL Server искаме да се свържем. Обикновено се избира local.
В прозореца за редактиране се записва конструкцията и след това се изпълнява с
команда Query -> Execute или клавиш F5. Ако искаме да се стартират само определени
редове от кода, преди стартиране маркираме само тях.
3. Клаузи на конструкцията Select
3.1. Общи сведения за SELECT
Конструкцията SELECT в Transact-SQL ви дава възможност да извличате
съществуващи данни от една база данни на SQL Server. Повечето конструкции SELECT
описват четири основни свойства на набора от резултати:
 Колоните, които трябва да се включват в набора от резултати
 Таблиците, от които се извличат данните за набора от резултати
 Условията, на които трябва да отговарят редовете в таблицата
източник, за да се включат в набора от резултати.
 Последователността на подреждане на редовете в набора от резултати.
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 3 от 7
Например следващата конструкция SELECT извлича идентификационния номер ID,
името и единичната цена на всички продукти таблица Products, чиято единична цена е по-
голяма от $40:
SELECT ProductID, ProductName, UnitPrice
FROM Products
WHERE UnitPrice>40
ORDER BY UnitPrice ASC
Клаузата SELECT в предишния пример определя стойностите на кои колони трябва
да бъдат извлечени, а клаузата FROM определя таблицата, която съдържа тези колони.
Клаузата WHERE ограничава набора от резултати до тези продукти, чиято стойност в
UnilPrice (единична цена) е по-голяма от $40. Клауза ORDER BY определя, че наборът от
резултати трябва да бъде сортиран във възходящ ред по стойностите в колона UnitPrice.
Пълният синтаксис на конструкция SELECT е сложен, но основните клаузи могат да
бъдат обобщени по следния начин:
SELECT списък колони
[INTO нова таблица]
FROM списък таблици
[WHERE условие за филтриране на запсите
[GROUP BY списък по кои полета да се групира
[HAVING условие
[ORDER BY полета по които да се подрежда по азбучен ред [ASC DESC] ]
Средните скоби означават, че оградената клауза не е задължителна. При записване на
конструкцията те не се поставят.
3.2. Основни клаузи на SELECT
3.2.1. Клауза SELECT
Клаузата SELECT се състои от ключовата дума SELECT и списъка за избор.
Списъкът за избор е поредица от изрази, разделени със запетаи. Всеки израз дефинира една
колона от набора от резултати. Колоните в набора от резултати са подредени в същата
последователност като последователността на изразите в списъка за избор.
Използване на ключови думи в списъка за избор
Списъкът за избор може да съдържа и ключови думи, които контролират
окончателния формат на набора от резултати.
Ключова дума DISTINCT
Ключовата дума DISTINCT елиминира дублираните редове от набора от резултати.
Например таблица Orders в база данни Northwind съдържа дублирани стойности в колона
ShipCity. За да получите списък със стойностите на ShipCity, в който няма дубликати,
въведете следния код:
SELECT DISTINCT ShipCity, ShipRegion FROM Orders ORDER BY ShipCity
Ключова дума TOP n
Ключовата дума ТОР n определя, че трябва да бъдат върнати първите п реда от
набора от резултати. Ако е зададена ORDER BY, редовете се избират след като се подреди
наборът от резултати. С n е обозначено мястото, където се указва броят на редовете, които
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 4 от 7
трябва да бъдат върнати (освен ако не е зададена ключовата дума PERCENT). PERCENT
определя, че n е процентът редове в набора от резултати, които трябва да бъдат върнати.
Например следващата конструкция SELECT връща първите 10 града по азбучен ред от
таблица Orders:
SELECT DISTINCT TOP 10 ShipCity, ShipRegion
FROM Orders
ORDER BY ShipCity
Ключова дума AS
За повече удобство при четене на конструкцията SELECT може да зададете alias
(псевдоним) на дадена таблица. Псевдонимът на таблицата се присвоява или чрез използване
на ключовата дума AS, или без нея:
таблица AS псевдоним
таблица псевдоним
3.2.2. Клауза INTO
Клаузата INTO ви дава възможност да укажете, че наборът от резултати ще бъде
използван за създаване на нова таблица със същото име, което е посочено в клаузата.
Конструкцията SELECT...INTO може да се използва за комбиниране на данните от няколко
таблици или от няколко изгледа в една таблица. Можете да я използвате и за създаване на
нова таблица, която съдържа данни, избрани от свързан сървър. Следващият пример
използва конструкция SELECT за извличане на стойности от колони FirstName и LastName
на таблица Employees:
SELECT FirstName, LastName INTO EmployeeNames FROM Employers
Наборът от резултати, генериран от конструкцията, създава таблица EmployeeNames.
Новата таблица ще съдържа колони FirstName и LastName, и тези колони ще съдържат
стойностите от таблица Employees. Наборът от резултати не се появява в панел Results, освен
ако специално не направите заявка за четене на новата таблица.
3.2.3. Клауза FROM
Клаузата FROM е задължителна за всяка конструкция SELECT, н която се извличат
данни от таблици или изгледи. Можете да използвате клауза FROM, за да изброите
таблиците и изгледите, съдържащи колоните, посочени в списъка за избор и в клаузата
WHERE. Можете да дадете псевдоними на имената на таблиците и изгледите чрез клауза AS.
Освен това можете да използвате клауза FROM за съединяване на таблици, като укажете
условия за съединение в клауза ON.
Клауза FROM представлява списък от имена на таблици, имена на изгледи и клаузи
JOIN, разделени със запетаи. Следната конструкция SELECT използва клауза FROM, за да
зададе таблица Shippers
SELECT * FROM Shippers
Можете да използвате клауза FROM за задаване на съединения между две таблици
или два изгледа.
3.2.4. Клаузи WHERE, GROUP BY и HAVING
Клаузите WHERE и HAVING в конструкция SELECT контролират редовете от
таблиците-източници, които се използват за изграждане на набора от резултати. Тези клаузи
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 5 от 7
представляват филтри. Те задават поредица от условия за търсене и само тези редове, които
отговарят на условията за търсене, се използват за изграждане на набори от резултати. За
редовете, които отговарят на условията за търсене се казва, че са "приети за участие" в
набора от резултати. Например клаузата WHERE в следващата конструкция SELECT връща
само тези редове, в които регионът е щат Вашингтон:
SELECT CustomerlD, CompanyName
FROM Northwind.dbo.Customers WHERE Region = ‘WA’
Клауза HAVING обикновено се използва в съчетание с клауза GROUP BY, въпреки че
тя може да бъде зададена и без GROUP. Клауза HAVING задава повече филтри, които се
прилагат след като клауза WHERE извърши своето филтриране. Следващата конструкция
SELECT включва клауза WHERE, клауза GROUP BY и клаузи HAVING:
SELECT OrdD1.OrderID AS OrderID,
SUM(OrdD1.Quantity) AS “Units Sold”,
SUM(OrdD1.UnitPrice * OrdD1 .Quantity) AS Revenue
FROM [Order Details] AS OrdDl
WHERE OrdDl.OrderID IN (SELECT DISTINCT OrdD2.OrderlD
FROM [Order Details] AS OrdD2
WHERE OrdD2.UnitPrice > $100)
GROUP BY OrdD1.OrderID
HAVING SUM(OrdDl.Quantity) > 100
Изразът FROM [Order Details] AS OrdDl показва, че ще се извличат данни от
таблицата Order Details, като на таблицата Order Details е зададен псевдоним OrdDl чрез
ключовата дума AS.
Изразът SELECT OrdD1.OrderID AS OrderID, означава че първата колона на
върнатата таблица ще показва идентификационните номера на поръчките от таблицата-
източник Order Details, която както посочихме по-горе се показва под псевдонима OrdDl.
Изразът SUM(OrdD1.Quantity) AS “Units Sold” означава че втората колона на
върнатата таблица ще се показва под името Units Sold и ще съдържа сумата от количествата
в таблицата OrdD1.
Изразът SUM(OrdD1.UnitPrice * OrdD1 .Quantity) AS Revenue изчислява сумата от
приходите на всяка стока, като и задава псевдоним Revenue (приходи). Това ще бъде третата
колона на върнатата таблица. Приходът от всяка стока е произведение от единична цена на
стоката UnitPrice по количеството Quantity.
В тази конструкция SELECT клаузата WHERE връща само тези поръчки, в които
единичната цена на продаваната стока е по-голяма от $100, а клауза HAVING го ограничава
още повече - свежда го само до тези поръчки, в които продаденото количество е повече от
100 изделия. Клауза GROUP BY ограничава редовете, като извлича само различните
стойности в OrderlD.
Клауза GROUP BY
Клаузата GROUP BY се използва за показване на агрегатни стойности за всеки ред в
набора от резултати. Когато се използват без клауза GROUP BY, агрегатните функции
представят само една агрегатна стойност за една конструкция SELECT.
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 6 от 7
След ключовите думи GROUP BY има списък от колони, известни като колони за
групиране. Клауза GROUP BY ограничава редовете в набора от резултати. Има само по един
ред за всяка различна стойност в колоната или колоните за групиране. Всеки ред в набора от
резултати съдържа сумарни данни, свързани с конкретна стойност от неговите колони за
групиране.
SQL Server поставя ограничения за елементите, които могат да бъдат зададени в
списъка за избор, когато една конструкция SELECT съдържа клауза GROUP BY. Списъкът
за избор може да съдържа колоните за групиране и изрази, които връщат само по една
стойност за всяка стойност в колоните за групиране, като агрегатни функции (векторни
агрегати), в които фигурира име на колоната като един от техните параметри.
Обикновено клауза HAVING се използва с клауза GROUP BY, въпреки че HAVING
може да бъде зададена отделно. Можете да извършите групиране и по израз, при условие че
в него не са включени агрегатни функции.
В клауза GROUP BY трябва да посочите име на колона от таблица или изглед, а не
име на колона от набора от резултати, присвоена с клауза AS. Можете да изброите повече от
една колона в клауза GROUP BY с цел да вложите групи, тоест можете да извършите
групиране на таблица чрез всякаква комбинация от колони.
Последователност за прилагане на клаузите WHERE, GROUP BY и HAVING
За да се създават ефективни заявки, трябва да се разбира правилната
последователност, в която се прилагат клаузите WHERE, GROUP BY и HAVING.
 Клауза WHERE се използва да филтрира редовете, които се получават като
резултат от операциите, зададени в клауза FROM.
 Клауза GROUP BY се използва за групиране на изхода от клауза WHERE.
 Клауза HAVING се използва да филтрира редовете от групирания резултат.
Всяко от условията за търсене, които биха могли да бъдат приложени или преди, или
след операцията по групиране, е по-добре да бъде зададено в клауза WHERE. По този начин
се намалява броят на редовете, които трябва да бъдат групирани. Единствените условия за
търсене, които би трябвало да се задават в клауза HAVING, са тези условия за търсене, които
трябва да се приложат след като се извърши операцията по групиране.
3.2.5. Клауза ORDER BY
Клаузата ORDER BY сортира резултата от заявката по една или повече от колоните
(до 8060 байта). Една сортировка може да бъде във възходящ ред (ascending, ASC) или в
низходящ ред (descending DESC). Ако не е зададено нито едно от двете, се приема ASC. Ако
в клауза ORDER BY е посочена повече от една колона, се извършва вложено сортиране.
Следващата конструкция сортира редовете в таблица Titles, най-напред по издател (в
низходящ ред), после по тип (във възходящ ред в рамките на всеки издател) и накрая по цена
(също във възходящ ред, защото не е зададено DESC):
USE Pubs
SELECT Pub_id, Type, Title_id, Price
FROM Titles
ORDER BY Pub_id DESC, Type, Price
Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич
www.pglomonosov.org
Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 7 от 7
ЛИТЕРАТУРА
1. Microsoft. MSCE Microsoft SQL Server 2000 Проектиране и реализация на бази данни
Training kit. С., Софтпрес, 2001.
2. SQL Server Books Online

Weitere ähnliche Inhalte

Was ist angesagt?

Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systems
Rosen Spasov
 

Was ist angesagt? (10)

22 sazdavane na bd i tablici v sql server
22 sazdavane na bd i tablici v sql server22 sazdavane na bd i tablici v sql server
22 sazdavane na bd i tablici v sql server
 
DBT_2
DBT_2DBT_2
DBT_2
 
22a sazdavane na bd i tablici v sql server upraznenie
22a sazdavane na bd i tablici v sql server   upraznenie22a sazdavane na bd i tablici v sql server   upraznenie
22a sazdavane na bd i tablici v sql server upraznenie
 
19 saedinenia na tablici
19 saedinenia na tablici19 saedinenia na tablici
19 saedinenia na tablici
 
24 sazdavane na potrebiteli i zadavane na razreshenia
24 sazdavane na potrebiteli i zadavane na razreshenia24 sazdavane na potrebiteli i zadavane na razreshenia
24 sazdavane na potrebiteli i zadavane na razreshenia
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
 
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
Курс по програмиране за напреднали (2012) - 3. Бази данни. Системи за управле...
 
DBT_1
DBT_1DBT_1
DBT_1
 
21a manipulirane na danni v sql server upraznenie
21a manipulirane na danni v sql server   upraznenie21a manipulirane na danni v sql server   upraznenie
21a manipulirane na danni v sql server upraznenie
 
Introduction to-rdbms-systems
Introduction to-rdbms-systemsIntroduction to-rdbms-systems
Introduction to-rdbms-systems
 

Ähnlich wie 16 klauzi

Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - Intro
Svetlin Nakov
 
1. въведение в ms access
1. въведение в ms access1. въведение в ms access
1. въведение в ms access
dnaidenowa
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
svilen.ivanov
 
BARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovBARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George Penkov
Svetlin Nakov
 
Nakov - .NET Framework Overview + Security
Nakov - .NET Framework Overview +  SecurityNakov - .NET Framework Overview +  Security
Nakov - .NET Framework Overview + Security
Svetlin Nakov
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
Svetlin Nakov
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
Svetlin Nakov
 

Ähnlich wie 16 klauzi (19)

Nakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - IntroNakov - RDBMS Systems - Intro
Nakov - RDBMS Systems - Intro
 
B9 t9 db_my_sql
B9 t9 db_my_sqlB9 t9 db_my_sql
B9 t9 db_my_sql
 
17 klauzi upraznenia
17 klauzi   upraznenia17 klauzi   upraznenia
17 klauzi upraznenia
 
Konspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12klKonspekt prilojen mrejovi-software-12kl
Konspekt prilojen mrejovi-software-12kl
 
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
Introduction to-RDBMS-systems
Introduction to-RDBMS-systemsIntroduction to-RDBMS-systems
Introduction to-RDBMS-systems
 
01 vavedenie v sql server 2000
01 vavedenie v sql server 200001 vavedenie v sql server 2000
01 vavedenie v sql server 2000
 
WindowsAzure&NoSQL@SQLSaturday#152
WindowsAzure&NoSQL@SQLSaturday#152WindowsAzure&NoSQL@SQLSaturday#152
WindowsAzure&NoSQL@SQLSaturday#152
 
1. въведение в ms access
1. въведение в ms access1. въведение в ms access
1. въведение в ms access
 
Zaglavna str (2)
Zaglavna str (2)Zaglavna str (2)
Zaglavna str (2)
 
2 bd project
2 bd project2 bd project
2 bd project
 
Web applications with Catalyst BG
Web applications with Catalyst BGWeb applications with Catalyst BG
Web applications with Catalyst BG
 
BARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George PenkovBARS - Regular Expressions - Svetlin Nakov, George Penkov
BARS - Regular Expressions - Svetlin Nakov, George Penkov
 
Nakov - .NET Framework Overview + Security
Nakov - .NET Framework Overview +  SecurityNakov - .NET Framework Overview +  Security
Nakov - .NET Framework Overview + Security
 
Svetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework OverviewSvetlin Nakov - .NET Framework Overview
Svetlin Nakov - .NET Framework Overview
 
High Quality Code Introduction
High Quality Code IntroductionHigh Quality Code Introduction
High Quality Code Introduction
 
Nakov High Quality Code
Nakov High Quality CodeNakov High Quality Code
Nakov High Quality Code
 
Information Technologies
Information TechnologiesInformation Technologies
Information Technologies
 
2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx2022 TurnovoConf MySQL за начинаещи.pptx
2022 TurnovoConf MySQL за начинаещи.pptx
 

16 klauzi

  • 1. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 1 от 7 Тема 17. Клаузи, преобразуване, въвеждане и структура на функциите инж. Красимир Дойчев kdoychev@gmail.com В предишните уроци се запознахте със създаването и администрирането на основните обекти на БД в SQL Server чрез основния инструмент Enterprise Manager, който предоставя графичен потребителски интерфейс. Целта на настоящия раздел е да разширите знанията си за работа с SQL Server, като се научите да създавате конструкции на езика Transact SQL и ги изпълнявате в SQL Query Analyzer. В настоящия урок ще се запознаете с основите на Transact SQL и клаузите на една от най-често употребяваните конструкции – конструкцията Select. Задачи 1. Запознаване с основите на Transact SQL 2. Запознаване с интерфейса и работата с SQL Query Analyzer 3. Работа с конструкцията Select 1. Въведение в Transact-SQL Зад всички операции с БД, които изпълнявахме досега с Enterprise Manager, се генерираха конструкции на Transact-SQL. Това е основният език на MS SQL Server чрез който се дефинират, управляват и манипулират данни. Transact-SQL ви позволява да администрирате инстанции на SQL Server; да създавате и управлявате обекти; да вмъквате, извличате, модифицирате и изтривате всички данни в таблиците на SQL Server. Transact-SQL е разширение на стандарта SQL, публикуван от Националния институт по стандартите на САЩ (ANSI) и Международната организация за стандартизация (ISO). Основни компоненти на Transact-SQL са:  DDL (data definition language) - език за дефиниране на данни  DCL (data control language) - език за управление на данни  DML (data manipulation language) - език за манипулиране на данни. Езикът за дефиниране на данни (Data definition language) се използва за дефиниране и управление на всички атрибути и свойства на базата данни, включително структури на редове, дефиниции на колони, ключови колони, местоположение на файлове и използване на паметта. Една DDL конструкция поддържа дефинирането или декларирането на обекти на базите данни, например бази данни, таблици и изгледи. За всеки клас обекти съществуват обикновено конструкции CREATE, ALTER и DROP (например CREATE TABLE, ALTER TABLE и DROP TABLE). Повечето DDL конструкции имат следната форма: CREATE име_на_обект - създава обект с посоченото име ALTER име_на_обект – променя обект с посоченото име DROP име_на_обект - премахва обект с посоченото име Езикът за управление на данни (Data control language) се използва u управление на разрешенията върху обекти на базата данни. Разрешенията се управляват чрез конструкции GRANT и REVOKE от SQL-92 и Transact-SQL конструкцията DENY.
  • 2. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 2 от 7 Конструкция GRANT разрешава на един потребител на текущата база данни да работи с данните в тази база или да изпълнява конкретни конструкции на Transact-SQL. Конструкция REVOKE премахва предоставено или отказано преди разрешение на потребител в текущата база данни. Конструкция DENY отказва разрешение на един акаунт за сигурност в текущата база данни и се предотвратява възможността този акаунт за сигурност да наследи разрешението чрез членството му в група или роля. Езикът за манипулиране на данни (Data manipulation language) се използва за избиране, вмъкване, актуализиране и изтриване на данни от обектите, дефинирани чрез DDL. Конструкция SELECT извлича редове от базата данни и активира избирането на един или повече или колони от една или повече таблици. Конструкция INSERT добавя нов ред в една таблица или изглед. Конструкция UPDATE променя данните в една таблица. Конструкция DELETE премахва редове от една таблица. 2. Работа с SQL Query Analyzer SQL Server 2000 предлага набор от инструменти, които ви дават възможност да използвате Transact-SQL за взаимодействие с бази данни на SQL. Този набор инструменти включва SQL Query Analyzer и помощните програми isqlw, isql и osql, изпълнявани от командния промпт. SQL Query Analyzer е инструмент с графичен потребителски интерфейс (graphical user interface, GUI), който предоставя възможност да се проектират, тестват и изпълняват конструкции на Transact-SQL, съхранени процедури, пакети и скриптове. SQL Query Analyzer може да се стартира по следните начини:  от меню Start - група Microsoft SQL Server - Query Analyzer  от Enterprise Manager - меню Tools  команда isqlw от командния промпт След стартиране се появява диалогов прозорец, в който трябва да се посочи с кой екземпляр на SQL Server искаме да се свържем. Обикновено се избира local. В прозореца за редактиране се записва конструкцията и след това се изпълнява с команда Query -> Execute или клавиш F5. Ако искаме да се стартират само определени редове от кода, преди стартиране маркираме само тях. 3. Клаузи на конструкцията Select 3.1. Общи сведения за SELECT Конструкцията SELECT в Transact-SQL ви дава възможност да извличате съществуващи данни от една база данни на SQL Server. Повечето конструкции SELECT описват четири основни свойства на набора от резултати:  Колоните, които трябва да се включват в набора от резултати  Таблиците, от които се извличат данните за набора от резултати  Условията, на които трябва да отговарят редовете в таблицата източник, за да се включат в набора от резултати.  Последователността на подреждане на редовете в набора от резултати.
  • 3. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 3 от 7 Например следващата конструкция SELECT извлича идентификационния номер ID, името и единичната цена на всички продукти таблица Products, чиято единична цена е по- голяма от $40: SELECT ProductID, ProductName, UnitPrice FROM Products WHERE UnitPrice>40 ORDER BY UnitPrice ASC Клаузата SELECT в предишния пример определя стойностите на кои колони трябва да бъдат извлечени, а клаузата FROM определя таблицата, която съдържа тези колони. Клаузата WHERE ограничава набора от резултати до тези продукти, чиято стойност в UnilPrice (единична цена) е по-голяма от $40. Клауза ORDER BY определя, че наборът от резултати трябва да бъде сортиран във възходящ ред по стойностите в колона UnitPrice. Пълният синтаксис на конструкция SELECT е сложен, но основните клаузи могат да бъдат обобщени по следния начин: SELECT списък колони [INTO нова таблица] FROM списък таблици [WHERE условие за филтриране на запсите [GROUP BY списък по кои полета да се групира [HAVING условие [ORDER BY полета по които да се подрежда по азбучен ред [ASC DESC] ] Средните скоби означават, че оградената клауза не е задължителна. При записване на конструкцията те не се поставят. 3.2. Основни клаузи на SELECT 3.2.1. Клауза SELECT Клаузата SELECT се състои от ключовата дума SELECT и списъка за избор. Списъкът за избор е поредица от изрази, разделени със запетаи. Всеки израз дефинира една колона от набора от резултати. Колоните в набора от резултати са подредени в същата последователност като последователността на изразите в списъка за избор. Използване на ключови думи в списъка за избор Списъкът за избор може да съдържа и ключови думи, които контролират окончателния формат на набора от резултати. Ключова дума DISTINCT Ключовата дума DISTINCT елиминира дублираните редове от набора от резултати. Например таблица Orders в база данни Northwind съдържа дублирани стойности в колона ShipCity. За да получите списък със стойностите на ShipCity, в който няма дубликати, въведете следния код: SELECT DISTINCT ShipCity, ShipRegion FROM Orders ORDER BY ShipCity Ключова дума TOP n Ключовата дума ТОР n определя, че трябва да бъдат върнати първите п реда от набора от резултати. Ако е зададена ORDER BY, редовете се избират след като се подреди наборът от резултати. С n е обозначено мястото, където се указва броят на редовете, които
  • 4. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 4 от 7 трябва да бъдат върнати (освен ако не е зададена ключовата дума PERCENT). PERCENT определя, че n е процентът редове в набора от резултати, които трябва да бъдат върнати. Например следващата конструкция SELECT връща първите 10 града по азбучен ред от таблица Orders: SELECT DISTINCT TOP 10 ShipCity, ShipRegion FROM Orders ORDER BY ShipCity Ключова дума AS За повече удобство при четене на конструкцията SELECT може да зададете alias (псевдоним) на дадена таблица. Псевдонимът на таблицата се присвоява или чрез използване на ключовата дума AS, или без нея: таблица AS псевдоним таблица псевдоним 3.2.2. Клауза INTO Клаузата INTO ви дава възможност да укажете, че наборът от резултати ще бъде използван за създаване на нова таблица със същото име, което е посочено в клаузата. Конструкцията SELECT...INTO може да се използва за комбиниране на данните от няколко таблици или от няколко изгледа в една таблица. Можете да я използвате и за създаване на нова таблица, която съдържа данни, избрани от свързан сървър. Следващият пример използва конструкция SELECT за извличане на стойности от колони FirstName и LastName на таблица Employees: SELECT FirstName, LastName INTO EmployeeNames FROM Employers Наборът от резултати, генериран от конструкцията, създава таблица EmployeeNames. Новата таблица ще съдържа колони FirstName и LastName, и тези колони ще съдържат стойностите от таблица Employees. Наборът от резултати не се появява в панел Results, освен ако специално не направите заявка за четене на новата таблица. 3.2.3. Клауза FROM Клаузата FROM е задължителна за всяка конструкция SELECT, н която се извличат данни от таблици или изгледи. Можете да използвате клауза FROM, за да изброите таблиците и изгледите, съдържащи колоните, посочени в списъка за избор и в клаузата WHERE. Можете да дадете псевдоними на имената на таблиците и изгледите чрез клауза AS. Освен това можете да използвате клауза FROM за съединяване на таблици, като укажете условия за съединение в клауза ON. Клауза FROM представлява списък от имена на таблици, имена на изгледи и клаузи JOIN, разделени със запетаи. Следната конструкция SELECT използва клауза FROM, за да зададе таблица Shippers SELECT * FROM Shippers Можете да използвате клауза FROM за задаване на съединения между две таблици или два изгледа. 3.2.4. Клаузи WHERE, GROUP BY и HAVING Клаузите WHERE и HAVING в конструкция SELECT контролират редовете от таблиците-източници, които се използват за изграждане на набора от резултати. Тези клаузи
  • 5. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 5 от 7 представляват филтри. Те задават поредица от условия за търсене и само тези редове, които отговарят на условията за търсене, се използват за изграждане на набори от резултати. За редовете, които отговарят на условията за търсене се казва, че са "приети за участие" в набора от резултати. Например клаузата WHERE в следващата конструкция SELECT връща само тези редове, в които регионът е щат Вашингтон: SELECT CustomerlD, CompanyName FROM Northwind.dbo.Customers WHERE Region = ‘WA’ Клауза HAVING обикновено се използва в съчетание с клауза GROUP BY, въпреки че тя може да бъде зададена и без GROUP. Клауза HAVING задава повече филтри, които се прилагат след като клауза WHERE извърши своето филтриране. Следващата конструкция SELECT включва клауза WHERE, клауза GROUP BY и клаузи HAVING: SELECT OrdD1.OrderID AS OrderID, SUM(OrdD1.Quantity) AS “Units Sold”, SUM(OrdD1.UnitPrice * OrdD1 .Quantity) AS Revenue FROM [Order Details] AS OrdDl WHERE OrdDl.OrderID IN (SELECT DISTINCT OrdD2.OrderlD FROM [Order Details] AS OrdD2 WHERE OrdD2.UnitPrice > $100) GROUP BY OrdD1.OrderID HAVING SUM(OrdDl.Quantity) > 100 Изразът FROM [Order Details] AS OrdDl показва, че ще се извличат данни от таблицата Order Details, като на таблицата Order Details е зададен псевдоним OrdDl чрез ключовата дума AS. Изразът SELECT OrdD1.OrderID AS OrderID, означава че първата колона на върнатата таблица ще показва идентификационните номера на поръчките от таблицата- източник Order Details, която както посочихме по-горе се показва под псевдонима OrdDl. Изразът SUM(OrdD1.Quantity) AS “Units Sold” означава че втората колона на върнатата таблица ще се показва под името Units Sold и ще съдържа сумата от количествата в таблицата OrdD1. Изразът SUM(OrdD1.UnitPrice * OrdD1 .Quantity) AS Revenue изчислява сумата от приходите на всяка стока, като и задава псевдоним Revenue (приходи). Това ще бъде третата колона на върнатата таблица. Приходът от всяка стока е произведение от единична цена на стоката UnitPrice по количеството Quantity. В тази конструкция SELECT клаузата WHERE връща само тези поръчки, в които единичната цена на продаваната стока е по-голяма от $100, а клауза HAVING го ограничава още повече - свежда го само до тези поръчки, в които продаденото количество е повече от 100 изделия. Клауза GROUP BY ограничава редовете, като извлича само различните стойности в OrderlD. Клауза GROUP BY Клаузата GROUP BY се използва за показване на агрегатни стойности за всеки ред в набора от резултати. Когато се използват без клауза GROUP BY, агрегатните функции представят само една агрегатна стойност за една конструкция SELECT.
  • 6. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 6 от 7 След ключовите думи GROUP BY има списък от колони, известни като колони за групиране. Клауза GROUP BY ограничава редовете в набора от резултати. Има само по един ред за всяка различна стойност в колоната или колоните за групиране. Всеки ред в набора от резултати съдържа сумарни данни, свързани с конкретна стойност от неговите колони за групиране. SQL Server поставя ограничения за елементите, които могат да бъдат зададени в списъка за избор, когато една конструкция SELECT съдържа клауза GROUP BY. Списъкът за избор може да съдържа колоните за групиране и изрази, които връщат само по една стойност за всяка стойност в колоните за групиране, като агрегатни функции (векторни агрегати), в които фигурира име на колоната като един от техните параметри. Обикновено клауза HAVING се използва с клауза GROUP BY, въпреки че HAVING може да бъде зададена отделно. Можете да извършите групиране и по израз, при условие че в него не са включени агрегатни функции. В клауза GROUP BY трябва да посочите име на колона от таблица или изглед, а не име на колона от набора от резултати, присвоена с клауза AS. Можете да изброите повече от една колона в клауза GROUP BY с цел да вложите групи, тоест можете да извършите групиране на таблица чрез всякаква комбинация от колони. Последователност за прилагане на клаузите WHERE, GROUP BY и HAVING За да се създават ефективни заявки, трябва да се разбира правилната последователност, в която се прилагат клаузите WHERE, GROUP BY и HAVING.  Клауза WHERE се използва да филтрира редовете, които се получават като резултат от операциите, зададени в клауза FROM.  Клауза GROUP BY се използва за групиране на изхода от клауза WHERE.  Клауза HAVING се използва да филтрира редовете от групирания резултат. Всяко от условията за търсене, които биха могли да бъдат приложени или преди, или след операцията по групиране, е по-добре да бъде зададено в клауза WHERE. По този начин се намалява броят на редовете, които трябва да бъдат групирани. Единствените условия за търсене, които би трябвало да се задават в клауза HAVING, са тези условия за търсене, които трябва да се приложат след като се извърши операцията по групиране. 3.2.5. Клауза ORDER BY Клаузата ORDER BY сортира резултата от заявката по една или повече от колоните (до 8060 байта). Една сортировка може да бъде във възходящ ред (ascending, ASC) или в низходящ ред (descending DESC). Ако не е зададено нито едно от двете, се приема ASC. Ако в клауза ORDER BY е посочена повече от една колона, се извършва вложено сортиране. Следващата конструкция сортира редовете в таблица Titles, най-напред по издател (в низходящ ред), после по тип (във възходящ ред в рамките на всеки издател) и накрая по цена (също във възходящ ред, защото не е зададено DESC): USE Pubs SELECT Pub_id, Type, Title_id, Price FROM Titles ORDER BY Pub_id DESC, Type, Price
  • 7. Професионална гимназия по механотехника и електротехника "М. В. Ломоносов" - гр. Добрич www.pglomonosov.org Красимир Дойчев Клаузи, преобразуване, въвеждане и структура на функциите 7 от 7 ЛИТЕРАТУРА 1. Microsoft. MSCE Microsoft SQL Server 2000 Проектиране и реализация на бази данни Training kit. С., Софтпрес, 2001. 2. SQL Server Books Online