Главное меню

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 Козырев Алексей Сергеевич 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.11

Выборка кодов, фамилий, имен и отчеств читателей, в фамилиях которых содержится последовательность букв «ко» (фамилии выведены строчными буквами)
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—2020.

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

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