Головне меню

EN | RU | UK

На головну

6. Оператор SELECT. Частина 1

Допомога & Консультація
Допомога & Консультація
Пишіть мені в
Наверх сторінки
Лекція
Мета

Мета розділу – ознайомлення з оператором SELECТ, який є одним з найбільш важливих та затребуваних операторів SQL, з його форматом та властивостями.

6.1. Формат оператора SELECT

Оператор SELECT – один із найважливіших операторів SQL, що використовується найчастіше за інші [4, 6]. Він дозволяє вибирати необхідну інформацію з відношень БД і перетворювати її до того вигляду, який задовольняє користувачів. За його допомогою можна реалізувати досить складні й громіздкі умови вибору даних з різних взаємопов’язаних таблиць.

Оператор SELECT повністю абстрагований від питань подання даних [4, 6 – 8]. Уся увага при його застосуванні сконцентрована на проблемах доступу до даних. Він має такий формат:

SELECT [DISTINCT | ALL] {* | <значення>[, <вираз> ...]}

    FROM <таблиця>[,<таблиця> ...]

    [WHERE <умови пошуку>]

    [ORDER BY <список стовпців>]

    [GROUP BY стовпець [COLLATE collation]

        [, стовпець] [COLLATE collation], ...]

    [HAVING <умови пошуку>]

    [UNION <оnepaтор SЕLECT>]

    [PLAN <план виконання запиту>]

Цей формат з першого погляду здасться досить складним, але при поступовому вивченні можливостей оператора SELECT Ви побачите наскільки він простий.

6.2. Найпростіший вид оператора SELECT (SELECT…FROM)

У найпростішому випадку оператор SELECT має такий вигляд:

SELECT [DISTINCT | ALL] {* | <значення>[, <значення> ...]}

    FROM <таблиця>[,<таблиця> ...]

Стосовно реляційної алгебри даний оператор виконує операцію проекції. Після пропозиції FROM наводиться список таблиць БД, з яких будемо вибирати інформацію, а після SELECT – список значень. У більшості випадків це імена стовпців таблиць, перелічених після пропозиції FROM. Зірочка вказує на те, що при виконанні запиту потрібно включити всі стовпці таблиць.

ПРИКЛАД 6.1

Выдать набор данных, содержащий все атрибуты и кортежи отношения Readers (табл. 6.1).

SELECT *

    FROM Readers

Це еквівалентно

SELECT Code, FamilyName, Name, Patronymic, ReaderCardNumber, PasportCode, Job, Post, Note

    FROM Readers

Таблиця 6.1

Набір даних, що містить усі атрибути та кортежі відношення Readers
ReaderCode FamilyName Name Patronymic ReaderCardNumber PasportCode Job Post Note
1 Іванов Петро Іванович 317 4 НГУ, каф. ЭВТ Асистент NULL
2 Федорец Ірина Олегівна 28 1 НГУ, АХЧ Вахтер NULL
3 Ільїн Іван Петрович 1345 11 НГУ, каф. фізики Доцент NULL
4 Суренко Дмитро Павлович 543 6 НГУ, каф. геофізики Ст. викладач NULL
5 Коршунова Наталя Юріївна 128 8 НГУ, каф. геоіформатики Асистент NULL
6 Носенко Олег Володимирович 5672 5 НГУ, ІКК Інженер NULL
7 Брусов Володимир Михайлович 485 24 НГУ, каф. геодезії Лаборант NULL
8 Козирєв Олексій Сергійович 759 15 НГУ, каф. кримінології Професор NULL
9 Левченко Юлія Павлівна 146 18 НГУ, каф. політичної теорії Завідувач кафедри NULL
10 Світла Тетяна Іванівна 2021 22 НГУ, каф. перекладу Ст. викладач NULL
11 Щиглів Петро Євгенович 997 14 НГУ, каф. електропостачання Асистент NULL
12 Кириленко Віктор Олександрович 1010 17 НГУ, каф. електроприводу Заступник декана NULL

