Top Banner
(c) 2006 National Academy for Software Development - http://academy.devbg.org 1 Релационни Релационни бази бази от от данни данни и Microsoft SQL Server 2005 Microsoft SQL Server 2005 Светлин Светлин Наков Наков Национална Национална академия академия по по разработка разработка на на софтуер софтуер academy.devbg.org Теория Теория и практика практика Съдържание Съдържание Съдържание 1. Национална академия по разработка на софтуер (НАРС) 2. Релационни бази от данни Таблици, връзки, E/R диаграми, нормализация, съхранени процедури, тригери, изгледи, транзакции 3. Работа с езика SQL Извличане на данни, съединения, агрегатни функции, групиране Вмъкване, промяна, изтриване 1. 1. Национална Национална академия академия по по разработка разработка на на софтуер софтуер ( НАРС НАРС) 2. 2. Релационни Релационни бази бази от от данни данни Таблици Таблици, , връзки връзки, , E/R E/R диаграми диаграми, , нормализация нормализация, , съхранени съхранени процедури процедури, , тригери тригери, , изгледи изгледи, , транзакции транзакции 3. 3. Работа Работа с езика езика SQL SQL Извличане Извличане на на данни данни, , съединения съединения, , агрегатни агрегатни функции функции, , групиране групиране Вмъкване Вмъкване, , промяна промяна, , изтриване изтриване За лектора За За лектора лектора Светлин Наков Носител на наградата Джон Атанасовна Президента на България Автор на 3 книги и над 20 статии 15 години опит с програмирането 8 от тях професионално Директор направление обучение в Национална академия по разработка на софтуер Преподавател във ФМИ на СУ Светлин Светлин Наков Наков Носител Носител на на наградата наградата Джон Джон Атанасов Атанасовна на Президента Президента на на България България Автор Автор на на 3 3 книги книги и над над 20 20 статии статии 15 15 години години опит опит с програмирането програмирането 8 8 от от тях тях професионално професионално Директор Директор направление направление обучение обучение в Национална Национална академия академия по по разработка разработка на на софтуер софтуер Преподавател Преподавател във във ФМИ ФМИ на на СУ СУ Национална Национална академия академия по по разработка разработка на на софтуер софтуер ( НАРС НАРС) Какво е НАРС? Какво Какво е НАРС НАРС? Национална академия по разработка на софтуер (НАРС) Практическо обучение за софтуерни инженери Курсове за начинаещи и напреднали Специалности Java и .NET Гарантирана работа по специалността Безплатно! http://academy.devbg.org Национална Национална академия академия по по разработка разработка на на софтуер софтуер ( НАРС НАРС) Практическо Практическо обучение обучение за за софтуерни софтуерни инженери инженери Курсове Курсове за за начинаещи начинаещи и напреднали напреднали Специалности Специалности Java Java и .NET .NET Гарантирана Гарантирана работа работа по по специалността специалността Безплатно Безплатно! http://academy.devbg.org http://academy.devbg.org Курсовете за начинаещи Курсовете Курсовете за за начинаещи начинаещи Курсове за начинаещи –6 седмици Въведение в програмирането с C# и Java Не се изискват предварителни знания Обхващат основите на програмирането Масиви, цикли, структури от данни Вход / изход, елементи от ООП Успешно завършилите продължават в следващите нива Безплатно! Курсове Курсове за за начинаещи начинаещи 6 6 седмици седмици Въведение Въведение в програмирането програмирането с C# C# и Java Java Не Не се се изискват изискват предварителни предварителни знания знания Обхващат Обхващат основите основите на на програмирането програмирането Масиви Масиви, , цикли цикли, , структури структури от от данни данни Вход Вход / / изход изход, , елементи елементи от от ООП ООП Успешно Успешно завършилите завършилите продължават продължават в следващите следващите нива нива Безплатно Безплатно!
22

Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

May 17, 2015

Download

Technology

Svetlin Nakov
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 1

РелационниРелационни базибази отот данниданни ииMicrosoft SQL Server 2005Microsoft SQL Server 2005

СветлинСветлин НаковНаковНационалнаНационална академияакадемия попоразработкаразработка нана софтуерсофтуерacademy.devbg.org

ТеорияТеория ии практикапрактика

СъдържаниеСъдържаниеСъдържание

1. Национална академия по разработкана софтуер (НАРС)

2. Релационни бази от данни• Таблици, връзки, E/R диаграми, нормализация, съхранени процедури, тригери, изгледи, транзакции

3. Работа с езика SQL• Извличане на данни, съединения, агрегатни функции, групиране

• Вмъкване, промяна, изтриване

1.1. НационалнаНационална академияакадемия попо разработкаразработканана софтуерсофтуер ((НАРСНАРС))

2.2. РелационниРелационни базибази отот данниданни•• ТаблициТаблици, , връзкивръзки, , E/R E/R диаграмидиаграми, , нормализациянормализация, , съхраненисъхранени процедурипроцедури, , тригеритригери, , изгледиизгледи, , транзакциитранзакции

3.3. РаботаРабота сс езикаезика SQLSQL•• ИзвличанеИзвличане нана данниданни, , съединениясъединения, , агрегатниагрегатни функциифункции, , групиранегрупиране

•• ВмъкванеВмъкване, , промянапромяна, , изтриванеизтриване

За лектораЗаЗа лекторалектора

• Светлин Наков• Носител на наградата “ДжонАтанасов” на Президента наБългария

• Автор на 3 книги и над 20 статии• 15 години опит с програмирането

• 8 от тях професионално

• Директор направление обучение вНационална академия по разработкана софтуер

• Преподавател във ФМИ на СУ

•• СветлинСветлин НаковНаков•• НосителНосител нана наградатанаградата ““ДжонДжонАтанасовАтанасов”” нана ПрезидентаПрезидента нанаБългарияБългария

•• АвторАвтор нана 3 3 книгикниги ии наднад 20 20 статиистатии•• 15 15 годинигодини опитопит сс програмиранетопрограмирането

•• 8 8 отот тяхтях професионалнопрофесионално

•• ДиректорДиректор направлениенаправление обучениеобучение ввНационалнаНационална академияакадемия попо разработкаразработканана софтуерсофтуер

•• ПреподавателПреподавател въввъв ФМИФМИ нана СУСУ

НационалнаНационална академияакадемияпопо разработкаразработка нанасофтуерсофтуер ((НАРСНАРС))

Какво е НАРС?КаквоКакво ее НАРСНАРС??

• Национална академия по разработкана софтуер (НАРС)• Практическо обучение за софтуерниинженери

• Курсове за начинаещи и напреднали• Специалности Java и .NET• Гарантирана работа по специалността• Безплатно!• http://academy.devbg.org

•• НационалнаНационална академияакадемия попо разработкаразработканана софтуерсофтуер ((НАРСНАРС))•• ПрактическоПрактическо обучениеобучение заза софтуернисофтуерниинженериинженери

•• КурсовеКурсове заза начинаещиначинаещи ии напредналинапреднали•• СпециалностиСпециалности Java Java ии .NET.NET•• ГарантиранаГарантирана работаработа попо специалносттаспециалността•• БезплатноБезплатно!!•• http://academy.devbg.orghttp://academy.devbg.org

Курсовете за начинаещиКурсоветеКурсовете заза начинаещиначинаещи

• Курсове за начинаещи – 6 седмици• Въведение в програмирането с C# и Java• Не се изискват предварителни знания• Обхващат основите на програмирането

• Масиви, цикли, структури от данни• Вход / изход, елементи от ООП

• Успешно завършилите продължават вследващите нива

• Безплатно!

•• КурсовеКурсове заза начинаещиначинаещи –– 6 6 седмициседмици•• ВъведениеВъведение вв програмиранетопрограмирането сс C# C# ии JavaJava•• НеНе сесе изискватизискват предварителнипредварителни знаниязнания•• ОбхващатОбхващат основитеосновите нана програмиранетопрограмирането

•• МасивиМасиви, , циклицикли, , структуриструктури отот данниданни•• ВходВход / / изходизход, , елементиелементи отот ООПООП

•• УспешноУспешно завършилитезавършилите продължаватпродължават ввследващитеследващите ниванива

•• БезплатноБезплатно!!

Page 2: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 2

Курсове за напредналиКурсовеКурсове заза напредналинапреднали

• Курсове за напреднали• Дават професията “софтуерен инженер”• Практическо обучение по:

• Обектно-ориентирано програмиране• Бази от данни (Oracle, SQL Server)• Уеб приложения и GUI приложения• Софтуерно инженерство и работа в екип

• Специалности Java и .NET• Гарантирана работа!• Безплатно!

•• КурсовеКурсове заза напредналинапреднали•• ДаватДават професиятапрофесията ““софтуеренсофтуерен инженеринженер””•• ПрактическоПрактическо обучениеобучение попо::

•• ОбектноОбектно--ориентираноориентирано програмиранепрограмиране•• БазиБази отот данниданни ((Oracle, SQL Server)Oracle, SQL Server)•• УебУеб приложенияприложения ии GUI GUI приложенияприложения•• СофтуерноСофтуерно инженерствоинженерство ии работаработа вв екипекип

•• СпециалностиСпециалности Java Java ии .NET.NET•• ГарантиранаГарантирана работаработа!!•• БезплатноБезплатно!!

НАРС – успешен стартНАРСНАРС –– успешенуспешен стартстарт

• НАРС ви гарантира успешен старт вкариерата на софтуерен инженер• Работа в престижи софтуерни фирми:

• SAP Labs Bulgaria, telerik, Sciant, Rila Solutions, Sirma, Seeburger Informatik, ICB, Stemo, Wohnfinder, Bank Service

• Безплатно обучение!

• За контакти:http://academy.devbg.org

•• НАРСНАРС виви гарантирагарантира успешенуспешен стартстарт ввкариератакариерата нана софтуеренсофтуерен инженеринженер•• РаботаРабота вв престижипрестижи софтуернисофтуерни фирмифирми::

•• SAP Labs Bulgaria, telerik, Sciant, Rila SAP Labs Bulgaria, telerik, Sciant, Rila Solutions, Sirma, Seeburger Informatik, Solutions, Sirma, Seeburger Informatik, ICB, Stemo, Wohnfinder, Bank ServiceICB, Stemo, Wohnfinder, Bank Service

•• БезплатноБезплатно обучениеобучение!!

•• ЗаЗа контактиконтакти::http://academy.devbg.orghttp://academy.devbg.org

РелационниРелационнибазибази отот данниданни

ФундаменталниФундаментални концепцииконцепции

Релационни бази от данниРелационниРелационни базибази отот данниданни

• Модели на базите от данни• йерархичен (дървовиден)• мрежови• релационен (табличен)• обектно-релационен

• Релационните бази от данни• Представляват съвкупности от таблици ивръзки между тях (релации)

• Ползват здрава математическа основа: релационната алгебра

•• МоделиМодели нана базитебазите отот данниданни•• йерархиченйерархичен ((дървовидендървовиден))•• мрежовимрежови•• релационенрелационен ((табличентабличен))•• обектнообектно--релационенрелационен

•• РелационнитеРелационните базибази отот данниданни•• ПредставляватПредставляват съвкупностисъвкупности отот таблицитаблици иивръзкивръзки междумежду тяхтях ((релациирелации))

•• ПолзватПолзват здраваздрава математическаматематическа основаоснова: : релационнатарелационната алгебраалгебра

Системи за управление набази от данниСистемиСистеми заза управлениеуправление нанабазибази отот данниданни

• Системи за управление на релационни бази отданни (СУБД) = Relational Database Management System (RDBMS)

• Осигуряват програмни средства за:• създаване / промяна / изтриване на таблиции връзки между тях

• добавяне, промяна, изтриване, търсене иизвличане на данни от таблиците

• поддръжка на езика SQL• управление на транзакции

(незадължително)

•• СистемиСистеми заза управлениеуправление нана релационнирелационни базибази ототданниданни ((СУБДСУБД) = ) = Relational Database Management Relational Database Management System System ((RDBMS)RDBMS)

