Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
eleks.comeleks.com
Індекси.
Оператор Select
• Індекси
• Вибір даних та обмеження
• Підзапити
• Використання функцій та виразів
Індекси
Індекси
• Представленні у вигляді B-дерева
• Створюються на колонки таблиць або представлень
• Винятки – LOB (Large Object) типи: image, text, varchar(max)
• Варіанти індексів:
- Кластерні (значення зберігаються в кластеризованій таблиці)
- Некластерні (значення зберігаються в кучі)
• Різниця між індексом та ключем
CREATE NONCLUSTERED INDEX [IDX_Document]
ON [dbo].[Document] ([Сlient])
DROP INDEX [IDX_Document] ON [dbo].[Document]
Типи індексів
Складений
• може містити більше одного стовпчика (до 16). Їх загальна довжина
обмежена 900 байтами. Як кластеризовані, так і некластеризовані
індекси можуть бути складеними.
Унікальний
• забезпечує унікальність кожного значення в індексованих стовпцях.
Якщо індекс складений, то унікальність поширюється на всі стовпці
індексу. Автоматично створюється коли ви визначаєте первинний ключ
або обмеження на унікальність значень
Покриваючий
• дозволяє конкретному запиту одразу отримати всі дані з листків індекса
без додаткових звернень до записів самої таблиці
Без будь-яких обмежень:
select * from Client
cInstance cName cAddress cAmount cComment
----------- ------------ ----------- --------- --------
1 Client_1 Address_1 0.00 Comments
3 Client_3 NULL -10.00 NULL
2 Client_2 Address_2 20.00 NULL
Перелік колонок:
select Name, Address, Amount, Instance from Clients
cName cAddress cAmount cInstance
--------- ---------- -------- ----------
Client_1 Address_1 0.00 1
Client_3 NULL -10.00 3
Client_2 Address_2 20.00 2
Оператор SELECT
Додавання колонок та їх назви (явне визначення):
select a.cName [Name], 'AAA' SomeColumn from Client a
Name SomeColumn
----------- ------
Client_1 AAA
Client_2 AAA
Client_3 AAA
Вираз DISTINCT:
select DISTINCT Comment from Client
Comment
-----------
NULL
Comment
Оператор SELECT, DISTINCT
Порядок рядків (ORDER BY - явне визначення)
select Name, Address from Client ORDER BY Amount DESC
Name Address
----------- -----------
Client_2 Address_2
Client_1 Address_1
Client_3 NULL
Вибір кількості рядків (TOP):
select TOP (2) Name from Client
select TOP (40) PERCENT Name from Client
Name
-----------
Client_1
Client_2
ORDER BY, TOP
Вибір рядків здійснює вираз WHERE:
select Name, Address from Client WHERE Amount = 20
Name Address
-------- ----------
Client_2 Address_2
Операції порівняння :
= | <> | != | > | >= | !> | < | <= | !<
Булеві оператори
AND, OR або NOT
select Name, Address
from Client
where 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
Предикат IS [NOT] NULL
select Name, Address from Clients
where Address IS NOT NULL
cName cAddress
----------- ----------
Client_1 Address_1
Client_2 Address_2
Операнд LIKE:
Трафаретні символи «підкреслення» (_) та «відсотку» (%)
select cName, cAddress from tClients where cAddress LIKE 'ADDR%‘
Name Address
-------- ----------
Client_1 Address_1
Client_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
Логічні вирази вибору даних
Логічні вирази вибору даних
Операнд BETWEEN:
select Name, Address from Client
where Amount BETWEEN 0 AND 20 --(Amount >= 0 and Amount <= 20)
Name Address
--------- ----------
Client_1 Address_1
Client_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
Підзапити
Перелік конкретних значень (IN):
select Name, Address from Client
where Instance IN (select Client from Documents)
Name Address
---------- ----------
Client_1 Address_1
Client_2 Address_2
Client_3 NULL
Перевірка наявності (EXISTS):
select Name, Address from Client
where EXISTS(select 1 from Document
where Client = Instance)
Вирази SOME і ANY
Select 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.00
Client_3 -10.00
Слід звернути увагу, що підзапити вертають більше одного рядка і порівняння із
конкретним значенням є неможливим (генерується помилка)
Підзапити
Підзапити
Вкладені підзапити:
select t.* from
(select k.ints ints from
(select cInstance ints, cName Nm
from tClients
where cInstance > 1) k
where k.Nm not like 'D%') t
order by t.ints
ints
-------
2
3
Вирази та функції
Прості вирази:
select Name + ' ' + Address Client, Amount + 1 Amout from Client
Client Amout
-------------------- ------------
Client_1 Address_1 1.00
Client_2 Address_2 21.00
NULL -9.00
Оператор CASE (два варіанти):
select Name + ' ' +
case when Address is null then '' else Address end Client,
Amount + 1 Amout from Client
select Name + ' ' +
case Address when null then '' else Address end Client,
cAmount + 1 Amout from Client
Client Amout
-------------------- ------------
Client_1 Address_1 1.00
Client_2 Address_2 21.00
Client_3 -9.00
Вирази та функції
Функції NULLIF та ISNULL:
select Name + ' ' +
case isnull(Address,'') when '' then ''
else Address end Client,
nullif( Comment, '') Comment, Comment
from Client
Client Comment cComment
------------------- --------- ----------
Client_1 Address_1 Comments Comments
Client_2 Address_2 NULL NULL
Client_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-символьне скорочення стрічки)
Вирази та функції
Функції приведення типів (CAST, CONVERT):
select Number + ' ' + cast(Amount as varchar(10)) Num,
cast(Date as varchar(25)) d1,
convert(varchar(25), Date, 120) d2
from Document
Формати дат:
yy yyyy Standard Input/Output
- 0 or 100 Default mon dd yyyy hh:miAM
1 101 U.S. mm/dd/yyyy
2 102 ANSI yy.mm.dd
- 9 or 109 Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM
10 110 USA mm-dd-yy
11 111 JAPAN yy/mm/dd
12 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
Вирази та функції
Функції для роботи з типом 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 10
I-003 2007-02-04 00:00:00.000 2007-02-05 00:00:00.000 8 February 10
P-001 2007-01-04 00:00:00.000 2007-01-05 00:00:00.000 9 January 10
P-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 Номер року
Порядок виконання оператора SELECT
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
TOP
SELECT TOP 5
ClientId,
Name,
SUM( Amount) as Doc_Count
FROM Client
WHERE Client = Instance
AND Type = 2
GROUP BY ClientId, Name
ORDER BY ClientId
Knowledge is having the right answer.
Intelligence is asking the right question.
- Anonymous
“
SQL: Indexes, Select operator

