Использование псевдонимов таблиц.
В приведенном выше примере оператора SELECT
SELECT ReaderCode, FamilyName, Name, BookGiveOutRecord.Code, InventoryCode
FROM BookGiveOutRecord, Readers
WHERE Readers.Code = BookGiveOutRecord. ReaderCode
в перечне возвращаемых столбцов после слова SELECT и в условии поиска после слова WHERE перед именем столбца через точку пишется название таблицы:
WHERE Readers.Code = BookGiveOutRecord. ReaderCode
Указание имени таблицы перед именем столбца является совершенно необходимым, поскольку в разных таблицах могут оказаться одноименные столбцы (как в нашем примере), и SQL-сервер должен знать, со столбцом какой таблицы он имеет дело.
Использование общих имен таблиц для идентификации столбцов неудобно из-за своей громоздкости. Намного лучше присвоить каждой таблице какое-нибудь краткое обозначение, псевдоним. Такие псевдонимы называются псевдонимами таблиц. Они определяются после имени каждой таблицы в указании списка таблиц-источников после слова FROM:
SELECT...
FROM <таблица1 псевдоним1> [, < таблица2 псевдоним2>...]
WHERE...
Например, приведенный выше запрос
|
|
SELECT ReaderCode, FamilyName, Name, BookGiveOutRecord.Code, InventoryCode
FROM BookGiveOutRecord, Readers
WHERE Readers.Code = BookGiveOutRecord. ReaderCode
после введения в него псевдонимов таблиц выглядит намного компактнее:
SELECT ReaderCode, FamilyName, Name, B.Code, InventoryCode
FROM BookGiveOutRecord B, Readers R
WHERE R.Code = B.ReaderCode
10.6. Предложение ORDER BY – определение сортировки.
Набор данных, выдаваемый в результате выполнения оператора SELECT, в общем случае возвращается в неотсортированном виде. Это удобно далеко невсегда. Определить, по каким полям необходимо отсортировать записи в результирующем наборе данных, можно указав в предложении ORDER BY
<список_столбцов> =
{col | int} [co …] [ASC[ENDING] | DESC[ENDING] ][,<order_list>]
Список столбцов должен содержать имена столбцов, по которым будет производиться сортировка.
В случае указания имен нескольких столбцов, разделенных через запятую, столбец, указанный первым, будет использован для глобальной сортировки, второй столбец - для сортировки внутри группы, определяемой единым значением первого столбца, и т.д.
ПРИМЕР
Выдать список читателей библиотеки в алфавитном порядке
SELECT *
FROM Readers
ORDER BY FamilyNamе, Name, Patronymic
Результат выполнения запроса приведен в таблице 10.4.
Таблица 10.4.
Результат выполнения запроса SELECT * FROM Readers ORDER BY….
Code | FamilyNamе | Name | Patronymic | ReaderCardNumber | PasportCode | Job | Post | Note |
Иванов | Петр | Иванович | ДГУ, каф. ЭВТ | Ассистент | blob | |||
Ильин | Иван | Петрович | ДГУ, каф. физики | Доцент | blob | |||
Коршунова | Наталья | Юрьевна | ДГУ, каф.гео-информа-тики | Ассистент | blob | |||
Носенко | Олег | Владими-рович | ДГУ, ИКК | Инженер | blob | |||
Суренко | Дмитрий | Павлович | ДГУ, каф. геофизики | Ст. преподава-тель | blob | |||
Федорец | Ирина | Олеговна | ДГУ, АХЧ | Вахтер | blob |
Сравните таблицу 10.4 с таблицей 10.1.
|
|
Часто в результирующий набор данных необходимо включать не все записи с одинаковым значением какого-либо столбца (комбинации столбцов), а только одну из них. В этом случае после ключевого слова SELECT указывают слово DISTINCT.
SELECT [DISTINCT | ALL] {* | <значение1> [, <значение2> …]}
FROM <таблица1> [, <таблица2> …]
Повторяющимися считаются записи, содержащие идентичные значения во всех столбцах результирующего набора данных.
Наоборот, если в результирующий запрос нужно включить все записи, после слова SELECT указывают слово ALL. В InterBase нет необходимости использовать ALL явно, поскольку это значение действует по умолчанию.
ПРИМЕР
Выведите коды библиотекарей, когда-либо выдававших книги.
SELECT OutLibrarianCode
FROM BookGiveOutRecord;
Результат выполнения данного запроса приведен в таблице 10.5.
Таблица 10.5.
OutLibrarianCode |
Обратите внимание, что результат выполнения запроса содержит дублирующиеся значения, поскольку, в отличие от операции реляционной алгебры projection, оператор SELECT не исключает дублирующихся значений при выполнении проекции одного или нескольких столбцов. Для удаления из результирующей таблицы дублирующихся строк используется ключевое слово DISTINCT. Откорректированный запрос выглядит следующим образом:
SELECT DISTINCT OutLibrarianCode
FROM BookGiveOutRecord;
Результат выполнения этого запроса представлен в таблица 10.6.
Таблица 10.6.
OutLibrarianCode |
КОНТРОЛЬНЫЕ ВОПРОСЫ:
1. Из каких служебных слов состоит SQL-оператор?
2. Формат оператора SELECT.
3. Перечислите основные типы предикатов поиска.
4. Что такое псевдоним таблиц? Где и как они определяются?
5. Какое предложение необходимо указать в операторе SELECT, чтобы определить, по каким полям необходимо отсортировать записи в результирующем НД?
6. Как оператором SELECT устраняются повторяющиеся значения?