•• ОсигуряватОсигуряват програмнипрограмни средствасредства заза::•• създаванесъздаване / / промянапромяна / / изтриванеизтриване нана таблицитаблициии връзкивръзки междумежду тяхтях

•• добавянедобавяне, , промянапромяна, , изтриванеизтриване, , търсенетърсене ииизвличанеизвличане нана данниданни отот таблицитетаблиците

•• поддръжкаподдръжка нана езикаезика SQLSQL•• управлениеуправление нана транзакциитранзакции

((незадължителнонезадължително))

Системи за управление набази от данниСистемиСистеми заза управлениеуправление нанабазибази отот данниданни

• RDBMS системите се наричат още• сървъри за управление на бази от данни• или просто "Database сървъри"

• По-известни RDBMS сървъри:• Oracle Database• Microsoft SQL Server• IBM DB2• PostgreSQL• MySQL• Borland Interbase

•• RDBMS RDBMS системитесистемите сесе наричатнаричат ощеоще•• сървърисървъри заза управлениеуправление нана базибази отот данниданни•• илиили простопросто "Database "Database сървърисървъри""

•• ПоПо--известниизвестни RDBMS RDBMS сървърисървъри::•• Oracle DatabaseOracle Database•• Microsoft SQL ServerMicrosoft SQL Server•• IBM DB2IBM DB2•• PostgreSQLPostgreSQL•• MySQLMySQL•• Borland InterbaseBorland Interbase

Page 3: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 3

ТаблициТаблици ии връзкивръзкиОсновниОсновни понятияпонятия

ТаблициТаблициТаблици

• Таблиците представляват съвкупност отстойности, подредени в редове и колони. Пример (таблица PERSONS):

• Редовете имат еднаква структура• Колоните имат име и тип (число, символенниз, дата или др.)

•• ТаблицитеТаблиците представляватпредставляват съвкупностсъвкупност ототстойностистойности, , подредениподредени вв редовередове ии колониколони. . ПримерПример ((таблицатаблица PERSONS)PERSONS)::

•• РедоветеРедовете иматимат еднакваеднаква структураструктура•• КолонитеКолоните иматимат имеиме ии типтип ((числочисло, , символенсимволеннизниз, , датадата илиили дрдр.).)

КуловКуловГюровГюровНаковНаков

familyfamily

НАРСНАРСМартинМартин33Tam TamTam TamБранимирБранимир22НАРСНАРССветлинСветлин11

employeremployernamenameidid

Схема на таблицаСхемаСхема нана таблицатаблица

• Схема на таблица е нареденапоследователност от описания наколони (име и тип)

• Например таблицата PERSONS имаследната схема:

•• СхемаСхема нана таблицатаблица ее нареденанареденапоследователностпоследователност отот описанияописания нанаколониколони ((имеиме ии типтип))

•• НапримерНапример таблицататаблицата PERSONSPERSONS имаимаследнатаследната схемасхема::

PERSONS (PERSONS (idid:: числочисло,,namename: : символенсимволен низниз,,familyfamily: : символенсимволен низниз,,employer: employer: символенсимволен низниз

))

Първичен ключПървиченПървичен ключключ

• Първичният ключ (primary key) е колона оттаблицата, която уникално идентифицирададен неин ред

• Два записа (реда) са различни когато саразлични първичните им ключове

• Първичният ключ може да е съвкупност отняколко колони

•• ПървичниятПървичният ключключ (primary key) (primary key) ее колонаколона ототтаблицататаблицата, , коятокоято уникалноуникално идентифицираидентифицирададендаден неиннеин редред

•• ДваДва записазаписа ((редареда) ) саса различниразлични когатокогато сасаразличниразлични първичнитепървичните имим ключовеключове

•• ПървичниятПървичният ключключ можеможе дада ее съвкупностсъвкупност ототняколконяколко колониколони

КуловКуловГюровГюровНаковНаковfamilyfamily

CodeAttestCodeAttestМартинМартин33BSHBSHБранимирБранимир22БАРСБАРССветлинСветлин11employeremployernamenameididPrimary Primary

keykey

Връзки (релации)ВръзкиВръзки ((релациирелации))

• Връзките между таблиците се базират навзаимоотношения primary key / foreign key

•• ВръзкитеВръзките междумежду таблицитетаблиците сесе базиратбазират нанавзаимоотношениявзаимоотношения primary key / foreign keyprimary key / foreign key

22БерлинБерлин44МоскваМосква

МюнхенМюнхенПловдивПловдивСофияСофия

namename

2233

3355

11221111

country_idcountry_ididid

РусияРусия33ГерманияГермания22БългарияБългария11

namenameidid

TOWNTOWN

COUNTRYCOUNTRY

Primary Primary keykey Primary Primary

keykey

Foreign Foreign keykey

Връзки (релации)ВръзкиВръзки ((релациирелации))

• Външният ключ (foreign key) е номер назапис (primary key) в друга таблица

• Връзките спестяват повтарянето наинформация• В примера името на държавата не се повтаряза всеки град

• Връзките имат множественост (multiplicity):• 1 x 1 – например човек ↔ студент• 1 x много – държава / градове• много x много – студент / учебен курс

•• ВъншниятВъншният ключключ ((foreign key) foreign key) ее номерномер наназаписзапис (primary key) (primary key) вв другадруга таблицатаблица

•• ВръзкитеВръзките спестяватспестяват повтарянетоповтарянето нанаинформацияинформация•• ВВ примерапримера иметоимето нана държаватадържавата нене сесе повтаряповтарязаза всекивсеки градград

•• ВръзкитеВръзките иматимат множественостмножественост ((multiplicity)multiplicity)::•• 11 x 1 x 1 –– напримернапример човекчовек ↔↔ студентстудент•• 1 x 1 x многомного –– държавадържава / / градовеградове•• многомного x x многомного –– студентстудент / / учебенучебен курскурс

Page 4: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 4

Множественост навръзките (1 x 1)МножественостМножественост нанавръзкитевръзките (1 x 1)(1 x 1)

БерлинБерлин44МюнхенМюнхенПловдивПловдивСофияСофия

namename

332211idid

• Връзка 1 x 1• 1 запис от едната таблица съответствана точно 1 запис от другата таблица

• Моделира наследяване на таблици

•• ВръзкаВръзка 1 x 11 x 1•• 1 1 записзапис отот еднатаедната таблицатаблица съответствасъответстванана точноточно 1 1 записзапис отот другатадругата таблицатаблица

•• МоделираМоделира наследяваненаследяване нана таблицитаблици

TOWNTOWN

3 400 0003 400 000441 260 0001 260 000720 000720 0001 177 0001 177 000populationpopulation

332211idid

POPULATIONPOPULATION

Primary & Foreign keyPrimary & Primary &

Foreign keyForeign keyPrimary

keyPrimary Primary

keykey

Множественост навръзките (1 x n)МножественостМножественост нанавръзкитевръзките (1 x n)(1 x n)

• Връзка 1 x много (или много x 1)• 1 запис от първата таблица съответствана много записи от втората таблица

• Използва се много често

•• ВръзкаВръзка 1 x 1 x многомного ((илиили многомного xx 1)1)•• 1 1 записзапис отот първатапървата таблицатаблица съответствасъответстванана многомного записизаписи отот вторатавтората таблицатаблица

•• ИзползваИзползва сесе многомного честочесто

22БерлинБерлин44МоскваМосква

МюнхенМюнхенПловдивПловдивСофияСофия

namename

2233

3355

11221111

country_idcountry_ididid

РусияРусия33ГерманияГермания22БългарияБългария11

namenameidid

TOWNTOWN

COUNTRYCOUNTRY

Множественост навръзките (n x n)МножественостМножественост нанавръзкитевръзките (n x n)(n x n)

• Връзка много x много• 1 запис от първата таблица съответствана много записи от втората таблица иобратното

• Реализира се чрез междинна таблица

•• ВръзкаВръзка многомного x x многомного•• 1 1 записзапис отот първатапървата таблицатаблица съответствасъответстванана многомного записизаписи отот вторатавтората таблицатаблица ииобратнотообратното

•• РеализираРеализира сесе чрезчрез междиннамеждинна таблицатаблица

ПенкаПенка44ГошоГошоМинкаМинкаПешоПешоnamename

332211idid

PHPPHP33JavaJava22.NET.NET11namenameidid

STUDENTSTUDENTCOURSECOURSE

2211223333332244

1111course_idcourse_idstudent_idstudent_id

STUDENT_COURSESTUDENT_COURSE

E/R E/R диаграмидиаграми

Релационна схемаРелационнаРелационна схемасхема

• Релационна схема на БД наричамесъвкупността от:• схемите на всички таблици• връзките между таблиците

• Релационната схема описваструктурата на БД• не съдържа данни, а само метаданни

• Релационните схеми се изобразяватграфично чрез Entity/Relationship диаграми (E/R Diagrams)

•• РелационнаРелационна схемасхема нана БДБД наричаменаричамесъвкупносттасъвкупността отот::•• схемитесхемите нана всичкивсички таблицитаблици•• връзкитевръзките междумежду таблицитетаблиците

•• РелационнатаРелационната схемасхема описваописваструктуратаструктурата нана БДБД•• нене съдържасъдържа данниданни, , аа самосамо метаданниметаданни

•• РелационнитеРелационните схемисхеми сесе изобразяватизобразяватграфичнографично чрезчрез Entity/Relationship Entity/Relationship диаграмидиаграми ((E/R Diagrams)E/R Diagrams)

E/R диаграми – примерE/R E/R диаграмидиаграми –– примерпримерДиаграмата есъздадена с

Microsoft SQL Server Management

Studio

ДиаграматаДиаграмата еесъздаденасъздадена сс

Microsoft SQL Microsoft SQL Server Management Server Management

StudioStudio

Page 5: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Page 6: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 6

НормализацияНормализацияНормализация

• Нормализацията на релационнатасхема премахва повтарящите се данни

• Денормализираните данни съдържатмного повторения. Например:

•• НормализациятаНормализацията нана релационнатарелационнатасхемасхема премахвапремахва повтарящитеповтарящите сесе данниданни

•• ДенормализиранитеДенормализираните данниданни съдържатсъдържатмногомного повторенияповторения. . НапримерНапример::

павилионпавилион"24 "24 часачаса""

павилионпавилион"24 "24 часачаса""

супермаркетсупермаркет""МентеМенте""

супермаркетсупермаркет""МентеМенте""

магазинмагазин

ШуменскоШуменскопивопиво АДАД

ЗагоркаЗагоркаАДАД

ФурнаФурна""ПушекаПушека""

МлекисМлекисООДООД

произвопроизво--дителдител

0.670.67

0.580.58

0.550.55

0.670.67

ценацена

безалкохбезалкох. . напиткинапитки

безалкохбезалкох. . напиткинапитки

хранителнихранителнистокистоки

хранителнихранителнистокистоки

категориякатегория

ВарнаВарнабирабира"Tuborg""Tuborg"

ВарнаВарна

СофияСофия

СофияСофия

градград

бирабира""ЗагоркаЗагорка""

хлябхляб""ДобруждаДобружда""

киселокиселомлякомляко

продуктпродукт

Нормализация – примерНормализацияНормализация –– примерпример

• Пример за нормализирана схема:•• ПримерПример заза нормализирананормализирана схемасхема::

""ЗагоркаЗагорка" " АДАД""МлексМлекс" " ООДООД

имеиме

4422idid

хранителнихранителнибирабира

имеиме

2244idid

44332211

idid

11225544..383866ракияракия ""ПещерскаПещерска""1144220.550.5533хлябхляб ""ДобруждаДобружда""

11

44

магазмагазинин_id_id

44

22

произвопроизводителдител_id_id

0.670.67

0.670.67

ценацена

44

22

категокатегориярия_id_id

33бирабира "Tuborg""Tuborg"

11

градград_id_id

киселокисело млякомляко