6.3. Розрахунки за допомогою арифметичних виразів

Оператор SELECT дозволяє формувати стовбці, які містять результати розрахунків. Для цього використовують арифметичні вирази, що побудовані за правилами, прийнятими у алгоритмічних мовах.

SELECT [DISTINCT | ALL] {* | <значення>[, <вираз> ...]}

    FROM <таблиця>[, <таблиця> ...]

ПРИКЛАД 6.2

Для кожної книжки з таблиці BookInventoryNumbers визначіть величину добутоку її ціни на суму значень коду й фонду книжок.

SELECT Code, InventoryNumber, (BookCode + FundCode) * Cost

    FROM BookInventoryNumbers

Необхідно розуміти, що цей приклад не має логічного навантаження. Він наведений тільки для демонстрації можливостей оператора SELECT. Результат, отриманий за допомогою обчислення виразу (BookCode + FundCode) × Cost для кожного запису таблиці BookInventoryNumbers, заноситься у стовпець, якому за замовчуванням СКБД привласнила ім'я Column3 (табл. 6.2).

Таблиця 6.2

Розрахунок величини добутку ціни книжки на суму значень її коду й фонду (Column3)
Code InventoryNumber Column3
1 4567890 31,12
2 4510000 66,99
3 4532477 136,04
4 4512890 64,95
5 4678532 397,46
6 4632112 80,80
7 7569832 661,5
8 5478956 405,9
9 2145876 592,5
10 5214786 360,5
11 5268933 816,2
12 7865890 277,16
13 6589321 476,97
14 7812639 673,82
15 7523690 419,85

Можливо перейменувати будь-який стовпець таблиці, що є результатом роботи оператора SELECT. Для цього потрібно після виразу або імені стовпця вихідної таблиці вказати пропозицію AS і далі нове ім’я:

