Базовые SQL-запросы в Firebird
В большей степени, Firebird соответствует стандарту SQL и если имеется опыт работы с другими СУБД, сложностей не возникнет. Данная инструкция является шпаргалкой с базовыми командами SQL по выборке, редактированию, вставке и удалению данных.
Выборка (SELECT)
Обычная выборка всех данных в таблице:
SELECT * FROM <table>
* где <table> - название таблицы.
Выборка с условием (WHERE):
SELECT * FROM <table> WHERE <field>='15'
* в данном примере будут выбраны только те строки, где значение поля <field> равно 15.
SELECT * FROM <table> WHERE <field> LIKE '%foo%'
* а в этом примере будут выбраны только те строки, где в поле <field> встретиться foo.
Используя условия с русскими символами (кириллица) необходимо передавать запросы в той же кодировке, что используется СУБД. Например, если скрипты программы в кодировке UTF-8, в значения в базе хранятся в windows-1251 (cp1251), необходимо конвертировать кодировку.
Регистронезависимая выборка с условием (WHERE):
Вся выборка в Firebird зависит от регистра символов — то есть, если в поле будет слово 'Магазин', запрос LIKE 'магазин' не вернет никакого результата.
Чтобы найти нужную строку, выполняем следующий запрос:
SELECT * FROM <table> WHERE UPPER(<field>) LIKE '%МАГАЗИН%'
* UPPER конвертирует значение поля в верхний регистр, таким образом делая все символы большими.
Выборка с лимитом (LIMIT, а точнее FIRST):
SELECT FIRST 5 SKIP 0 * FROM <table>
* выбрать первые 5 строк.
SELECT FIRST 5 SKIP 5 * FROM <table>
* выбрать 5 строк, начиная с 6-й.
Группировка данных (GROUP BY):
SELECT field1, MAX(field2) FROM <table> GROUP BY field1
* в данном примере выполнена группировка по полю field1. Извлекаются строки со значениями самого field1 и максимальные значения для field2.
Выборка уникальных значений (DISTINCT):
SELECT DISTINCT(field) FROM <table>
* выборка уникальных значений поля field.
Получение списка полей для таблицы (аналог SHOW FIELDS):
SELECT Fields.RDB$FIELD_NAME as FIELD FROM RDB$RELATION_FIELDS Fields WHERE Fields.RDB$RELATION_NAME = 'USERS' and Fields.RDB$SYSTEM_FLAG = 0 ORDER BY Fields.RDB$FIELD_POSITION
* где USERS — имя таблицы, для которой хотим получить список полей;
Список таблиц (аналог SHOW TABLES):
SELECT RDB$RELATION_NAME FROM RDB$RELATIONS
Вставка (INSERT)
Простая вставка:
INSERT INTO <table> (field1, field2) VALUES ('data1', 'data2');
* в таблицу <table> добавляем строку и заполняем поля field1 и field2 соответствующими значениями data1 и data2.
Вставка с копирование:
INSERT INTO <table> SELECT * FROM <table2> WHERE ID > '111';
* в данном примере в таблицу <table> будет вставлено все, что выбрано из таблицы <table2>
Обновление (UPDATE):
Простое обновление данных:
UPDATE <table> SET field1 = 'data3' WHERE id = '111';
* для записи с ID 111 в таблице <table> меняем значение поля field1 на data3.
Удаление данных (DELETE)
DELETE FROM <table> WHERE id = 111;
* удаляем строку с ID 111 таблицы <table>