продуктпродукт

METROMETROBillaBillaимеиме

4411idid

ВарнаВарнаСофияСофияимеиме

3311idid

PRODUCTPRODUCT

VENDORVENDOR CATEGORYCATEGORY STORESTORE TOWNTOWN

ОграниченияОграничения((Constraints)Constraints)

Ограничения(Constraints)ОграниченияОграничения(Constraints)(Constraints)

• Ограниченията (constraints) задаватправила, за данните, които не могат дабъдат нарушавани

• Ограничение по първичен ключ (primary key constraint)• Първичният ключ е уникален за всеки запис

• Ограничение по уникален ключ (unique key constraint)• Стойностите в дадена колона (или групаколони) са уникални

•• ОграничениятаОграниченията ((constraints)constraints) задаватзадаватправилаправила, , заза даннитеданните, , коитокоито нене могатмогат дадабъдатбъдат нарушаванинарушавани

•• ОграничениеОграничение попо първиченпървичен ключключ ((primary primary key constraint)key constraint)•• ПървичниятПървичният ключключ ее уникаленуникален заза всекивсеки записзапис

•• ОграничениеОграничение попо уникаленуникален ключключ ((unique key unique key constraint)constraint)•• СтойноститеСтойностите вв даденададена колонаколона ((илиили групагрупаколониколони) ) саса уникалниуникални

Ограничения(Constraints)ОграниченияОграничения(Constraints)(Constraints)

• Ограничение по външен ключ (foreign key constraint)• Стойността в дадена колона е ключ отдруга таблица

• Ограничение по стойност (check constraint)• Стойностите в дадена колонаизпълняват дадено условие

• Например:•(hour>=0) AND (hour<=24)•name = upper(name)

•• ОграничениеОграничение попо външенвъншен ключключ ((foreign foreign key constraint)key constraint)•• СтойносттаСтойността вв даденададена колонаколона ее ключключ ототдругадруга таблицатаблица

•• ОграничениеОграничение попо стойностстойност ((check check constraint)constraint)•• СтойноститеСтойностите вв даденададена колонаколонаизпълняватизпълняват даденодадено условиеусловие

•• НапримерНапример::•• ((hour>=0)hour>=0) ANDAND (hour<=24)(hour<=24)•• name = upper(name)name = upper(name)

ИндексиИндекси

Page 7: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 7

ИндексиИндексиИндекси

• Индексите ускоряват скоростта натърсене на стойност в дадена колонаили група от колони

• Ползват се при големи таблици• Реализират се най-често с B-дърветаили хеш-таблици

• Могат да бъдат външни (извънтаблицата) или вградени

• Добавянето и изтриването отиндексирани таблици е по-бавно

•• ИндекситеИндексите ускоряватускоряват скоросттаскоростта нанатърсенетърсене нана стойностстойност вв даденададена колонаколонаилиили групагрупа отот колониколони

•• ПолзватПолзват сесе припри големиголеми таблицитаблици•• РеализиратРеализират сесе найнай--честочесто сс BB--дърветадърветаилиили хешхеш--таблицитаблици

•• МогатМогат дада бъдатбъдат външнивъншни ((извънизвънтаблицататаблицата) ) илиили вграденивградени

•• ДобавянетоДобавянето ии изтриванетоизтриването ототиндексиранииндексирани таблицитаблици ее попо--бавнобавно

ЕзикътЕзикът SQLSQL

Езикът SQLЕзикътЕзикът SQLSQL

• SQL (Structured Query Language)• Стандартизиран декларативен език

(стандарт) за манипулация на релационнибази от данни

• SQL-92 – поддържан от всички RDBMS• SQL-99 – навлиза все повече

• SQL поддържа:• Създаване, промяна, изтриване на таблиции други обекти в БД

• Търсене, извличане, добавяне, промяна иизтриване на данни

•• SQL (Structured Query Language)SQL (Structured Query Language)•• СтандартизиранСтандартизиран декларативендекларативен езикезик

((стандартстандарт) ) заза манипулацияманипулация нана релационнирелационнибазибази отот данниданни

•• SQLSQL--92 92 –– поддържанподдържан отот всичкивсички RDBMSRDBMS•• SQLSQL--99 99 –– навлизанавлиза всевсе повечеповече

•• SQL SQL поддържаподдържа::•• СъздаванеСъздаване, , промянапромяна, , изтриванеизтриване нана таблицитаблициии другидруги обектиобекти вв БДБД

•• ТърсенеТърсене, , извличанеизвличане, , добавянедобавяне, , промянапромяна ииизтриванеизтриване нана данниданни

Езикът SQLЕзикътЕзикът SQLSQL

• SQL се състои от:• DDL – Data Definition Language

• Команди CREATE, ALTER, DROP• DML – Data Manipulation Language

• Команди SELECT, INSERT, UPDATE, DELETE

• Пример за SQL SELECT заявка:

•• SQL SQL сесе състоисъстои отот::•• DDL DDL –– Data Definition LanguageData Definition Language

•• КомандиКоманди CREATE, ALTER, DROPCREATE, ALTER, DROP

•• DML DML –– Data Manipulation LanguageData Manipulation Language•• КомандиКоманди SELECT, INSERT, UPDATE, SELECT, INSERT, UPDATE,

DELETEDELETE

•• ПримерПример заза SQL SELECT SQL SELECT заявказаявка::

SELECT NameSELECT NameFROM TownFROM TownWHERE TownId = 18WHERE TownId = 18

СъхранениСъхраненипроцедурипроцедури

Съхранение процедуриСъхранениеСъхранение процедурипроцедури

• Процедури на ниво база (запазенипроцедури, stored procedures)• Програмен код, който се изпълнява в самиясървър за бази данни

• Работят много по-бързо от външен код• Данните са локално достъпни• Могат да приемат параметри• Могат да връщат резултат

• единична стойност• съвкупност от записи (record set)

•• ПроцедуриПроцедури нана нивониво базабаза ((запазенизапазенипроцедурипроцедури, , stored procedures)stored procedures)•• ПрограменПрограмен кодкод, , койтокойто сесе изпълняваизпълнява вв самиясамиясървърсървър заза базибази данниданни

•• РаботятРаботят многомного попо--бързобързо отот външенвъншен кодкод•• ДаннитеДанните саса локалнолокално достъпнидостъпни•• МогатМогат дада приематприемат параметрипараметри•• МогатМогат дада връщатвръщат резултатрезултат

•• единичнаединична стойностстойност•• съвкупностсъвкупност отот записизаписи ((record set)record set)

Page 8: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 8

Съхранени процедуриСъхранениСъхранени процедурипроцедури

• Процедури на ниво база се пишат наезик, разширение на SQL• T-SQL – в Microsoft SQL Server• PL/SQL – в Oracle

• Пример за процедура на T-SQL:

•• ПроцедуриПроцедури нана нивониво базабаза сесе пишатпишат нанаезикезик, , разширениеразширение нана SQLSQL•• TT--SQL SQL –– вв Microsoft SQLMicrosoft SQL ServerServer•• PL/SQL PL/SQL –– вв OracleOracle

•• ПримерПример заза процедурапроцедура нана TT--SQLSQL::

CREATE PROC sp_CREATE PROC sp_FFindindEmployeeEmployee@empnum int AS@empnum int AS

SELECT * FROM SELECT * FROM EEmployeesmployeesWHERE emp_id = @empnumWHERE emp_id = @empnum

ИзгледиИзгледи ((Views)Views)

Изгледи (views)ИзгледиИзгледи ((views)views)

• Изгледите представляват именуваниSQL SELECT заявки, които се използваткато таблици

• Улесняват писането на сложни SQL заявки

• Прилагат се за фина настройка насигурността:• На даден потребител не се дават праванад никоя таблица

• Дават му се права само над някоиизгледи (подмножество от данните)

•• ИзгледитеИзгледите представляватпредставляват именуваниименуваниSQL SELECT SQL SELECT заявкизаявки, , коитокоито сесе използватизползваткатокато таблицитаблици

•• УлесняватУлесняват писанетописането нана сложнисложни SQL SQL заявкизаявки

•• ПрилагатПрилагат сесе заза финафина настройканастройка нанасигурносттасигурността::•• НаНа дадендаден потребителпотребител нене сесе даватдават праваправанаднад никояникоя таблицатаблица

•• ДаватДават муму сесе праваправа самосамо наднад някоинякоиизгледиизгледи ((подмножествоподмножество отот даннитеданните))

Изгледи (views) –примерИзгледиИзгледи ((views) views) ––примерпример

44332211

idid

44ХардСофтХардСофт АДАД22BulkSoft Inc.BulkSoft Inc.

33

11

towntown_id_id

СпутникСпутник АДАД

МентеМенте ООДООД

companycompany

22МоскваМосква33ПловдивПловдив

New YorkNew YorkСофияСофия

towntown

44

2211

idid

11

3311

countcountry_idry_id

T_COMPANYT_COMPANY T_TOWNT_TOWN

332211idid

САЩСАЩРусияРусияБългарияБългарияcountrycountry

T_COUNTRYT_COUNTRY

CREATE VIEW V_BG_COMPANY ASCREATE VIEW V_BG_COMPANY ASSELECT SELECT T_COMPANY.id AS id,T_COMPANY.id AS id,T_COMPANY.company AS companyT_COMPANY.company AS company

FROM T_COMPANY INNER JOIN FROM T_COMPANY INNER JOIN (T_TOWN INNER JOIN T_COUNTRY ON(T_TOWN INNER JOIN T_COUNTRY ONT_TOWN.country_id=T_COUNTRY.id)T_TOWN.country_id=T_COUNTRY.id)ON T_COMPANY.town_id=T_TOWN.idON T_COMPANY.town_id=T_TOWN.id

WHEREWHERET_COUNTRY.country="T_COUNTRY.country="БългарияБългария";";

3311idid

ХардСофтХардСофт АДАДМентеМенте ООДООД

companycompanyV_BG_COMPANYV_BG_COMPANY

ТригериТригери ((Triggers)Triggers)

Тригери (triggers)ТригериТригери (triggers)(triggers)

• Тригерите (triggers) са процедури на нивобаза, които се активират при някаквоусловие, например:• при добавяне на запис• при промяна на запис• при изтриване на запис

• Тригерите могат да извършватдопълнителна обработка на данните• промяна на данните при добавяне• поддръжка на логове и история

•• ТригеритеТригерите ((triggers)triggers) саса процедурипроцедури нана нивонивобазабаза, , коитокоито сесе активиратактивират припри някаквонякаквоусловиеусловие, , напримернапример::•• припри добавянедобавяне нана записзапис•• припри промянапромяна нана записзапис•• припри изтриванеизтриване нана записзапис

•• ТригеритеТригерите могатмогат дада извършватизвършватдопълнителнадопълнителна обработкаобработка нана даннитеданните•• промянапромяна нана даннитеданните припри добавянедобавяне•• поддръжкаподдръжка нана логовелогове ии историяистория

Page 9: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 9

Тригери – примерТригериТригери –– примерпример

• Имаме таблица с имена на фирми:

• Тригер, който при добавяне на новафирма добавя "Ltd." към името й:

•• ИмамеИмаме таблицатаблица сс именаимена нана фирмифирми::

•• ТригерТригер, , койтокойто припри добавянедобавяне нана новановафирмафирма добавядобавя "Ltd." "Ltd." къмкъм иметоимето йй::

CREATE TABLE COMPANY(CREATE TABLE COMPANY(id int NOT NULL,id int NOT NULL,name varchar(50) NOT NULL)name varchar(50) NOT NULL)

CREATE TRIGGER trg_CompanyInsertCREATE TRIGGER trg_CompanyInsertON CompanyON CompanyFOR INSERTFOR INSERT

AS AS UPDATE Company SET Name = Name + ' Ltd.'UPDATE Company SET Name = Name + ' Ltd.'WHERE Id = (SELECT Id FROM Inserted)WHERE Id = (SELECT Id FROM Inserted)

