Инструкция SELECT. В основе большинства SQL-запросов лежит инструкция SELECT, важнейшие параметры которой приведены в следующем списке:
SELECT Список_полей
FROM Имена_таблиц
WHERE Критерии_поиска
IN Имя_базы_данных
ALL, DISTINCT,DISTINCTROW предикаты
Таблица1 INNER JOIN Таблица2
GROUP BY Список_полей
HAVING Критерии_поиска
ORDER BY Список_полей.
Примечание. С целью повышения наглядности каждая инструкция в примерах помещена в отдельную строку. Однако при оформлении SQL-запроса Access требует, чтобы все SQL-инструкции находились в одной строке, для перехода на следующую строку следует нажимать не клавишу [Enter], а комбинацию клавиш [Ctrl+Enter].
Пример:
SELECT Клиенты.Фирма
FROM Клиенты, [Потенциальные покупатели]
WHERE Клиенты.Фирма=[Потенциальные покупа те ли].Фирма;
Внимание! SQL-запрос всегда завершается точкой с запятой.
При отработке данного запроса анализируются сведения, взятые из таблиц Потенциальные покупатели и Клиенты.
Приведённый запрос состоит из инструкции SELECT с параметрами FROM и WHERE. Инструкция SELECT определяет поля, которые подлежат обработке (будут извлечены и представлены в качестве результата запроса). В рассматриваемом примере это поле Фирмаиз таблицы Клиенты. Параметр FROM указывает, какие таблицы содержат данное поле (между именами таблиц должны стоять запятые). В нашем примере это таблицы Потенциальные покупатели и Клиенты. С помощью параметра WHERE определяются требования, которым должны соответствовать извлекаемые записи (в рассматриваемом примере – равенство содержимого полей Клиенты. Фирма и [Потенциальные покупатели].Фирма).
|
|
При выполнении запроса из таблиц, заданных параметром FROM, извлекаются записи, удовлетворяющие условию WHERE, а из отобранных записей – поля, которые перечислены в инструкции SELECT. Приступая к работе с инструкцией SELECT, необходимо принимать во внимание следующее:
1. Обычно SELECT является первой командой SQL-запроса.
2. Между именами полей следует ставить запятые. Порядок имён полей в списке соответствует порядку их обработки и отображения в результирующем наборе данных.
3. Имя поля, содержащее пробел или разделитель, необходимо заключить в квадратные скобки.
4. При наличии одноимённых полей в обрабатываемых таблицах надлежит приводить полную спецификацию поля: Имя_Таблицы. Имя_поля.
Параметр FROM. Посредством параметра FROM определяют, какие таблицы или запросы содержат поля, приведённые в инструкции SELECT, т. е. составляют список обрабатываемых таблиц и запросов.
Следует учитывать:
1. FROM задаётся как параметр для инструкции SELECT и всегда следует за ней.
2. В списке таблиц сначала указывается меньшая.
Используя символ * в качестве заменителя имени поля в инструкции SELECT, из таблицы можно отобрать все поля.
|
|
Пример:
SELECT Клиенты.*
FROM Клиенты;
Параметр WHERE. Параметр WHERE не обязателен, но если он присутствует в инструкции, то должен следовать за параметром FROM. Если параметр WHERE не задан, SQL-запрос выберет все записи.
Параметр WHERE позволяет определить, какие записи таблиц, указанных в списке FROM, появятся в результирующем наборе данных запроса. Access выбирает записи, которые соответствуют критериям, установленным с помощью параметра WHERE. Эти критерии идентичны критериям, вводимым в QBE-области.
Параметр IN. Данный параметр используется при работе с базами данных другого формата, с которыми может работать Access.
Этот SQL-запрос аналогичен запросу из предыдущего примера, но в данном случае сведения о клиентах собраны не в Access-базе, а в таблицах Клиентыи Потенциальные покупателииз базы формата dBASE IV, хранящиеся в файле C:/DBASE/INFO/CLIENTS.
При использовании параметра IN принимайте во внимание следующее:
1. Пользователь может обращаться только к одной внешней (любой другой, исключая активную) базе данных.
2. Указывая тип данных, созданных не в Access, следует добавлять точку с запятой (;), а также кавычки или апострофы: ’dBASE;’, ”dBASE;”.
Пример:
SELECT Клиенты.Фирма
FROM Клиенты, [Потенциальные покупатели]
IN “C:/DBASE/IFNO/CLIENTS” “dBASE IV;”
WHERE Клиенты.Фирма = [Потенциальные покупатели].Фирма;
Предикат ALL. С помощью параметра WHERE определяется критерий отбора записей из входного набора. Но в таблице могут присутствовать дубликаты (например, в таблицу клиентов ошибочно может быть дважды занесена запись об одном и том же клиенте). По умолчанию в выходном наборе, генерируемом при выполнении SQL-запроса, присутствуют все дубликаты. Управлять включением дубликатов в выходной набор можно с помощью специальных параметров-предикатов. По умолчанию команде SELECT соответствует предикат ALL (его можно явно не указывать), который задаёт включение в выходной набор всех дубликатов, отобранных по критерию WHERE. В команде SELECT предикат ALL следует за ключевым словом SELECT (перед именами отбираемых полей).
Пример:
SELECT ALL *
FROM Клиенты;
Выполняя такой запрос, Access выберет из таблицы клиентов все записи со всеми полями. Если в таблице есть одинаковые записи, они будут присутствовать в выходном наборе в том же количестве, что и в обрабатываемой таблице. Для борьбы с дубликатами применяются предикаты DISTINCT и DISTINCTROW.
Предикат DISTINCT. Если, выполняя этот SQL-запрос, Access найдёт название одной фирмы в нескольких записях, то в выходной набор это название будет включено только один раз.
Предикат DISTINCT следует применять в тех случаях, когда необходимо исключить записи, которые содержат повторяющиеся данные в выбранных полях. При использовании этого предиката значения указанных в инструкции SELECT полей должны быть уникальными, чтобы содержащая их запись вошла в выходной набор.
Пример:
SELECT DISTINCT Клиенты.Фирма
FROM Клиенты, [Потенциальные покупатели]
WHERE Клиенты.Фирма = [Потенциальные покупатели].Фирма;
Примечание. Результат запроса, в котором применён предикат DISTINCT, нельзя актуализировать. Действие команды с этим предикатом то же, что и в случае установки значения Да для опции Уникальные значения в диалоговом окне Свойства запроса.
Предикат DISTINCTROW. Этот предикат используется для исключения дубликатов из всех полей, а также для исключения повторяющихся записей.
Пример:
SELECT DISTINCTROW Фирма
FROM Клиенты, Заказы,
Клиенты INNER JOIN Заказы
ON Клиенты. [Номер Клиента] = Заказы. [Номер Клиента]
GROUP BY Фирма;
Между таблицами Клиентыи Заказыустанавливается связь через поле Номер Клиента. Так как номер клиента является уникальным, таблица Клиенты не содержит дубликатов в поле Номер Клиента (в отличие от таблицы Заказы, в которой для некоторых клиентов указано несколько заказов).
|
|
В выходной набор запроса будет включен список всех фирм, которые сделали минимум один заказ.
Обращайте внимание на следующие моменты:
1. Предикат DISTINCTROW эффективен, если поля выбираются из одной, а не из всех используемых в запросе таблиц.
2. Предикат DISTINCTROW игнорируется, если в запрос включена только одна таблица.
Операция INNER JOIN. С помощью операции INNER JOIN создаётся специальное объединение таблиц. Объединение производится при условии равенства содержимого полей, приведённых после ключевого слова ON в записях таблиц, указанных в операции INNER JOIN. Записи из двух таблиц объединятся при обнаружении совпадающих значений в указанных полях. Такое объединение записей используется наиболее часто.
Операция INNER JOIN является не обязательной частью инструкции SELECT. Она оформляется как часть параметра FROM:
Пример:
Таблица1 INNER JOIN Таблица2
ON таблица1.ПолеА = Таблица2.ПолеБ
В данном случае установится связь между таблицами Таблица1и Таблица2. В выходной набор будут включены записи из этих таблиц при условии равенства содержимого: Таблица1.ПолеА = Таблица2.Поле Б. В операции могут участвовать два числовых поля любого типа (даже различных). Для полей других типов необходимо соблюдать следующее правило: поля должны иметь один и тот же тип данных, но могут иметь разные имена.
Параметр GROUP BY. При использовании параметра GROUP BY все идентичные значения в заданном поле объединяются в один элемент выходного набора. В нашем примере повторяющиеся имена фирм будут включены в выходной набор только один раз. Используя параметр GROUP BY, учитывайте:
1. Параметр GROUP BY является уточняющим (необязательным) параметром при использовании параметров FROM и WHERE.
2. Имя поля, содержащее пробел или разделитель, следует заключить в квадратные скобки.
Параметр HAVING. Access рассортирует данные о потенциальных покупателях по названиям фирм, сведёт повторяющиеся записи воедино и укажет в выходном наборе только те фирмы, названия которых содержат аббревиатуру Ltd.
|
|
В результате объединения записей с помощью параметра GROUP BY и применения параметра HAVING отображаются записи, соответствующие условиям, заданным в параметре HAVING. Это дополнительная возможность фильтрации выходного набора. Используя параметр HAVING, принимайте во внимание следующее:
1. HAVING – необязательный параметр, но если он задан, то должен следовать за параметром GROUP BY.
2. У параметра HAVING те же функции, что и у параметра WHERE, но область их действия ограничена выходным набором. WHERE определяет записи, которые должны быть выбраны. HAVING устанавливает, какие записи, сгруппированные посредством параметра GROUP BY, должны отображаться на экране.
Пример:
SELECT [Потенциальные покупатели].*
FROM [Потенциальные покупатели]
GROUP BY Фирма
HAVING Фирма Like “ *H Ltd;”
Параметр ORDER BY. Названия фирм-клиентов будут рассортированы в обратном алфавитном порядке.
Посредством параметра ORDER BY выполняется сортировка данных выходного набора в заданной последовательности. Сортировка может осуществляться по нескольким полям, которые в этом случае перечисляются через запятую после ключевого слова ORDER BY. Способ сортировки определяется ключевым словом, которое указывается в рамках параметра ORDER BY и следует за названием поля, по которому сортируются данные. Сортировка может выполняться для каждого поля из списка параметра ORDER BY. Используя параметр ORDER BY, принимайте во внимание следующее:
1. Параметр ORDER BY не является обязательным параметром; если он не задан, данные не сортируются и приводятся в том порядке, в котором они извлечены из набора.
2. По умолчанию выполняется сортировка по возрастанию. Явно она задаётся ключевым словом ASC.
3. Для выполнения сортировки в обратном порядке (от Я до А) или сортировки по убыванию необходимо после имени поля, по которому сортируются данные, ввести ключевое слово DESC.
4. Параметр ORDER BY обычно является последним элементом SQL-инструкции.
Пример:
SELECT Фирма
FROM Клиенты
ORDER BY Фирма DESC;