SELECT [DISTINCT | ALL] {* | <значення>[, <вираз[AS <ім'я стовпця>]> ...]}

    FROM <таблиця>[,<таблиця> ...]

ПРИКЛАД 6.3

Надайте ім'я «Example» стовпцю, що обчислюється за допомогою арифметичного виразу, розглянутого у попередньому прикладі.

SELECT Code, InventoryNumber, (BookCode + FundCode) * Cost AS Example

    FROM BookInventoryNumbers

6.4. Вилучення записів, які повторюються

Записами (рядками), що повторюються, вважаються ті, які мають ідентичні значення у всіх стовпцях таблиці. Якщо результуюча таблиця повинна вміщувати лише унікальні записи, то після SELECT указують пропозицію DISTINCT. Якщо в результуючу таблицю необхідно включити усі записи, то вказують ALL. Ця пропозиція діє за замовчуванням:

SELECT [DISTINCT | ALL] [DISTINCT | ALL] {* | <значення>[, <вираз> ...]}

    FROM <таблиця>[,<таблиця> ...]

ПРИКЛАД 6.4

Виведіть коди бібліотекарів, які видавали книжки (табл. 6.3).

SELECT OutLibrarianCode

    FROM BookGiveOutRecord

Таблиця 6.3

Дубльовані значення з таблиці BookGiveOutRecord
OutLibrarianCode
4
4
4
3
10
7
8
9
8
9
10

Зверніть увагу на те, що результат виконання запиту містить рядки, які дублюються, оскільки, на відміну від операції проекції реляційної алгебри, оператор SELECT за замовчуванням їх не виключає. Для вилучення рядків, що дублюються, з результуючої таблиці використовується пропозиція DISTINCT (табл. 6.4):

SELECT DISTINCT OutLibrarianCode

    FROM BookGiveOutRecord

Таблиця 6.4

Недубльовані значення з таблиці BookGiveOutRecord
OutLibrarianCode
4
3
10
7
8
9

6.5. Пропозиція ORDER BY

У відношенні, що формує оператор SELECT, послідовність розміщення кортежів невизначена. Це зручно далеко не завжди. Установити, за якими атрибутами необхідно відсортувати кортежі, можна в пропозиції ORDER BY. Вона містить список імен стовпців, що поділені комами, за яким буде здійснюватися сортування. Перший стовпець у списку буде використаний для глобального сортування, другий – для сортування всередині групи, що визначена єдиним значенням першого стовпця, і т.д.

SELECT [DISTINCT | ALL] [DISTINCT | ALL] {* | <значення>[, <вираз> ...]}

    FROM <таблиця>[, <таблиця> ...]

    ORDER BY <список стовпців>

ПРИКЛАД 6.5

Створить список читачів бібліотеки за абеткою (табл. 6.5).

SELECT *

    FROM Readers

    ORDER BY FamilyNamе, Name, Patronymic

Таблиця 6.5

Список читачів бібліотеки за абеткою (відношення Readers)
ReaderCode FamilyName Name Patronymic ReaderCardNumber PasportCode Job Post Note
7 Брусов Владимир Михайлович 485 24 НГУ, каф. геодезії Лаборант NULL
1 Іванов Петро Іванович 317 4 НГУ, каф. ЭВТ Асистент NULL
3 Ільїн Іван Петрович 1345 11 НГУ, каф. фізики Доцент NULL
12 Кириленко Віктор Олександрович 1010 17 НГУ, каф. електроприводу Заступник декана NULL
8 Козирєв Олексій Patronymic 759 15 НГУ, каф. кримінології Професор NULL
5 Коршунова Наталя Юріївна 128 8 НГУ, каф. геоіформатики Асистент NULL
9 Левченко Юлія Павлівна 146 18 НГУ, каф. політичної теорії Завідувач кафедри NULL
6 Носенко Олег Володимирович 5672 5 НГУ, ІКК Інженер NULL
10 Світла Тетяна Іванівна 2021 22 НГУ, каф. перекладу Ст. викладач NULL
4 Суренко Дмитро Павлович 543 6 НГУ, каф. геофізики Ст. викладач NULL
2 Федорец Ірина Олегівна 28 1 НГУ, АХЧ Вахтер NULL
11 Щиглів Петро Євгенович 997 14 НГУ, каф. електропостачання Асистент NULL

6.6. Предикати пошуку в пропозиції WHERE оператора SELECT

У набір даних, що повертає оператор SELECT, можна поміщати тільки ті записи, які відповідають деяким заданим умовам відбору або умовам пошуку, які вказують у пропозиції WHERE оператору SELECT:

SELECT [DISTINCT | ALL] [DISTINCT | ALL] {* | <значення>[, <вираз> ...]}

    FROM <таблиця>[,<таблиця> ...]

    ORDER BY <список стовпців>

    WHERE <умови пошуку>

Умови пошуку за термінологію ISO поділяють на п'ять основних типів – п'ять предикатів: порівняння, влучення у діапазон, відповідність шаблону, приналежність до множини та наявність визначника NULL.

Порівняння дозволяє порівнювати результати обчислення одного виразу з результатами обчислення іншого. Як вирази застосовуються: константи, значення атрибутів, арифметичні вирази, скалярні оператори SELECT. Між виразами можуть бути задіяні такі оператори порівняння: = (дорівнює), < (менше), > (більше), <=(менше або дорівнює),>= (більше або дорівнює), !< (не менше, тобто більше або дорівнює), !> (не більше, тобто менше або дорівнює), <> (не дорівнює), != (не дорівнює).

Результати порівняння декількох виразів можуть бути об'єднані операторами OR і AND. Використання оператора NOT дозволяє одержати інверсію результату порівняння виразів. Належність значень до заданого діапазону можна перевірити, об'єднавши два результати порівняння за допомогою оператора AND. Також у мові SQL є спеціальна функція BETWEEN, яка дозволяє перевірити належність результатів обчислення виразу заданому діапазону. Для перевірки відповідності виразу деякому шаблону в мові SQL передбачені такі оператори: LIKE, CONTAINING, STARTING. Належність результатів обчислення виразу множині перевіряється за допомогою оператора IN. Перевірка наявності невизначеного значення в атрибуті відношення здійснюється оператором IS NULL.

6.7. Порівняння результатів обчислення виразів

6.7.1. Порівняння констант зі значенням в атрибуті

Порівняння констант зі значеннями в атрибуті відношення – одна із простих умов пошуку, що задіяна у пропозиції WHERE оператора SELECT.

ПРИКЛАД 6.6

Складіть список бібліотекарів з табельним номером, який більше числа 80.

σClockNumber > 80 (Librarians)

SELECT *

    FROM Librarians

    WHERE ClockNumber > 80

Тут Librarians – є вихідним відношенням, а вираз ClockNumber > 80 – предикатом. Операція вибірки визначає нове відношення, що містить тільки ті кортежі вихідного відношення, у яких значення атрибута ClockNumber перевищує число 80 (табл. 5.1).

6.7.2. Порівняння значень атрибутів відношень

Порівняння значень атрибутів відношень у більшості випадків використовується для реалізації їх внутрішнього з'єднання.

ПРИКЛАД 6.7

Створіть список усіх читачів, які коли-небудь брали книжки у бібліотеці (табл. 5.4).

Code, FamilyName, Name(Readers))►◄Readers.Code = ReaderCodeCode, ReaderCode, InventoryCode(BookGiveOutRecord))

У прикладі тета-з'єднання для складання цього списку використовувалось з'єднання за еквівалентністю. У ньому були присутні два атрибути Readers.Code і ReaderCode. Коли б вони мали однакове ім'я, наприклад ReaderCode, то для вилучення з результуючого відношення одного із них можна було б скористатися операцією натурального з'єднання:

ReaderCode, FamilyName, Name(Readers))►◄Code, ReaderCode, InventoryCode(BookGiveOutRecord))