ТранзакцииТранзакцииИнтегритетИнтегритет нана даннитеданните ии управлениеуправление

нана конкурентнияконкурентния достъпдостъп

ТранзакцииТранзакцииТранзакции

• Транзакциите са последователности отдействия (заявки към базата данни), коитосе изпълняват атомарно:• или се изпълняват всичките действиязаедно (като едно цяло)

• или никое от действията не се изпълняваизобщо

• Пример:• Банково прехвърляне на пари от еднасметка в друга (теглене + внасяне)

• Ако тегленето или внасянето на паритепропадне, пропада цялата операция

•• ТранзакциитеТранзакциите саса последователностипоследователности ототдействиядействия ((заявкизаявки къмкъм базатабазата данниданни), ), коитокоитосесе изпълняватизпълняват атомарноатомарно::•• илиили сесе изпълняватизпълняват всичкитевсичките действиядействиязаеднозаедно ((катокато едноедно цялоцяло))

•• илиили никоеникое отот действиятадействията нене сесе изпълняваизпълняваизобщоизобщо

•• ПримерПример::•• БанковоБанково прехвърлянепрехвърляне нана парипари отот еднаеднасметкасметка вв другадруга ((тегленетеглене + + внасяневнасяне))

•• АкоАко тегленетотегленето илиили внасянетовнасянето нана паритепаритепропаднепропадне, , пропадапропада цялатацялата операцияоперация

Отговорности натранзакциитеОтговорностиОтговорности нанатранзакциитетранзакциите

• Транзакциите гарантиратконсистентността и възстановимосттана базата данни

• Промяната не се счита за окончателнадокато не се извърши COMMIT

• Командата ROLLBACK анулиратранзакцията и връща обратнопромените

• Всички операции се извършват катоедно цяло, включително операциитевърху множество от записи

•• ТранзакциитеТранзакциите гарантиратгарантиратконсистентносттаконсистентността ии възстановимосттавъзстановимосттанана базатабазата данниданни

•• ПромянатаПромяната нене сесе считасчита заза окончателнаокончателнадокатодокато нене сесе извършиизвърши COMMITCOMMIT

•• КомандатаКомандата ROLLBACK ROLLBACK анулираанулиратранзакциятатранзакцията ии връщавръща обратнообратнопроменитепромените

•• ВсичкиВсички операцииоперации сесе извършватизвършват катокатоедноедно цялоцяло, , включителновключително операциитеоперациитевърхувърху множествомножество отот записизаписи

Свойства натранзакциите (ACID)СвойстваСвойства нанатранзакциитетранзакциите (ACID)(ACID)

• Atomicity – атомарност• Изпълнява се всичко или нищо

• Consistency – цялост на данните• Базата винаги остава консистентна с логическикоректни данни

• Isolation – изолация на данните• Отделните транзакции са изолирани една отдруга в зависимост от избраното ниво

• Durability – стабилност на данните• Ако една транзакция бъде потвърдена, тя неможе да бъде изгубена

•• AAtomicity tomicity –– атомарностатомарност•• ИзпълняваИзпълнява сесе всичковсичко илиили нищонищо

•• CConsistencyonsistency –– цялостцялост нана даннитеданните•• БазатаБазата винагивинаги оставаостава консистентнаконсистентна сс логическилогическикоректникоректни данниданни

•• IIsolationsolation –– изолацияизолация нана даннитеданните•• ОтделнитеОтделните транзакциитранзакции саса изолираниизолирани еднаедна ототдругадруга вв зависимостзависимост отот избранотоизбраното нивониво

•• DDurabilityurability –– стабилностстабилност нана даннитеданните•• АкоАко еднаедна транзакциятранзакция бъдебъде потвърденапотвърдена, , тятя ненеможеможе дада бъдебъде изгубенаизгубена

Транзакции – примерТранзакцииТранзакции –– примерпример

• Имаме таблица с банкови сметки:

• Използваме транзакция при трансфер напари от сметка на сметка:

•• ИмамеИмаме таблицатаблица сс банковибанкови сметкисметки::

•• ИзползвамеИзползваме транзакциятранзакция припри трансфертрансфер нанапарипари отот сметкасметка нана сметкасметка::

CREATE TABLE CREATE TABLE AccountAccount((id int NOT NULL,id int NOT NULL,balancebalance decimaldecimal NOT NULL)NOT NULL)

CREATE PROCEDURE sp_Transfer_Money(CREATE PROCEDURE sp_Transfer_Money(@from_acc int,@from_acc int,@to_acc int,@to_acc int,@ammount decimal@ammount decimal

) AS) AS

(примерът продължава)((примерътпримерът продължавапродължава))

Page 10: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 10

Транзакции – примерТранзакцииТранзакции –– примерпример

BEGIN TRANSACTIONBEGIN TRANSACTIONUPDATE UPDATE AccountAccount set balance = balance set balance = balance -- @ammount@ammountWHERE id = @from_accWHERE id = @from_accIF @@rowcount <> 1 BEGINIF @@rowcount <> 1 BEGIN

ROLLBACK TRANSACTIONROLLBACK TRANSACTIONRAISERROR ('Invalid source account!', 16, 1)RAISERROR ('Invalid source account!', 16, 1)RETURNRETURN

ENDENDUPDATE UPDATE AccountAccount set balance = balance + @ammountset balance = balance + @ammountWHERE id = @to_accWHERE id = @to_accIF @@rowcount <> 1 BEGINIF @@rowcount <> 1 BEGIN

ROLLBACK TRANSACTIONROLLBACK TRANSACTIONRAISERROR ('Invalid destination account!', 16, RAISERROR ('Invalid destination account!', 16,

1)1)RETURNRETURN

END END COMMIT TRANSACTIONCOMMIT TRANSACTION

Транзакции и изолацияТранзакцииТранзакции ии изолацияизолация

• Транзакциите могат да дефиниратнива на изолация (isolation levels)

• По-силната изолация осигурява по-добра консистентност, но работи по-бавно и заключва данните за по-дълго

•• ТранзакциитеТранзакциите могатмогат дада дефиниратдефиниратниванива нана изолацияизолация (isolation levels)(isolation levels)

•• ПоПо--силнатасилната изолацияизолация осигуряваосигурява попо--добрадобра консистентностконсистентност, , ноно работиработи попо--бавнобавно ии заключвазаключва даннитеданните заза попо--дългодълго

даданенененеRepeatable readRepeatable readдадададаненеRead committedRead committed

нене

дада

четенечетене нананепотвърнепотвър--денидени данниданни

нене

дада

неповтонеповто--ряемостряемост

припри четенечетене

нене

дада

фантомнифантомнизаписизаписи

SerializableSerializable

Read uncommittedRead uncommitted

нивониво нанаизолацияизолация

Употреба на транзакцииУпотребаУпотреба нана транзакциитранзакции

• Кога се ползват транзакции?• Винаги, когато за една бизнесоперация се осъществява достъп доповече от една таблица

• Пример:• На касата в склад на едро: извършвамепокупка на съвкупност от продукти

• Или купуваме всички продукти и плащамеили нищо не купуваме и не даваме пари

• Ако някоя операция не успее, анулираме транзакцията

•• КогаКога сесе ползватползват транзакциитранзакции??•• ВинагиВинаги, , когатокогато заза еднаедна бизнесбизнесоперацияоперация сесе осъществяваосъществява достъпдостъп додоповечеповече отот еднаедна таблицатаблица

•• ПримерПример::•• НаНа касатакасата вв складсклад нана едроедро: : извършвамеизвършвамепокупкапокупка нана съвкупностсъвкупност отот продуктипродукти

•• ИлиИли купувамекупуваме всичкивсички продуктипродукти ии плащамеплащамеилиили нищонищо нене купувамекупуваме ии нене давамедаваме парипари

•• АкоАко някоянякоя операцияоперация нене успееуспее, , анулирамеанулираме транзакциятатранзакцията

Introduction to Introduction to SQLSQL LanguageLanguage

(with Microsoft SQL Server 2005)(with Microsoft SQL Server 2005)(with Microsoft SQL Server 2005)

Relational DatabasesRelational DatabasesRelational Databases

• A relational database:• Can be accessed and modified by

executing Structured Query Language (SQL) statements• Uses a set of operations to extract

subset of the data• Contains a collection of tables

• Relationships are defined between the tables

•• A relational database:A relational database:•• Can be accessed and modified by Can be accessed and modified by

executing executing SStructured tructured QQuery uery LLanguage (SQL) statementsanguage (SQL) statements•• Uses a set of operations to extract Uses a set of operations to extract

subset of the datasubset of the data

•• Contains a collection of tablesContains a collection of tables•• Relationships are defined between Relationships are defined between

the tablesthe tables

Communicating with a DBCommunicating with a DBCommunicating with a DB

SQL statement isSQL statement issent to the databasesent to the database

SQL statement isSQL statement isenteredentered

SELECT Name SELECT Name FROM DepartmentFROM Department

SalesSalesEngineeringEngineering

MarketingMarketing……

NameName

The result is returnedThe result is returned(usually as a table)(usually as a table)

Database Database

Page 11: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 11

SQL and TSQL and T--SQLSQLIntroductionIntroduction

What is SQL?What is SQL?What is SQL?

• Structured Query Language (SQL)• Declarative language for query and

manipulation of relational data• SQL consists of:

• Data Manipulation Language (DML)• SELECT, INSERT, UPDATE, DELETE

• Data Definition Language (DDL)• CREATE, DROP, ALTER• GRANT, REVOKE

•• Structured Query Language (SQL)Structured Query Language (SQL)•• Declarative language for query and Declarative language for query and

manipulation of relational datamanipulation of relational data

•• SQL consists of:SQL consists of:•• Data Manipulation Language (DML)Data Manipulation Language (DML)

•• SELECTSELECT, , INSERTINSERT, , UPDATEUPDATE, , DELETEDELETE

•• Data Definition Language (DDL)Data Definition Language (DDL)•• CREATECREATE, , DROPDROP, , ALTERALTER

•• GRANTGRANT, , REVOKEREVOKE

SQL – ExamplesSQL SQL –– ExamplesExamples

SELECT FirstName, LastName, JobTitleSELECT FirstName, LastName, JobTitleFROM EmployeeFROM Employee

INSERT INTO Project(Name, StartDate)INSERT INTO Project(Name, StartDate)VALUES('Introduction to SQL Course', '1/1/2006')VALUES('Introduction to SQL Course', '1/1/2006')

SELECT *SELECT * FROM ProjectFROM Project WHERE StartDate = '1/1/2006'WHERE StartDate = '1/1/2006'

UPDATE ProjectUPDATE ProjectSET EndDate = '8/31/2006'SET EndDate = '8/31/2006'WHERE StartDate = '1/1/2006'WHERE StartDate = '1/1/2006'

DELETE FROMDELETE FROM ProjectProjectWHERE StartDate = '1/1/2006'WHERE StartDate = '1/1/2006'

What is T-SQL?What is TWhat is T--SQL?SQL?

• T-SQL is an extension to the standard SQL language• The standard language in MS SQL Server

database• Supports if statements, loops, exceptions

• Like the high-level procedural programming languages

• Used for writing procedures, functions, triggers, etc.

•• TT--SQL is an extension to the standard SQL is an extension to the standard SQL languageSQL language•• The standard language in MS SQL Server The standard language in MS SQL Server

databasedatabase•• Supports if statements, loops, exceptionsSupports if statements, loops, exceptions

•• Like the highLike the high--level procedural level procedural programming languagesprogramming languages

•• Used for writing procedures, functions, Used for writing procedures, functions, triggers, etc.triggers, etc.

T-SQL – ExampleTT--SQL SQL –– ExampleExample

CREATE PROCEDURE EmpDump ASCREATE PROCEDURE EmpDump ASDECLARE @EmpIDECLARE @EmpIdd INT, @EmpFName INT, @EmpFName NNVARCHAR(100), VARCHAR(100), @EmpLName @EmpLName NNVARCHAR(100)VARCHAR(100)