More Related Content

SQL: Indexes, Select operator

  • 1. eleks.comeleks.com Індекси. Оператор Select • Індекси • Вибір даних та обмеження • Підзапити • Використання функцій та виразів
  • 3. Індекси • Представленні у вигляді B-дерева • Створюються на колонки таблиць або представлень • Винятки – LOB (Large Object) типи: image, text, varchar(max) • Варіанти індексів: - Кластерні (значення зберігаються в кластеризованій таблиці) - Некластерні (значення зберігаються в кучі) • Різниця між індексом та ключем CREATE NONCLUSTERED INDEX [IDX_Document] ON [dbo].[Document] ([Сlient]) DROP INDEX [IDX_Document] ON [dbo].[Document]
  • 4. Типи індексів Складений • може містити більше одного стовпчика (до 16). Їх загальна довжина обмежена 900 байтами. Як кластеризовані, так і некластеризовані індекси можуть бути складеними. Унікальний • забезпечує унікальність кожного значення в індексованих стовпцях. Якщо індекс складений, то унікальність поширюється на всі стовпці індексу. Автоматично створюється коли ви визначаєте первинний ключ або обмеження на унікальність значень Покриваючий • дозволяє конкретному запиту одразу отримати всі дані з листків індекса без додаткових звернень до записів самої таблиці
  • 5. Без будь-яких обмежень: select * from Client cInstance cName cAddress cAmount cComment ----------- ------------ ----------- --------- -------- 1 Client_1 Address_1 0.00 Comments 3 Client_3 NULL -10.00 NULL 2 Client_2 Address_2 20.00 NULL Перелік колонок: select Name, Address, Amount, Instance from Clients cName cAddress cAmount cInstance --------- ---------- -------- ---------- Client_1 Address_1 0.00 1 Client_3 NULL -10.00 3 Client_2 Address_2 20.00 2 Оператор SELECT
  • 6. Додавання колонок та їх назви (явне визначення): select a.cName [Name], 'AAA' SomeColumn from Client a Name SomeColumn ----------- ------ Client_1 AAA Client_2 AAA Client_3 AAA Вираз DISTINCT: select DISTINCT Comment from Client Comment ----------- NULL Comment Оператор SELECT, DISTINCT
  • 7. Порядок рядків (ORDER BY - явне визначення) select Name, Address from Client ORDER BY Amount DESC Name Address ----------- ----------- Client_2 Address_2 Client_1 Address_1 Client_3 NULL Вибір кількості рядків (TOP): select TOP (2) Name from Client select TOP (40) PERCENT Name from Client Name ----------- Client_1 Client_2 ORDER BY, TOP
  • 8. Вибір рядків здійснює вираз WHERE: select Name, Address from Client WHERE Amount = 20 Name Address -------- ---------- Client_2 Address_2 Операції порівняння : = | <> | != | > | >= | !> | < | <= | !< Булеві оператори AND, OR або NOT select Name, Address from Client where 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
  • 9. Предикат IS [NOT] NULL select Name, Address from Clients where Address IS NOT NULL cName cAddress ----------- ---------- Client_1 Address_1 Client_2 Address_2 Операнд LIKE: Трафаретні символи «підкреслення» (_) та «відсотку» (%) select cName, cAddress from tClients where cAddress LIKE 'ADDR%‘ Name Address -------- ---------- Client_1 Address_1 Client_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 Логічні вирази вибору даних
  • 10. Логічні вирази вибору даних Операнд BETWEEN: select Name, Address from Client where Amount BETWEEN 0 AND 20 --(Amount >= 0 and Amount <= 20) Name Address --------- ---------- Client_1 Address_1 Client_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
  • 11. Підзапити Перелік конкретних значень (IN): select Name, Address from Client where Instance IN (select Client from Documents) Name Address ---------- ---------- Client_1 Address_1 Client_2 Address_2 Client_3 NULL Перевірка наявності (EXISTS): select Name, Address from Client where EXISTS(select 1 from Document where Client = Instance)
  • 12. Вирази SOME і ANY Select 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.00 Client_3 -10.00 Слід звернути увагу, що підзапити вертають більше одного рядка і порівняння із конкретним значенням є неможливим (генерується помилка) Підзапити
  • 13. Підзапити Вкладені підзапити: select t.* from (select k.ints ints from (select cInstance ints, cName Nm from tClients where cInstance > 1) k where k.Nm not like 'D%') t order by t.ints ints ------- 2 3
  • 14. Вирази та функції Прості вирази: select Name + ' ' + Address Client, Amount + 1 Amout from Client Client Amout -------------------- ------------ Client_1 Address_1 1.00 Client_2 Address_2 21.00 NULL -9.00 Оператор CASE (два варіанти): select Name + ' ' + case when Address is null then '' else Address end Client, Amount + 1 Amout from Client select Name + ' ' + case Address when null then '' else Address end Client, cAmount + 1 Amout from Client Client Amout -------------------- ------------ Client_1 Address_1 1.00 Client_2 Address_2 21.00 Client_3 -9.00
  • 15. Вирази та функції Функції NULLIF та ISNULL: select Name + ' ' + case isnull(Address,'') when '' then '' else Address end Client, nullif( Comment, '') Comment, Comment from Client Client Comment cComment ------------------- --------- ---------- Client_1 Address_1 Comments Comments Client_2 Address_2 NULL NULL Client_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-символьне скорочення стрічки)
  • 16. Вирази та функції Функції приведення типів (CAST, CONVERT): select Number + ' ' + cast(Amount as varchar(10)) Num, cast(Date as varchar(25)) d1, convert(varchar(25), Date, 120) d2 from Document Формати дат: yy yyyy Standard Input/Output - 0 or 100 Default mon dd yyyy hh:miAM 1 101 U.S. mm/dd/yyyy 2 102 ANSI yy.mm.dd - 9 or 109 Default + milliseconds mon dd yyyy hh:mi:ss:mmmAM 10 110 USA mm-dd-yy 11 111 JAPAN yy/mm/dd 12 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
  • 17. Вирази та функції Функції для роботи з типом 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 10 I-003 2007-02-04 00:00:00.000 2007-02-05 00:00:00.000 8 February 10 P-001 2007-01-04 00:00:00.000 2007-01-05 00:00:00.000 9 January 10 P-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 Номер року
  • 18. Порядок виконання оператора SELECT FROM WHERE GROUP BY HAVING SELECT DISTINCT ORDER BY TOP SELECT TOP 5 ClientId, Name, SUM( Amount) as Doc_Count FROM Client WHERE Client = Instance AND Type = 2 GROUP BY ClientId, Name ORDER BY ClientId
  • 19. Knowledge is having the right answer. Intelligence is asking the right question. - Anonymous “