Оператор SELECT буде мати такий вигляд:

SELECT Readers.Code, FamilyName, Name, BookGiveOutRecord.Code, BookGiveOutRecord.ReaderCode, ReaderCode, InventoryCode

    FROM BookGiveOutRecord, Readers

    WHERE Readers.Code = BookGiveOutRecord.ReaderCode

При виконанні оператора SELECT для кожного кортежу відношення BookGiveOutRecord у таблиці Readers вибирається рядок, де значення атрибута ReaderCode збігається зі значенням атрибута Code поточного кортежу відношення Readers. При цьому не має значення, у який послідовності розташувати стовпці таблиць в умові пошуку: Readers.Code = BookGiveOutRecord.ReaderCode ідентично BookGiveOutRecord.ReaderCode = Readers.Code.

Для тета-з'єднання двох відношень R і S результуюче відношення формується у такій логічній послідовності:

  1. З атрибутів, які зазначені після пропозиції SELECT, за допомогою операції декартового добутку формується відношення шляхом з'єднання кожного кортежу з відношення R й кортежів з відношення S.
  2. З отриманого відношення відкидаються усі кортежі, що не задовольняють умовам пошуку в пропозиції WHERE.

ЗАУВАЖЕННЯ! Визначення «логічна послідовність» вжите не випадково. У проектуванні СКБД завжди розрізняють два рівні – логічний та фізичний. Логічний рівень – це найчастіше абстрактний рівень, оскільки нам так легше розуміти процеси. Фізичний рівень визначає процеси, які дійсно відбуваються, але у більшості випадків сховані від погляду. Фізичні процеси можуть і не збігатися з логічним уявленням про них.

SQL-сервер при виконанні запиту завжди прагне його оптимізувати, тобто виконати максимально швидко при мінімальних витратах ресурсів. Зокрема, оптимізація запитів в InterВase являє собою «чорну скриню», тобто не можна сказати, як саме буде виконуватися конкретний запит, оскільки при оптимізації не останню роль відіграє поточний стан БД. Процес оптимізації запитів буде розглянутий далі.

6.7.3. Порівняння значення стовпця з результатом обчислення виразу

