(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•• НеНе сесе изискватизискват предварителнипредварителни знаниязнания•• ОбхващатОбхващат основитеосновите нана програмиранетопрограмирането
•• МасивиМасиви, , циклицикли, , структуриструктури отот данниданни•• ВходВход / / изходизход, , елементиелементи отот ООПООП
•• УспешноУспешно завършилитезавършилите продължаватпродължават ввследващитеследващите ниванива
•• БезплатноБезплатно!!
(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
(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 многомного –– студентстудент / / учебенучебен курскурс
(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
(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)
ИндексиИндекси
(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)
(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) саса процедурипроцедури нана нивонивобазабаза, , коитокоито сесе активиратактивират припри някаквонякаквоусловиеусловие, , напримернапример::•• припри добавянедобавяне нана записзапис•• припри промянапромяна нана записзапис•• припри изтриванеизтриване нана записзапис
•• ТригеритеТригерите могатмогат дада извършватизвършватдопълнителнадопълнителна обработкаобработка нана даннитеданните•• промянапромяна нана даннитеданните припри добавянедобавяне•• поддръжкаподдръжка нана логовелогове ии историяистория
(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
(примерът продължава)((примерътпримерът продължавапродължава))
(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
(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
(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
(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
(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
(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
(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')
(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
(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>>
(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
(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
(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
(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
ВъпросиВъпроси??