Введение в курс "Базы данных" - DISTINCT

E-mail Печать PDF
Рейтинг пользователей: / 9
ХудшийЛучший 
Индекс материала
Введение в курс "Базы данных"
Классификация БД по их использованию
Реляционные БД (MS Access)
Ключи
Связи между таблицами
Неформальные методы приведения таблиц к третьей нормальной форме
Операции в БД (VBA)
Операции над записями
SQL
Оператор Select
DISTINCT
FROM
Группировка
Объединение таблиц
Параметры
Перекрёстные запросы
Обновление данных
Удаление данных
Подчинённые запросы
Создание таблиц
Добавление новых полей
Tехнология разработки программного обеспечения, использующего базы данных
Доступ к данным в VB 6.0
Работа с записями
Отчёты в VB6
Доступ к данным в C++ Builder
Отчёты в C++ Builder
Создание многоуровневых приложений
Доступ к данным в C# (Visual Studio 2005)
Создание отчётов
OLAP технологии. XML язык
SQL Server
Триггер
Программирование триггера
XML
Все страницы

DISTINCT

Исключает записи, которые содержат повторяющиеся значения в выбранных полях.  Чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными.  Например, в таблице "Сотрудники" есть однофамильцы.  Если две записи содержат значение "Иванов" в поле "Фамилия", то следующая инструкция SQL возвратит только одну из них:

SELECT DISTINCT

 

Фамилия

 

FROM Сотрудники;

 

Если предложение SELECT содержит более одного поля, то для включения записи в результат выполнения запроса необходимо, чтобы совокупность значений во всех этих полях была уникальной.

 

DISTINCTROW - опускает данные, основанные на целиком повторяющихся записях, а не отдельных повторяющихся полях.  Например, создан запрос, объединяющий таблицы "Клиенты" и "Заказы" по полю "Клиент".  В поле "Клиент" таблицы "Клиенты" нет повторяющихся значений, однако, они есть в одноименном поле таблицы "Заказы", поскольку каждый клиент может разместить несколько заказов.  Следующая инструкция SQL показывает, как можно использовать предикат DISTINCTROW для получения списка клиентов, разместивших хотя бы один заказ, без включения сведений о самих заказах:

SELECT DISTINCTROW Название

 

FROM Клиенты INNER JOIN Заказы

 

ON Клиенты.КодКлиента = Заказы.КодКлиента

 

Если опустить предикат DISTINCTROW, в результат выполнения запроса будет включено несколько строк о каждом клиенте, сделавшем несколько заказов. Предикат DISTINCTROW влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц.  Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу или все поля всех таблиц.

 

TOP n [PERCENT]             

 

Возвращает определенное число записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.  Следующая инструкция SQL позволяет получить список 25 лучших студентов выпуска 2007 года:

 

SELECT TOP 25

 

Имя, Фамилия

 

FROM Студенты

 

WHERE ГодВыпуска = 2007

 

ORDER BY СреднийБалл DESC;

 

Если предложение ORDER BY будет опущено, запрос возвратит произвольный набор 25 записей из таблицы "Студенты", удовлетворяющих предложению WHERE. Предикат TOP не осуществляет выбор между равными значениями.  Если в предыдущем примере средние балы двадцать пятого и двадцать шестого студента будут равны, то запрос возвратит 26 записей. Кроме того, можно использовать зарезервированное слово PERCENT для возврата определенного процента записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY.  Предположим, что вместо 25 лучших студентов следует отобрать студентов, попавших в последние 10 процентов:

 

SELECT TOP 10 PERCENT

 

Имя, Фамилия

 

FROM Студенты

 

WHERE ГодВыпуска = 2007

 

ORDER BY СреднийБалл ASC;

 

Предикат ASC обеспечивает возврат последних значений.  Значение, следующее после предиката TOP должно быть числовым значением типа Integer без знака. Предикат TOP не влияет на возможность обновления запроса.

 

ТАБЛИЦА - имя таблицы, из которой отбираются записи.

 

* - Указывает, что выбраны все поля заданной таблицы или таблиц.

 

ПОЛЕ_1, ПОЛЕ_2 - имена полей, из которых должны быть отобраны данные.  Если включить несколько полей, они будут извлекаться в указанном порядке.

 

ПСЕВДОНИМ_2, ПСЕВДОНИМ_2  - имена, которые станут заголовками столбцов вместо исходных названий столбцов в таблице.

 

ВЫРАЖЕНИЕ - имена одной или нескольких таблиц, которые содержат отбираемые данные.

 

внешняяБазаДанных - имя базы данных, которая содержит таблицы, указанные с помощью аргумента выражение, если они не находятся в текущей базе данных.

 

При выполнении этой операции ядро базы данных Microsoft Jet находит указанную таблицу или таблицы, извлекает заданные столбцы, выделяет строки, соответствующие условию отбора, и сортирует или группирует результирующие строки в указанном порядке.

 

Инструкции SELECT не изменяют данные в базе данных. Обычно слово SELECT является первым словом инструкции SQL.  Большая часть инструкций SQL является инструкциями SELECT или SELECT...INTO.

 

Ниже приведен минимальный синтаксис инструкции SELECT:

 

SELECT поля FROM таблица

 

Для отбора всех полей таблицы можно использовать символ звездочки (*).  Следующая инструкция отбирает все поля из таблицы "Сотрудники":

 

SELECT * FROM Сотрудники;

 

Если несколько таблиц, включенных в предложение FROM, содержат одноименные поля, перед именем такого поля следует ввести имя таблицы и оператор "." (точка).  Предположим, что поле "Отдел" содержится в таблицах "Сотрудники" и "Начальники".  Следующая инструкция SQL отберет поле "Отдел" из таблицы "Сотрудники" и поле "Начальник" из таблицы "Начальники":

 

SELECT Сотрудники.Отдел, Начальники.Начальник

 

FROM Сотрудники INNER JOIN Начальники

 

WHERE Сотрудники.Отдел = Начальники.Отдел;

 

При создании объекта Recordset ядро базы данных Microsoft Jet использует имя поля таблицы в качестве имени объекта Field в объекте Recordset.  Если требуется другое имя поля, или выражение, создающее поле, не определяет имя, используйте зарезервированное слово AS.  В следующем примере заголовок "Рождение" становится именем объекта Field в результирующем объекте Recordset:

 

SELECT [Дата рождения] AS Рождение

 

FROM Сотрудники;

 

При работе со статистическими функциями или запросами, которые возвращают повторяющиеся имена объекта Field, используйте предложение AS для задания другого имени объекта Field.  В следующем примере заголовок "Численность" задается для возвращаемого объекта Field результирующего объекта Recordset:

 

SELECT COUNT(КодСотрудника)AS Численность

 

FROM Сотрудники;

 

Для дальнейшего отбора и организации искомых данных в инструкцию SELECT можно добавлять многие другие предложения.

 



 

Добавьтe Ваш комментарий

Ваше имя (псевдоним):
Ваш адрес почты:
Заголовок:
Комментарий: