Устранение повторяющихся значений

Использование псевдонимов таблиц.

В приведенном выше примере оператора 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 устраняются повторяющиеся значения?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: