+ All Categories
Home > Technology > SQL: Indexes, Select operator

SQL: Indexes, Select operator

Date post: 10-Feb-2017
Category:
Upload: eleksdev
View: 1,618 times
Download: 0 times
Share this document with a friend
20
eleks.com eleks.com Індекси. Оператор Select Індекси Вибір даних та обмеження Підзапити Використання функцій та виразів
Transcript
Page 1: SQL: Indexes, Select operator

eleks.com eleks.com

Індекси.Оператор Select

• Індекси• Вибір даних та обмеження• Підзапити• Використання функцій та виразів

Page 2: SQL: Indexes, Select operator

Індекси

Page 3: SQL: Indexes, Select operator

Індекси•Представленні у вигляді B-дерева•Створюються на колонки таблиць або представлень•Винятки – LOB (Large Object) типи: image, text,

varchar(max)•Варіанти індексів:

- Кластерні (значення зберігаються в кластеризованій таблиці)

- Некластерні (значення зберігаються в кучі)•Різниця між індексом та ключемCREATE NONCLUSTERED INDEX [IDX_Document]

ON [dbo].[Document] ([Сlient])DROP INDEX [IDX_Document] ON [dbo].[Document]

Page 4: SQL: Indexes, Select operator

Типи індексівСкладений

• може містити більше одного стовпчика (до 16). Їх загальна довжина обмежена 900 байтами. Як кластеризовані, так і некластеризовані індекси можуть бути складеними.

Унікальний • забезпечує унікальність кожного значення в індексованих

стовпцях. Якщо індекс складений, то унікальність поширюється на всі стовпці індексу. Автоматично створюється коли ви визначаєте первинний ключ або обмеження на унікальність значеньПокриваючий

• дозволяє конкретному запиту одразу отримати всі дані з листків індекса без додаткових звернень до записів самої таблиці

Page 5: SQL: Indexes, Select operator

Без будь-яких обмежень:select * from ClientcInstance cName cAddress cAmount cComment----------- ------------ ----------- --------- --------1 Client_1 Address_1 0.00 Comments3 Client_3 NULL -10.00 NULL2 Client_2 Address_2 20.00 NULL

Перелік колонок:select Name, Address, Amount, Instance from ClientscName cAddress cAmount cInstance --------- ---------- -------- ---------- Client_1 Address_1 0.00 1 Client_3 NULL -10.00 3 Client_2 Address_2 20.00 2

Оператор SELECT

Page 6: SQL: Indexes, Select operator

Додавання колонок та їх назви (явне визначення):select a.cName [Name], 'AAA' SomeColumn from Client a

Name SomeColumn ----------- ------Client_1 AAAClient_2 AAAClient_3 AAA

Вираз DISTINCT:select DISTINCT Comment from Client 

Comment-----------NULLComment

Оператор SELECT, DISTINCT

Page 7: SQL: Indexes, Select operator

Порядок рядків (ORDER BY - явне визначення)select Name, Address from Client ORDER BY Amount DESCName Address----------- -----------Client_2 Address_2Client_1 Address_1Client_3 NULL

Вибір кількості рядків (TOP):select TOP (2) Name from Clientselect TOP (40) PERCENT Name from Client 

Name-----------Client_1Client_2

ORDER BY, TOP

Page 8: SQL: Indexes, Select operator

Вибір рядків здійснює вираз WHERE:select Name, Address from Client WHERE Amount = 20 Name Address-------- ----------Client_2 Address_2

Операції порівняння := | <> | != | > | >= | !> | < | <= | !<Булеві оператори AND, OR або NOTselect Name, Address

from Clientwhere Amount = 20 and Name = 'Client_1'

NOT  NOT

TRUE FALSE

FALSE TRUE

UNKNOWN UNKNOWN

OR TRUE FALSE UNKNOWN

TRUE TRUE TRUE TRUE

FALSE TRUE FALSE UNKNOWN

UNKNOWN TRUE UNKNOWN UNKNOWN

AND  TRUE FALSE UNKNOWN

TRUE TRUE FALSE UNKNOWN

FALSE FALSE FALSE FALSE

UNKNOWN UNKNOWN FALSE UNKNOWN

Вираз WHERE

Page 9: SQL: Indexes, Select operator

Предикат IS [NOT] NULLselect Name, Address from Clients

where Address IS NOT NULL cName cAddress----------- ----------Client_1 Address_1Client_2 Address_2

Операнд LIKE:Трафаретні символи «підкреслення» (_) та «відсотку» (%) select cName, cAddress from tClients where cAddress LIKE 'ADDR%‘

Name Address-------- ----------Client_1 Address_1Client_2 Address_2

Керуючий символ у виразі ESCAPE:select cName, cAddress from tClients

where cAddress LIKE 'Address_#%' ESCAPE '#'

IS NULL   IS NOT NULL  

TRUE FALSE TRUE TRUE

NULL TRUE NULL FALSE

FALSE FALSE FALSE TRUE

Логічні вирази вибору даних

Page 10: SQL: Indexes, Select operator

Логічні вирази вибору данихОперанд BETWEEN:

select Name, Address from Client where Amount BETWEEN 0 AND 20 --(Amount >= 0 and Amount <= 20)

 

Name Address--------- ----------Client_1 Address_1Client_2 Address_2

Предикат IN:select Name, Address from Client

where Amount IN ( 10, 20) --(Amount = 10 or Amount = 20) 

Name Address--------- ----------Client_2 Address_2

Page 11: SQL: Indexes, Select operator

Підзапити

Перелік конкретних значень (IN):select Name, Address from Client

