Введение
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 - наиболее часто употребляемая команда из всех восьми. Она используется для выборки данных из базы данных. Её синтаксис:
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 );
Здесь отбираются все записи, значение поля ID которых соответствует одному из значений 10, 12, 30, 45.
Используя предложение WHERE совместно с оператором LIKE, возможен отбор записей, значение одного из полей которых совпадает с маской. Оператор LIKE применим только к текстовым полям. В маске можно использовать следующие символы:
Символ |
Значение |
Подчёркивание [_] |
Замещает один любой символ. |
Процент [%] |
Замещает последовательность любого числа символов. |
Например:
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 посылает запрос на изменение записи.
Синтаксис:
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 посылает запрос на удаление записей из таблицы.
Синтаксис:
DELETE [Таблица.*] FROM Таблица WHERE ...;
Таблица - имя таблицы, из которой удаляются записи.
Использование предложения WHERE аналогично его использованию в команде SELECT.
Аргумент команды DELETE можно не указывать, поскольку он фактически дублируется в предложении FROM.
Пример:
DELETE FROM Buyers WHERE ID=8;
Этот запрос удаляет из таблицы Buyers запись, в которой ID равно 8.
Для удаления не всей записи, а только ее поля, следует воспользоваться запросом на изменение записи (команда UPDATE) и поменять значения нужных полей на Null.
Команда INSERT INTO
Команда 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 позволяет создать новую таблицу на основе данных из других таблиц. Эта команда используется для архивирования данных, резервного копирования таблиц.
Синтаксис команды:
SELECT Поля INTO НоваяТаблица [IN БазаДанных] FROM Таблицы;
Поля - имена одного или нескольких полей, которые будут скопированы в новую таблицу.
НоваяТаблица - Имя создаваемой таблицы
База данных - путь и имя внешней базы данных, в которой содержатся таблицы. Если таблицы находятся в текущей базе данных, то этот аргумент необязателен.
Таблицы - имена таблиц, из которых выбираются записи.
Если имя новой таблицы совпадает с именем уже существующей, то будет сгенерирована ошибка.
Пример:
SELECT ID, Name, Email, Order INTO CopyOfOrders FROM Orders;
Заключение
В этой статье я не описал и десятой части всех возможностей языка SQL. С помощью SQL можно создавать и удалять таблицы, соединять таблицы, вставлять в запросы подзапросы и многое другое.
При написании этой статьи использовался Microsoft SQL Server 2000 Developer Edition.