Архив метки: база

Учебник SQL часть 1 — Введение

Учебник по SQL. Часть 1.

Введение.

Что вообще такое SQL? Для многих рядовых сотрудников которых вдруг огорошили, что они теперь будут работать в какой-то СУБД и им придется вытаскивать оттуда информацию через SQL данная аббревиатура ничего не говорит, но не все так сложно как может показаться на первый взгляд. В любом обычном разговорном языке есть правила, при помощи которых создаются предложения, а SQL или Structured Query Language (язык структурированных запросов) по сути является сводом таких-же правил, при помощи которых мы сообщаем компьютеру что хотим из БД получить используя довольно простые логические конструкции. Как и обычные языки, которые имеют различные наречия и 2 человека разговаривающие на одном и том-же, вроде бы английском могут слабо понимать друг друга, язык SQL имеет несколько вариантов, основной или стандартный поддерживается комитетом стан­дартов ANSI, и соответственно называется ANSI SQL, отдельные же реализации носят собственные имена (PL-SQL, Transact-SQL и т.д.) и зачастую относятся к конкретным СУБД например PL-SQL относится к Oracle и какой не то большой и сложный запрос на этом языке может быть не понятен например Access, но за некоторыми исключениями, конструкции построенные на ANSI SQL будут понятны всем СУБД. Стандартный ANSI SQL язык состоит всего из нескольких слов, другие же реализации могут включать другие слова-функции. Мы будем рассматривать в основном Jet SQL применяемый к Access и vba, который за некоторыми функциями соответствует стандарту ANSI SQL-92.
Синтаксис Jet SQL (далее если встречается sql, имеетca ввиду именно jet sql) :
Операторы:
SELECT — запрос на выборку данных
DELETE — запрос на удаление данных
CROSTAB — запрос на суммирование данных из нескольких таблиц
ACTION — запрос на изменение информации, также возможно создание новых таблиц\полей
PARAMETR — запрос с изменяемым (задаваемым пользователем) условием
INTO — указывает название новой таблицы в простом запросе на создание таблицы на основе запросы на выборку
FROM — указывает откуда получать данные
WHERE — указывает условие на выборку данных
ORDER BY — указывает условие на сортировку данных
AS — указывает название нового поля\(имени самого запросе в сложных запросах) в запросе
DISTINCTROW
ASC[ENDING]
DESC[ENGING]
AND
OR
IS NULL

Функции:
AVG
YEAR
MONTH
DATE
NOW
DATEPART
FORMAT$
COUNT

Запуск SQL запросов из VBA для Access и Excel

sql-fun
sql-fun
В различных ситуация требуется какое либо действие сделать с БД с помощью SQL запросов, и при написании программы зачастую требуется это сделать из VBA кода. Для этого я использую различные схемы, в зависимости от сложности запроса и поставленной задачи.
, где для всех примеров myBD это объявленная наша БД, например через Dim myBD As Database и последующей Set myBD = CurrentDb , как пример для Access

 

1 — Запуск запросов через QueryDef, ИМХО — использую для ODBC:
Для первого варианта средствами Access делаем обычный запрос  с нужными нами действиями или несколько связанных между собой и запускаем его строчкой ниже. Вообще QueryDef является одним из лучших методов по запуску и выполнению (да запуск сохраненных SQl запросов через него, это далеко не все что он может) запросов в базах данных использующих драйвер ODBC.
myBD.QueryDefs(«ИМЯ_ЗАПРОСА»).Execute
или делаем непосредственный запуск запроса
myBD.QueryDefs.Execute «DELETE * FROM MyTabl»

 

2 — Запуск запросов через RecordSet, ИМХО — использую для ADO:
Этот вариант у меня прижился больше для Excel когда к БД подключаюсь через ADO драйвер, и требуется например сохранить данные в бд, через запрос (Помидорами не кидать, знаю что сам RecordSet позволяет это делать — тут просто пример как можно запустить запрос через него)
Set rs = cmd.Execute(«DELETE * FROM MyTabl», , adExecuteNoRecords)

 

3 — Непосредственный запуск запросов
ИМХО — использовать стоит в основном внутри Access и довольно редко, для мелких задач, а для всего отсльаного лучше через QueryDef:
DoCmd.RunSQL «DELETE * FROM MyTabl»
myBD.Execute «DELETE * FROM MyTabl»