Павел Сурменок
http://vbnet.ru
SQL - Structured Query Language (Структурированный язык запросов). Язык SQL - наиболее распространённый язык управления базами данных типа клиент - сервер. Существует несколько разновидностей SQL. Между ними есть небольшие различия, но основа одна и та же. В Visual Basic 6 возможности языка SQL представлены Microsoft Jet Database ANSI-89. SQL запрос представляет собой набор команд, определённым образом влияющий на отбор данных. Каждая инструкция начинается командой (одной из SELECT, INSERT, DELETE, UPDATE, CREATE, DROP, ALTER, TRANSFORM) и заканчивается точкой с запятой [;].
Команда SELECT - наиболее часто употребляемая команда из всех восьми. Она используется для выборки данных из базы данных.
Её синтаксис:
SELECT [Предикат] Поля FROM Таблицы [IN БазаДанных] [WHERE ...] [GROUP BY ...] [HAVING ...] [ORDER BY ...];
Необязательные аргументы заключены в [].
Предикат - одно из четырёх слов ALL, DISTINCT, DISTINCTROW, TOP. Если предикат не указан, то устанавливается ALL. Предикат ALL позволяет отобрать все записи. При использовании предиката DISTINCT, записи, которые содержат повторяющиеся значения в выбранных в запросе полях, исключаются. Предикат DISTINCTROW исключает из выборки записи, если повторяется вся запись, а не одно из полей. Предикат TOP позволяет отобрать определённое количество записей.
Поля - имена одного или нескольких полей, выборка которых производится. Для выборки всех полей вместо имен полей можно поставить звёздочку [*].
Таблицы - имена одной или нескольких таблиц, из которых производится выборка.
База данных - путь и имя внешней базы данных, в которой содержатся таблицы. Если таблицы находятся в текущей базе данных, то этот аргумент необязателен.
Минимальный синтаксис запроса на выборку выглядит так:
SELECT поле FROM Таблица;
Если таблицы, из которых выбираются записи, содержат одноимённые поля, то перед именем поля нужно поставить название таблицы и точку [.].
Предложение WHERE позволяет установить критерии отбора записей. Например:
SELECT * FROM Orders WHERE ID=5;
В этом запросе происходит выборка всех полей таблицы Orders. Выбираются только те записи, значения поля ID которых равно 5.
Вместо знака равно [=] можно также использовать знаки больше [>] и меньше [<].
SELECT * FROM Buyers WHERE Age>30;
В этом запросе выбираются все записи из таблицы Buyers, в которых значение поля Age больше 30.
Также возможно использование предложения WHERE вместе с операторами BETWEEN, IN и LIKE.
Оператор BETWEEN позволяет отобрать записи, значение определённого поля которых находится в заданном диапазоне. Например:
SELECT * FROM Orders WHERE ID BETWEEN 10 AND 20;
Здесь выбираются все записи, значение поля ID которых находится между 10 и 20.
Оператор IN позволяет отобрать записи, значение поля которых соответствует одному из значений, указанных в скобках.
SELECT * FROM Orders WHERE ID IN ( 10, 12, 30, 45 );
| Таблица | |
|---|---|
| Символ | Значение |
| Подчёркивание [_] | Замещает один любой символ |
| Процент [%] | Замещает последовательность любого числа символов |
Например:
SELECT * FROM Orders WHERE Name LIKE 'Ва_я%'
Здесь выбираются все записи, поле Name которых соответствует маске Ва_я%. Обраатите внимание, что значения текстового типа в SQL-запросах указываются в кавычках.
Предложение GROUP BY позволяет объединять поля в запросе. Предложение ORDER BY позволяет упорядочивать выбираемые записи. При использовании совместно с предложением ключевого слова ASC можно определить возрастающий порядок, а используя DESC, определяется убывающий порядок.
SELECT * FROM Orders ORDER BY Name ASC;
Также можно упорядочивать записи по нескольким полям. Сначала записи упорядочиваются по первому полю, если в нём есть записи, имеющие одинаковые значения, то они упорядочиваются по следующему указанному в предложении ORDER BY полю и т.д. Имена полей пишутся через запятую [,].
SELECT * FROM Orders ORDER BY Name ASC, Email ASC;
Команда UPDATE посылает запрос на изменение записи.
Синтаксис:
UPDATE Таблица SET НовоеЗначение WHERE ...;
Таблица - имена одной или нескольких таблиц, в которых изменяются записи
НовоеЗначение - новые значения для полей записи
Команду UPDATE удобно использовать, если изменяется сразу большое число записей или если изменяемые записи находятся в разных таблицах. Новые значения указываются через запятую для каждого поля. Использование предложения WHERE аналогично его использованию в команде SELECT.
Пример:
UPDATE Buyers SET Order='Ничего' WHERE ID=7;
Устанавливаем значение поля покупки 'Ничего' у покупателя, номер которого равен 7.
UPDATE Заказы SET СуммаЗаказа=СуммаЗаказа * 1.2, СтоимостьДоставки=СтоимостьДоставки * 1.1 WHERE Страна='США';
Этот запрос немного сложнее. Он повышает сумму заказа на 20% и стоимость доставки на 10% для покупателей из США.
Команда DELETE посылает запрос на удаление записей из таблицы.
Синтаксис:
DELETE [Таблица.*] FROM Таблица WHERE ...;
Таблица - имя таблицы, из которой удаляются записи.
Использование предложения WHERE аналогично его использованию в команде SELECT.
Аргумент команды DELETE можно не указывать, поскольку он фактически дублируется в предложении FROM.
Пример:
DELETE FROM Buyers WHERE ID=8;
Этот запрос удаляет из таблицы Buyers запись, в которой ID равно 8.
Для удаления не всей записи, а только ее поля, следует воспользоваться запросом на изменение записи (команда UPDATE) и поменять значения нужных полей на Null.
Команда INSERT INTO предназначена для добавления одной или нескольких записей в конец таблицы. Возможны 2 варианта использования этой команды. Первый вариант добавляет одну запись в таблицу, а второй вариант добавляет записи из одной таблицы в другую.
Синтаксис первого варианта:
INSERT INTO ТаблицаНазначения [(Поля)] VALUES (Значения);
Синтаксис второго варианта:
INSERT INTO ТаблицаНазначения [(Поля)] [IN БазаДанных] SELECT [Таблица.]Поля FROM Таблица;
ТаблицаНазначения - таблица, в которую добавляются записи.
Поля - названия полей.
Таблица - имя таблицы, источника данных.
База данных - путь и имя внешней базы данных, в которой содержатся таблицы. Если таблицы находятся в текущей базе данных, то этот аргумент необязателен.
Значения - значения полей добавляемой записи.
Все поля записи и соответствующие им значения должны быть определены, иначе им будут присвоены значения Null. Если таблица, в которую добавляются записи, имеет ключевое поле, то в него должны добавляться уникальные, непустые значения. Иначе запись не будет добавлена.
Пример:
INSERT INTO Orders (ID, Name, Email, Order) VALUES (12, 'Вася Пупкин', 'vasya@pupkin.ru', 'Pentium II 450 MHz');
Добавляется новая запись, в которой полям ID, Name, Email, Order соответствуют значения 12, 'Вася Пупкин', 'vasya@pupkin.ru', 'Pentium II 450 MHz'.
INSERT INTO Orders2001 (ID, Name, Email, Order) SELECT ID, Name, Email, Order FROM Orders2000;
Этот запрос добавляет все записи из таблицы Orders2000 в таблицу Orders2001.
Команда SELECT ... INTO позволяет создать новую таблицу на основе данных из других таблиц. Эта команда используется для архивирования данных, резервного копирования таблиц.
Синтаксис команды:
SELECT Поля INTO НоваяТаблица [IN БазаДанных] FROM Таблицы;
Поля - имена одного или нескольких полей, которые будут скопированы в новую таблицу.
НоваяТаблица - Имя создаваемой таблицы
База данных - путь и имя внешней базы данных, в которой содержатся таблицы. Если таблицы находятся в текущей базе данных, то этот аргумент необязателен.
Таблицы - имена таблиц, из которых выбираются записи.
Если имя новой таблицы совпадает с именем уже существующей, то будет сгенерирована ошибка.
Пример:
SELECT ID, Name, Email, Order INTO CopyOfOrders FROM Orders;
В этой статье я не описал и десятой части всех возможностей языка SQL. С помощью SQL можно создавать и удалять таблицы, соединять таблицы, вставлять в запросы подзапросы и многое другое.
При написании этой статьи использовался Microsoft SQL Server 2000 Developer Edition.