Автор уроков и преподаватель школы: Владимир Милькин
Начиная с этого урока мы начинаем изучать синтаксис языка запросов.
Я настоятельно вам советую выполнять все запросы у себя на компьютере по ходу чтения уроков и ответственно относиться к выполнению домашних заданий — какими бы простыми они не казались на первый взгляд.
Основы синтаксиса
В двух словах синтаксис языка запросов можно описать так:
ВЫБРАТЬ
СЮДА ПИШЕМ ЧТО БУДЕМ ВЫБИРАТЬ
ИЗ
СЮДА ПИШЕМ ОТКУДА БУДЕМ ВЫБИРАТЬ
Таким образом, если мы хотим написать запрос, который вернёт нам имена всех элементов справочника Еда, то рассуждение будет примерно таким:
- У справочника Еда есть реквизит с именем Наименование.
- Элементы справочника Еда хранятся в базе данных в таблице Справочник.Еда.
- А значит запрос будет таким:
ВЫБРАТЬ Наименование ИЗ Справочник.Еда
Попробуйте написать этот запрос в консоли запросов, как мы это делали на первом уроке (ссылка):
И затем выполнить его (кнопка Выполнить):
Мы видим, что в качестве результата запроса вернулась таблица с одним столбцом Наименование, в которой перечислены названия всех элементов справочника Еда. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Таким же образом повторяйте все примеры, которые мы будем разбирать в дальнейшем.
Выборка нескольких свойств
Если мы хотим запросить несколько свойств (к примеру, Наименование и Цвет), то их нужно перечислить через запятую:
ВЫБРАТЬ Наименование, Цвет ИЗ Справочник.Еда
Выборка всех свойств
Если мы хотим запросить все свойства объекта и не хотим перечислять каждое из них по имени — воспользуемся символом звёздочка:
ВЫБРАТЬ * ИЗ Справочник.Еда
Вся результатирующая таблица, которую вернул нам в запрос не поместилась на картинке — столбцов на самом деле больше — по одному на каждый реквизит объекта (включая стандартные).
Выборка первых N строк
Теперь давайте решим такую задачу: «Запросить названия первых 3 элементов справочника Еда«. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Чтобы ограничить количество строк, которое вернёт нам запрос используем ключевое слово ПЕРВЫЕ 3:
ВЫБРАТЬ ПЕРВЫЕ 3 Наименование ИЗ Справочник.Еда
Выборка различных строк
А что если справочник Еда содержал бы два элемента с именем «Банан» и нам требовалось, чтобы запрос возвращал среди прочей еды только один банан, а не два? Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
В этом случае нам пригодилось бы ключевое слово РАЗЛИЧНЫЕ:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Наименование
ИЗ
Справочник.Еда
Дополнительные пояснения
Смотреть пояснения (от 30.07.2014)
Лабораторная работа 1
Установка и подключение базы данных
Для всех занятий будем использовать подготовленную Алексеем Кармановым базу данных «Гастроном».
Обработка «Консоль запросов»
Все запросы будем выполнять в режиме 1С:Предприятия. Для этого нам понадобится предназначенная для этого обработка «Консоль запросов».
Знакомство с базой
Пользователь: Администратор. Пароль пустой.
Наша база уже содержит определенные данные. Вы можете в этом убедиться, если пощёлкаете по объектам базы из меню верхней панели (Еда, Вкусы, Цвета и так далее):
Виды объектов
Еда, Вкусы, Цвета, Клиенты, Заказы клиентов … — всё это прикладные объекты базы данных. Прикладными они называются потому, что служат для решения какой-то прикладной задачи.
Например, объект Еда служит для хранения информации о том, какая бывает еда, а объект Заказы клиентов хранит информацию о заказах, которые были сделаны нашими клиентами.
Пока нам достаточно уяснить, что прикладные объекты базы данных бывают двух видов:
Справочники и Документы.
Справочники
Справочники позволяют хранить в информационной базе данные, имеющие одинаковую структуру и списочный характер. Это может быть, например, список сотрудников, перечень товаров, список поставщиков или покупателей.
Документы
Документы позволяют хранить в прикладном решении информацию о совершенных хозяйственных операциях или о событиях, произошедших в «жизни» предприятия вообще. Это могут быть, например, приходные накладные, приказы о приеме на работу, счета, платежные поручения и так далее. Каждый документ в отличие от справочников характеризуется номером, датой и временем.
Настоящие имена наших объектов
Те имена объектов (Еда, Вкусы, … , Заказ клиента и так далее), которые мы видим в режиме 1С:Предприятия далеко не всегда являются настоящими. Чаще всего они выглядят так, чтобы их приятно было читать пользователю.
Но для написания запросов нам необходимо знать именно настоящее имя объекта. Как его можно выяснить?
К примеру, если бы мы задались целью написать запрос для получения данных по заказам клиентов могли бы мы использовать имя «Заказ клиента», которое отображается в режиме 1С:Предприятия? Конечно же нет, потому что оно не настоящее. Настоящее имя объекта можно узнать в режиме 1С:Конфигуратор.
Зайдите в конфигуратор базы данных и выполните из главного меню «Конфигурация»- «Открыть конфигурацию»:
Вот они наши объекты (и тут, кстати очень хорошо видно кто Справочник, а кто Документ) и их настоящие имена.
Итак, какое настоящее имя у объекта «Заказ клиента»?
Запрос Hello, World
Давайте напишем следующий текст запроса:
ВЫБРАТЬ
*
ИЗ
Справочник.Еда
Запрос очень простой и, в принципе, интуитивно понятный. Попробуйте разобраться в нём самостоятельно
Задание
1)Перечислите полные названия таблиц для всех справочников и документов нашей базы данных.
2)Перечислите полные списки реквизитов для справочников Цвета, Вкусы и Еда и
документов ЗаказКлиента, УстановкаЦенНаЕдуДляКлиентов и ПоступлениеЕды.
3)Перечислите типы столбцов следующих таблиц базы данных Гастроном:
1.Справочник.Еда
2.Документ.ЗаказКлиента
Выборка нескольких свойств
Если мы хотим запросить несколько свойств (к примеру, Наименование и Цвет), то их
нужно перечислить через запятую:
ВЫБРАТЬ Наименование, Цвет
ИЗ
Справочник.Еда
Выборка всех свойств
Если мы хотим запросить все свойства объекта и не хотим перечислять каждое из них по
имени — воспользуемся символом звёздочка:
ВЫБРАТЬ
*
ИЗ
Справочник.Еда
Выборка первых N строк
Теперь давайте решим такую задачу: «Запросить названия первых 3 элементов справочника Еда«. Чтобы ограничить количество строк, которое вернёт нам запрос используем ключевое слово ПЕРВЫЕ 3:
ВЫБРАТЬ ПЕРВЫЕ 3 Наименование
ИЗ
Справочник.Еда
Выборка различных строк
А что если справочник Еда содержал бы два элемента с именем «Банан» и нам требовалось, чтобы запрос возвращал среди прочей еды только один банан, а не два? В этом случае нам пригодилось бы ключевое слово РАЗЛИЧНЫЕ:
ВЫБРАТЬ РАЗЛИЧНЫЕ Наименование
ИЗ
Справочник.Еда
а)Напишите запрос, который запрашивает клиентов и их любимые цвета.
б)Напишите запрос, который запрашивает первые 2 различных вкуса.
в)Напишите запрос, который запрашивает следующие реквизиты всех заказов клиентов:
Дата, Номер, Клиент.
Соседние файлы в предмете Управление данными в учётно-аналитических системах
- #
25.11.201844.11 Кб27Консоль запросов для 1С 8.3 и 8.2.epf
- #
- #
- #
- #
- #
- #
0 / 0 / 0 Регистрация: 11.11.2017 Сообщений: 7 |
|
1 |
|
Запрос, возвращающий список всех клиентов, совершивших заказ за определенный период времени15.11.2017, 17:51. Показов 41227. Ответов 7
Cформулируйте запрос, возвращающий список всех клиентов (с указанием фамилии и имени), совершивших заказ за определенный период времени
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
15.11.2017, 17:51 |
Ответы с готовыми решениями: Запрос, возвращающий список всех клиентов, совершивших более 3 заказов Нужен запрос, подсчитывающий количество клиентов, ни сделавших ни одного заказа в определенный период времени SQL запрос, который вернет список клиентов, не совершивших ни одной транзакции Создать запрос, который бы считал сколько сколько процентов набежало за определенный период времени 7 |
qwertehok 4853 / 3999 / 1005 Регистрация: 29.08.2013 Сообщений: 25,554 Записей в блоге: 3 |
||||
15.11.2017, 18:56 |
2 |
|||
Сообщение было отмечено alexmafacka как решение Решение
запросвыдаст список ВСЕХ клиентов
1 |
0 / 0 / 0 Регистрация: 11.11.2017 Сообщений: 7 |
|
15.11.2017, 19:12 [ТС] |
3 |
qwertehok, Работает, есть ещё одно условие задачи и надеюсь отстану
0 |
qwertehok 4853 / 3999 / 1005 Регистрация: 29.08.2013 Сообщений: 25,554 Записей в блоге: 3 |
||||
15.11.2017, 19:49 |
4 |
|||
третья таблица тут не нужна
не очень красиво, но работает
1 |
0 / 0 / 0 Регистрация: 11.11.2017 Сообщений: 7 |
|
15.11.2017, 19:56 [ТС] |
5 |
qwertehok, выдало ошибку: «Сообщение 8155, уровень 16, состояние 2, строка 7
0 |
qwertehok 4853 / 3999 / 1005 Регистрация: 29.08.2013 Сообщений: 25,554 Записей в блоге: 3 |
||||||||
16.11.2017, 07:40 |
6 |
|||||||
4я строка
заменить на
1 |
0 / 0 / 0 Регистрация: 09.12.2018 Сообщений: 3 |
|
19.03.2019, 03:45 |
7 |
Добрый день. Таблицы связаны по id_client Задача вывести клиентов из таблицы клиентов, те которые совершили более 3 заказов в таблице заказов. Надеюсь доступно написал. Спасибо.
0 |
solbrain 14 / 11 / 5 Регистрация: 14.03.2019 Сообщений: 43 Записей в блоге: 1 |
||||
19.03.2019, 10:50 |
8 |
|||
Добрый день.
0 |
Лабораторная работа № 7.
Создание SQL-запросов
(Structured Query Language).
Цель: Научиться создавать SQL-запросы.
Задание
1.
Выдать полную информацию о
товарах.
SELECT *
FROM Товар;
2.
Выдать таблицу клиентов, задавая
следующий порядок следования полей
Индекс, Город, Адрес,
Название,
SELECT Индекс,
Город, Адрес, Название
FROM клиенты;
3.
Выдать Наименование всех
товаров.
SELECT DISTINCT
наименование
FROM товар;
4.
Выдать список клиентов из
Новосибирска.
SELECT название
FROM клиенты
WHERE город=’Н-ск’;
5.
Составить список товаров,
упорядоченных по полю КодТипа товара, а в пределах одного типа товара по
Наименованию товара.
SELECT *
FROM товар
ORDER BY 2, 3;
6.
Выдать информацию о заказах, ДатаРазмещения
которых попадает в последний квартал прошлого года.
SELECT *
FROM заказы
WHERE
ДатаРазмещения>=#10/1/2009# And ДатаРазмещения<=#12/31/2009#;
7.
Выдать список товаров, КодТовара
которых начинается с 1(или любого другого определенного символа в зависимости
от ваших данных).
SELECT [код товара],
наименование
FROM товар
WHERE [код товара] like
«1*»;
8.
Определить общее количество
клиентов .
SELECT count(*)
FROM клиенты;
9.
Выдать общее количество заказов,
сделанных клиентами.
SELECT count(*)
FROM заказы;
10. Выдать количество заказов одного определенного
клиента (любого клиента, КодКлиента которого есть среди ваших данных).
SELECT count(*)
FROM заказы
WHERE [код клиента]=116;
11. Определить количество заказов, содержащих товар с
заданным кодом.
SELECT count(*)
FROM заказано
WHERE [код товара]=1111;
12. Выявить средний, минимальный и максимальный объем
заказов для любого клиента, имеющего несколько заказов (В запросе укажите
конкретный КодКлиента с учетом ваших данных).
SELECT Avg(Количество) AS
среднее, Min(Количество) AS минимальное, Max(Количество) AS максимальное
FROM Заказы INNER JOIN
Заказано ON Заказы.[Код заказа]=Заказано.[Код заказа]
WHERE [Код клиента]=116;
13. Выдать для каждого товара КодТовара и общее
заказанное количество этого товара.
SELECT Товар.[Код товара],
Наименование, Sum(Количество) AS Всего
FROM Товар INNER JOIN
Заказано ON Товар.[Код товара]=Заказано.[Код товара]
GROUP BY Товар.[Код
товара], Наименование;
14. Выдать список товаров, заказанных более чем в одном
заказе.
SELECT Заказано.[Код
товара], Товар.Наименование
FROM Заказано INNER JOIN
Товар ON Заказано.[Код товара]=Товар.[Код товара]
GROUP BY Заказано.[Код
товара], Товар.Наименование
HAVING COUNT(*)>1;
15. Дать сведения обо всех клиентах и их заказах (с
помощью команды INNER JOIN).
SELECT Клиенты.[Код
клиента], Название, [Код заказа]
FROM Клиенты INNER JOIN
Заказы ON Клиенты.[Код клиента]=Заказы.[Код клиента];
16. Дать сведения обо всех клиентах и заказанных ими
товарах
SELECT Название,
Заказы.[Код клиента], Заказы.[Код заказа], Заказано.[Код товара], Наименование
FROM Клиенты, Заказы, Заказано,
Товар
WHERE Клиенты.[Код
клиента]=Заказы.[Код клиента] AND Заказы.[Код заказа]=Заказано.[Код заказа] And
Заказано.[Код товара]=Товар.[Код товара];
17. Выдать список клиентов, заказавших определенный товар
(конкретный КодТовара указать в запросе).
SELECT Название,
Заказы.[Код клиента], Заказы.[Код заказа], Заказано.[Код товара], Наименование
FROM Клиенты, Заказы,
Заказано, Товар
WHERE Клиенты.[Код
клиента]=Заказы.[Код клиента] AND Заказы.[Код заказа]=Заказано.[Код заказа] And
Заказано.[Код товара]=Товар.[Код товара] AND Товар.[Код товара]=1116;
18. Выдать список заказов, содержащих товары заданного
типа.
SELECT Заказано.[Код
заказа]
FROM Заказано, Товар, Типы
WHERE Заказано.[Код
товара]=Товар.[Код товара] AND Товар.[Код типа]=Типы.[Код типа] AND Типы.[Код
типа]=1;
19. Определить КодКлиента, заказавшего по крайней
мере один товар такой же, как заказанный любым другим клиентом ( выберите КодКлиента,
заказавшего товар, из вашего списка).
SELECT DISTINCT [Код
клиента]
FROM Заказы AS X INNER
JOIN Заказано AS Y ON X.[Код заказа]=Y.[Код заказа]
WHERE Y.[Кодтовара] IN
(SELECT [Кодтовара]
FROM Заказы INNER JOIN
Заказано
ON Заказы.[Код
заказа]=Заказано.[Код заказа]
WHERE Заказы.[Код
клиента]=116);
20. Выдать коды товаров, заказанных более чем одним
клиентом.
SELECT DISTINCT [Код
товара]
FROM Заказано AS X INNER
JOIN Заказы AS Y ON X.[Код заказа]=Y.[Код заказа]
WHERE X.[Кодтовара] IN
(SELECT [Кодтовара]
FROM Заказы INNER JOIN
Заказано
ON Заказы.[Код
заказа]=Заказано.[Код заказа]
WHERE Заказы.[Код
клиента]<>Y.[Код клиента]);
21. Выдать информацию о клиентах, заказавших определенный
товар (использовать коррелированный подзапрос, КодТовара выбрать
произвольно).
SELECT Клиенты.[Код
клиента], Клиенты.Название, Клиенты.Индекс, Клиенты.Город, Клиенты.Адрес
FROM Клиенты INNER JOIN
Заказы ON Клиенты.[Код клиента]=Заказы.[Код клиента]
WHERE 1110 IN
(SELECT Заказано.[Код
товара]
FROM Заказано INNER JOIN
Заказы ON Заказано.[Код заказа]=Заказы.[Код заказа]
where клиенты.[Код
клиента]=заказы.[Код клиента]);
22. Выдать Названия и Адреса клиентов,
заказавших все возможные виды товаров.
SELECT Название, Адрес
FROM Клиенты
WHERE NOT
EXISTS
(SELECT *
FROM Товар
WHERE NOT
EXISTS
(SELECT *
FROM Заказы, Заказано
WHERE Заказы.[Код
заказа]=Заказано.[Код заказа] AND [Код клиента]=Клиенты.[Код клиента] AND [Код
товара]=Товар.[Код товара]));
23. Выдать список товаров, цена которых выше заданного
уровня и заказанных определенным клиентом (КодКлиента введите с учетом
ваших данных).
SELECT [Код товара]
FROM Товар
WHERE [На складе] > 750
UNION SELECT [Код товара]
FROM Заказы INNER JOIN
Заказано
ON Заказы.[Код
заказа]=Заказано.[Код заказа]
WHERE Заказы.[Код
клиента]=116;
24. Добавьте запись о новом клиенте.
INSERT INTO Клиенты
VALUES (120,
«Молодец», 315102, «Бердск», «Южный парк 666»,
«Компания №1»);
25. Удалите сведения об определенном клиенте.
DELETE *
FROM Клиенты
WHERE [Код клиента]=120;
Доброго времени суток, уважаемые читатели. Сегодня мы перейдем к изучению оператора SELECT, который является очень важным в языке SQL. Помимо общей информации, на этот раз будет больше примеров, чем ранее. И в будущем количество примеров будет увеличиваться.
В первом уроке по языку SQL мы создали базу данных и три таблицы, с помощью оператора CREATE, а во втором уроке — для заполнения таблиц данными мы использовали оператор INSERT.
Общие сведения
Итак, оператор SELECT необходим для выборки данных из таблиц. С помощью этого оператора SQL, вы можете выбрать всю таблицу, например сделав такой запрос:
SELECT * FROM имя_таблицы
Соответственно имя таблицы вы укажете свое. Такой запрос вернет все колонки в таблице, и в том порядке, в котором они записаны в базе данных.
Зачастую нужно выбирать определенные данные из таблицы. Это можно сделать большим количеством способов, в зависимости от того, что вы хотите получить. Например если вам необходимо получить только 2 колонки из таблицы, то запрос примет такой вид:
SELECT имя_колонки_1, имя_колонки_2 FROM имя_таблицы
И в этом примере порядок отображения будет таким, каким его зададут в самом запросе, это значит, что порядок можно контролировать.
Использование условия WHERE
До этого были примеры самых простых запросов, но если вам необходимо выбрать более точечные данные, например строки с определенным значением, то в таком случае можно воспользоваться условием. Это условие задается с помощью ключевого слова WHERE в блоке запроса SELECT SQL, после которого задается само условие.
Разберем небольшой пример на таблице salespeople, созданной ранее, но для начала напомним ее структуру.
snum | sname | city | comm |
---|---|---|---|
1 | Колованов | Москва | 10 |
2 | Петров | Тверь | 25 |
3 | Плотников | Москва | 22 |
4 | Кучеров | Санкт-Петербург | 28 |
5 | Малкин | Санкт-Петербург | 18 |
6 | Шипачев | Челябинск | 30 |
7 | Мозякин | Одинцово | 25 |
8 | Проворов | Москва | 25 |
Теперь для примера выведем информацию о тех продавцах, которые проживают в Москве. Это сделается таким запросом:
SELECT * FROM salespeople WHERE city = 'Москва'
Достаточно простой для понимания запрос, который вернет такой результат:
snum | sname | city | comm |
---|---|---|---|
1 | Колованов | Москва | 10 |
3 | Плотников | Москва | 22 |
8 | Проворов | Москва | 25 |
Здесь, отлично видно, что мы выбрали все колонки для отображения. Теперь давайте выведем только имена продавцов, у которых комиссия составляет менее 20%. Следующий запрос сделает это:
SELECT sname, comm FROM salespeople WHERE comm < 20
И сразу же результат:
sname | comm |
---|---|
Колованов | 10 |
Малкин | 18 |
Обратите внимания, что какие именно колонки выводить, мы задали после слова SELECT. В языке SQL такие запросы — самые распространенные.
SELECT WHERE с несколькими условиями
Очевидно, что пока мы рассмотрели запросы с одиночным условием. Но также в языке SQL, в запросе SELECT возможно использовать несколько условий. Эти условия могут быть объединены с помощью булевых операторов: AND, OR, NOT.
Перейдем сразу к примеру, чтобы лучше понять, выведем информацию о всех продавцах из Москвы или Твери, а также имеющих сумму комиссии равную 25%.
SELECT * FROM salespeople WHERE (city = 'Москва' or city = 'Тверь') and comm = 25
Результат такого запроса:
snum | sname | city | comm |
---|---|---|---|
2 | Петров | Тверь | 25 |
8 | Проворов | Москва | 25 |
Стоит отметить, что правила булевой алгебры здесь работают точно так же, как и всегда. Также важно сказать, что такой запрос можно упростить использовав ключевое слово языка SQL — IN. Тогда запрос SELECT может принять вид:
SELECT * FROM salespeople WHERE city IN ('Москва', 'Тверь') and comm = 25
Всегда важно оптимизировать свои запросы.
Ключевое слово DISTINCT
Существует такое понятие как избыточность данных, которое описывает случай представления данных в том или ином виде несколько раз. Например исполнив запрос на вывод городов продавцов из нашей таблицы:
SELECT city FROM salespeople
Как мы уже выучили, этот запрос выведет колонку с названием городов. Но в этом запросе есть неточность — данные повторяются и не представляют собой ценности. Для устранения избыточности данных предусмотрели ключевое слово — DISTINCT.
В качестве примера выведем список городов из нашей таблицы:
SELECT DISTINCT city FROM salespeople
Результат:
city |
---|
Москва |
Тверь |
Санкт-Петербург |
Челябинск |
Одинцово |
При таком использовании, данные не дублируются.
Примеры на SELECT SQL
Теперь, разберем коротко несколько примеров для всех таблиц в нашей базе данных.
1. Напишите команду SELECT, которая бы вывела номер Заказа, сумму, и дату для всех строк из таблицы Заказов.
SELECT onum, amt, odate FROM orders
2. Напишите запрос, который вывел бы все строки из таблицы Заказчиков, для которых номер продавца = 1.
SELECT * FROM customers WHERE snum = 1
3. Напишите команду SELECT, которая вывела бы оценку (rating), сопровождаемую именем каждого заказчика в Москве.
SELECT rating, cname FROM customers WHERE city = 'Москва'
4. Напишите запрос, который может выдать вам все заказы со значениями суммы выше 1000.
SELECT * FROM orders WHERE amt > 1000
5. Напишите запрос, который может выдать вам поля sname и city для всех продавцов в Москве с комиссионными выше 10%.
SELECT sname, city FROM salespeople WHERE comm > 10
6. Напишите запрос к таблице Заказчиков, чей вывод включит всех заказчиков с оценкой =< 100, если они не находятся в Туле.
SELECT * FROM customers WHERE rating <= 100 AND city != 'Тула'
Заключение
В заключении этой статьи скажем, что мы изучили основные конструкции для оператора SELECT SQL. Также познакомились с ключевыми словами WHERE и DISTINCT, которые часто используются в практике. На этом сегодня все, если у вас возникли вопросы или пожелания, то оставляйте их в комментариях.
Этой статьей мы начинаем цикл, посвященный работе с запросами в системе 1С:Предприятие версии 8.1 и выше.
Оглавление:
- Основы работы.
- Параметры и операторы сравнения.
- Условия отбора.
- Группировки.
- Итоги.
- Вложенные запросы.
Запрос — это мощнейший инструмент, служащий для быстрого (по сравнению со всеми другими способами) получения и обработки данных, содержащихся в различных объектах информационной базы 1С.
Создание запроса
Запрос создается как отдельный объект, который имеет обязательный атрибут Текст, куда собственно и помещается сам запрос. Кроме этого, в запрос могут быть переданы различные параметры, необходимые для его выполнения. После того, как текст и параметры запроса заполнены, запрос необходимо выполнить и поместить результат выполнения в выборку или таблицу значений. Выглядит это все примерно так:
//Создаем запрос
Запрос = новый Запрос;
//Заполняем текст запроса
Запрос.Текст=«Тут пишем текст запроса»;
//Передаем в запрос параметры
Запрос.УстановитьПараметр(«ИмяПараметра», ЗначениеПараметра);
//Выполняем запрос
Результат=Запрос.Выполнить();
//Выгружаем результат запроса в выборку
Выборка=Результат.Выбрать();
//Выгружаем результат запроса в таблицу значений
Таблица=Результат.Выгрузить();
//Последние действия можно объединить
Выборка=Запрос.Выполнить().Выбрать();
//или
Таблица=Запрос.Выполнить().Выгрузить();
Основы языка запросов 1С
Простейшие и наиболее часто применяемые запросы служат для получения данных из какого-то источника. Источником могут являться практически все объекты, содержащие какие-либо данные: справочники, документы, регистры, константы, перечисления, планы видов характеристик и т.д.
Из этих объектов с помощью запроса можно получать значения реквизитов, табличных частей, реквизитов табличных частей, изменений, ресурсов и т.д.
Для получения текста запроса часто бывает удобно пользоваться Конструктором запроса. Он вызывается при щелчке правой кнопкой в любом месте программного модуля.
Например, если необходимо получить значения всех реквизитов справочника Контрагенты, то запрос будет выглядеть так:
Запрос.Текст = «ВЫБРАТЬ
| *
|ИЗ
| Справочник.Контрагенты»;
Если же нужно получить только отдельные реквизиты, то — так:
Запрос.Текст = «ВЫБРАТЬ
| Код,
| Наименование,
| Родитель
|ИЗ
| Справочник.Контрагенты»;
Для получения такого текста запроса в Конструкторе запроса нужно выбрать соответствующие поля на вкладке Таблицы и поля.
Выбираемым в запросе элементам и источникам можно присваивать псевдонимы и использовать их в дальнейшем как в самом запросе, так и при работе с результатом. Кроме того, в запросе могут присутствовать поля с заранее определенным конкретным значением, или с рассчитываемым значением:
Запрос.Текст = «ВЫБРАТЬ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты»;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НомерКлиента = Выборка.Номер;
ИмяКлиента = Выборка.Имя;
Знач = Выборка.ПолеСоЗначением;
КонецЦикла;
Для задания псевдонимов служит вкладка Объединения/Псевдонимы в Конструкторе запросов.
А поле с фиксированным или рассчитываемым значением создается вручную на вкладке Таблицы и поля, в колонке Поля.
Все выбранные элементы можно упорядочивать как в прямом, так и в обратном порядке. При этом можно выбирать один или несколько полей для упорядочивания. Вместе с упорядочиванием иногда бывает полезно выбрать только один или несколько первых элементов.
//Упорядочим клиентов по имени от А до Я и выберем первых 10
Запрос.Текст = «ВЫБРАТЬ ПЕРВЫЕ 10
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты
|УПОРЯДОЧИТЬ ПО
| Имя»;
//Выберем самого последнего по алфавиту клиента
Запрос.Текст = «ВЫБРАТЬ ПЕРВЫЕ 1
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты
|УПОРЯДОЧИТЬ ПО
| Имя УБЫВ»;
Можно ограничить выборку элементов теми, на которые пользователь имеет права доступа. Или убрать из результата запроса повторяющиеся строки.
//Выборка разрешенных пользователю данных
Запрос.Текст = «ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты»;
//Выборка неповторяющихся элементов
Запрос.Текст = «ВЫБРАТЬ РАЗЛИЧНЫЕ
| Клиенты.Код КАК Номер,
| Клиенты.Наименование КАК Имя,
| 1000 КАК ПолеСоЗначением
|ИЗ
| Справочник.Контрагенты КАК Клиенты»;
Порядок задается на вкладке Порядок в Конструкторе запросов, количество выбираемых элементов, параметры разрешенности и повторяемости — на вкладке Дополнительно.
Продолжение следует…
script1adsense2code
script1adsense3code
SQL SUBQUERY: Упражнение 11 с решением
11. Напишите запрос, чтобы найти имена и номера всех продавцов, у которых было более одного покупателя.
Образец таблицы: клиент
Пример таблицы: продавец
Пример решения:
SELECT salesman_id,name
FROM salesman a
WHERE 1 <
(SELECT COUNT(*)
FROM customer
WHERE salesman_id=a.salesman_id);
Вывод запроса:
имя продавца 5001 Джеймс Хуг 5002 гвоздь вязать
Объяснение:
Практика онлайн
Визуализация запроса:
Продолжительность:
Ряды:
Стоимость:
Внесите свой код и комментарии через Disqus.
Предыдущий: Написать запрос для отображения всех клиентов с заказами, выпущенными 17 августа 2012 года.
Далее: Написать запрос, чтобы найти все заказы с суммами заказов, которые превышают средние суммы для их клиентов.