Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Upcoming SlideShare
Loading in...5
×
 

Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

on

  • 2,800 views

 

Statistics

Views

Total Views
2,800
Views on SlideShare
2,795
Embed Views
5

Actions

Likes
0
Downloads
202
Comments
0

1 Embed 5

http://www.techgig.com 5

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Intro To RDBMS And SQL Server 2005 - Svetlin Nakov Intro To RDBMS And SQL Server 2005 - Svetlin Nakov Presentation Transcript

  • Съдържание 1. Национална академия по разработка на софтуер (НАРС) НАРС) (НАРС) Релационни бази от данни и 2. Релационни бази от данни Microsoft SQL Server 2005 • Таблици, връзки, E/R диаграми, Таблици, връзки, диаграми, Теория и практика нормализация, съхранени процедури, нормализация, процедури, тригери, изгледи, транзакции тригери, изгледи, 3. Работа с езика SQL Светлин Наков • Извличане на данни, съединения, данни, съединения, агрегатни функции, групиране функции, Национална академия по разработка на софтуер • Вмъкване, промяна, изтриване Вмъкване, промяна, academy.devbg.org За лектора • Светлин Наков • Носител на наградата “Джон “Джон Национална академия Атанасов” на Президента на Атанасов” по разработка на България • Автор на 3 книги и над 20 статии софтуер (НАРС) • 15 години опит с програмирането • 8 от тях професионално • Директор направление обучение в Национална академия по разработка на софтуер • Преподавател във ФМИ на СУ Какво е НАРС? НАРС? Курсовете за начинаещи • Национална академия по разработка • Курсове за начинаещи – 6 седмици на софтуер (НАРС) НАРС) (НАРС) • Въведение в програмирането с C# и Java • Практическо обучение за софтуерни • Не се изискват предварителни знания инженери • Обхващат основите на програмирането • Курсове за начинаещи и напреднали • Масиви, цикли, структури от данни Масиви, цикли, • Специалности Java и .NET • Вход / изход, елементи от ООП изход, • Гарантирана работа по специалността • Успешно завършилите продължават в следващите нива • Безплатно! Безплатно! • Безплатно! Безплатно! • http://academy.devbg.org (c) 2006 National Academy for Software Development - http://academy.devbg.org 1
  • Курсове за напреднали НАРС – успешен старт • Курсове за напреднали • НАРС ви гарантира успешен старт в кариерата на софтуерен инженер • Дават професията “софтуерен инженер” “софтуерен инженер” • Практическо обучение по: по: • Работа в престижи софтуерни фирми: фирми: • Обектно-ориентирано програмиране Обектно- Обектно-ориентирано • SAP Labs Bulgaria, telerik, Sciant, Rila Solutions, Sirma, Seeburger Informatik, • Бази от данни (Oracle, SQL Server) (Oracle, ICB, Stemo, Wohnfinder, Bank Service • Уеб приложения и GUI приложения • Безплатно обучение! обучение! • Софтуерно инженерство и работа в екип • Специалности Java и .NET • Гарантирана работа! работа! • За контакти: контакти: • Безплатно! Безплатно! http://academy.devbg.org Релационни бази от данни • Модели на базите от данни • йерархичен (дървовиден) дървовиден) (дървовиден) Релационни • мрежови бази от данни • релационен (табличен) табличен) (табличен) • обектно-релационен обектно- обектно-релационен Фундаментални концепции • Релационните бази от данни • Представляват съвкупности от таблици и връзки между тях (релации) релации) (релации) • Ползват здрава математическа основа: основа: релационната алгебра Системи за управление на Системи за управление на бази от данни бази от данни • Системи за управление на релационни бази от • RDBMS системите се наричат още данни (СУБД) = Relational Database Management СУБД) (СУБД) • сървъри за управление на бази от данни System (RDBMS) (RDBMS) • или просто quot;Database сървъриquot; сървъриquot; • Осигуряват програмни средства за: за: • По-известни RDBMS сървъри: По- сървъри: По-известни • създаване / промяна / изтриване на таблици • Oracle Database и връзки между тях • Microsoft SQL Server • добавяне, промяна, изтриване, търсене и добавяне, промяна, изтриване, • IBM DB2 извличане на данни от таблиците • PostgreSQL • поддръжка на езика SQL • MySQL • управление на транзакции • Borland Interbase (незадължително) незадължително) (незадължително) (c) 2006 National Academy for Software Development - http://academy.devbg.org 2
  • Таблици • Таблиците представляват съвкупност от стойности, подредени в редове и колони. стойности, колони. Пример (таблица PERSONS): (таблица PERSONS): Таблици и връзки id name family employer 1 Светлин Наков НАРС Основни понятия 2 Бранимир Гюров Tam Tam 3 Мартин Кулов НАРС • Редовете имат еднаква структура • Колоните имат име и тип (число, символен число, (число, низ, дата или др.) низ, др.) Схема на таблица Първичен ключ • Схема на таблица е наредена • Първичният ключ (primary key) е колона от таблицата, която уникално идентифицира таблицата, последователност от описания на даден неин ред колони (име и тип) (име тип) id name family employer Primary • Например таблицата PERSONS има key 1 Светлин Наков БАРС следната схема: схема: 2 Бранимир Гюров BSH PERSONS ( 3 Мартин Кулов CodeAttest id: число, id: число, • Два записа (реда) са различни когато са реда) (реда) name: символен низ, name: низ, различни първичните им ключове family: символен низ, family: низ, employer: символен низ • Първичният ключ може да е съвкупност от ) няколко колони Връзки (релации) Връзки (релации) (релации) (релации) • Връзките между таблиците се базират на • Външният ключ (foreign key) е номер на (foreign взаимоотношения primary key / foreign key запис (primary key) в друга таблица • Връзките спестяват повтарянето на Foreign Primary key информация key Primary TOWN key • В примера името на държавата не се повтаря id name country_id COUNTRY за всеки град 1 София 1 id name • Връзките имат множественост (multiplicity): multiplicity): (multiplicity): 2 Пловдив 1 1 България • 1 x 1 – например човек ↔ студент 3 Мюнхен 2 2 Германия • 1 x много – държава / градове 4 Берлин 2 3 Русия 5 Москва 3 • много x много – студент / учебен курс (c) 2006 National Academy for Software Development - http://academy.devbg.org 3
  • Множественост на Множественост на връзките (1 x 1) връзките (1 x n) • Връзка 1 x 1 • Връзка 1 x много (или много x 1) (или • 1 запис от едната таблица съответства • 1 запис от първата таблица съответства на точно 1 запис от другата таблица на много записи от втората таблица • Моделира наследяване на таблици • Използва се много често Primary Primary & TOWN key Foreign key id name country_id TOWN POPULATION COUNTRY 1 София 1 id population id name id name 2 Пловдив 1 1 София 1 1 177 000 1 България 3 Мюнхен 2 2 Пловдив 2 720 000 2 Германия 4 Берлин 2 3 1 260 000 3 Мюнхен 3 Русия 5 Москва 3 4 3 400 000 4 Берлин Множественост на връзките (n x n) • Връзка много x много • 1 запис от първата таблица съответства на много записи от втората таблица и обратното E/R диаграми • Реализира се чрез междинна таблица STUDENT_COURSE STUDENT COURSE student_id course_id id name id name 1 1 1 Пешо 1 .NET 1 2 2 Минка 3 2 2 Java 3 Гошо 3 3 3 PHP 4 Пенка 4 2 Релационна схема E/R диаграми – пример Диаграмата е • Релационна схема на БД наричаме създадена с Microsoft SQL съвкупността от: от: Server Management Studio • схемите на всички таблици • връзките между таблиците • Релационната схема описва структурата на БД • не съдържа данни, а само метаданни данни, • Релационните схеми се изобразяват графично чрез Entity/Relationship диаграми (E/R Diagrams) (E/R (c) 2006 National Academy for Software Development - http://academy.devbg.org 4
  • E/R диаграми – пример E/R диаграми – пример Диаграмата е създадена Диаграмата е с fabFORCE DB Designer създадена с PLATINUM ERwin E/R диаграми – пример (c) 2006 National Academy for Software Development - http://academy.devbg.org 5
  • Нормализация Нормализация – пример • Пример за нормализирана схема: схема: • Нормализацията на релационната схема премахва повтарящите се данни PRODUCT • Денормализираните данни съдържат произво катего магаз град id продукт цена много повторения. Например: повторения. Например: дител_id дител_id рия_id ин_id _id рия_id ин_id 1 кисело мляко 2 0.67 2 4 1 произво- произво- продукт цена категория магазин град 2 хляб quot;Добруждаquot; Добруждаquot; 3 0.55 2 4 1 дител 3 ракия quot;Пещерскаquot; Пещерскаquot; 6 4.38 5 2 1 кисело Млекис 0.67 хранителни супермаркет София мляко ООД стоки quot;Ментеquot; Ментеquot; 4 бира quot;Tuborgquot; 4 0.67 4 1 3 хляб Фурна 0.55 хранителни супермаркет София VENDOR CATEGORY quot;Добруждаquot; Добруждаquot; quot;Пушекаquot; Пушекаquot; стоки quot;Ментеquot; Ментеquot; STORE TOWN бира Загорка 0.58 безалкох. безалкох. павилион Варна id име id име id име id име quot;Загоркаquot; Загоркаquot; АД напитки quot;24 часаquot; часаquot; 2 quot;Млексquot; ООД Млексquot; 4 бира 1 София 1 Billa бира Шуменско 0.67 безалкох. безалкох. павилион Варна 4 quot;Загоркаquot; АД Загоркаquot; 2 хранителни 3 Варна 4 METRO quot;Tuborgquot; пиво АД напитки quot;24 часаquot; часаquot; Ограничения (Constraints) • Ограниченията (constraints) задават (constraints) правила, за данните, които не могат да правила, данните, бъдат нарушавани Ограничения • Ограничение по първичен ключ (primary (primary (Constraints) key constraint) • Първичният ключ е уникален за всеки запис • Ограничение по уникален ключ (unique key (unique constraint) • Стойностите в дадена колона (или група (или колони) са уникални колони) Ограничения (Constraints) • Ограничение по външен ключ (foreign (foreign key constraint) • Стойността в дадена колона е ключ от друга таблица Индекси • Ограничение по стойност (check (check constraint) • Стойностите в дадена колона изпълняват дадено условие • Например: Например: • (hour>=0) AND (hour<=24) (hour>=0) • name = upper(name) (c) 2006 National Academy for Software Development - http://academy.devbg.org 6
  • Индекси • Индексите ускоряват скоростта на търсене на стойност в дадена колона или група от колони • Ползват се при големи таблици Езикът SQL • Реализират се най-често с B-дървета най- най-често B-дървета или хеш-таблици хеш- хеш-таблици • Могат да бъдат външни (извън (извън таблицата) или вградени таблицата) • Добавянето и изтриването от индексирани таблици е по-бавно по- по-бавно Езикът SQL Езикът SQL • SQL (Structured Query Language) • SQL се състои от: от: • Стандартизиран декларативен език • DDL – Data Definition Language (стандарт) за манипулация на релационни стандарт) (стандарт) • Команди CREATE, ALTER, DROP бази от данни • DML – Data Manipulation Language • SQL-92 – поддържан от всички RDBMS SQL- SQL-92 • SQL-99 – навлиза все повече SQL- SQL-99 • Команди SELECT, INSERT, UPDATE, DELETE • SQL поддържа: поддържа: • Пример за SQL SELECT заявка: заявка: • Създаване, промяна, изтриване на таблици Създаване, промяна, и други обекти в БД SELECT Name • Търсене, извличане, добавяне, промяна и Търсене, извличане, добавяне, FROM Town изтриване на данни WHERE TownId = 18 Съхранение процедури • Процедури на ниво база (запазени (запазени процедури, stored procedures) процедури, • Програмен код, който се изпълнява в самия код, Съхранени сървър за бази данни процедури • Работят много по-бързо от външен код по- по-бързо • Данните са локално достъпни • Могат да приемат параметри • Могат да връщат резултат • единична стойност • съвкупност от записи (record set) (record (c) 2006 National Academy for Software Development - http://academy.devbg.org 7
  • Съхранени процедури • Процедури на ниво база се пишат на език, разширение на SQL език, • T-SQL – в Microsoft SQL Server T-SQL Изгледи (Views) • PL/SQL – в Oracle • Пример за процедура на T-SQL: SQL: T-SQL: CREATE PROC sp_FindEmployee sp_F indEmployee @empnum int AS SELECT * FROM Employees WHERE emp_id = @empnum Изгледи (views) – (views) Изгледи (views) (views) пример T_COMPANY T_TOWN T_COUNTRY • Изгледите представляват именувани town count id country id company id town SQL SELECT заявки, които се използват заявки, _id ry_id 1 България като таблици 1 Менте ООД 1 1 София 1 2 Русия 2 BulkSoft Inc. 2 2 New York 3 3 САЩ • Улесняват писането на сложни SQL 3 ХардСофт АД 4 3 Москва 2 заявки 4 Спутник АД 3 4 Пловдив 1 • Прилагат се за фина настройка на CREATE VIEW V_BG_COMPANY AS сигурността: сигурността: SELECT V_BG_COMPANY T_COMPANY.id AS id, T_COMPANY.company AS company • На даден потребител не се дават права id company FROM T_COMPANY INNER JOIN над никоя таблица (T_TOWN INNER JOIN T_COUNTRY ON 1 Менте ООД T_TOWN.country_id=T_COUNTRY.id) 3 ХардСофт АД • Дават му се права само над някои ON T_COMPANY.town_id=T_TOWN.id WHERE изгледи (подмножество от данните) данните) (подмножество T_COUNTRY.country=quot;Българияquot;; T_COUNTRY.country=quot;Българияquot;; Тригери (triggers) • Тригерите (triggers) са процедури на ниво (triggers) база, които се активират при някакво база, условие, например: условие, например: • при добавяне на запис Тригери (Triggers) • при промяна на запис • при изтриване на запис • Тригерите могат да извършват допълнителна обработка на данните • промяна на данните при добавяне • поддръжка на логове и история (c) 2006 National Academy for Software Development - http://academy.devbg.org 8
  • Тригери – пример • Имаме таблица с имена на фирми: фирми: CREATE TABLE COMPANY( Транзакции id int NOT NULL, name varchar(50) NOT NULL) Интегритет на данните и управление • Тригер, който при добавяне на нова Тригер, на конкурентния достъп фирма добавя quot;Ltd.quot; към името й: й: CREATE TRIGGER trg_CompanyInsert ON Company FOR INSERT AS UPDATE Company SET Name = Name + ' Ltd.' WHERE Id = (SELECT Id FROM Inserted) Отговорности на Транзакции транзакциите • Транзакциите гарантират • Транзакциите са последователности от консистентността и възстановимостта действия (заявки към базата данни), които данни), (заявки се изпълняват атомарно: атомарно: на базата данни • или се изпълняват всичките действия • Промяната не се счита за окончателна заедно (като едно цяло) цяло) (като докато не се извърши COMMIT • или никое от действията не се изпълнява • Командата ROLLBACK анулира изобщо транзакцията и връща обратно • Пример: Пример: промените • Банково прехвърляне на пари от една • Всички операции се извършват като сметка в друга (теглене + внасяне) (теглене внасяне) едно цяло, включително операциите цяло, • Ако тегленето или внасянето на парите върху множество от записи пропадне, пропада цялата операция пропадне, Свойства на Транзакции – пример транзакциите (ACID) • Atomicity – атомарност Atomicity • Имаме таблица с банкови сметки: сметки: • Изпълнява се всичко или нищо CREATE TABLE Account( Account( • Consistency – цялост на данните Consistency id int NOT NULL, balance decimal NOT NULL) • Базата винаги остава консистентна с логически коректни данни • Използваме транзакция при трансфер на пари от сметка на сметка: сметка: • Isolation – изолация на данните Isolation • Отделните транзакции са изолирани една от CREATE PROCEDURE sp_Transfer_Money( друга в зависимост от избраното ниво @from_acc int, @to_acc int, • Durability – стабилност на данните Durability @ammount decimal ) AS • Ако една транзакция бъде потвърдена, тя не потвърдена, (примерът продължава) (примерът продължава) може да бъде изгубена (c) 2006 National Academy for Software Development - http://academy.devbg.org 9
  • Транзакции – пример Транзакции и изолация • Транзакциите могат да дефинират BEGIN TRANSACTION UPDATE Account set balance = balance - @ammount нива на изолация (isolation levels) WHERE id = @from_acc IF @@rowcount <> 1 BEGIN четене на неповто- неповто- ROLLBACK TRANSACTION ниво на фантомни непотвър- непотвър- ряемост RAISERROR ('Invalid source account!', 16, 1) изолация записи дени данни при четене RETURN END Read uncommitted да да да UPDATE Account set balance = balance + @ammount Read committed не да да WHERE id = @to_acc Repeatable read не не да IF @@rowcount <> 1 BEGIN ROLLBACK TRANSACTION Serializable не не не RAISERROR ('Invalid destination account!', 16, 1) • По-силната изолация осигурява по- По- по- По-силната RETURN добра консистентност, но работи по- консистентност, по- END COMMIT TRANSACTION бавно и заключва данните за по-дълго по- по-дълго Употреба на транзакции • Кога се ползват транзакции? транзакции? • Винаги, когато за една бизнес Винаги, Introduction to операция се осъществява достъп до SQL Language повече от една таблица • Пример: Пример: (with Microsoft SQL Server 2005) • На касата в склад на едро: извършваме едро: покупка на съвкупност от продукти • Или купуваме всички продукти и плащаме или нищо не купуваме и не даваме пари • Ако някоя операция не успее, успее, анулираме транзакцията Relational Databases Communicating with a DB • A relational database: SQL statement is entered • Can be accessed and modified by SQL statement is sent to the database executing Structured Query Structured Query SELECT Name FROM Department Database Language (SQL) statements Language • Uses a set of operations to extract subset of the data Name • Contains a collection of tables Engineering The result is returned Sales • Relationships are defined between (usually as a table) Marketing the tables … (c) 2006 National Academy for Software Development - http://academy.devbg.org 10
  • What is SQL? • Structured Query Language (SQL) • Declarative language for query and manipulation of relational data SQL and T-SQL • SQL consists of: Introduction • Data Manipulation Language (DML) SELECT, INSERT, UPDATE, • SELECT, INSERT, UPDATE, DELETE • Data Definition Language (DDL) CREATE, DROP, • CREATE, DROP, ALTER GRANT, • GRANT, REVOKE SQL – Examples What is T-SQL? T-SQL? • T-SQL is an extension to the standard T-SQL SELECT FirstName, LastName, JobTitle SQL language FROM Employee • The standard language in MS SQL Server INSERT INTO Project(Name, StartDate) database VALUES('Introduction to SQL Course', '1/1/2006') • Supports if statements, loops, exceptions SELECT * FROM Project WHERE StartDate = '1/1/2006' • Like the high-level procedural high- high-level UPDATE Project programming languages SET EndDate = '8/31/2006' WHERE StartDate = '1/1/2006' • Used for writing procedures, functions, triggers, etc. DELETE FROM Project WHERE StartDate = '1/1/2006' T-SQL – Example T-SQL CREATE PROCEDURE EmpDump AS DECLARE @EmpId INT, @EmpFName NVARCHAR(100), @EmpId @EmpLName NVARCHAR(100) The NASD DECLARE emps CURSOR FOR SELECT EmployeeID, FirstName, LastName FROM Employee Database Schema OPEN emps FETCH NEXT FROM emps INTO @EmpId, @EmpFName, @EmpLName WHILE (@@FETCH_STATUS = 0) BEGIN E/R Diagram PRINT CAST(@EmpId AS VARCHAR(10)) + ' ' + @EmpFName + ' ' + @EmpLName FETCH NEXT FROM emps INTO @EmpId, @EmpFName, @EmpLName END CLOSE emps DEALLOCATE emps GO (c) 2006 National Academy for Software Development - http://academy.devbg.org 11
  • The NASD Database Schema in SQL Server Employee Department EmployeeID DepartmentID Name FirstName LastName ManagerID SQL Language MiddleName JobTitle DepartmentID Introducing SELECT Statement Address Town ManagerID AddressID HireDate TownID AddressText Salary Name TownID AddressID Project ProjectID EmployeeProject Name EmployeeID Description ProjectID StartDate EndDate Capabilities of SQL Basic SELECT Statement SELECT Selection Projection SELECT *|{[DISTINCT] column|expression Take some of the rows Take some of the columns [alias],...} FROM table • SELECT identifies what columns Table 1 Table 1 • FROM identifies which table Join Combine tables by some column Table 2 Table 1 SELECT Example Arithmetic Operations • Selecting all columns from departments • Arithmetic operators are available: SELECT * FROM Department • +, -, *, / -, DepartmentID Name ManagerID • Example: 1 Engineering 12 2 Tool design 4 SELECT LastName, Salary, Salary + 300 Salary, 3 Sales 273 FROM Employee … … … • Selecting specific columns LastName Salary (No column name) Gilbert 12500,00 12800,00 DepartmentID Name SELECT 1 Engineering DepartmentID, Brown 13500,00 13800,00 Name 2 Tool design Tamburello 43300,00 43600,00 FROM Department 3 Sales (c) 2006 National Academy for Software Development - http://academy.devbg.org 12
  • The NULL Value Column Alias • A NULL is a value that is unavailable, • Renames a column heading unassigned, unknown, or inapplicable • Useful with calculations • Not the same as zero or a blank space • Immediately follows the column name • Arithmetic expressions containing a NULL • There is an optional AS keyword value are evaluated to NULL • Double quotation marks if contains spaces SELECT LastName, ManagerID FROM Employee SELECT FirstName, LastName, Salary, Salary*0.2 AS Bonus FROM Employee LastName ManagerID Sánchez NULL FirstName LastName Salary Bonus NULL is displayed as Duffy 300 Guy Gilbert 12500,00 2500.00000 empty space or as NULL Wang 1 Kevin Brown 13500,00 2700.00000 Concatenation Operator Literal Character Strings • A literal is a character, a number, or a date • Concatenates columns or character strings included in the SELECT list to other columns • Date and character literal values must be • Is represented by plus sign “+” “+” enclosed within single quotation marks • Creates a resultant column that is a • Each character string is output once for each character expression row returned SELECT FirstName + ' ' + LastName AS [Full Name], SELECT FirstName + '''s last name is ' + EmployeeID as [No.] FROM Employee LastName AS [Our Employees] FROM Employee Full Name No. Our Employees Guy Gilbert 1 Guy's last name is Gilbert Kevin Brown 2 Kevin's last name is Brown Roberto Tamburello 3 Roberto's last name is Tamburello Removing Duplicate Rows Limiting the Rows Selected • The default display of queries is all rows, • Restrict the rows returned by using the including duplicate rows DepartmentID WHERE clause: 7 LastName DepartmentID SELECT LastName, SELECT DepartmentID 7 Tamburello 1 DepartmentID FROM FROM Employee 2 Employee WHERE Erickson 1 DepartmentID = 1 ... Goldberg 1 ... ... • Eliminate duplicate rows by using the • More examples: DISTINCT keyword in the SELECT clause SELECT FirstName, LastName, DepartmentID FROM Employee WHERE LastName = 'Sullivan' DepartmentID SELECT 7 DISTINCT DepartmentID 2 SELECT LastName, Salary FROM Employee FROM Employee ... WHERE Salary <= 20000 (c) 2006 National Academy for Software Development - http://academy.devbg.org 13
  • Other Comparison Other Comparison Conditions Conditions (2) • Checking for NULL value: • Using BETWEEN operator to specify a range: SELECT LastName, Salary FROM Employee SELECT LastName FROM Employee WHERE Salary BETWEEN 20000 AND 22000 WHERE ManagerID IS NULL • Note: COLUMN=NULL is always false! • Using IN / NOT IN operators to specify a set of values: • Using OR and AND operators: SELECT FirstName, LastName, ManagerID FROM SELECT FirstName, LastName FROM Employee Employee WHERE ManagerID IN (109, 3, 16) (109, 16) WHERE Salary >= 20000 AND LastName LIKE 'C%' • Using LIKE operator to specify a pattern: SELECT LastName FROM Employee WHERE ManagerID IS NOT NULL SELECT FirstName FROM Employee OR LastName LIKE '%so_' WHERE FirstName LIKE 'S%' Sorting with ORDER BY • Sort rows with the ORDER BY clause • ASC: ascending order, default ASC: • DESC: descending order DESC: SQL Language LastName HireDate Selecting Data From Multiple Tables SELECT LastName, Gilbert 1998-07-31 1998- 07- HireDate FROM Employee Brown 1999-02-26 1999- 02- ORDER BY HireDate Tamburello 1999-12-12 1999- 12- LastName HireDate SELECT LastName, Valdez 2005-07-01 2005- 07- HireDate FROM Employee Tsoflias 2005-07-01 2005- 07- ORDER BY HireDate DESC Abbas 2005-04-15 2005- 04- Cartesian Product Data from Multiple Tables • This will produce Cartesian product: • Sometimes you need data from more than one table: SELECT LastName, Name AS DepartmentName FROM Employee, Department LastName DepartmentID DepartmentID Name Duffy 1 1 Engineering • The result: Abbas 3 2 Tool design Galvin 2 3 Sales LastName DepartmentName DepartmentName Duffy Document Control Wang Document Control LastName DepartmentName Sullivan Document Control Duffy Engineering Duffy Engineering Galvin Tool design Wang Engineering Abbas Sales .. .. (c) 2006 National Academy for Software Development - http://academy.devbg.org 14
  • Types of Joins INNER JOIN with ON Clause • To specify arbitrary conditions or specify • Inner joins columns to join, the ON clause is used • Left outer join • Such JOIN is called also INNER JOIN • Right outer SELECT e.EmployeeID, e.LastName, e.DepartmentID, d.DepartmentID, d.Name AS DepartmentName • Full outer join FROM Employee e INNER JOIN Department d ON e.DepartmentID = d.DepartmentID EmployeeID LastName Depart Depart DepartmentName mentID mentID 1 Gilbert 7 7 Production 2 Brown 4 4 Marketing 3 Tamburello 1 1 Engineering INNER vs. OUTER Joins Equijoins • Inner joins with join conditions pushed • The join of two tables returning only down to the WHERE clause matched rows is an inner join • A join between two tables that returns SELECT e.EmployeeID, e.LastName, e.DepartmentID, d.DepartmentID, d.Name AS DepartmentName the results of the inner join as well as FROM Employee e, Department d unmatched rows from the left (or right) WHERE e.DepartmentID = d.DepartmentID table is a left (or right) outer join right) EmployeeID LastName Depart Depart DepartmentName • A join between two tables that returns mentID mentID 1 Gilbert 7 7 Production the results of an inner join as well as the 2 Brown 4 4 Marketing results of a left and right join is a full 3 Tamburello 1 1 Engineering outer join INNER JOIN LEFT OUTER JOIN SELECT e.LastName EmpLastName, SELECT e.LastName EmpLastName, m.EmployeeID MgrID, m.LastName MgrLastName m.EmployeeID MgrID, m.LastName MgrLastName FROM Employee e INNER JOIN Employee m FROM Employee e LEFT OUTER JOIN Employee m ON e.ManagerID = m.EmployeeID ON e.ManagerID = m.EmployeeID EmpLastName MgrID MgrLastName EmpLastName MgrID MgrLastName Erickson 3 Tamburello Sánchez NULL NULL Goldberg 3 Tamburello Benshoof 6 Bradley Duffy 109 Sánchez Miller 14 Maxwell Johnson 185 Hill Okelberry 16 Brown Higa 185 Hill Hill 25 Mu Ford 185 Hill Frum 184 Richins Maxwell 21 Krebs Culbertson 30 Barreto de Mattos ... ... ... ... ... ... (c) 2006 National Academy for Software Development - http://academy.devbg.org 15
  • RIGHT OUTER JOIN FULL OUTER JOIN SELECT e.LastName EmpLastName, SELECT e.LastName EmpLastName, m.EmployeeID MgrID, m.LastName MgrLastName m.EmployeeID MgrID, m.LastName MgrLastName FROM Employee e RIGHT OUTER JOIN Employee m FROM employee e FULL OUTER JOIN employee m ON e.ManagerID = m.EmployeeID ON e.ManagerID = m.EmployeeID EmpLastName MgrID MgrLastName EmpLastName MgrID MgrLastName Lertpiriyasuwat 38 Liu Sanchez NULL NULL NULL 39 Hines … … … NULL 40 McKay Cracium 3 Tamburello Berglund 41 Wu Gilbert 16 Brown Koenigsbauer 123 Hay … … … NULL 124 Zabokritski NULL 17 Hartwig NULL 125 Decker NULL 1 Gilbert ... ... ... … … … Three-Way Joins Additional Conditions Three-Way • A three-way join is a join of three tables three- • You can apply additional conditions in the three-way WHERE clause: SELECT e.FirstName, e.LastName, t.Name as Town, a.AddressText SELECT e.EmployeeID, e.LastName, e.DepartmentID, FROM Employee e d.DepartmentID, d.Name AS DepartmentName JOIN Address a FROM Employee e ON e.AddressID = a.AddressID INNER JOIN Department d JOIN Town t ON e.DepartmentID = d.DepartmentID ON a.TownID = t.TownID WHERE d.Name = 'Sales' Sales' FirstName LastName Town AddressText EmployeeID LastName Depart Depart DepartmentName mentID mentID Guy Gilbert Monroe 7726 Driftwood Drive 268 Jiang 3 3 Sales Kevin Brown Everett 2294 West 39th St. 273 Welcker 3 3 Sales Roberto Tamburello Redmond 8000 Crane Court 275 Blythe 3 3 Sales ... ... ... ... Nested SELECT Statements • SELECT statements can be nested in the where clause SELECT FirstName, LastName, Salary SQL Language FROM Employee WHERE Salary = (SELECT MAX(Salary) FROM Employee) Nested SELECT Statements SELECT FirstName, LastName, DepartmentID, Salary FROM Employee WHERE DepartmentID IN (SELECT DepartmentID FROM Department WHERE Name='Sales') • Note: Always prefer joins to nested SELECT statements (better performance) (c) 2006 National Academy for Software Development - http://academy.devbg.org 16
  • Nested SELECT Statements Using the EXISTS Operator With Table Aliases • We can refer tables from the main • Using the EXISTS operator in SELECT SELECT in the nested SELECT by aliases statements • Example: Get the maximal salary for • Find all employees with managers from each department and the name of the the first department employee that gets it SELECT FirstName, LastName, EmployeeID, ManagerID FROM Employee e SELECT FirstName, LastName, DepartmentID, Salary WHERE EXISTS FROM Employee e (SELECT EmployeeID WHERE Salary = FROM Employee m (SELECT MAX(Salary) FROM Employee WHERE m.EmployeeID = e.ManagerID WHERE DepartmentID = e.DepartmentID) e.DepartmentID) AND m.DepartmentID = 1) ORDER BY DepartmentID Group Functions • Group functions operate on sets of rows to give one result per group SQL Language EmployeeID Salary Aggregating Data 1 12500,00 2 13500,00 MAX(Salary) 3 43300,00 125500,00 4 29800,00 5 25000,00 ... ... Group Functions in SQL AVG() and SUM() Functions • COUNT(*) – count of the selected rows • You can use AVG() and SUM() only for numeric data types • SUM(column) – sum of the values in SUM(column) given column from the selected rows SELECT AVG(Salary) [Average Salary], [Average • AVG(column) – average of the values in AVG(column) MAX(Salary) [Max Salary], MIN(Salary) [Min Salary], given column SUM(Salary) [Salary Sum] Sum] FROM Employee • MAX(column) – the maximal value in MAX(column) WHERE JobTitle = 'Sales Representative' given column Average Salary Max Salary Min Salary Salary Sum • MIN(column) – the minimal value in MIN(column) 23100,00 23100,00 23100,00 323400,00 given column (c) 2006 National Academy for Software Development - http://academy.devbg.org 17
  • The COUNT(…) Function MIN() and MAX() Functions COUNT(…) • You can use MIN() and MAX() for any • COUNT(*) returns the number of rows in data type (int, datetime, varchar, ...) (int, datetime, varchar, the result table (int, SELECT MIN(HireDate) MinHD, MAX(HireDate) MaxHD Cnt SELECT COUNT(*) Cnt FROM Employee FROM Employee WHERE DepartmentID = 3 18 MinHD MaxHD • COUNT(expr) returns the number of rows COUNT(expr) COUNT(expr) 1996-07-31 1996- 07- 2003-06-03 2003- 06- with non-null values for the expr non- non-null • Displaying the first and last employee's MgrCount AllCount SELECT COUNT(ManagerID) MgrCount, name in alphabetical order: COUNT(*) AllCount 1 2 FROM Employee SELECT MIN(LastName), MAX(LastName) WHERE DepartmentID = 16 FROM employee Group Functions in Nested Queries • For each department display the earliest hired employee SQL Language SELECT e.FirstName, e.LastName, e.HireDate, d.Name FROM Employee e JOIN Department d Group Functions and the ON e.DepartmentID = d.DepartmentID GROUP BY Statement WHERE e.HireDate = (SELECT MIN(HireDate) FROM Employee WHERE DepartmentID = d.DepartmentID) FirstName LastName HireDate Name Guy Gilbert 1998-07-31 00:00:00 1998- 07- Production Kevin Brown 1999-02-26 00:00:00 1999- 02- Marketing Roberto Tamburello 1999-12-12 00:00:00 1999- 12- Engineering The GROUP BY Statement Creating Groups of Data • We can divide rows in a table into smaller Employee groups by using the GROUP BY clause DepartmentID Salary 12 10300 • The syntax: 12 16800 72000 12 16800 SELECT <columns>, <group_function(column)> <columns>, <group_function(column)> DepartmentID SUM(Salary) 12 10300 FROM <table> <table> 12 72000 12 17800 [WHERE <condition>] <condition>] 2 108600 2 28800 [GROUP BY <group_by_expression>] group_by_expression>] 16 185600 2 25000 108600 [ORDER BY <columns> columns> ... ... 2 29800 2 25000 • The <group_by_expression> is a list of <group_by_expression> 16 125500 185600 columns 16 60100 ... ... (c) 2006 National Academy for Software Development - http://academy.devbg.org 18
  • Grouping by Several The GROUP BY Statement Columns • Example of grouping data: Depart JobTitle Salary mentID Network 39700 11 39700 SELECT DepartmentID, SUM(Salary) as SalariesCost Manager Depart JobTitle Salary FROM Employee mentID Network 11 32500 GROUP BY DepartmentID Administrator Network 65000 11 39700 Manager Network 11 32500 Administrator DepartmentID SalariesCost Network 11 65000 Administrator Database 12 72000 11 38500 Administrator Database 2 108600 77000 11 77000 Administrator Database 11 38500 16 185600 Administrator 10 Accountant 52800 ... ... 10 Accountant 26400 Finance 52800 10 43300 Manager 10 Accountant 26400 • The GROUP BY column does not have to ... ... ... Finance 43300 10 43300 Manager be in the SELECT list ... ... ... Grouping by Several Illegal Queries Columns – Example • This SELECT statement is illegal • Example of grouping data by several columns: SELECT DepartmentID, COUNT(LastName) FROM Employee SELECT DepartmentID, JobTitle, SUM(Salary) as Salaries, COUNT(*) as Count • Can not combine columns with groups FROM Employee functions unless when using GROUP BY GROUP BY DepartmentID, JobTitle • This SELECT statement is also illegal DepartmentID JobTitle Salaries Count 2 Senior Tool Designer 58600 2 SELECT DepartmentID, AVG(Salary) AVG(Salary) FROM Employee 2 Tool Designer 50000 2 WHERE AVG(Salary) > 30 AVG(Salary) 7 Production Supervisor 525000 21 GROUP BY DepartmentID 7 Production Technician 1926000 157 ... ... ... ... • Can not use WHERE for group functions Using GROUP BY with Grouping Restrictions HAVING Clause • HAVING works like WHERE but is used for • When using groups we can select only columns listed in the GROUP BY and the grouping functions grouping functions over the other columns SELECT DepartmentID, COUNT(EmployeeID) as SELECT DepartmentID, JobTitle, Count, AVG(Salary) AverageSalary SUM(Salary) AS Cost, MIN(HireDate) as StartDate FROM Employee FROM Employee GROUP BY DepartmentID GROUP BY DepartmentID, JobTitle HAVING COUNT(EmployeeID) BETWEEN 3 AND 5 • Can not select columns not listed in the DepartmentID Count AverageSalary GROUP BY clause 2 4 27150 • Can not apply group functions over the 12 5 14400 … … … columns in the GROUP BY clause (c) 2006 National Academy for Software Development - http://academy.devbg.org 19
  • Using Grouping Functions and Table Joins • We can apply grouping function on columns from joined tables SQL Language SELECT COUNT(*) AS EmpCount, d.Name AS DeptName FROM Employee e JOIN Department d ON e.DepartmentID = d.DepartmentID Inserting Data in Tables WHERE e.HireDate BETWEEN '1999-2-1' AND '2002-12-31' '1999- '2002- 12- GROUP BY d.Name HAVING COUNT(*) > 5 ORDER BY EmpCount DESC EmpCount DeptName 95 Production 8 Finance 8 Information Services Inserting Data • INSERT command • INSERT INTO <table> VALUES (<values>) • INSERT INTO <table>(<columns>) VALUES SQL Language (<values>) • INSERT INTO <table> SELECT <values> Updating Data in Tables INSERT INTO EmployeeProject VALUES (229, 25) INSERT INTO Project(Name, StartDate) VALUES ('New project', GETDATE()) INSERT INTO Project(Name, StartDate) SELECT Name + ' Restructuring', GETDATE() FROM Department Updating Data Updating Joined Tables • UPDATE command • We can update tables based on condition from joined tables • UPDATE <table> SET <column=expression> WHERE <condition> UPDATE Employee • Note: Don't forget the WHERE clause! SET JobTitle = 'Senior ' + JobTitle FROM Employee e JOIN Department d UPDATE Employee ON e.DepartmentID = d.DepartmentID SET LastName = 'Brown' WHERE d.Name = 'Sales' WHERE EmployeeID = 1 UPDATE Employee SET Salary = Salary * 1.10, JobTitle = 'Senior ' + JobTitle WHERE DepartmentID = 3 (c) 2006 National Academy for Software Development - http://academy.devbg.org 20
  • Deleting Data • Deleting rows from a table • DELETE FROM <table> WHERE <condition> SQL Language DELETE FROM Employee WHERE EmployeeID = 1 Deleting Data from Tables DELETE FROM Employee WHERE LastName LIKE 'S%' • Note: Don’t forget the WHERE clause! Don’ Don’t • Delete all rows from a table at once • TRUNCATE TABLE <table> <table> <table> TRUNCATE TABLE [User] Deleting from Joined Tables • We can delete records from tables based on condition from joined tables SQL Language DELETE FROM Employee FROM Employee e JOIN Department d SQL Server Functions ON e.DepartmentID = d.DepartmentID WHERE d.Name = 'Sales' Standard Functions in COALESCE() Function COALESCE() Microsoft SQL • COALESCE(<value>,<default_value>) – • Single-row functions Single- COALESCE(<value>,<default_value>) Single-row converts NULL values to given default value • String functions SELECT Name AS [Project Name], • Mathematical functions COALESCE(EndDate, GETDATE()) AS [End Date] FROM Project • Date functions • Conversion functions Project Name End Date Classic Vest 2006-07-02 08:19:43.983 2006- 07- • Multiple-row functions Multiple- Multiple-row Cycling Cap 2003-06-01 00:00:00.000 2003- 06- Full-Finger Gloves Full- 2003-06-01 00:00:00.000 2003- 06- • Aggregate functions Half-Finger Gloves Half- 2003-06-01 00:00:00.000 2003- 06- HL Mountain Frame 2003-06-01 00:00:00.000 2003- 06- ... ... (c) 2006 National Academy for Software Development - http://academy.devbg.org 21
  • String Functions Other Functions • Changing the casing – LOWER, UPPER LOWER, • Mathematical Functions – ROUND, FLOOR, ROUND, FLOOR, POWER, ABS, SQRT, … • Manipulating characters – SUBSTRING, SUBSTRING, LEN, LEFT, RIGHT, LTRIM, REPLACE SELECT FLOOR(3.14) 3 SELECT ROUND(5.86, 0) 6.00 SELECT LastName, LEN(LastName) AS LastNameLen, • Date Functions – GETDATE, DATEADD, UPPER(LastName) AS UpperLastName GETDATE, FROM Employee DAY, MONTH, YEAR, … WHERE RIGHT(LastName, 3) = 'son' • Conversion Functions – CONVERT, CAST LastName LastNameLen UpperLastName Erickson 8 ERICKSON SELECT CONVERT(DATETIME, '20051231', 112) Johnson 7 JOHNSON 2005-12-31 00:00:00.000 2005- 12- Munson 6 MUNSON -- 112 is the ISO formatting style YYYYMMDD ... ... ... Релационни бази от данни и Combining Functions Use Microsoft SQL Server 2005 • We can combine functions to achieve more complex behavior Въпроси? SELECT Name AS [Project Name], COALESCE(CONVERT(nvarchar(50), EndDate), 'Not Finished') AS [Date Finished] FROM Project Project Name Date Finished HL Mountain Front Wheel Jun 1 2003 12:00AM LL Touring Handlebars Not Finished HL Touring Handlebars Not Finished LL Road Front Wheel Jun 1 2003 12:00AM ... ... (c) 2006 National Academy for Software Development - http://academy.devbg.org 22