Scanning the Internet for External Cloud Exposures via SSL Certs
Intro To RDBMS And SQL Server 2005 - Svetlin Nakov
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. Курсове за напреднали НАРС – успешен старт
• Курсове за напреднали • НАРС ви гарантира успешен старт в
кариерата на софтуерен инженер
• Дават професията “софтуерен инженер”
“софтуерен инженер”
• Практическо обучение по:
по: • Работа в престижи софтуерни фирми:
фирми:
• Обектно-ориентирано програмиране
Обектно-
Обектно-ориентирано • 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. Таблици
• Таблиците представляват съвкупност от
стойности, подредени в редове и колони.
стойности, колони.
Пример (таблица 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. Множественост на Множественост на
връзките (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. E/R диаграми – пример E/R диаграми – пример
Диаграмата е създадена
Диаграмата е
с fabFORCE DB Designer
създадена с
PLATINUM ERwin
E/R диаграми – пример
(c) 2006 National Academy for Software
Development - http://academy.devbg.org 5
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. Индекси
• Индексите ускоряват скоростта на
търсене на стойност в дадена колона
или група от колони
• Ползват се при големи таблици Езикът 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. Съхранени процедури
• Процедури на ниво база се пишат на
език, разширение на 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. Тригери – пример
• Имаме таблица с имена на фирми:
фирми:
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. Транзакции – пример Транзакции и изолация
• Транзакциите могат да дефинират
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. 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. 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. 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. 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. 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. 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. 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. 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