DECLARE emps CURSOR FORDECLARE emps CURSOR FORSELECT EmployeeID, FirstName, LastName FROM SELECT EmployeeID, FirstName, LastName FROM EEmployeemployee

OPEN empsOPEN empsFETCH NEXT FROM emps INTO @EmpId, @EmpFName, @EmpLNameFETCH NEXT FROM emps INTO @EmpId, @EmpFName, @EmpLNameWHILE (@@FETCH_STATUS = 0) BEGINWHILE (@@FETCH_STATUS = 0) BEGINPRINT CAST(@EmpId AS VARCHAR(10)) + PRINT CAST(@EmpId AS VARCHAR(10)) + '' ''+ @EmpFName ++ @EmpFName + ' '' ' + @EmpLName+ @EmpLName

FETCH NEXT FROM emps INTO @EmpId, @EmpFName, @EmpLNameFETCH NEXT FROM emps INTO @EmpId, @EmpFName, @EmpLNameENDENDCLOSE empsCLOSE empsDEALLOCATE empsDEALLOCATE emps

GOGO

The NASD The NASD Database SchemaDatabase Schema

E/R DiagramE/R Diagram

Page 12: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 12

The NASD Database Schema in SQL ServerThe NASD Database The NASD Database Schema in SQL ServerSchema in SQL Server

EmployeeEmployee

EmployeeIDEmployeeID

FirstNameFirstName

LastNameLastName

MiddleNameMiddleName

JobTitleJobTitle

DepartmentIDDepartmentID

ManagerIDManagerID

HireDateHireDate

SalarySalary

AddressIDAddressID

DepartmentDepartment

DepartmentIDDepartmentID

NameName

ManagerIDManagerID

AddressAddress

AddressIDAddressID

AddressTextAddressText

TownIDTownID

EmployeeProjectEmployeeProject

EmployeeIDEmployeeID

ProjectIDProjectID

ProjectProject

ProjectIDProjectID

NameName

DescriptionDescription

StartDateStartDate

EndDateEndDate

TownTown

TownIDTownID

NameName

SQL LanguageSQL LanguageIntroducing Introducing SELECTSELECT StatementStatement

Capabilities of SQL SELECTCapabilities of SQL Capabilities of SQL SELECTSELECT

Table 1Table 1 Table 2Table 2

Table 1Table 1 Table 1Table 1

SelectionSelectionTake some of the rowsTake some of the rows

ProjectionProjectionTake some of the columnsTake some of the columns

JoinJoinCombine Combine tables bytables bysome some columncolumn

Basic SELECT StatementBasic Basic SELECTSELECT StatementStatement

• SELECT identifies what columns• FROM identifies which table•• SELECT identifies what columnsSELECT identifies what columns•• FROM identifies which tableFROM identifies which table

SELECT *|{[DISTINCT] column|expression SELECT *|{[DISTINCT] column|expression [alias],...}[alias],...}FROMFROM tabletable

SELECT ExampleSELECTSELECT ExampleExample

• Selecting all columns from departments

• Selecting specific columns

•• Selecting all columns from departmentsSelecting all columns from departments

•• Selecting specific columnsSelecting specific columns

SELECT * FROM DepartmentSELECT * FROM Department

SELECTSELECTDepartmentID,DepartmentID,NameName

FROM DepartmentFROM Department

44Tool designTool design22

………………273273SalesSales33

1212EngineeringEngineering11ManagerIDManagerIDNameNameDepartmentIDDepartmentID

SalesSales33Tool designTool design22EngineeringEngineering11NameNameDepartmentIDDepartmentID

Arithmetic OperationsArithmetic OperationsArithmetic Operations

• Arithmetic operators are available:• +, -, *, /

• Example:

•• Arithmetic operators are available:Arithmetic operators are available:•• +, +, --, *, /, *, /

•• Example:Example:

SELECT LastName, SELECT LastName, SalarySalary, , SalarySalary + 300+ 300FROM EmployeeFROM Employee

43300,0043300,00

13500,0013500,00

12500,0012500,00

SalarySalary

43600,0043600,00TamburelloTamburello

13800,0013800,00BrownBrown

12800,0012800,00GilbertGilbert

(No column name)(No column name)LastNameLastName

Page 13: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 13

The NULL ValueThe The NULLNULL ValueValue

• A NULL is a value that is unavailable, unassigned, unknown, or inapplicable• Not the same as zero or a blank space

• Arithmetic expressions containing a NULLvalue are evaluated to NULL

•• A A NULLNULL is a value that is unavailable, is a value that is unavailable, unassigned, unknown, or inapplicableunassigned, unknown, or inapplicable•• Not the same as zero or a blank spaceNot the same as zero or a blank space

•• Arithmetic expressions containing a Arithmetic expressions containing a NULLNULLvalue are evaluated to value are evaluated to NULLNULL

SELECT LastName, ManagerID FROM EmployeeSELECT LastName, ManagerID FROM Employee

11300300NULLNULLManagerIDManagerID

WangWangDuffyDuffySSááncheznchezLastNameLastName

NULL is displayed as empty space or as NULLNULLNULL is displayed as is displayed as

empty space or as empty space or as NULLNULL

Column AliasColumn AliasColumn Alias

• Renames a column heading• Useful with calculations• Immediately follows the column name

• There is an optional AS keyword• Double quotation marks if contains spaces

•• Renames a column headingRenames a column heading•• Useful with calculationsUseful with calculations•• Immediately follows the column nameImmediately follows the column name

•• There is an optional There is an optional ASAS keywordkeyword•• Double quotation marks if contains spacesDouble quotation marks if contains spaces

SELECT FirstName, LastName, Salary,SELECT FirstName, LastName, Salary,Salary*0.2 Salary*0.2 ASAS Bonus FROM EmployeeBonus FROM Employee

BrownBrownGilbertGilbertLastNameLastName

13500,0013500,0012500,0012500,00SalarySalary

KevinKevinGuyGuyFirstNameFirstName

2700.000002700.000002500.000002500.00000BonusBonus

Concatenation OperatorConcatenation OperatorConcatenation Operator

• Concatenates columns or character strings to other columns

• Is represented by plus sign “+”• Creates a resultant column that is a

character expression

•• Concatenates columns or character strings Concatenates columns or character strings to other columns to other columns

•• Is represented by plus sign Is represented by plus sign ““++””

•• Creates a resultant column that is a Creates a resultant column that is a character expressioncharacter expressionSELECT FirstName SELECT FirstName ++ ' ' ' ' ++ LastName AS [Full Name],LastName AS [Full Name],EmployeeID as [No.] FROM EmployeeEmployeeID as [No.] FROM Employee

Roberto Roberto TamburelloTamburelloKevin BrownKevin BrownGuy GilbertGuy GilbertFullFull NameName

332211No.No.

Literal Character StringsLiteral Character StringsLiteral Character Strings

• A literal is a character, a number, or a date included in the SELECT list

• Date and character literal values must be enclosed within single quotation marks

• Each character string is output once for each row returned

•• A literal is a character, a number, or a date A literal is a character, a number, or a date included in the included in the SELECTSELECT listlist

•• Date and character literal values must be Date and character literal values must be enclosed within single quotation marksenclosed within single quotation marks

•• Each character string is output once for each Each character string is output once for each row returnedrow returnedSELECT FirstName + '''s last name is ' +SELECT FirstName + '''s last name is ' +LastName AS [Our Employees] FROM EmployeeLastName AS [Our Employees] FROM Employee

Roberto's last name is TamburelloRoberto's last name is TamburelloKevin's last name is BrownKevin's last name is BrownGuy's last name is GilbertGuy's last name is GilbertOur Our EmployeesEmployees

Removing Duplicate RowsRemoving Duplicate RowsRemoving Duplicate Rows

• The default display of queries is all rows, including duplicate rows

• Eliminate duplicate rows by using the DISTINCT keyword in the SELECT clause

•• The default display of queries is all rows, The default display of queries is all rows, including duplicate rowsincluding duplicate rows

•• Eliminate duplicate rows by using the Eliminate duplicate rows by using the DISTINCTDISTINCT keyword in the keyword in the SELECTSELECT clauseclause

SELECT DepartmentIDSELECT DepartmentIDFROM FROM EmployeeEmployee 22

......

7777DepartmentIDDepartmentID

SELECTSELECTDISTINCTDISTINCT DepartmentIDDepartmentID

FROM FROM EmployeeEmployee......2277DepartmentIDDepartmentID

Limiting the Rows SelectedLimiting the Rows SelectedLimiting the Rows Selected

• Restrict the rows returned by using the WHERE clause:

• More examples:

•• Restrict the rows returned by using the Restrict the rows returned by using the WHEREWHERE clause:clause:

•• More examples:More examples:

SELECT LastName, SELECT LastName, DepartmentID FROM DepartmentID FROM EmployeeEmployee WHEREWHEREDepartmentID = 1DepartmentID = 1

SELECT FirstName, LastName, DepartmentID FROM SELECT FirstName, LastName, DepartmentID FROM EmployeeEmployee WHEREWHERE LastName = LastName = ''Sullivan'Sullivan'

11GoldbergGoldberg............

EricksonEricksonTamburelloTamburelloLastNameLastName

1111DepartmentIDDepartmentID

SELECT LastName, SELECT LastName, SalarySalary FROM FROM EmployeeEmployeeWHEREWHERE SalarySalary <= <= 2000020000

Page 14: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 14

• Using BETWEEN operator to specify a range:

• Using IN / NOT IN operators to specify a set of values:

• Using LIKE operator to specify a pattern:

•• Using Using BETWEENBETWEEN operator to specify a range:operator to specify a range:

•• Using Using ININ / / NOT INNOT IN operators to specify a operators to specify a set of values:set of values:

•• Using Using LIKELIKE operator to specify a pattern:operator to specify a pattern:

Other Comparison ConditionsOther Comparison Other Comparison ConditionsConditions

SELECT LastName, SELECT LastName, SalarySalary FROM FROM EmployeeEmployeeWHERE WHERE SalarySalary BETWEENBETWEEN 2000020000 ANDAND 2200022000

SELECT FirstName, LastName, ManagerID FROM SELECT FirstName, LastName, ManagerID FROM EmployeeEmployee WHERE ManagerID WHERE ManagerID ININ (1(10909, , 3, 163, 16))

SELECT FirstName FROM SELECT FirstName FROM EmployeeEmployeeWHERE FirstName WHERE FirstName LIKELIKE 'S%''S%'

• Checking for NULL value:

• Note: COLUMN=NULL is always false!• Using OR and AND operators:

•• Checking for Checking for NULLNULL value:value:

•• Note: Note: COLUMN=NULLCOLUMN=NULL is always false!is always false!•• Using Using OROR and and ANDAND operators:operators:

Other Comparison Conditions (2)Other Comparison Other Comparison Conditions (2)Conditions (2)

SELECT LastName FROM SELECT LastName FROM EmployeeEmployeeWHERE ManagerID WHERE ManagerID IS NULLIS NULL

SELECT FirstName, LastName FROM EmployeeSELECT FirstName, LastName FROM EmployeeWHERE Salary >= 20000 WHERE Salary >= 20000 ANDAND LastName LIKE 'C%'LastName LIKE 'C%'

SELECT LastName FROM EmployeeSELECT LastName FROM EmployeeWHERE ManagerID IS NOT NULLWHERE ManagerID IS NOT NULL

OROR LastName LIKE '%so_'LastName LIKE '%so_'

Sorting with ORDER BYSorting with Sorting with ORDER BYORDER BY

• Sort rows with the ORDER BY clause•ASC: ascending order, default•DESC: descending order

•• Sort rows with the Sort rows with the ORDER BYORDER BY clauseclause•• ASCASC: ascending order, default: ascending order, default•• DESCDESC: descending order: descending order

SELECT LastName, SELECT LastName, HireDate FROM HireDate FROM EmployeeEmployeeORDER BYORDER BY HireDateHireDate