Порівняння значення стовпця з результатом обчислення виразу найчастіше застосовується при використанні механізму вкладених підзапитів (операторів SELECT, що вкладені один в один), мова про які піде пізніше. Спочатку розглянемо випадок, коли результат обчислення виразу порівнюється із вмістом атрибута відношення.

ПРИКЛАД 6.8

Для кожної книжки визначіть величину добутку її ціни на суму значень коду та фонду книги. Виберемо тільки ті рядки, у яких результат, отриманий при обчисленні даного виразу перевищує число 120 (табл.6.6).

SELECT Code, InventoryNumber, (BookCode + FundCode) * Cost AS Example

    FROM BookInventoryNumbers

    WHERE ((BookCode + FundCode) * Cost) > 120

Таблиця 6.6

Набір даних з таблиці BookInventoryNumbers за прикладом 6.8
Code InventoryNumber Example
3 4532477 136,04
5 4678532 397,46
7 7569832 661,5
8 5478956 405,9
9 2145876 592,5
10 5214786 360,5
11 5268933 816,2
12 7865890 277,16
13 6589321 476,97
14 7812639 673,82
15 7523690 419,85

6.7.4 Використання операторів AND, OR і NOT

Використання операторів AND, OR і NOT дозволяє будувати більш складні умови пошуку. Для усунення будь-якої можливої неоднозначності рекомендується використовувати дужки. Вирази обчислюються за наступними правилами:

вираз обчислюється зліва направо;

першими обчислюються підвирази у дужках;

оператори NOT виконуються раніше операторів AND і OR;

оператори AND виконуються попереду операторів OR;

ПРИКЛАД 6.9

Наведіть прізвища, імена та по батькові тих читачів, які займають посади доцентів або асистентів (табл. 6.7).

SELECT Code, FamilyName, Name, Patronymic, Job, Post

    FROM Readers

    WHERE Post = ‘Доцент’ OR Post = ’Асистент’;

У цьому прикладі для вибірки відомостей про читачів, які займають посади доцентів або асистентів, у пропозиції WHERE використовується логічний оператор OR: Post = ‘Доцент’ або Post = ’Асистент’.

Таблиця 6.7

Вибірка відомостей про читачів, що займають посади доцентів або асистентів
Code FamilyNamе Name Patronymic Job Post
1 Іванов Петро Іванович ДГУ, каф. ЕВТ Асистент
3 Ільїн Іван Петрович ДГУ, каф. фізики Доцент
5 Коршунова Наталя Юріївна ДГУ, каф. геоінформатики Асистент
11 Щиглів Петро Євгенійович НГУ, каф. електропостачання Асистент

6.8. Псевдоніми таблиць

У прикладі 6.7 у переліку стовпців після пропозиції SELECT і в умовах пошуку після WHERE перед іменем стовпця через крапку наведена назва таблиці. У ряді випадків наявність назви таблиці перед іменем стовпця обов'язкова, оскільки в різних таблицях можуть міститися однойменні стовпці (як у нашому прикладі), а SQL-сервер повинен знати, зі стовпцем якої таблиці він має справу.

Використовувати імена таблиць для ідентифікації стовпців незручно через їхню громіздкість. Псевдоніми, які наводяться через пробіл після імені таблиці у пропозиції FROM, роблять компактнішим запис оператора SELECT:

SELECT [DISTINCT | ALL] {* | <значення>[, <вираз> ...]}

    FROM <таблиця псевдонім>[, <таблиця псевдонім> ...]

    [WHERE <умови пошуку>]

    [ORDER BY <список стовпців>]

Наприклад, запит, який розглянутий у прикладі 6.7, після визначення у ньому псевдонімів таблиць, є набагато компактнішим:

SELECT R.Code, FamilyName, Name, B.Code, ReaderCode, InventoryCode

    FROM BookGiveOutRecord B, Readers R

    WHERE R.Code = B.ReaderCode

6.9 Перевірка належності значення виразу заданому діапазону

