Select в access
Использование языка SQL MS ACCESS;
Язык структурированных запросов (SQL) является стандартным средством для работы с базами данных. Может использоваться как для интерактивной работы с БД, так и включаться в языки программирования. В CУБД Access SQL позволяет:
· создавать, модифицировать или удалять таблицы в базе данных Access;
· создавать или удалять ключи, индексы для таблиц в базе данных Access;
· вставлять, удалять или модифицировать записи таблиц;
· получать сводную информацию о данных в таблицах (число записей, суммы, средние, минимальные, максимальные значения и др.);
· осуществлять поиск и извлекать данные из одной или более таблиц по запросу.
Рассмотрим основные операторы языка SQL для поиска и извлечения информации из базы данных. Для этого используется оператор SELECT, синтаксис которого следующий:
SELECT список имен полей 1
FROM список имен таблиц
[WHERE условие]
[ORDER BY список имен полей 2]
[GROUP BY список имен полей 3]
SELECT, FROM, WHERE, ORDER BY, GROUP BY — ключевые слова;
список имен полей 1 — набор имен полей, которые выбираются из одной или нескольких таблиц, указанных в списке имен таблиц, вычисляемых полей, агрегированных функций (например, count, sum, min, max, avg и т.д.). Для выбора всех полей из списка таблиц вместо перечисления их имен можно использовать символ «*». Если имя поля таблицы содержит пробел, т.е. состоит из нескольких слов, то это имя должно заключаться в квадратные скобки;
список имен таблиц — набор имен таблиц, из которых производится выбор информации.
Имена полей и таблиц нечувствительны к регистру клавиатуры и указываются в списках через запятую.
Все приведенные далее примеры основаны на использовании БД по библиографии, логическая структура которой приведена на рисунке 2.1.
Примеры:
SELECT * FROM Книга — выбор всех полей всех книг из таблицы «Книга» базы данных по библиографии.
SELECT Название, [Год издания] FROM Книга — выбор полей заголовков (Название ) и года издания (Год издания) всех книг из таблицы «Книга». Имя поля года издания указано в квадратных скобках (имеет пробел).
Таблица «Издательство» Таблица «Книга» Таблица «Автор»
Рис. 2.1. Структура и схема БД по библиографии
Для поиска информации, удовлетворяющей некоторому условию, в операторе SELECT используется раздел WHERE, который имеет следующий синтаксис:
SELECT список имен полей FROM список имен таблиц WHERE условие,
где условиеопределяет критерий поиска информации.
В условии используются имена полей, операции сравнения ( , >=, <>) и специальные операции сравнения IN, LIKE, BETWEЕN. Эти операции могут объединяться с помощью логических операций (And, Or) и задавать сложные условия поиска информации.
Примеры:
SELECT Название, [Год издания] FROM Книга
WHERE [Год издания] > 1991 определяет выбор названий книг, год выпуска которых позже 1991.
SELECT Фамилия, Имя FROM Автор
WHERE Фамилия = ”Иванов” определяет выбор полей имен и фамилий авторов из таблицы «Автор», фамилии которых совпадают с фамилией Иванов. Здесь символ “ используется для задания текстовых констант.
Операция IN сравнивает содержимое поля со списком заданных значений, определяющих критерий поиска информации.
Примеры:
SELECT Название, [Год издания] FROM Книга
WHERE [Год издания] IN (1995, 1996) определяет выбор названий и года издания книг, опубликованных в 1995 или в 1996 гг.
SELECT Фамилия, Имя, Город FROM Автор
WHERE Город IN (“Омск”, “Москва”, “Киев”) определяет выбор авторов, живущих в городах Омск, Москва или Киев.
Операция LIKE сравнивает содержимое поля со значением образца. Для записи образца используются строковые константы, символы шаблона и списки диапазона символов.
Символами шаблона являются: *, ?, #. Символ * соответствует цепочке символов, ? — соответствует одному символу, # — соответствует одной цифре.
Примеры:
Р* — возможные результаты поиска рука, Роза.
КИ? — возможные результаты поиска кий, кит.
12345# — возможные результаты поиска 123455, 123457.
Список диапазона заключается в квадратные скобки, первый и последний символы диапазона отделяются дефисом (-). Диапазон задается в возрастающем порядке.
Примеры:
SELECT Фамилия, Имя, Отчество FROM Автор
WHERE Фамилия LIKE ‘И*’ определяет выбор авторов, фамилии которых начинаются с буквы И.
SELECT Фамилия FROM Автор WHERE Фамилия LIKE [A-K] определяет выбор авторов, фамилии которых начинаются с букв от А до К.
SELECT Название FROM Книга
WHERE Название LIKE “*база данных*” AND [Год издания] = 1996 определяет выбор названий книг, выпущенных в 1996 году и в названии которых присутствует фраза «база данных».
Операция BETWEEN проверяет принадлежность значения поля диапазону значений и является включающим значением (выбираются записи, содержащие поле со значением, равным границе диапазона). Границы значений объединяются операцией AND.
Примеры:
SELECT Название, [Год издания] FROM Книга
WHERE [Год издания] Between #01.01.1994# And #30.06.1994# определяет выбор книг, изданных в первой половине 1994 года. Здесь символ # используется для задания констант типа дата.
SELECT [Название издат], адрес, телефон FROM Издательство
WHERE [Название издат] Between ‘Нау’ And ‘Фин’ определяет выбор информации об издательских фирмах, начальные буквы названий которых, расположенные в алфавитном порядке, находятся в диапазоне между ‘Нау’ и ‘Фин’.
Для определения порядка, в котором представляются результаты поиска записей, используется раздел ORDER BY, синтаксис которого следующий:
SELECT список имен полей FROM список имен таблиц [WHERE условие] ORDER BY имя поля 1 [ASC | DESC][, имя поля 2[ASC | DESC]] ,
где имя поля1, имя поля2 – поля (из списка имен полей), по которым производится упорядочение. Опция ASCустанавливает порядок сортировкипо возрастанию (данный порядок установлен по умолчанию), DESC устанавливает порядок сортировки по убыванию. Упорядочение может вестись по нескольким полям (например, по фамилии, а затем по имени)
Пример:
SELECT Название FROM Книга
WHERE Название LIKE “*база данных*” AND [Год издания] = 1996
ORDER BY Название определяет выбор названий книг, выпущенных в 1996 году и в названии которых присутствует фраза «база данных», и упорядочивает названия в алфавитном порядке.
Для группировки записей используется раздел GROUP BY, синтаксис которого следующий:
SELECT список имен полей FROM список имен таблиц [WHERE условие] GROUP BY имя поля 1 [, имя поля 2],
где имя поля1, имя поля2 – поля (из списка имен полей), по которым производится группировка записей. Порядок следования полей в этом предложении определяет уровни их группировки. Группировку можно производить для выражений (например, вычисляемых полей), тогда в списке полей этому выражению должно быть присвоено какое-нибудь имя. Для агрегированных функций (count, sum, min, max, avg и т.д.) группировка обязательна.
Пример:
SELECT Фамилия, [Год издания], Sum (Цена) AS [Стоимость]
FROM Книга, Автор
WHERE Автор.[Код автора]= Книга.[Код автора]
GROUPBY Фамилия, [Год издания]
ORDER BY Фамилия, [Год издания] определяет суммарную цену (Стоимость) книг года издания для каждого автора.
При работе с несколькими таблицами, каждое из рассмотренных условий выбора может быть применено для любой из таблиц. В общем случае при формировании запроса с использованием нескольких таблиц в разделе WHERE указывается связь между таблицами. Синтаксис запроса для нескольких таблиц следующий:
SELECT список имен полей FROM список имен таблиц WHERE список связей,
где список связей определяет, как таблицы в списке имен таблиц связаны между собой. Например, имя_таблицы1.имя_поля1 = имя_таблицы2.имя_поля2.
Примеры:
SELECT Книга.Название, Издательство. [Название издат]
FROM Книга, Издательство
WHERE Книга. [Код издат]= Издательство. [Код издательства] And
Издательство. [Название издат]=”Наука”
Этот запрос определяет выбор названий книг (Название) из таблицы «Книга» и названий издательств (Название издат) из таблицы издательств (Издательство). Раздел WHERE осуществляет следующее:
· определяет связь между таблицами (выбирается название книги и номер издательства «Код издат» из таблицы «Книга», по номеру издательства «Код издательства» в таблице издательств «Издательство» находится название издательства);
· задает условие для выбора книг, изданных только в издательстве «Наука».
Инструкция SELECT
Инструкция SELECT предписывает ядру СУБД Microsoft Access вернуть сведения из базы данных в виде набора записей.
Синтаксис
SELECT [предикат] < * | таблица.* | [таблица.]поле1 [AS псевдоним1] [, [таблица.]поле2 [AS псевдоним2] [, .
FROM табличное_выражение [, . ] [IN внешняя_база_данных]
[WHERE. ]
[GROUP BY. ]
[HAVING. ]
[ORDER BY. ]
[WITH OWNERACCESS OPTION]
Инструкция SELECT включает приведенные ниже элементы.
Один из следующих предикатов: ALL, DISTINCT, DISTINCTROW или TOP. Предикаты используются для ограничения числа возвращаемых записей. Если предикат не задан, по умолчанию используется ALL.
Указывает на то, что из заданной таблицы или таблиц выбираются все поля.
Имя таблицы, содержащей поля с выбранными записями.
Имена полей, содержащих извлекаемые данные. Если задано несколько полей, данные будут извлекаться в порядке перечисления их имен.
Имена, которые используются в качестве заголовков столбцов вместо исходных названий столбцов в таблице.
Одно или несколько имен таблиц, содержащих извлекаемые данные.
Имя базы данных, содержащей таблицы, указанные в компоненте табличное_выражение, если их нет в текущей базе данных.
Примечания.
Для выполнения данной операции ядро СУБД Microsoft Access выполняет поиск указанной таблицы или таблиц, извлекает указанные столбцы, выбирает строки, отвечающие условию и сортирует полученные строки в указанном порядке.
Инструкции SELECT не изменяют данные в базе данных.
SELECT обычно является первым словом в инструкции SQL. SELECT и SELECT. INTO — наиболее распространенные инструкции SQL.
Минимальный синтаксис инструкции SELECT выглядит следующим образом:
SELECT поля FROM таблица
Чтобы выбрать все поля в таблице, можно использовать звездочку (*). В приведенном ниже примере показано, что в таблице «Сотрудники» выбраны все поля.
SELECT * FROM Employees;
Если имя поля включено в несколько таблиц в предложении FROM, поместите перед ним имя таблицы и оператор . (точку). В следующем примере поле «Отдел» встречается сразу в двух таблицах: «Сотрудники» и «Руководители». С помощью инструкции SQL можно выбрать отделы из таблицы «Сотрудники» и имена руководителей из таблицы «Руководители».
SELECT Employees.Department, Supervisors.SupvName FROM Employees INNER JOIN Supervisors WHERE Employees.Department = Supervisors.Department;
При создании объекта RecordSet имя поля таблицы используется ядром СУБД Microsoft Access в качестве имени объекта «Поле» в объекте Recordset. Если имя поля нуждается в изменении или не предоставляется выражением, с помощью которого генерируется поле, используйте зарезервированное слово AS. В следующем примере показано, как заголовок «Дата_рождения» используется для присвоения имени возвращенному объекту Поле в полученном объекте Recordset.
SELECT BirthDate AS Birth FROM Employees;
При использовании агрегатных функций или запросов, которые возвращают неоднозначные или повторяющиеся имена объекта Поле, необходимо использовать предложение AS, чтобы присвоить объекту Поле другое имя. В приведенном ниже примере возвращенному объекту Поле в полученном объекте Recordset присваивается имя «Количество_сотрудников».
SELECT COUNT(EmployeeID) AS HeadCount FROM Employees;
При работе с инструкцией SELECT можно использовать дополнительные предложения для дальнейшего ограничения и упорядочения полученных данных. Дополнительные сведения см. в разделе справки, посвященном используемому предложению.
Как использовать функцию Select
где Адрес это столбец в таблице [Данные по договору] а [Пультовой_номер] критерий поиска
нужно чтобы нашелся адрес в одной таблице по критерию и вставился в другую таблицу в поле [Адрес объекта]
В выше указанном примере в поле [Адрес объекта] вставляется «SELECT Адрес FROM [Данные по договору] WHERE [Пультовой_номер] = 240» а не результат запроса
Спасибо всем кто откликнется!
Как использовать SELECT для загрузки перечня?
Здравствуйте. Уважаемые гуру, прошу вашей помощи в оганизации SELECTа для загрузки перечня. .
Как использовать свою функцию в Select
В хранимой процедуре нужно сделать select в которой использовать собственную функцию для.
Как при выборе значения в select выполнить функцию php и передать в ей аргумент (значение select)
Вообще, я хочу сделать выборку в таблице. После выбора в <select>, в таблице должны остаться запись.
Как использовать if в select
Люди подскажите как написать запрос что бы проверялось значение поля. Т.е. например: select .
1. Зачем dlookup
2. На .Fields (0) ругается
3. Как полученное значение подставить в поле [Адрес объекта]
Спасибо за быстрый ответ!
Есс-но..
Откройте рекордсет, и из него извлекайте значения необходимые.
Добавлено через 10 минут
Попробуйте:
Вам для начала необходимо разобраться в структуре таблиц, а потом уже формы создавать.
Поля подстановок — убрать напрочь.
Добавлено через 2 минуты
К тому же не понятно, у Вас в одной таблице «Пультовый номер» имеет числовой тип, а во второй, на которой основывается форма, — тип текстовый..
Вообщем, разберитесь с таблицами..
С таблицей все нормально, от полей подстановки отказаться не могу, потому как заполнители будут данные забивать разного вида и потом не найденыш что к чему относится. А так выбрали из списка и все.
Пультовой номер текстовый потому, что есть другие таблицы в которых пультовой номер вида 24К/1234 и я его не как к числу отнести не могу, и вставить текстовое поле в числовое не получится.
Добавлено через 9 минут
Все я исправил, заработала как надо.
Спасибо, Agapov_stas за основную часть кода.
Если кому интересно, могу выложить рабочий результат.
Не было предложения отказаться от полей со списком. Рекомендация звучала иначе — убрать поля подстановок в таблице. Из их значений создать справочники, а уже на основе этих справочников сделать поля со списком на форме. Идеологическая основа вредности полей подстановок в таблицах кратко изложена здесь: http://alx-artamonov.narod.ru/index/0-5
Именно для вашего случая, когда поля подстановок созданы не из справочников, а как список значений, к набору Артаманова можно добавить серьезные неудобства по их обслуживанию. При добавлении, удалении, изменении списка, придется лезть в конструктор и там менять. Это очень неудобно, да и опасно. А заменить/добавить/удалить значение из таблицы-справочника пара пустяков.
И еще маленькое замечание. Если в запросе надо перечислить несколько условий для одного поля, то лучше (быстрее и нагляднее) пользоваться не прямым их перечислением с OR между ними, а использовать предложение IN с набором параметров в скобках. Для вышепоказанного условия это будет так
Вместо
СИНТАКСИС ИНСТРУКЦИИ SELECT В MICROSOFT ACCESS
SQL-оператор состоит из зарезервированных слов, а также из слов, определяемых пользователем. Зарезервированные слова являются постоянной частью языка SQL и имеют фиксированное значение. Их следует записывать в точности так, как это установлено, и нельзя разбивать на части для переноса из одной строки в другую. Слова, определяемые пользователем, задаются самим пользователем (в соответствии с определенными синтаксическими правилами) и представляют собой имена различных объектов базы данных — таблиц, столбцов, представлений, индексов и т.д. Слова в операторе размещаются в соответствии с установленными синтаксическими правилами. Хотя в стандарте это не указано, многие диалекты языка SQL требуют задания в конце оператора некоторого символа, обозначающего окончание его текста (как правило, с этой целью используется символ
точки с запятой (;)).
Большинство компонентов SQL-операторов не чувствительно к регистру. Это означает, что могут использоваться любые буквы — как строчные, так и прописные. Одним важным исключением из этого правила являются символьные литералы-данные, которые должны вводиться точно так же, как были введены соответствующие им значения, хранящиеся в базе данных. Например, если в базе данных хранится значение фамилии ‘SMITH’, а в условии поиска указан символьный литерал ‘Smith’, то эта запись не будет найдена.
Поскольку язык SQL имеет свободный формат, отдельные SQL-операторы и их последовательности будут иметь более читабельный вид при использовании отступов и выравнивания. Рекомендуется придерживаться следующих правил.
• Каждая фраза в операторе должна начинаться с новой строки.
• Начало каждой фразы должно быть выровнено с началом остальных фраз оператора.
• Если фраза имеет несколько частей, каждая из них должна начинаться с новой строки с некоторым отступом относительно начала фразы, что будет указывать на их подчиненность.
Для определения формата SQL-операторов мы будем применять следующую расширенную форму BNF-нотации (Backus Naur Form).
• Прописные буквы будут использоваться для записи зарезервированных слов и должны указываться в операторах точно так же, как это будет показано.
• Строчные буквы будут использоваться для записи слов, определяемых пользователем.
• Вертикальная черта (|) указывает на необходимость выбора одного из нескольких приведенных значений — например, а | b | с.
Инструкция SELECTявляется ядром языка SQL. Она используется для отбора строк и столбцов из таблиц базы данных.
Оператор SELECT образует основу каждого вопроса, который пользователь задает Базе Данных. Он состоит из нескольких ключевых слов, которые называются условиями. Некоторые из них обязательны, некоторые-нет. Синтаксис инструкции SELECT использует пять основных предложений, и его можно представить в следующем виде:
SELECT
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY ];
SELECT—основное условие оператора SELECT. Наличие обязательно.
FROM — определяет таблицы, из которых должны извлекаться столбцы.
WHERE -необязательное условие, которое используется для фильтрации строк, возвращенных условием FROM
Group by— применяется, когда в условии SELECT используется агрегатная функция для получения сводной информации. В этом случае Group by используется для разделения информации на отдельные группы. Столбец, расположенный после ключевого слова Group by является группирующим. Это необязательное условие.
HAVING — связано с условием Group by и используется для фильтрации сгруппированной информации. Тоже необязательное условие.
В Microsoft Access реализованы четыре важных средства расширения языка: предложение TRANSFORM, позволяющее построить перекрестный запрос; предложение IN, в котором задается связь с удаленной базой данных; предложение DISTINCTROW, позволяющее отбирать строки из с различающимися значениями в столбцах, указанных в , и предложение WITH OWNERACCESS OPTION. Последнее предложение позволяет создать запрос, который может выполняться пользователями, обладающими правами на выполнение запроса, но не имеющими прав доступа к таблицам, ссылки на которые содержатся в нем.
studopedia.org — Студопедия.Орг — 2014-2020 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.002 с) .
Какова правильная инструкция CASE SELECT в Access 2010?
Я использую vb.net и Access 2010 в качестве базы данных (.accdb)
Это работает с MySQL:
Но когда передается тот же запрос на доступ, я получаю следующую ошибку:
Поэтому я предполагаю, что оператор CASE отличается в access, или доступ вообще имеет эту функцию?
P.S.
is_enable является логическим
5 Ответов
Понять это:
В Access 2010 нет функции CASE, вместо нее мы используем функцию SWITCH.
SELECT user_id, username, first_name, middle_name, last_name, SWITCH(is_enable=True,’Yes’,is_enable=False,’No’) FROM tbl_user_accounts ORDER BY user_id
Благодаря грубиян и JW.
Choose-это еще одна функция доступа (действительно VBA), доступная в запросах, аналогичная Switch, но возвращающая индекс к списку ответов. Например, Choose ([Choice], «A»,»B»,»C») вернет «B», если Choice равен 2. В прошлом я находил это полезным.
Это действительно проблема отображения, и, возможно, было бы лучше сделать где-то еще, чем SQL. is_enabled явно является типом данных Boolean/YesNo, поэтому вы можете просто отформатировать его:
Все работают в VB.Net и возвращают текст, а не логическое значение.
Похожие вопросы:
Попытка скопировать / вставить запрос 159KB TSQL в Редактор запросов Microsoft Access 2010 passthrough (на серверную часть Microsoft SQL Server 2008). Это приводит к появлению всплывающей ошибки.
У меня есть запрос, который включает поля с именем openingbalance и commissions . Я бы хотел, чтобы вычислить значения для комиссии , основанные на openingbalance , похожий на этот Select Case.
Мне нужно создать @managedBean для управления пользователем thelogin/logout, какова правильная сфера его применения? @SessionScoped или @RequestScoped Спасибо
я хотел бы спросить вас, есть ли оператор для использования вычисляемых полей того же SELECT-оператора: Например: Тестовая Таблица : Значение Суммы Машины 500 20 20 SELECT Machine, Amount*Value AS.
У меня возникли некоторые трудности с извлечением условных данных в операторе SELECT с использованием условных выражений. Существует проверка внешнего условия, если значение не является null, и.
Я борюсь с запросом, и я не знаю, в чем проблема. Я должен рассчитать финансовый год на основе APPROVAL_PERIOD , но APPROVAL_PERIOD рассчитывается в отчете CASE WHEN . CASE WHEN DD.STATUS_CODE.
Я пытаюсь выполнить следующую функцию в MS Access 2010 для Birthday=5/5/1958 и получить возвращаемое значение unknown вместо Dog. любая помощь по этому оператору CASE? Public Function.
VBA имеет оператор Select , который выбирает, какой код запускать на основе значения (так же, как switch в языках стиля C). Синтаксис этого оператора выглядит следующим образом: Select Case x Case 1.
Я пытаюсь построить функцию, в которой на основе сравнения строк используется определенная формула Проблема у меня есть в том, что я получаю ошибку несоответствия типа аргумента Byref Это должно.
Я пытаюсь удалить дубликаты записей с помощью инструкции SQL. Я использую MS Access 2010. Вот мое заявление: DELETE * FROM table1 where not exists (SELECT min(col1) FROM table1 GROUP BY col2, col3.