TamburelloTamburelloBrownBrownGilbertGilbertLastNameLastName

19991999--1212--121219991999--0202--262619981998--0707--3131HireDateHireDate

SELECT LastName, SELECT LastName, HireDate FROM Employee HireDate FROM Employee ORDER BYORDER BY HireDate HireDate DESCDESC

AbbasAbbasTsofliasTsofliasValdezValdezLastNameLastName

20052005--0404--151520052005--0707--010120052005--0707--0101HireDateHireDate

SQL LanguageSQL LanguageSelecting Data From Multiple TablesSelecting Data From Multiple Tables

Data from Multiple TablesData from Multiple TablesData from Multiple Tables

• Sometimes you need data from more than one table:

•• Sometimes you need data from more Sometimes you need data from more than one table:than one table:

33AbbasAbbasGalvinGalvin

DuffyDuffyLastNameLastName

22

11DepartmentIDDepartmentID

332211DepartmentIDDepartmentID

SalesSalesTool designTool designEngineeringEngineeringNameName

AbbasAbbasGalvinGalvinDuffyDuffyLastNameLastName

SalesSalesTool designTool designEngineeringEngineeringDepartmentNameDepartmentName

Cartesian ProductCartesian ProductCartesian Product

• This will produce Cartesian product:

• The result:

•• This will produce Cartesian product:This will produce Cartesian product:

•• The result:The result:

SELECT LastName, Name AS DepartmentNameSELECT LastName, Name AS DepartmentNameFROM Employee, DepartmentFROM Employee, Department

Document ControlDocument ControlSullivanSullivanEngineeringEngineeringDuffyDuffyEngineeringEngineeringWangWang

....

WangWangDuffyDuffyLastNameLastName

....

Document ControlDocument ControlDocument ControlDocument ControlDepartmentDepartmentNameName

Page 15: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 15

Types of JoinsTypes of JoinsTypes of Joins

• Inner joins• Left outer join• Right outer• Full outer join

•• Inner joinsInner joins•• Left outer joinLeft outer join•• Right outerRight outer•• Full outer joinFull outer join

INNER JOIN with ON ClauseINNER JOININNER JOIN with with ONON ClauseClause

• To specify arbitrary conditions or specify columns to join, the ON clause is used• Such JOIN is called also INNER JOIN

•• To specify arbitrary conditions or specify To specify arbitrary conditions or specify columns to join, the columns to join, the ONON clause is usedclause is used•• Such Such JOINJOIN is called also is called also INNER JOININNER JOIN

SELECT e.EmployeeID, e.LastName, e.DepartmentID, SELECT e.EmployeeID, e.LastName, e.DepartmentID, d.DepartmentID, d.Name AS DepartmentNamed.DepartmentID, d.Name AS DepartmentName

FROM FROM EEmployee e mployee e INNER JOININNER JOIN DDepartment d epartment d

ONON e.DepartmentID = d.DepartmentIDe.DepartmentID = d.DepartmentID

114477

DepartDepartmentIDmentID

114477

DepartDepartmentIDmentID

TamburelloTamburelloBrownBrownGilbertGilbert

LastNameLastName

EngineeringEngineeringMarketingMarketingProductionProduction

DepartmentNameDepartmentName

332211

EmployeeIDEmployeeID

EquijoinsEquijoinsEquijoins

• Inner joins with join conditions pushed down to the WHERE clause

•• Inner joins with join conditions pushed Inner joins with join conditions pushed down to the down to the WHEREWHERE clauseclause

SELECT e.EmployeeID, e.LastName, e.DepartmentID, SELECT e.EmployeeID, e.LastName, e.DepartmentID, d.DepartmentID, d.Name AS DepartmentNamed.DepartmentID, d.Name AS DepartmentName

FROM FROM EEmployee e, mployee e, DDepartment d epartment d WHEREWHERE e.DepartmentID = d.DepartmentIDe.DepartmentID = d.DepartmentID

114477

DepartDepartmentIDmentID

114477

DepartDepartmentIDmentID

TamburelloTamburelloBrownBrownGilbertGilbert

LastNameLastName

EngineeringEngineeringMarketingMarketingProductionProduction

DepartmentNameDepartmentName

332211

EmployeeIDEmployeeID

INNER vs. OUTER JoinsINNERINNER vs. vs. OUTEROUTER JoinsJoins

• The join of two tables returning only matched rows is an inner join

• A join between two tables that returns the results of the inner join as well as unmatched rows from the left (or right) table is a left (or right) outer join

• A join between two tables that returns the results of an inner join as well as the results of a left and right join is a full outer join

•• The join of two tables returning only The join of two tables returning only matched rows is an matched rows is an inner joininner join

•• A join between two tables that returns A join between two tables that returns the results of the inner join as well as the results of the inner join as well as unmatched rows from the left (or right) unmatched rows from the left (or right) table is a table is a leftleft (or (or rightright) ) outer joinouter join

•• A join between two tables that returns A join between two tables that returns the results of an inner join as well as the the results of an inner join as well as the results of a left and right join is a results of a left and right join is a full full outer joinouter join

INNER JOININNER JOININNER JOIN

SELECT e.LastName EmpLastName,SELECT e.LastName EmpLastName,m.EmployeeID MgrID, m.LastName MgrLastNamem.EmployeeID MgrID, m.LastName MgrLastName

FROM FROM EEmployee e mployee e INNER JOININNER JOIN EEmployee mmployee mONON e.ManagerID = m.EmployeeIDe.ManagerID = m.EmployeeID

HillHill185185FordFordKrebsKrebs2121MaxwellMaxwell

SSááncheznchez109109DuffyDuffy

HillHill185185HigaHiga

TamburelloTamburello33GoldbergGoldberg

......

185185

33MgrIDMgrID

......

HillHill

TamburelloTamburelloMgrLastNameMgrLastName

......

JohnsonJohnson

EricksonEricksonEmpLastNameEmpLastName

LEFT OUTER JOINLEFT OUTER JOINLEFT OUTER JOIN

SELECT e.LastName EmpLastName,SELECT e.LastName EmpLastName,m.EmployeeID MgrID, m.LastName MgrLastNamem.EmployeeID MgrID, m.LastName MgrLastName

FROM FROM EEmployee e mployee e LEFT OUTER JOINLEFT OUTER JOIN EEmployee mmployee mONON e.ManagerID = m.EmployeeIDe.ManagerID = m.EmployeeID

RichinsRichins184184FrumFrumMuMu2525HillHill

Barreto de MattosBarreto de Mattos3030CulbertsonCulbertson

BrownBrown1616OkelberryOkelberryMaxwellMaxwell1414MillerMiller

......

66NULLNULLMgrIDMgrID

......

BradleyBradleyNULLNULLMgrLastNameMgrLastName

......

BenshoofBenshoofSSááncheznchezEmpLastNameEmpLastName

Page 16: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 16

RIGHT OUTER JOINRIGHT OUTER JOINRIGHT OUTER JOIN

SELECT e.LastName EmpLastName,SELECT e.LastName EmpLastName,m.EmployeeID MgrID, m.LastName MgrLastNamem.EmployeeID MgrID, m.LastName MgrLastName

FROM Employee e FROM Employee e RIGHT OUTER JOINRIGHT OUTER JOIN Employee mEmployee mONON e.ManagerID = m.EmployeeIDe.ManagerID = m.EmployeeID

HayHay123123KoenigsbauerKoenigsbauerZabokritskiZabokritski124124NULLNULLDeckerDecker125125NULLNULL

WuWu4141BerglundBerglundMcKayMcKay4040NULLNULL

......

39393838MgrIDMgrID

......

HinesHinesLiuLiuMgrLastNameMgrLastName

......

NULLNULLLertpiriyasuwatLertpiriyasuwatEmpLastNameEmpLastName

FULL OUTER JOINFULL OUTER JOINFULL OUTER JOIN

SELECT e.LastName EmpLastName,SELECT e.LastName EmpLastName,m.EmployeeID MgrID, m.LastName MgrLastNamem.EmployeeID MgrID, m.LastName MgrLastName

FROM employee e FROM employee e FULL OUTER JOINFULL OUTER JOIN employee memployee mONON e.ManagerID = m.EmployeeIDe.ManagerID = m.EmployeeID

GilbertGilbert11NULLNULL………………

HartwigHartwig1717NULLNULL

………………

………………BrownBrown1616GilbertGilbert

33

NULLNULLMgrIDMgrID

TamburelloTamburello

NULLNULLMgrLastNameMgrLastName

CraciumCracium

SanchezSanchezEmpLastNameEmpLastName

Three-Way JoinsThreeThree--Way JoinsWay Joins

• A three-way join is a join of three tables•• A threeA three--way join is a join of three tablesway join is a join of three tablesSELECT e.FirstName, e.LastName,SELECT e.FirstName, e.LastName,

t.Name as Town, a.AddressTextt.Name as Town, a.AddressTextFROM Employee eFROM Employee e

JOIN JOIN Address aAddress aONON e.AddressID = a.AddressIDe.AddressID = a.AddressID

JOINJOIN Town tTown tONON a.TownID = t.TownIDa.TownID = t.TownID

......TamburelloTamburelloBrownBrownGilbertGilbertLastNameLastName

8000 Crane Court8000 Crane CourtRedmondRedmondRobertoRoberto......

EverettEverettMonroeMonroeTownTown

......

2294 West 39th St.2294 West 39th St.7726 Driftwood Drive7726 Driftwood DriveAddressTextAddressText

......

KevinKevinGuyGuyFirstNameFirstName

Additional ConditionsAdditional ConditionsAdditional Conditions

• You can apply additional conditions in the WHERE clause:

•• You can apply additional conditions in the You can apply additional conditions in the WHEREWHERE clause:clause:SELECT e.EmployeeID, e.LastName, e.DepartmentID, SELECT e.EmployeeID, e.LastName, e.DepartmentID,

d.DepartmentID, d.Name AS DepartmentNamed.DepartmentID, d.Name AS DepartmentNameFROM FROM EEmployee e mployee e

INNER JOIN INNER JOIN DDepartment d epartment d ON e.DepartmentID = d.DepartmentIDON e.DepartmentID = d.DepartmentID

WHEREWHERE d.Name = d.Name = ''SalesSales''

333333

DepartDepartmentIDmentID

333333

DepartDepartmentIDmentID

BlytheBlytheWelckerWelckerJiangJiang

LastNameLastName

SalesSalesSalesSalesSalesSales

DepartmentNameDepartmentName

275275273273268268

EmployeeIDEmployeeID

SQL LanguageSQL LanguageNested Nested SELECTSELECT StatementsStatements

Nested SELECT StatementsNested Nested SELECTSELECT StatementsStatements

• SELECT statements can be nested in the where clause

• Note: Always prefer joins to nested SELECT statements (better performance)

•• SELECTSELECT statements can be nested in the statements can be nested in the where clausewhere clause

•• Note: Always prefer joins to nested Note: Always prefer joins to nested SELECTSELECT statements (better performance)statements (better performance)

SELECT FirstName, LastName, SalarySELECT FirstName, LastName, SalaryFROM EmployeeFROM EmployeeWHERE Salary = WHERE Salary =

(SELECT MAX(Salary) FROM Employee)(SELECT MAX(Salary) FROM Employee)

SELECT FirstName, LastName, DepartmentID, SalarySELECT FirstName, LastName, DepartmentID, SalaryFROM EmployeeFROM EmployeeWHERE DepartmentID IN WHERE DepartmentID IN

(SELECT DepartmentID FROM Department(SELECT DepartmentID FROM DepartmentWHERE Name='Sales')WHERE Name='Sales')

Page 17: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 17

Nested SELECT Statements With Table AliasesNested Nested SELECTSELECT Statements Statements With Table AliasesWith Table Aliases

• We can refer tables from the main SELECT in the nested SELECT by aliases

• Example: Get the maximal salary for each department and the name of the employee that gets it

•• We can refer tables from the main We can refer tables from the main SELECTSELECT in the nested in the nested SELECTSELECT by aliasesby aliases

