Лабораторна робота № 10
ТЕМА РОБОТИ: Функції SQL.
МЕТА РОБОТИ: Вивчити різні функції SQL.
Теоретичні відомості
Основні функції SQL
На прикладі невеликої підмножини функцій Transact-SQL розглянемо найпоширеніші способи використання функцій в операторах Transact-SQL. Це основна підмножина функцій SQL, що звичайно використається у всіх діалектах SQL.
Таблиця 10.1
Функція |
Операція |
|
AVG() |
Середнє |
|
SUM() |
Сума |
|
MIN() |
Мінімум |
|
|
|
|
|
|
MAX() |
Максимум |
COUNT() |
Лічильник |
Ці й інші функції використаються в директиві SELECT, так начебто вони є назвами стовпців. Вони повертають результат у вигляді стовпців.
Аргументи функції повинні бути укладені в дужки. Якщо у функції кілька аргументів, то вони розділяються комами.
Синтаксис використання функцій у директиві SELECT оператора SELECT виглядає в такий спосіб:
SELECT function ({column_1 | *}), ... function (column_n)
FROM table
Елементи NULL не повинні використатися в таких функціях, як AVERAGE ( ), SUM ( ), MIN( ) або MAX ( ). Якщо в деякому наборі втримуються тільки елементи NULL, то функція повертає NULL. Функція COUNT ( * ) у кожному разі визначає кількість рядків для стовпця, навіть якщо він містить елементи NULL.
Використання функції avg()
Функція AVG() повертає середнє арифметичне значень із заданих стовпців. У наступному прикладі функція AVG() повертає середнє арифметичне значень зі стовпця PayRate таблиці Pays.
SELECT AVG( PayRate)
FROM Pay
Використання функції count ( )
Функція COUNT ( ) повертає кількість рядків, які задовольняють вираженню, зазначеному в операторі SELECT. Як аргумент функції COUNT ( ) може використатися символ зірочки. Якщо в директиві SELECT для функції COUNT ( ) замість імені стовпця помістити символ зірочки, це буде означати, що потрібно обробити всі рядки, що задовольняють критерію, заданому в операторі SELECT. Функція COUNT ( ) підраховує число всіх рядків таблиці, що задовольняють заданій умові. При цьому використається наступний синтаксис.
SELECT COUNT ( column_name )
FROM table_name
Якщо в операторі SELECT використається директива WHERE , то функція COUNT ( ) застосовується тільки до тих рядкам, які задовольняють критерію , заданому в директиві WHERE.
Використання функції MAX ( )
Функція MAX ( ) повертає найбільше значення стовпця. Її синтаксис виглядає в такий спосіб:
SELECT MAX ( column_name)
FROM table_name
Використання функції MIN( )
Функція min( ) повертає найменше значення стовпця. Її синтаксиc виглядає в такий спосіб:
SELECT MIN( )
FROM table_name
Використання функції SUM( )
Функція SUM( ) повертає суму значень для деякого набору чисел або виражень, яке треба за ключовим словом SUM. При підсумовуванні елементи NULL не враховуються. Для функції SUM( ) використається наступний синтаксис:
SUM ([DISTINCT] expression
Використання у функції COUNT ( ) ключового слова DISTINCT
Якщо у функції COUNT ( ) є посилання на ім'я стовпця, то вона повертає число його значень. При підрахунку повторювані значення враховуються, а елементи NULL - немає. Якщо додати ключове слово DISTINCT, то функція COUNT ( ) поверне кількість неповторюваних значень. При цьому використається наступний синтаксис:
SELECT COUNT (DISTINCT column_name )
FROM table_name
Використання функції CUBE( ) і ROLLUP ( )
Функція CUBE ( ) і ROLLUP ( ) були додані до SQL-Server 6.5 з метою одержання узагальненої, підсумкової інформації для більших обсягів даних. При використанні функції CUBE ( ) в операторі SELECT, підсумкові функції перетворяться в понад підсумкові, які повертають тільки рядка з найбільш узагальненою інформацією. Функція ROLLUP ( ) відрізняється від CUBE ( ) тільки тим, що вона залежить від порядку стовпців, зазначених у директиві GROUP UP.
Використання строкових функцій
Дана група функцій використається для виконання всіляких операцій, включаючи конкатенацію рядків, перетворення двійкових даних, рядків, символів і виражень. Строкові функції повертають значення, які звичайно потрібні для виконання операцій над текстовими даними.
ASCILL ( ) QUOTENAME ( ) SPACE ( )
CHAR ( ) REPLACE ( ) STR ( )
CHARINDEX ( ) REPLIСATE ( ) STUFF ( )
DIFFERENCE ( ) REVERSE ( ) SUBSTRING ( )
LOWER ( ) RIGHT ( ) UPPER ( )
LTRIM ( ) RTRIM ( )
PATINDEX ( ) SOUNDEX ( )
Функції роботи з рядками звичайно використаються для таких типів даних, як CHAR, VARCHAR, BINARY й VARBINARY, а також для тих, які неявно перетворяться в CHAR або VARCHAR. Наприклад, функцію PATINDEX ( ) можна застосовувати до типів даних CHAR, VARCHAR й TEXT.
Строкові функції можна вкладати друг у друга так, щоб результат, повернутий внутрішньою функцією, передавався зовнішньої. Якщо при роботі зі строковими функціями ви використаєте константи, містіть їх в одинарні лапки. Строкові функції звичайно використаються в директиві SELECT або WHERE.
Використання функції ASCILL ( )
Функція ASCILL ( ) повертає ASCILL-код символу, що є крайнім ліворуч у вираженні. Синтаксис функції ASCILL ( ) виглядає в такий спосіб:
ASCILL ( char_expr )
Використання функції CHAR ( )
Функція CHAR ( ) перетворить ASCILL-код у символ. Якщо значення, що ви введете як ASCILL-код, не входить в інтервал від 0 до 255, то функція поверне елемент NULL. Синтаксис функції CHAR ( ) виглядає в такий спосіб:
CHAR ( integer_expr)
Використання функції SOUNDEX ( )
Функція SOUNDEX ( ) повертає код, що складається із чотирьох цифр, що використається при порівнянні двох рядків за допомогою функції DTFFERENCE(). Цю функцію можна використати, наприклад, для пошуку слів зі схожим написанням у списку поштового розсилання. Її можна застосовувати також у текстовому процесорі для пошуку неправильних варіантів написання слів. Крім того, функцію SOUNDEX ( ) можна використати для порівняння слів, які вимовляються однаково, але пишуться по-різному. Синтаксис функції SOUNDEX ( ) виглядає в такий спосіб:
SOUNDEX ( char_expr )
Функція SOUNDEX ( ) ігнорує всі голосні, за винятком першої букви рядка.
Використання функції DIFFERENCE ( )
Функція DIFFERENCE ( )повертає різницю між значеннями двох чисел, отриманих за допомогою функції SOUNDEX ( ). Ця різниця являє собою значення в проміжку від 0 до 4, де 4 означає максимальний збіг. Таким чином, можна визначити граничне значення ступеня збігу й на підставі цього будувати подальші дії. Синтаксис функції DIFFERENCE ( ) виглядає так:
DIFFERENCE ( char_expr1, char_expr2 )
Використання функції LOWER ( )
Функція LOWER ( ) перетворить рядка, що складаються із прописних букв, у рядки, що складаються з малих літер. Для неї використається такий синтаксис:
LOWER (char_expr )
Використання функції UPPER ( )
Функція UPPER ( ) перетворить рядка, що складаються з малих літер, у рядки, що складаються із прописних букв. Для неї використається наступний синтаксис:
UPPER (char_expr )
Використання функції LTRIM ( )
Функція LTRIM ( ) видаляє з рядків початкові пробіли. Її можна застосовувати перед приміщенням елементів у стовпці з метою економії місця на диску. Початкові пробіли можна видалити також перед виконанням додаткової обробки рядка. Для функції LTRIM ( ) використається такий синтаксис:
LTRIM (char_expr )
Використання функції RTRIM ( )
Функція RTRIM ( ) видаляє з рядка кінцеві пробіли. Її, як функцію LTRIM ( ), можна застосовувати перед приміщенням елементів у стовпці з метою економії місця на диску. Кінцеві пробіли можна видалити також перед виконанням додаткової обробки рядка. Для функції RTRIM() використається наступний синтаксис:
RTRIM (char_expr )
Використання функції CHARINDEX ( )
Функція CHARINDEX ( ) повертає початкову позицію деякого символьного вираження усередині заданого рядка. Її перший параметр - це символьне вираження, а другий - просте вираження (наприклад, ім'я стовпця), за допомогою якого SQL-Server шукає символьне вираження. Помітимо, що для функції CHARINDEX ( ) не можна використати типи даних TEXT й IMAGE. Її синтаксис виглядає в такий спосіб:
CHARINDEX (char_expr, expression )
Використання функції PATINDEX ( )
Функція PATINDEX ( ) повертає початкову позицію першої появи в рядку заданого фрагмента рядка, наприклад, деякого значення в у стовпці таблиці. Якщо фрагмент не знайдений, то функція повертає значення нуль. Функцію PATINDEX ( ) можна використати з наступними типами даних CHAR, VARCHAR й TEXT. Синтаксис функції наступний:
PATINDEX ( '%substring%', column_name )
Використання функції REPLIСATE ( )
Функція REPLIСATE ( ) повертає кілька наборів символів, заданих її першим аргументом. Другий аргумент визначає кількість наборів, що повертають. Якщо другий аргумент (ціле вираження) є негативним числом, то функція повертає рядок нульової довжини (NULL). Синтаксис функції REPLIKATE ( ) виглядає так:
REPLIKATE (character_expression, integer_expression )
Використання функції REVERSE ( )
Функція REVERSE ( ) повертає рядок символів, які випливають у порядку, зворотному первісному. Аргументом функції (це символьний рядок) може бути константа, змінна або значення стовпця. Синтаксис функції REVERSE ( ) виглядає так:
REVERSE ( character_string )
Використання функції RIGHT ( )
Функція RIGHT ( ) повертає праву частину рядка символів, переданої їй як перший аргумент, починаючи з певного символу праворуч, номер якого зазначений як другий аргумент. Якщо другий аргумент є негативним числом ( це може трапитися в результаті застосування вкладених функцій ), то функція RIGHT ( ) поверне рядок нульової довжини (NULL ). Синтаксис функції RIGHT ( ) виглядає так:
RIGHT ( character_expression, integer_expression )
Використання функції SPACE ( )
Функція SPACE ( ) повертає рядок пробілів, довжина якої визначається аргументом функцій. Якщо аргумент є негативним числом, то функція SPACE ( ) повертає рядок нульової довжини (NULL ). Синтаксис функції SPACE ( ) виглядає так:
SPACE ( integer_expr )
Використання функції STR ( )
Функція STR ( ) перетворить числові дані в символьні. Її синтаксис виглядає в такий спосіб:
STR ( float_expr [ , length [ , decimal ] ] )
Аргументи length й decimal обов'язково повинні бути ненегативними. Якщо ви не вкажете довжину, то буде прийняте її стандартне значення - 10. Число, що повертає функцією, за замовчуванням округляється до цілого. Задана довжина повинна бути більше або дорівнює довжині числа плюс два знаком ста на десяткову крапку й знак. Якщо аргумент float_expr не міститься у відведене йому кількість символів, то функція STR ( ) повертає **.
Використання функції STUFF ( )
Функція STUFF ( ) вставляє другий рядок символів у першу. Аргумент length визначає кількість символів, які потрібно видалити з першого рядка, починаючи від початкової позиції starting_position. Функцію STUFF ( ) не можна застосовувати до типів даних TEXT або IMAGE. Її синтаксис виглядає так:
STUFF ( character_string1 , starting_position , length , character_stringth2 )
Використання функції SUBSTRING ( )
За допомогою функції SUBSTRING ( ) можна одержати потрібну частину деякого рядка символів, або підстроку. Її першим аргументом може бути символьний або двійковий рядок, ім'я стовпця або вираження, у якому використається ім'я стовпця. Другий аргумент визначає початкову позицію підстроки. І третій аргумент визначає кількість символів у підстроки.
Функцію SUBSTRING ( ), як і багато інших подібних функцій, не можна застосовувати до типів даних TEXT й IMAGE.
SUBSTRING ( character_string , string_position , length )
Використання функції конкатенації ( + )
Функція конкатенації (яка позначається символом « + ») дозволяє поєднувати текстові або двійкові дані. З її допомогою можна об'єднати дані, що перебувають у стовпцях із символьними рядками. Конкатенація використається для додавання одного рядка символів до кінця іншої. Символьні рядки повинні бути укладені в одинарні лапки. Синтаксис функції конкатенації виглядає в такий спосіб:
Expression + expression
Використання математичних функцій
Математичні функції застосовуються до числових типів даних таким як INTEGER, FLOAT, REAL, MONEY, SMALLMONEY. Вони повертають значення з точністю до шести десяткових розрядів. Якщо при використанні математичних формул відбулася помилка, то повертається елемент NULL і з'являється попереджуюче повідомлення про помилку.
Для контролю за ходом виконання операторів, що містять математичні функції, використаються дві опції обробки запитів. Перед ключовим слово кожної з них ставиться ключове слово SET . у випадку виявлення помилки опція arithabort припиняє виконання запиту, а опція arithignor
Повертає елемент NULL. Якщо встановити обидві опції arthabort й arithignor , то ніякі попереджуючі повідомлення не з'являться.
Таблиця 10.2
Математичні функції Transact-SQL
Функція Параметри Результат
ACOS |
(float_expression) |
Арккосинус числа; значення кута, косинус якого заданий у вигляді параметра із плаваючою крапкою, виражено в радіанах |
ASIN |
(float_expression) |
Арксинус числа; значення кута, синус якого заданий у вигляді параметра із плаваючою крапкою, виражено в радіанах |
ATAN() |
(float_expression) |
Арктангенс числа; значення кута, тангенс якого заданий у вигляді параметра із плаваючою крапкою , виражено в радіанах |
ATAN2 |
(float_expr1, float_expr2 ) |
Арктангенс числа; значення кута, тангенс якого заданий у вигляді вираження Float_Expr1/ Float_Expr2, виражено в радіанах |
COS |
(float_expression) |
Тригонометричний косинус кута, заданого в радіанах |
COT |
(float_expression) |
Тригонометричний котангенс кута, заданого в радіанах |
SIN |
(float_expression) |
Тригонометричний синус кута, заданого в радіанах |
TAN |
(float_expression) |
Тригонометричний тангенс кута, заданого в радіанах |
DEGREES |
(numeric_expression) |
Перетворення радіан у градуси. Градуси перетворяться в той же тип даних, який має вихідне вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
RADIANS |
(numeric_expression) |
Перетворення градусів у радіани. Радіани перетворяться в той же тип даних, який має вихідне вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
CELLING |
(numeric_expression) |
Найменше ціле значення, що більше або дорівнює значенню вираження. Має тип такої ж як у вихідного вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
FLOOR |
(numeric_expression) |
Найбільше ціле значення, що більше або дорівнює значенню вираження. Має тип такої ж як у вихідного вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
EXP |
(float_expression) |
Експонента значення вираження |
LOG |
(float_expression) |
Натуральний логарифм значення вираження |
LOG10 |
(float_expression) |
Десятковий логарифм значення вираження |
PI() |
|
Значення числа , рівне 3,1415 |
POWER |
(numeric_expression, y) |
Значення вираження в ступені Y; має такий же тип, як й у вихідного вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
|
(numeric_expression) |
Абсолютне значення вираження; має такий же тип, як у вихідного вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
RAND |
([integer_expression]) |
Випадкове дійсне число, що перебуває в проміжку від нуля до одиниці або до значення, зазначеного в необов'язковому аргументі integer _expression |
ROUND |
(numeric_expression, integer_expression) |
Округлення значення з точністю до integer_expr; має той же тип, що й вихідне вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
SIGN |
(numeric_expression) |
Повертає значення 0, 1 або –1, залежно від знака вираження. Має той же тип, що й вихідне вираження (це може бути INTEGER,MONEY REAL або FLOAT) |
SORT |
(float_expression) |
Квадратний корінь зі значення вираження |
Функції для роботи з типами даних TEXT й IMAGE
Крім PATINDEX ( ), існують й інші функції, які можна застосовувати до типів даних TEXT й IMAGE. Для цих типів даних можна використати також відповідні опції й глобальні змінні.
Використання команди SET TEXTSIZE
Команда SET TEXTSIZE визначає кількість байт, які виділяються під буфер при відображенні даних типу TEXT й IMAGE за допомогою оператора SELECT. Синтаксис цієї команди виглядає в такий спосіб:
SET TEXTSIZE n
Параметр n визначає розмір буфера в байтах. У команді SET TEXTSIZE параметр n повинен мати тип INTEGER . Якщо задати n рівним нулю (0), то буде виділений буфер стандартних розмірів, рівний 4 Кбайт. Поточне значення параметра команди SET TEXTSIZE зберігається в глобальної змінної @@textsize.
Використання функції TEXTPTR ( )
Функція TEXTPTR ( ) повертає значення типу VARBINARY, тобто рядок, що складається з 16 двійкових символів. Отримане значення - це покажчик на першу сторінку збереженого в базі даних тексту. Хоча дане значення можна одержати за допомогою функції TEXTPTR ( ), звичайно прямо програмісти з ним не працюють. Воно застосовується самим SQL-Server.
При використанні функції TEXTPTR ( ) SQL-Server автоматично перевіряє, чи є покажчик припустимим. Система перевіряє, чи відповідає отримане значення першій сторінці тексту. Синтаксис функції TEXTPTR ( ) виглядає в такий спосіб:
TEXTPTR ( column_name )
Використання функції READTEXT
READTEXT - це, скоріше, не функція, а оператор. Він застосовується до типів даних TEXT й IMAGE. READTEXT витягає підстроку з даних, збережених як TEXT або IMAGE. Ви повинні визначити зсув і розмір наступної за ним підстроки в байтах. Синтаксис функції READTEXT виглядає так: READTEXT table.column textptroffset size
Використання функції TEXTVALID ( )
Функція TEXTVALID ( ) повертає або нуль (0), або одиницю (1), залежно від того, є даний покажчик на текстовий рядок припустимим чи ні. Посилаючись на стовпець типу TEXT ви обов'язково повинні вказувати ім'я таблиці. Синтаксис функції TEXTVALID() виглядає так:
TEXTVALID ( 'table_name.column_name', text_ptr )
Використання функцій перетворення
У багатьох випадках вам не прийде явно виконувати перетворення, тому що SQL-Server робить це автоматично. Наприклад, можна безпосередньо в запиті до SQL-Server зрівняти вираження з типом даних CHARACTER з вираженням типу DATETIME. Крім того, SQL-Server автоматично перетворить вираження до типу INTEGER, якщо в ньому використаються типи даних INTEGER, SMALLINT або TINYINT.
Однак, якщо ви не впевнені в тім, що SQL-Server виконає неявне перетворення типів даних, або у вираженні використаються такі типи даних, які не можна неявно перетворити, то застосуєте функцію перетворення CONVERT ( ).
Використання функції CONVERT ( )
Функція CONVERT ( ) виконує явне перетворення типів даних. Ця функція перетворить вираження з одного типу в інший, а також у різні формати дат. Якщо функція CONVERT ( ) не може виконати перетворення, то ви одержите повідомлення про помилку. Синтаксис функції CONVERT ( ) виглядає в такий спосіб:
CONVERT ( datatype [( length )] , expression [ , style ])
Використання функцій для роботи з датами
Для виконання операція з даними типу DATE існує кілька різних функцій. Вони використаються для виконання арифметичних операцій над даними типу DATETIME й SMALLDATETIME. Функції для роботи з датами, як й інші функції, можна використати в директивах SELECT або WHERE , а також скрізь, де в операторах Transact-SQL можна застосовувати вираження.
Використання функції DATENAME
Функція DATENAME повертає певну частину дати у вигляді символьного рядка. Для цієї функції використається наступний синтаксис:
DATENAME ( date_part , date )
Використання функції DATEPART ( )
Функція DATEPART ( ) повертає певну частину дати у вигляді цілого значення. Для цієї функції використається наступний синтаксис:
DATEPART ( date_part , date )
Використання функції GETDATE ( )
Функція GETDATE ( ) повертає дату й час у стандартному форматі SQL-Server і має тип DATETIME ( ). Функція GETDATE ( ) не має аргументів. Її синтаксис виглядає в такий спосіб: GETDATE ( )
Використання функції DATEADD ( )
Функція DATEADD ( ) повертає значення, що дорівнює зазначеної в параметрі даті плюс додатковий інтервал. Синтаксис функції DATEADD ( ) такий:
DATEADD ( date_part, number, date )
Використання функції DATEDIFF ( )
Функція DATEDIFF ( ) повертає різницю між частинами двох заданих дат. Аргументами цієї функції є дві дати й ще частина дати. Функція DATEDIFF ( ) повертає ціле значення зі знаком, що дорівнює різниці частин другої й першої дат. При цьому використається такий синтаксис:
DATEDIFF ( date_part, date1, date2 )
Таблиця 10.3
Частини дат, використовувані як аргументи функцій роботи з датами
Частина дати |
Скорочення |
Значення |
Year (Рік) |
yy |
1753-9999 |
Quarter (Квартал) |
|
1-4 |
Month (Місяць) |
mm |
1-12 |
Day of year (День року) |
dy |
1-366 |
Day (День) |
dd |
1-31 |
Week (Тиждень) |
wk |
1-45 |
Weekday (День тижня) |
dw |
1-7 (Воск-Суб) |
Hour (Година) |
hh |
0-23 |
Minute (Хвилина) |
mi |
0-59 |
Second (Секунда) |
ss |
0-59 |
Millisecond (Міллісекунда) |
ms |
0-999 |
Використання системних функцій
Системні функції застосовуються для одержання інформації про комп'ютер, користувача, базу даних й об'єктах бази даних. Наприклад, ви можете довідатися зі збереженої процедури характеристики об'єктів бази даних й, користуючись умовними операторами, на основі отриманої інформації виконати різні операції.
Системні функції, як й інші функції, можна використати в директивах SELECT й WHERE оператора SELECT.
Таблиця 10.4
Системні функції
Функція |
Параметри |
Інформація, що повертає |
HOST_NAME() |
|
Ім'я комп'ютера-сервера |
HOST_ID() |
|
Ідентифікаційний номер комп'ютера |
SUSER_ID |
([‘login_name’]) |
Ідентифікатор пользователя призначуваний при вході в систему |
SUSER_NAME |
([server_user_id]) |
Ім'я користувача, використане для входу в систему |
USER_ID |
([user_name’]) |
Ідентифікаційний номер користувача, назначений при підключенні до бази даних |
USER_NAME |
([user_id]) |
Ім'я користувача, використане для підключення до бази даних |
DB_NAME |
([‘database_id’]) |
Ім'я бази даних |
DB_ID |
([‘database_name’]) |
Ідентифікаційний номер бази даних |
GETANSINULL |
([‘database_name’]) |
Повертає 1, якщо в стандарті ANSI визначена можливість появленя елементів NULL, або 0, якщо така здатність не визначена |
OBJECT_ID |
([‘object_name’]) |
Ідентифікаційний номер об'єкта бази даних |
OBJECT_NAME |
(object_id) |
Ім'я об'єкта бази даних |
INDEX_COL |
(‘table_name’, index_id, key_id) |
Ім'я індексного стовпця |
COL_LENGTH |
(‘table_name’, column_name’) |
Довжина стовпця |
COL_NAME |
(table_id, column_id) |
Ім'я стовпця |
DATALENGTH |
(expression) |
Реальна довжина вираження для деякого типу даних |
IDENT_SEED |
(‘tablr_or_view’) |
Базове значення, що повертає як numeric (@@maxprecision, 0) для стовпця із властивістю IDENTITY |
STARTS_DATE |
(table_id, index_id) |
Дата останнього обновлення статистичних данних по індексі index_id |
COALESCE |
(expression1, expression2, …, expression N) |
Повертає перше ненульове вираження (не рівне NULL) |
ISNULL |
(expression, value) |
Заміняє нульове значення вираження (NULL) заданим значенням |
NULLIF |
(expression1, expression2) |
Повертає елемент NULL, якщо expression1 еквівалентно expression2 |
IDENT_INCR |
(‘table_or_viuw’) |
Збільшення ( щоповертає як numeric (@@maxprecision, 0)) для стовпця із властивістю IDENTITY |
Використання функції ISNULL( ) і NULLIF( )
ISNULL( ) - це системна функція, що повертає символьний рядок або число замість елементів NULL, якщо вони зустрічаються в деякій інформаційній структурі, наприклад, у стовпці таблиці. Синтаксис цієї функції виглядає в такий спосіб:
ISNULL (expression, value )
Функція NULLIF( ) повертає елемент NULL, якщо два вираження ідентичні. Якщо ж ні, то вона повертає значення першого вираження. Функція NULLIF звичайно використається з оператором CASE. У наступному прикладі функція NULLIF( ) повертає NULL для ідентичних рядків і перший параметр - для різних:
SELECT NULLIF ('Same', 'Same'), SPACE(2),
NULLIF ('Same', 'Different')
______ ______ _______
NULL Same
(1 row (s) affected )
Використання функції COALESCE ( )
Та форма функції COALESCE(), у якій застосовується синтаксис COALESCE(expression1, expression2), аналогічна функції NULLIF(). Але, на відміну від її, двухпараметрична функція COALESCE() повертає значення вираження expression2, коли знаходить елемент NULL, і значення вираження expression1, коли не знаходить його.
Функція COALESCE() може містити більше двох параметрів. У цьому випадку функція COALESCE() повертає значення найпершого ненульового вираження, що перебуває в списку своїх параметрів. Якщо ж ненульових значень у списку параметрів ні, то функція COALESCE() повертає елемент NULL.
Використання наладнюючих функцій
Наладнюючі функції повертають ім'я користувача або значення лічильника, що автоматично міститься в рядок таблиці, у випадку, якщо в операторі INSERT або UPDATE було пропущене значення. ниладически функції визначаються як частина обмеження DEFAULT в операторі CREATE TABLE або ALTER TABLE. Ви можете використати кожну з наведених нижче наладнюючих функцій:
USER
CURRENT_USER
SESSION_USER
SISTEM_USER
CURRENT_TIMESTAMP
APP_NAME
Наладнюючі функції USER(), CURRENT_USER(), і SESSION_USER() повертають ім'я користувача бази даних, що виконує оператор INSERT або UPDATE. Функція SISTEM_USER() повертає реєстраційний ідентифікатор користувача. Функція CURRENT_TIMESTAMP() повертає поточну дату й час у тій же формі, що й функція GETDATE (). І, нарешті, функція APP_NAME повертає ім'я додатка для поточного сеансу, якщо воно було визначено.
Наладнюючі функції не можна використати поза обмеженням DEFAULT оператора CREATE TABLE або ALTER TABLE. Наприклад, їх не можна застосовувати в директиві SELECT оператора SELECT.
HAVING
(маючи) у результаті лише ті групи, які задовольняють зазначеному переліку умов відбору груп
і має формат
SELECT [[ALL] | DISTINCT]{ * | елемент_SELECT [,елемент_SELECT] ...}
FROM {базова_таблиця | подання} [псевдонім]
[,{базова_таблиця | подання} [псевдонім]] ...
[WHERE фраза]
[GROUP BY фраза [HAVING фраза]];
Елемент_SELECT - це одна з наступних конструкцій:
[таблиця.]* | значення | SQL_функція | системна_змінна
де значення - це:
[таблиця.]стовпець | (вираження) | константа | змінна
Синтаксис виражень має вигляд
( {[ [+] | - ] {значення | функція_СУБД} [ + | - | * | ** ]}... )
а синтаксис SQL_функцій - одна з наступних конструкцій:
{SUM|AVG|MIN|MAX|COUNT} ( [[ALL]|DISTINCT][таблиця.]стовпець )
{SUM|AVG|MIN|MAX|COUNT} ( [ALL] вираження )
COUNT(*)
Фраза WHERE включає набір умов для відбору рядків:
WHERE [NOT] WHERE_умова [[AND|OR][NOT] WHERE_умова]...
де WHERE_умова - одна з наступних конструкцій:
значення { = | <> | < | <= | | = } { значення | ( підзапит ) }
значення_1 [NOT] BETWEEN значення_2 AND значення_3
значення [NOT] IN { ( константа [,константа]... ) | ( підзапит ) }
значення IS [NOT] NULL
[таблиця.]стовпець [NOT] LIKE 'рядок_символів' [ESCAPE 'символ']
EXISTS ( підзапит )
Крім традиційних операторів порівняння (= | < | < | <= | | =) в WHERE фразі використаються умови BETWEEN (між), LIKE (схоже на), IN (належить), IS NULL (не визначене) і EXISTS (існує), які можуть випереджатися оператором NOT (не). Критерій відбору рядків формується з одного або декількох умов, з'єднаних логічними операторами:
AND
- коли повинні задовольнятися обоє поділюваних за допомогою AND умови;
OR
- коли повинне задовольнятися одне з поділюваних за допомогою OR умов;
AND NOT
- коли повинне задовольнятися перша умова й не повинне друге;
OR NOT
- коли або повинне задовольнятися перша умова або не повинне задовольнятися друге, причому існує пріоритет AND над OR (спочатку виконуються всі операції AND і тільки після цього операції OR). Для одержання бажаного результату WHERE умови повинні бути уведені в правильному порядку, якому можна організувати введенням дужок.
При обробці умови числа рівняються алгебраїчно - від’ємні числа вважаються меншими, ніж додатні, незалежно від їхньої абсолютної величини. Рядка символів рівняються відповідно до їх подання в коді, використовуваному в конкретної СУБД, наприклад, у коді ASCII. Якщо рівняються два рядки символів, що мають різні довжини, більше коротка рядок доповнюється праворуч пробілами для того, щоб вони мали однакову довжину перед здійсненням порівняння.