where Instance IN (select Client from Documents) Name Address---------- ----------Client_1 Address_1Client_2 Address_2Client_3 NULL

Перевірка наявності (EXISTS):select Name, Address from Client

where EXISTS(select 1 from Documentwhere Client = Instance)

Page 12: SQL: Indexes, Select operator

Вирази SOME і ANYSelect Name, Address from Client

where Instance = ANY(select Client from Document)

Вираз ALL:select Name, Amount from Client

where Amount < ALL(select Amount from Document) Name Amount----------- ----------Client_1 0.00Client_3 -10.00Слід звернути увагу, що підзапити вертають більше одного рядка і порівняння із конкретним значенням є неможливим (генерується помилка)

Підзапити

Page 13: SQL: Indexes, Select operator

Підзапити

Вкладені підзапити:select t.* from

(select k.ints ints from(select cInstance ints, cName Nm

from tClientswhere cInstance > 1) k

where k.Nm not like 'D%') t order by t.ints

ints-------23

Page 14: SQL: Indexes, Select operator

Вирази та функціїПрості вирази:select Name + ' ' + Address Client, Amount + 1 Amout from Client

Client Amout-------------------- ------------Client_1 Address_1 1.00Client_2 Address_2 21.00NULL -9.00

Оператор CASE (два варіанти):select Name + ' ' + case when Address is null then '' else Address end Client,Amount + 1 Amout from Clientselect Name + ' ' + case Address when null then '' else Address end Client,cAmount + 1 Amout from Client

Client Amout-------------------- ------------Client_1 Address_1 1.00Client_2 Address_2 21.00Client_3 -9.00

Page 15: SQL: Indexes, Select operator

Вирази та функціїФункції NULLIF та ISNULL:

select Name + ' ' + case isnull(Address,'') when '' then ''

else Address end Client, nullif( Comment, '') Comment, Commentfrom Client 

Client Comment cComment------------------- --------- ----------Client_1 Address_1 Comments CommentsClient_2 Address_2 NULL NULLClient_3 NULL

Функції роботи зі стрічками:ASCII SUBSTRING REVERSE LEN REPLACE LTRIM

CHAR PATINDEX STR NCHAR CHARINDEX RTRIM

REPLICATE SPACE LEFT RIGHT UPPER LOWER

UNICODE (повертає номер UNICODE-сторінки) STUFF (заміняє один вираз іншим у стрічці)

QUOTENAME (повертає UNICODE-стрічку із потрібними подвійними знаками)

DIFFERENCE (порівнює дві стрічки та повертає степінь їх подібності)

SOUNDEX (повертає закодоване 4-символьне скорочення стрічки)

Page 16: SQL: Indexes, Select operator

Вирази та функціїФункції приведення типів (CAST, CONVERT):

select Number + ' ' + cast(Amount as varchar(10)) Num,cast(Date as varchar(25)) d1,convert(varchar(25), Date, 120) d2from Document

Формати дат:yy yyyy Standard Input/Output - 0 or 100 Default mon dd yyyy hh:miAM1 101 U.S. mm/dd/yyyy2 102 ANSI yy.mm.dd- 9 or 109 Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM

10 110 USA mm-dd-yy11 111 JAPAN yy/mm/dd12 112 ISO Yymmdd- 13 or 113 Europe default + milliseconds dd mon yyyy hh:mi:ss:mmm(24h)

14 114 - hh:mi:ss:mmm(24h)- 20 or 120 ODBC canonical yyyy-mm-dd hh:mi:ss(24h)- 21 or 121 ODBC canonical yyyy-mm-dd hh:mi:ss.mmm(24h)- 126 ISO8601 yyyy-mm-ddThh:mi:ss.mmm  127 ISO8601 with time zone yyyy-mm-ddThh:mi:ss.mmmZ

Page 17: SQL: Indexes, Select operator

Вирази та функції

Функції для роботи з типом DATETIME:select Number, Date, dateadd( day, 1, Date) d1, datediff( month, Date, getdate()) d2, datename( month, Date) d3, month( getutcdate()) d4 from Document

 

dNumber dDate d1 d2 d3 d4---------- ----------------------- ----------------------- --- -------- --I-001 2007-01-04 00:00:00.000 2007-01-05 00:00:00.000 9 January 10I-003 2007-02-04 00:00:00.000 2007-02-05 00:00:00.000 8 February 10P-001 2007-01-04 00:00:00.000 2007-01-05 00:00:00.000 9 January 10P-003 2007-02-04 00:00:00.000 2007-02-05 00:00:00.000 8 February 10

Функція ПризначенняDATEADD Змінити дату за вказаним правиломDATEDIFF Порівняти дві дати за вказаним правилом

DATENAME Вибрати назву частини дати за вказаним правилом

DATEPART Вибрати частину дати за вказаним правиломDAY Номер дня

GETDATE() Вернути системну датуGETUTCDATE() Вернути текучу UTC-дату

MONTH Номер місяцяYEAR Номер року

Page 18: SQL: Indexes, Select operator

Порядок виконання оператора SELECT

FROM WHERE GROUP

BY HAVING SELECT DISTINCT ORDER BY TOP

SELECT TOP 5ClientId,Name,SUM( Amount) as Doc_CountFROM ClientWHERE Client = InstanceAND Type = 2GROUP BY ClientId, NameORDER BY ClientId

Page 19: SQL: Indexes, Select operator

Knowledge is having the right answer. Intelligence is asking the right question. - Anonymous

Page 20: SQL: Indexes, Select operator

Recommended