Съдържание
                                                  1. Национална академия по разработка
                        ...
Курсове за напреднали                               НАРС – успешен старт
        • Курсове за напреднали                  ...
Таблици
                                                              • Таблиците представляват съвкупност от
            ...
Множественост на                                       Множественост на
                        връзките (1 x 1)          ...
E/R диаграми – пример            E/R диаграми – пример

                                                         Диаграмат...
Нормализация                                                      Нормализация – пример
                                  ...
Индекси
        • Индексите ускоряват скоростта на
          търсене на стойност в дадена колона
          или група от ко...
Съхранени процедури
        • Процедури на ниво база се пишат на
          език, разширение на SQL
          език,
       ...
Тригери – пример
        • Имаме таблица с имена на фирми:
                                   фирми:
            CREATE TA...
Транзакции – пример                                      Транзакции и изолация
                                           ...
What is SQL?
                                                                     • Structured Query Language (SQL)
      ...
The NASD Database
                                 Schema in SQL Server

                   Employee                     D...
The NULL Value                                           Column Alias
        • A NULL is a value that is unavailable,    ...
Other Comparison                                             Other Comparison
                         Conditions         ...
Types of Joins                                                   INNER JOIN with ON Clause

                              ...
RIGHT OUTER JOIN                                              FULL OUTER JOIN

         SELECT e.LastName EmpLastName,    ...
Nested SELECT Statements
                                                                                Using the EXISTS ...
The COUNT(…) Function
                         MIN() and MAX() Functions                                            COUNT(...
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
Upcoming SlideShare
Loading in...5
×

Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

1,719

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,719
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
204
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Intro To RDBMS And SQL Server 2005 - Svetlin Nakov

  1. 1. Съдържание 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
  2. 2. Курсове за напреднали НАРС – успешен старт • Курсове за напреднали • НАРС ви гарантира успешен старт в кариерата на софтуерен инженер • Дават професията “софтуерен инженер” “софтуерен инженер” • Практическо обучение по: по: • Работа в престижи софтуерни фирми: фирми: • Обектно-ориентирано програмиране Обектно- Обектно-ориентирано • 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
  3. 3. Таблици • Таблиците представляват съвкупност от стойности, подредени в редове и колони. стойности, колони. Пример (таблица 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
  4. 4. Множественост на Множественост на връзките (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
  5. 5. E/R диаграми – пример E/R диаграми – пример Диаграмата е създадена Диаграмата е с fabFORCE DB Designer създадена с PLATINUM ERwin E/R диаграми – пример (c) 2006 National Academy for Software Development - http://academy.devbg.org 5
  6. 6. Нормализация Нормализация – пример • Пример за нормализирана схема: схема: • Нормализацията на релационната схема премахва повтарящите се данни 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
  7. 7. Индекси • Индексите ускоряват скоростта на търсене на стойност в дадена колона или група от колони • Ползват се при големи таблици Езикът 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
  8. 8. Съхранени процедури • Процедури на ниво база се пишат на език, разширение на 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
  9. 9. Тригери – пример • Имаме таблица с имена на фирми: фирми: 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
  10. 10. Транзакции – пример Транзакции и изолация • Транзакциите могат да дефинират 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×