•• Example: Get the maximal salary for Example: Get the maximal salary for each department and the name of the each department and the name of the employee that gets itemployee that gets it

SELECT FirstName, LastName, DepartmentID, SalarySELECT FirstName, LastName, DepartmentID, SalaryFROM FROM Employee eEmployee eWHERE Salary = WHERE Salary =

(SELECT MAX(Salary) FROM Employee (SELECT MAX(Salary) FROM Employee WHERE DepartmentID = WHERE DepartmentID = e.DepartmentIDe.DepartmentID))

ORDER BY DepartmentIDORDER BY DepartmentID

• Using the EXISTS operator in SELECTstatements• Find all employees with managers from

the first department

•• Using the Using the EXISTSEXISTS operator in operator in SELECTSELECTstatementsstatements•• Find all employees with managers from Find all employees with managers from

the first departmentthe first department

Using the EXISTS OperatorUsing the Using the EXISTSEXISTS OperatorOperator

SELECT FirstName, LastName, EmployeeID, ManagerIDSELECT FirstName, LastName, EmployeeID, ManagerIDFROM Employee eFROM Employee eWHERE WHERE EXISTSEXISTS

(SELECT EmployeeID(SELECT EmployeeIDFROM Employee mFROM Employee mWHERE m.EmployeeID = e.ManagerIDWHERE m.EmployeeID = e.ManagerID

AND m.DepartmentID = 1)AND m.DepartmentID = 1)

SQL LanguageSQL LanguageAggregating DataAggregating Data

Group FunctionsGroup FunctionsGroup Functions

• Group functions operate on sets of rows to give one result per group

•• Group functions operate on sets of rows Group functions operate on sets of rows to give one result per groupto give one result per group

43300,0043300,003313500,0013500,0022

25000,0025000,0055......

29800,0029800,00

12500,0012500,00SalarySalary

......

44

11EmployeeIDEmployeeID

125500,00125500,00MAX(Salary)MAX(Salary)

Group Functions in SQLGroup Functions in SQLGroup Functions in SQL

• COUNT(*) – count of the selected rows• SUM(column) – sum of the values in

given column from the selected rows• AVG(column) – average of the values in

given column• MAX(column) – the maximal value in

given column• MIN(column) – the minimal value in

given column

•• COUNT(*)COUNT(*) –– count of the selected rowscount of the selected rows•• SUM(columnSUM(column)) –– sum of the values in sum of the values in

given column from the selected rowsgiven column from the selected rows•• AVG(columnAVG(column)) –– average of the values in average of the values in

given columngiven column•• MAX(columnMAX(column)) –– the maximal value in the maximal value in

given columngiven column•• MIN(columnMIN(column)) –– the minimal value in the minimal value in

given columngiven column

AVG() and SUM() FunctionsAVG()AVG() and and SUM()SUM() FunctionsFunctions

• You can use AVG() and SUM() only for numeric data types

•• You can use You can use AVG()AVG() and and SUM()SUM() only for only for numeric data typesnumeric data typesSELECTSELECT

AVG(Salary) [AVG(Salary) [AverageAverage Salary],Salary],MAX(Salary) [Max Salary],MAX(Salary) [Max Salary],MIN(Salary) [Min Salary],MIN(Salary) [Min Salary],SUM(Salary) [SalarySUM(Salary) [Salary SumSum]]

FROM EmployeeFROM EmployeeWHERE JobTitle = 'Sales Representative'WHERE JobTitle = 'Sales Representative'

323400,00323400,00Salary SumSalary Sum

23100,0023100,00Min SalaryMin Salary

23100,0023100,00Max SalaryMax Salary

23100,0023100,00Average SalaryAverage Salary

Page 18: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 18

MIN() and MAX() FunctionsMIN()MIN() and and MAX()MAX() FunctionsFunctions

• You can use MIN() and MAX() for any data type (int, datetime, varchar, ...)

• Displaying the first and last employee's name in alphabetical order:

•• You can use You can use MIN()MIN() and and MAX()MAX() for any for any data type (data type (intint, , datetimedatetime, , varcharvarchar, ...), ...)

•• Displaying the first and last employee's Displaying the first and last employee's name in alphabetical order:name in alphabetical order:

SELECT MIN(HireDate) MinHD, MAX(HireDate) MaxHDSELECT MIN(HireDate) MinHD, MAX(HireDate) MaxHDFROM EmployeeFROM Employee

20032003--0606--0303MaxHDMaxHD

19961996--0707--3131MinHDMinHD

SELECT MIN(LastName), MAX(LastName)SELECT MIN(LastName), MAX(LastName)FROM employeeFROM employee

The COUNT(…) FunctionThe The COUNT(COUNT(……)) FunctionFunction

• COUNT(*) returns the number of rows in the result table

• COUNT(expr) returns the number of rows with non-null values for the expr

•• COUNT(*)COUNT(*) returns the number of rows in returns the number of rows in the result tablethe result table

•• COUNT(COUNT(exprexpr)) returns the number of rows returns the number of rows with with nonnon--nullnull values for the values for the exprexpr

SELECT COUNT(*) Cnt FROM EmployeeSELECT COUNT(*) Cnt FROM EmployeeWHERE DepartmentID = 3WHERE DepartmentID = 3 1818

CntCnt

SELECT COUNT(ManagerID) MgrCount,SELECT COUNT(ManagerID) MgrCount,COUNT(*) AllCountCOUNT(*) AllCount

FROM EmployeeFROM EmployeeWHERE DepartmentID = 16WHERE DepartmentID = 16

22AllCountAllCount

11MgrCountMgrCount

Group Functions in Nested QueriesGroup Functions in Nested Group Functions in Nested QueriesQueries

• For each department display the earliest hired employee

•• For each department display the earliest For each department display the earliest hired employeehired employeeSELECT e.FirstName, e.LastName, e.HireDate, d.NameSELECT e.FirstName, e.LastName, e.HireDate, d.NameFROM Employee e FROM Employee e

JOIN Department dJOIN Department dON e.DepartmentID = d.DepartmentIDON e.DepartmentID = d.DepartmentID

WHERE e.HireDate = WHERE e.HireDate = (SELECT MIN(HireDate) FROM Employee (SELECT MIN(HireDate) FROM Employee WHERE DepartmentID = d.DepartmentID)WHERE DepartmentID = d.DepartmentID)

TamburelloTamburelloBrownBrownGilbertGilbertLastNameLastName

19991999--1212--12 00:00:0012 00:00:0019991999--0202--26 00:00:0026 00:00:0019981998--0707--31 00:00:0031 00:00:00HireDateHireDate

MarketingMarketingKevinKevinRobertoRoberto

GuyGuyFirstNameFirstName

EngineeringEngineering

ProductionProductionNameName

SQL LanguageSQL LanguageGroup Functions and theGroup Functions and theGROUP BYGROUP BY StatementStatement

Creating Groups of DataCreating Groups of DataCreating Groups of Data

250002500022298002980022

1030010300121217800178001212288002880022

250002500022125500125500161660100601001616

1680016800121216800168001212

......

1030010300SalarySalary

......

1212DepartmentIDDepartmentID

EmployeeEmployee

720007200072000

108600108600108600

185600185600185600

............18560018560016161086001086002272000720001212SUM(Salary)SUM(Salary)DepartmentIDDepartmentID

The GROUP BY StatementThe The GROUP BYGROUP BY StatementStatement

• We can divide rows in a table into smaller groups by using the GROUP BY clause

• The syntax:

• The <group_by_expression> is a list of columns

•• We can divide rows in a table into smaller We can divide rows in a table into smaller groups by using the groups by using the GROUP BYGROUP BY clauseclause

•• The syntax:The syntax:

•• The The <<group_by_expression>group_by_expression> is a list of is a list of columnscolumns

