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 байтами. Як кластеризовані, так і некластеризовані
індекси можуть бути складеними.
Унікальний
• забезпечує унікальність кожного значення в індексованих стовпцях.
Якщо індекс складений, то унікальність поширюється на всі стовпці
індексу. Автоматично створюється коли ви визначаєте первинний ключ
або обмеження на унікальність значень
Покриваючий
• дозволяє конкретному запиту одразу отримати всі дані з листків індекса
без додаткових звернень до записів самої таблиці
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
“