Використання оператора порівняння BETWEEN дозволяє в умові пошуку вказати, що деяке значення має перебувати в інтервалі між двома іншими. Зарезервоване слово NOT інвертує умову

<значення> [NOTBETWEEN <значення> AND <значення>

ПРИКЛАД 6.10

Перелічіть інвентарні номери книжок, ціна яких лежить у діапазоні від 20 до 60 гривень включно (табл. 6.8).

SELECT InventoryNumber, Cost

    FROM BookInventoryNumbers

    WHERE BETWEEN 20 AND 60

Наведений вище запит можна переписати так:

SELECT InventoryNumber, Cost

    FROM BookInventoryNumbers

    WHERE Cost >= 20 AND Cost <=60

Багато хто вважає, що перевірка приналежності даних діапазону за допомогою оператора BETWEEN є більш простим способом запису, ніж використання звичайної перевірки, що розглянута в останньому операторі SELECT.

Таблиця 6.8

Перелік інвентарних номерів книжок, ціна яких лежить у діапазоні від 20 до 60 грн.
InventoryNumber Cost
4510000 22,33
4532477 34,01
4678532 56,78
5478956 45,10
2145876 59,25
5214786 36,05
7865890 21,32
6589321 36,69
7812639 48,13
7523690 27,99

6.10. Перевірка відповідності значення виразу заданому шаблоном

6.10.1. Оператор LIKE

Оператор LIKE задає шаблони порівняння рядкових значень. Він чутливий до регістру. Якщо необхідно перевірити задовольняє, чи ні значення стовпця або результат обчислення рядкового виразу шаблону (<значення> після пропозиції LIKE), то в умові пошуку необхідно вказати

<значення> [NOTLIKE <значення> [ESCAPE <символ>]

У шаблоні використовуються спеціальні символи – «%» та «_». Символ «%» (відсоток) застосовується для вказівки рядка символів будь-якої довжини, а символ «_» (підкреслення) – для вказівки будь-якого одиничного символу. Наприклад:

IssuePlace LIKE %' – цей шаблон означає, що першим символом рядкового значення обов'язково має бути велика літера «М», а всі інші символи є довільними й не перевіряються;

IssuePlace LIKE ‘М_’ – цей шаблон означає, що рядкове значення повинне мати довжину, яка дорівнює тільки двом символам, причому першим символом обов'язково має бути символ «М»;

IssuePlace LIKE '%е' – цей шаблон визначає будь-яке рядкове значення довжиною не менше одного символу, причому останнім символом обов'язково має бути символ «е»;

IssuePlace LIKE '%Дніпропетровська область%' – цей шаблон означає, що нас цікавить будь-яка послідовність символів, що має підрядок «Дніпропетровська область»;

IssuePlace LIKE 'М%' – цей шаблон вказує на те, що потрібні рядки, які не починаються із символу «М».

Якщо потрібно, щоб рядок включав службовий символ, який використовується як символ підстановки, то слід застосувати «escape»-символ, помістивши його перед символом підстановки. Наприклад, для перевірки значень на відповідність ‘15%’ можна скористатися такою умовою пошуку:

LIKE '15#%' ESCAPE '#'

ПРИКЛАД 6.11

Використовуючи механізм пошуку за шаблоном, виведіть код, серію та номер паспорта осіб, які проживають у Дніпропетровській області (табл. 6.9).

SELECT Code, Series, Number, IssuePlace

    FROM PasportData

    WHERE IssuePlace LIKE '%Дніпропетровська область%'

Таблиця 6.9

Паспортні данні осіб, які проживають у Дніпропетровській області
Code Series Number IssuePlace
3 АБ 87134 Дніпропетровська область, село Солоне
7 АЗ 43188 Дніпропетровська область, м. Дніпродзержинськ
12 ІК 45190 Дніпропетровська область, село Петропавлівка

ЗАУВАЖЕННЯ! Строго кажучи останній SQL-запит вмістив у результуюче відношення інформацію лише про тих людей, у яких в атрибуті IssuePlace є послідовність символів, що співпадає з шаблоном в умовах пошуку (див. данні у відношенні PasportData). Наприклад, особа, для якої значення у атрибуті Code = 18, проживає у місті Дніпропетровськ, який розташован у межах Дніпропетровської області, але значення у атрибуті IssuePlace не відповідає заданому шаблону. Такий стан речей говорить про відсутність правил вводу інформації у атрибут IssuePlace.

6.10.2. Оператор STARTING

Оператор STARTING чутливий до регістру. Він використовується тоді, коли в умові пошуку потрібно, щоб значення якого-небудь стовпця або виразу починалося з певної послідовності символів:

<значення> [NOTSTARTING [WITH] <значення>

ПРИКЛАД 6.12

Виберіть коди, прізвища, імена та по батькові читачів, у яких прізвища починаються з літери «І» (табл. 6.10).

SELECT Code, FamilyName, Name, Patronymic

    FROM Readers

    WHERE FamilyName STARTING WITH 'І'

Таблиця 6.10

Вибірка кодів, прізвищ, імен та по батькові читачів, що починаються з літери «І»
Code FamilyName Name Patronymic
1 Іванов Петро Іванович
3 Ільїн Іван Петрович

6.10.3. Оператор CONTAINING

Оператор CONTAINING не чутливий до регістру. Він використовується тоді, коли необхідно, щоб значення якого-небудь стовпця або виразу складалося (неважливо з якої позиції) з заданої послідовності символів:

<значення> [NOTCONTAINING <значення>

ПРИКЛАД 6.13

Виберіть коди, прізвища, імена та по батькові читачів, до прізвищ яких входить послідовність літер «ко» (табл. 6.11).

SELECT Code, FamilyName, Name, Patronymic

    FROM Readers

    WHERE FamilyName CONTAINING 'ко'

Таблиця 6.11

Вибірка кодів, прізвищ, імен та по батькові читачів, у прізвищах яких міститься послідовність літер «ко»
Code FamilyName Name Patronymic
4 Суренко Дмитро Павлович
5 Коршунова Наталя Юріївна
6 Носенко Олег Володимирович
8 Козирєв Олексій Сергійович
9 Левченко Юлія Павлівна
12 Кириленко Віктор Олександрович

6.10.4. Функція UPPER

Функція UPPER(<значення>) використовується для перетворення літер рядкових значень (змісту стовпця, результату обчислення виразу) у великі літери. Функція UPPER може застосовуватися як у списку стовпців результуючого набору даних (після пропозиції SELECT), так і в умовах пошуку в пропозиції WHERE, коли необхідно ігнорувати регістр літер.

ПРИКЛАД 6.14

Виберіть коди, прізвища, імена та по батькові читачів у прізвищі яких міститься послідовність літер «ко» незалежно від того великі вони чи малі. Прізвище вивести великими літерами (табл. 6.12).

SELECT Code, UPPER(FamilyName), Name, Patronymic

    FROM Readers

    WHERE FamilyName CONTAINING 'ко'

Таблиця 6.12

Вібірка кодів, прізвищ, імен та по батькові читачів, у прізвищах яких міститься послідовність літер «ко» (прізвища виведені великими літерами)
Code FamilyName Name Patronymic
4 СУРЕНКО Дмитро Павлович
5 КОРШУНОВА Наталя Юріївна
6 НОСЕНКО Олег Володимирович
8 КОЗИРЄВ Олексій Сергійович
9 ЛЕВЧЕНКО Юлія Павлівна
12 КИРИЛЕНКО Віктор Олександрович

6.10.5. Функція CAST

Функція CAST використовується тоді, коли виникає потреба трактувати значення одного типу як значення іншого типу. Наприклад, використовувати числове значення як символьний рядок або навпаки. У цьому випадку застосовують функцію

CAST( <значення> AS <тип даних>)

Функція CAST копіює значення, перетворюючи їх до зазначеного типу даних. При цьому не слід забувати про перелік типів даних, у які може бути перетворене поточне значення:

Тип даних Можна привести до типів
NUMERIC CHARACTER, DATE
CHARACTER NUMERIC, DATE
DATE CHARACTER, NUMERIC

ПРИКЛАД 6.15

Виберіть коди, серії та номера паспортів, у номерах яких зустрічається число «84» (табл. 6.13).

SELECT Code, Series, Number

    FROM PasportData

    WHERE CAST(Number AS CHAR(5)) LIKE '%84%'

Таблиця 6.13

Коди, серії та номера паспортів, у номерах яких зустрічається число «84»
Code Series Number
9 АС 90843
11 ІК 10842

6.11. Перевірка належності значень множині

Така перевірка здійснюється за допомогою оператора IN

 <значення> [NOTIN (<значення>[, <значення> ...])

Множину значень можна сформувати за допомогою оператора SELECT. Цей випадок буде розглянутий пізніше при вивченні вкладених підзапитів, що повертають множину значень.

ПРИКЛАД 6.16

Використовуючи таблицю PasportData, виведіть код, серію та номер паспорта осіб, які проживають у Донецьку або Києві (табл. 6.14).

SELECT Code, Series, Number, IssuePlace

    FROM PasportData

    WHERE IssuePlace IN ('Донецьк', 'Київ');

Як і при розгляді оператора BETWEEN, використання ключового слова IN дозволяє простіше записати умови пошуку, особливо, якщо список припустимих значень досить великий. Такий самий результат може бути отриманий за допомогою наступного запиту:

SELECT Code, Series, Number, IssuePlace

    FROM PasportData

    WHERE IssuePlace = 'Донецьк' OR IssuePlace = 'Київ';

Таблиця 6.14

Коди, серії й номера паспортів для осіб, які проживають у Донецьку або Києві
Code Series Number IssuePlace
4 АЄ 12300 Донецьк
6 АЖ 01568 Київ
15 АК 89125 Київ
16 АК 55706 Донецьк
20 АК 12578 Київ

6.12. КОНТРОЛЬНІ ПИТАННЯ

  1. Які службові слова (пропозиції), що входять до складу оператора SELECT, Вам відомі?
  2. Яку операцію реляційної алгебри виконує оператор SELECT, який має найбільш простий вигляд?
  3. Як перейменувати стовпці результуючого набору даних оператора SELECT?
  4. Як усунути в результуючому наборі даних оператора SELECT рядків, що містять ідентичні дані у всіх стовпцях?
  5. Як працює механізм сортування результату роботи оператору SELECT?
  6. Які предикати пошуку Вам відомі?
  7. Що є спільного та відмінного при порівнянні константи та результатом обчислення виразу зі значенням в атрибуті відношення?
  8. Які операції реляційної алгебри реалізує предикат порівняння?
  9. У чому полягає різниця між логічним та фізичним рівнями формування результатів роботи оператора SELECT?
  10. Як реалізуються складні умови пошуку в операторі SELECT?
  11. Що вказують перед ім'ям стовпця в операторі SELECT?
  12. Як перевірити належність значення або виразу заданому діапазону?
  13. Який існує механізм перевірки відповідності значення виразу заданому шаблону?
  14. Що спільного та відмінного між операторами, які визначають відповідність значення виразу заданому шаблону?
  15. З якою метою використовують службові символи, що формують шаблон для визначення відповідності йому значень виразів?
  16. Як ігнорувати регістр рядкових літералів в умовах пошуку?
  17. Яким чином виконується узгодження типів даних в операторі SELECT?
  18. Як перевірити належність результату обчислення виразу множені?
Висновок

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

© Куваєв Я.Г., 2005—2023.

Всі права захищені.

Вся інформація, яка розміщена на цьому веб-сайті, призначена тільки для персонального використання і не підлягає подальшому відтворенню і/або поширенню в будь-якій формі, інакше як за письмовим дозволом Автора.