SELECT <SELECT <columns>columns>, <, <group_function(column)>group_function(column)>FROM <FROM <table>table>[WHERE <[WHERE <condition>condition>]][GROUP BY[GROUP BY <<group_by_expression>group_by_expression>]][ORDER BY[ORDER BY <<columnscolumns>>

Page 19: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 19

The GROUP BY StatementThe The GROUP BYGROUP BY StatementStatement

• Example of grouping data:

• The GROUP BY column does not have to be in the SELECT list

•• Example of grouping data:Example of grouping data:

•• The The GROUP BYGROUP BY column does not have to column does not have to be in the be in the SELECTSELECT listlist

SELECT DepartmentID, SUM(Salary) as SalariesCostSELECT DepartmentID, SUM(Salary) as SalariesCostFROM EmployeeFROM EmployeeGROUP BY DepartmentIDGROUP BY DepartmentID

............18560018560016161086001086002272000720001212SalariesCostSalariesCostDepartmentIDDepartmentID

Grouping by Several ColumnsGrouping by Several Grouping by Several ColumnsColumns

......

Finance Finance ManagerManager

AccountantAccountantAccountantAccountant

Database Database AdministratorAdministrator

Database Database AdministratorAdministrator

Network Network AdministratorAdministrator

Network Network AdministratorAdministrator

Network Network ManagerManager

JobTitleJobTitle

26400264001010

43300433001010

38500385001111

38500385001111

26400264001010

32500325001111

32500325001111

......

3970039700

SalarySalary

......

1111

DepartDepartmentIDmentID

397003970039700

770007700077000

528005280052800

..................

4330043300Finance Finance ManagerManager1010

5280052800AccountantAccountant1010

7700077000Database Database AdministratorAdministrator1111

6500065000Network Network AdministratorAdministrator1111

3970039700Network Network ManagerManager1111

SalarySalaryJobTitleJobTitleDepartDepartmentIDmentID

650006500065000

433004330043300

Grouping by Several Columns – ExampleGrouping by Several Grouping by Several Columns Columns –– ExampleExample

• Example of grouping data by several columns:

•• Example of grouping data by several Example of grouping data by several columns:columns:SELECT DepartmentID, JobTitle, SELECT DepartmentID, JobTitle,

SUM(Salary) as Salaries, COUNT(*) as CountSUM(Salary) as Salaries, COUNT(*) as CountFROM EmployeeFROM EmployeeGROUP BY DepartmentID, JobTitleGROUP BY DepartmentID, JobTitle

225000050000Tool DesignerTool Designer22

......7777

22DepartmentIDDepartmentID

......Production TechnicianProduction TechnicianProduction SupervisorProduction Supervisor

Senior Tool DesignerSenior Tool DesignerJobTitleJobTitle

............157157192600019260002121525000525000

225860058600CountCountSalariesSalaries

Illegal QueriesIllegal QueriesIllegal Queries

• This SELECT statement is illegal

• Can not combine columns with groups functions unless when using GROUP BY

• This SELECT statement is also illegal

• Can not use WHERE for group functions

•• This This SELECTSELECT statement is illegalstatement is illegal

•• Can not combine columns with groups Can not combine columns with groups functions unless when using functions unless when using GROUP BYGROUP BY

•• This This SELECTSELECT statement is also illegalstatement is also illegal

•• Can not use Can not use WHEREWHERE for group functionsfor group functions

SELECT DepartmentID, COUNT(LastName)SELECT DepartmentID, COUNT(LastName)FROM FROM EEmployeemployee

SELECT DepartmentID, AVG(SELECT DepartmentID, AVG(SalarySalary))FROM FROM EEmployeemployeeWHERE AVG(WHERE AVG(SalarySalary) > 30) > 30GROUP BY DepartmentIDGROUP BY DepartmentID

Grouping RestrictionsGrouping RestrictionsGrouping Restrictions

• When using groups we can select only columns listed in the GROUP BY and grouping functions over the other columns

• Can not select columns not listed in the GROUP BY clause

• Can not apply group functions over the columns in the GROUP BY clause

•• When using groups we can select only When using groups we can select only columns listed in the columns listed in the GROUP BYGROUP BY and and grouping functions over the other columnsgrouping functions over the other columns

•• Can not select columns not listed in the Can not select columns not listed in the GROUP BYGROUP BY clauseclause

•• Can not apply group functions over the Can not apply group functions over the columns in the columns in the GROUP BYGROUP BY clauseclause

SELECT DepartmentID, JobTitle, SELECT DepartmentID, JobTitle, SUM(Salary) AS Cost, MIN(HireDate) as StartDateSUM(Salary) AS Cost, MIN(HireDate) as StartDate

FROM EmployeeFROM EmployeeGROUP BY DepartmentID, JobTitleGROUP BY DepartmentID, JobTitle

Using GROUP BY with HAVING ClauseUsing Using GROUP BYGROUP BY with with HAVINGHAVING ClauseClause

• HAVING works like WHERE but is used for the grouping functions

•• HAVINGHAVING works like works like WHEREWHERE but is used for but is used for the grouping functionsthe grouping functionsSELECT DepartmentID, COUNT(EmployeeID) asSELECT DepartmentID, COUNT(EmployeeID) as

Count, AVG(Salary) AverageSalaryCount, AVG(Salary) AverageSalaryFROM EmployeeFROM EmployeeGROUP BY DepartmentIDGROUP BY DepartmentIDHAVING COUNT(EmployeeID) BETWEEN 3 AND 5HAVING COUNT(EmployeeID) BETWEEN 3 AND 5

……121222DepartmentIDDepartmentID

…………144001440055271502715044AverageSalaryAverageSalaryCountCount

Page 20: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 20

Using Grouping Functions and Table JoinsUsing Grouping Functions Using Grouping Functions and Table Joinsand Table Joins

• We can apply grouping function on columns from joined tables

•• We can apply grouping function on We can apply grouping function on columns from joined tablescolumns from joined tablesSELECT COUNT(*) AS EmpCount, d.Name AS DeptNameSELECT COUNT(*) AS EmpCount, d.Name AS DeptNameFROM Employee e FROM Employee e

JOIN Department dJOIN Department dON e.DepartmentID = d.DepartmentIDON e.DepartmentID = d.DepartmentID

WHERE e.HireDate BETWEEN '1999WHERE e.HireDate BETWEEN '1999--22--1' AND '20021' AND '2002--1212--31'31'GROUP BY d.NameGROUP BY d.NameHAVING COUNT(*) > 5HAVING COUNT(*) > 5ORDER BY EmpCount DESCORDER BY EmpCount DESC

FinanceFinance8888

9595EmpCountEmpCount

Information ServicesInformation Services

ProductionProductionDeptNameDeptName

SQL LanguageSQL LanguageInserting Data in TablesInserting Data in Tables

Inserting DataInserting DataInserting Data

• INSERT command• INSERT INTO <table> VALUES (<values>)

• INSERT INTO <table>(<columns>) VALUES (<values>)

• INSERT INTO <table> SELECT <values>

•• INSERTINSERT commandcommand•• INSERT INTO <table> VALUES (<values>)INSERT INTO <table> VALUES (<values>)

•• INSERT INTO <table>(<columns>) VALUES INSERT INTO <table>(<columns>) VALUES (<values>)(<values>)

•• INSERT INTO <table> SELECT <values>INSERT INTO <table> SELECT <values>

INSERT INTO EmployeeProjectINSERT INTO EmployeeProjectVALUES (229, 25)VALUES (229, 25)

INSERT INTO Project(Name, StartDate)INSERT INTO Project(Name, StartDate)VALUES ('New project', GETDATE())VALUES ('New project', GETDATE())

INSERT INTO Project(Name, StartDate)INSERT INTO Project(Name, StartDate)SELECT Name + ' Restructuring', GETDATE()SELECT Name + ' Restructuring', GETDATE()FROM DepartmentFROM Department

SQL LanguageSQL LanguageUpdating Data in TablesUpdating Data in Tables

Updating DataUpdating DataUpdating Data

• UPDATE command• UPDATE <table> SET <column=expression> WHERE <condition>

• Note: Don't forget the WHERE clause!

•• UPDATEUPDATE commandcommand•• UPDATE <table> SET UPDATE <table> SET <column=expression> WHERE <condition><column=expression> WHERE <condition>

•• Note: Don't forget the WHERE clause!Note: Don't forget the WHERE clause!

UPDATE EmployeeUPDATE EmployeeSET LastName = 'Brown'SET LastName = 'Brown'WHERE EmployeeID = 1WHERE EmployeeID = 1

UPDATE EmployeeUPDATE EmployeeSET Salary = Salary * 1.10,SET Salary = Salary * 1.10,

JobTitle = 'Senior ' + JobTitleJobTitle = 'Senior ' + JobTitleWHERE DepartmentID = 3WHERE DepartmentID = 3

Updating Joined TablesUpdating Joined TablesUpdating Joined Tables

UPDATE EmployeeUPDATE EmployeeSET JobTitle = 'Senior ' + JobTitleSET JobTitle = 'Senior ' + JobTitleFROM Employee e FROM Employee e

JOIN Department dJOIN Department dON e.DepartmentID = d.DepartmentIDON e.DepartmentID = d.DepartmentID

WHERE d.Name = 'Sales'WHERE d.Name = 'Sales'

• We can update tables based on condition from joined tables

•• We can update tables based on We can update tables based on condition from joined tablescondition from joined tables

Page 21: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 21

SQL LanguageSQL LanguageDeleting Data from TablesDeleting Data from Tables

Deleting DataDeleting DataDeleting Data

• Deleting rows from a table• DELETE FROM <table> WHERE <condition>

• Note: Don’t forget the WHERE clause!• Delete all rows from a table at once

• TRUNCATE TABLE <table>

•• Deleting rows from a tableDeleting rows from a table•• DELETE FROM <table> WHERE DELETE FROM <table> WHERE <condition><condition>

•• Note: DonNote: Don’’t forget the t forget the WHEREWHERE clause!clause!•• Delete all rows from a table at onceDelete all rows from a table at once

•• TRUNCATE TABLE <TRUNCATE TABLE <tabletable>>

DELETE FROM Employee WHERE EmployeeID = 1DELETE FROM Employee WHERE EmployeeID = 1

DELETE FROM Employee WHERE LastName LIKE 'S%'DELETE FROM Employee WHERE LastName LIKE 'S%'

TRUNCATE TABLE [User]TRUNCATE TABLE [User]

Deleting from Joined TablesDeleting from Joined TablesDeleting from Joined Tables

DELETE FROMDELETE FROM EmployeeEmployeeFROM Employee e FROM Employee e

JOIN Department dJOIN Department dON e.DepartmentID = d.DepartmentIDON e.DepartmentID = d.DepartmentID

WHERE d.Name = 'Sales'WHERE d.Name = 'Sales'

• We can delete records from tables based on condition from joined tables

•• We can delete records from tables based We can delete records from tables based on condition from joined tableson condition from joined tables

SQL LanguageSQL LanguageSQL Server FunctionsSQL Server Functions

Standard Functions in Microsoft SQLStandard Functions in Standard Functions in Microsoft SQLMicrosoft SQL

• Single-row functions• String functions• Mathematical functions• Date functions• Conversion functions

• Multiple-row functions• Aggregate functions

•• SingleSingle--row functionsrow functions•• String functionsString functions•• Mathematical functionsMathematical functions•• Date functionsDate functions•• Conversion functionsConversion functions

•• MultipleMultiple--row functionsrow functions•• Aggregate functionsAggregate functions

COALESCE() FunctionCOALESCE(COALESCE()) FunctionFunction

• COALESCE(<value>,<default_value>) –converts NULL values to given default value

•• COALESCECOALESCE(<value>,<default_value>)(<value>,<default_value>) ––converts converts NULLNULL values to given default valuevalues to given default value

SELECT Name AS [Project Name], SELECT Name AS [Project Name], COALESCE(EndDate, GETDATE())COALESCE(EndDate, GETDATE()) AS [End Date]AS [End Date]

FROM ProjectFROM Project

20062006--0707--02 08:19:43.98302 08:19:43.983Classic VestClassic Vest20032003--0606--01 00:00:00.00001 00:00:00.000Cycling CapCycling Cap20032003--0606--01 00:00:00.00001 00:00:00.000FullFull--Finger GlovesFinger Gloves20032003--0606--01 00:00:00.00001 00:00:00.000HalfHalf--Finger GlovesFinger Gloves20032003--0606--01 00:00:00.00001 00:00:00.000HL Mountain FrameHL Mountain Frame......

End DateEnd Date

......

Project NameProject Name

Page 22: Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

(c) 2006 National Academy for Software Development - http://academy.devbg.org 22

String FunctionsString FunctionsString Functions

• Changing the casing – LOWER, UPPER• Manipulating characters – SUBSTRING, LEN, LEFT, RIGHT, LTRIM, REPLACE

•• Changing the casing Changing the casing –– LOWERLOWER, , UPPERUPPER

•• Manipulating characters Manipulating characters –– SUBSTRINGSUBSTRING, , LEN,LEN, LEFT, RIGHT, LTRIM, REPLACELEFT, RIGHT, LTRIM, REPLACE

SELECT LastName, LEN(LastName) AS LastNameLen,SELECT LastName, LEN(LastName) AS LastNameLen,UPPER(LastName) AS UpperLastNameUPPER(LastName) AS UpperLastName

FROM EmployeeFROM EmployeeWHERE RIGHT(LastName, 3) = 'son'WHERE RIGHT(LastName, 3) = 'son'

......667788LastNameLenLastNameLen

JOHNSONJOHNSONJohnsonJohnsonERICKSONERICKSONEricksonErickson

MUNSONMUNSONMunsonMunson......

UpperLastNameUpperLastName

......

LastNameLastName

Other FunctionsOther FunctionsOther Functions

• Mathematical Functions – ROUND, FLOOR, POWER, ABS, SQRT, …

• Date Functions – GETDATE, DATEADD, DAY, MONTH, YEAR, …

• Conversion Functions – CONVERT, CAST

•• Mathematical Functions Mathematical Functions –– ROUNDROUND, , FLOORFLOOR, , POWER, ABS, SQRT, POWER, ABS, SQRT, ……

•• Date Functions Date Functions –– GETDATEGETDATE, , DATEADD, DATEADD, DAY, MONTH, YEAR, DAY, MONTH, YEAR, ……

•• Conversion Functions Conversion Functions –– CONVERT, CASTCONVERT, CAST

SELECT FLOOR(3.14) SELECT FLOOR(3.14) 33SELECT ROUND(5.86, 0) SELECT ROUND(5.86, 0) 6.006.00

SELECT SELECT CONVERT(DATETIME, '20051231', 112)CONVERT(DATETIME, '20051231', 112)20052005--1212--31 00:00:00.00031 00:00:00.000

---- 112 is the ISO formatting style YYYYMMDD112 is the ISO formatting style YYYYMMDD

Combining Functions UseCombining Functions UseCombining Functions Use

• We can combine functions to achieve more complex behavior

•• We can combine functions to achieve We can combine functions to achieve more complex behaviormore complex behaviorSELECT Name AS [Project Name], SELECT Name AS [Project Name],

COALESCE(CONVERT(nvarchar(50), EndDate), COALESCE(CONVERT(nvarchar(50), EndDate), 'Not Finished') AS [Date Finished]'Not Finished') AS [Date Finished]

FROM ProjectFROM Project

Jun 1 2003 12:00AMJun 1 2003 12:00AMHL Mountain Front WheelHL Mountain Front Wheel

......Jun 1 2003 12:00AMJun 1 2003 12:00AMNot FinishedNot FinishedNot FinishedNot Finished

Date FinishedDate Finished

HL Touring HandlebarsHL Touring HandlebarsLL Touring HandlebarsLL Touring Handlebars

LL Road Front WheelLL Road Front Wheel......

Project NameProject Name

Релационни бази от данни иMicrosoft SQL Server 2005РелационниРелационни базибази отот данниданни ииMicrosoft SQL Server 2005Microsoft SQL Server 2005

ВъпросиВъпроси??