Работая с реляционными базами данных, мы часто сталкиваемся с понятием CRUD, образованным из английских слов: Create, Read, Update, Delete. Эти действия обозначают основные операции, возможные в БД:

  • добавление данных,
  • извлечение данных,
  • изменения данных,
  • удаление данных.

Таким образом, CRUD описывает четыре основные манипуляции с данным в таблицах баз данных.

Но в SQL термины не всегда совпадают с create, read, update, delete. К примеру, вместо оператора READ используется SELECT. Для добавления записей вместо CREATE используется команда INSERT.

Оператор INSERT

Команда INSERT в SQL предназначена для добавления информации в таблицу. Её синтаксис выглядит следующим образом:

INSERT INTO 	<table_name>  (<column_name1>, <column_name2>, ... ) VALUES (<value1>, <value2>, …);

После слова INSERT INTO указывают имя таблицы, затем записывают в скобках имена столбцов. После ключевого слова VALUES следуют значения, которые должны быть помещены в соответствующие столбцы. Пример использования:

sqlite> INSERT INTO sections (_id, ) VALUES (1, 'Information');

Тем не менее, следить за порядком столбцов, указанным при создании таблицы, необязательно:

sqlite> INSERT INTO sections (name, _id ) VALUES ('Boolean Algebra', 3);

Однако отсутствие явного указания столбцов обязывает вам следовать схеме таблицы в порядке значений:

sqlite> INSERT INTO sections VALUES (2, 'Digital Systems');

INSERT INTO

Если в вашей таблице есть столбцы с атрибутами AUTOINCREMENT и DEFAULT, то значения для них можно не задавать. Однако следует указать остальные столбцы:

sqlite> INSERT INTO pages VALUES
...> (1, 'What is Information', 'information', 1, 1 );
sqlite> INSERT INTO pages (title, url, theme, num) VALUES
...> ('Amount of Information', 'amount of Information', 1, 2);

В первой вставке мы явно указываем значение для столбца _id и заполняем остальные поля. Это позволяет опустить перечень столбцов. Во втором случае СУБД автоматически присваивает значение _id, поэтому необходимо указать остальные столбцы.

Вставка значений с автоинкрементом

В SQLite необходимо активировать поддержку внешних ключей, используя ограничитель FOREIGN KEY, чтобы предотвратить добавление записей с отсутствующими соответствиями в таблице sections.

Причина, по которой СУБД назначила идентификатор 3 второй записи, заключается в том, что предыдущие записи были добавлены и затем удалены.

Оператор SELECT

Для извлечения информации из таблицы в SQL используется оператор SELECT. В простейшем виде он записывается следующим образом, где <table_name> заменяется на имя таблицы:

SELECT * FROM <table_name>;

Команда выводит все строки и столбцы из таблицы. Символ звездочки (*) указывает на выбор всех столбцов. Все строки выводятся, так как не используется оператор WHERE, который позволяет фильтровать результаты.

Программа sqlite3 позволяет изменять формат отображения данных через команду .mode. Без аргументов она показывает текущий режим.

На скриншотах видно, что столбцы разделяются вертикальной чертой, это режим list. Команда .help .mode позволяет увидеть доступные форматы.

Режимы отображения в sqlite3

Команда .header on активирует отображение заголовков, что особенно полезно в режиме column. Отключать их можно командой .header off:

sqlite> .mode column
sqlite> .header on
sqlite> SELECT * FROM pages;
_id         title                url          theme       num
----------  -------------------  -----------  ----------  ----------
1           What is Information  information  1           1
3           Amount of Informati  amount-info  1           2         

Если необходимо отобразить лишь определенные столбцы, их имена указываются через запятую вместо звездочки:

sqlite> SELECT title, theme FROM pages;
What is Information|1
Amount of Information|1

WHERE

Оператор WHERE можно использовать не только с SELECT, но и с командами UPDATE и DELETE. Он задаёт условие отбора строк, подлежащих выборке, обновлению или удалению.

После оператора WHERE пишется логическое выражение, которое может быть простым (использующие операторы = или ==, >, <, >=, <=, !=, BETWEEN) или сложным, комбинированным с AND, OR, NOT, IN, NOT IN:

sqlite> SELECT * FROM pages WHERE _id == 3;
sqlite> SELECT * FROM pages WHERE theme == 2 AND num == 100;
sqlite> SELECT * FROM pages WHERE theme <= 2;

Использование оператора WHERE

Примеры применения BETWEEN и IN:

sqlite> SELECT _id, title FROM pages WHERE _id BETWEEN 3 AND 8;
3|Amount of Information
7|Binary System
8|Boolean Lows

sqlite> SELECT _id, title FROM pages WHERE _id IN (1,2);
1|What is Information

sqlite> SELECT _id, title FROM pages WHERE _id NOT IN (1,3);
7|Binary System
8|Boolean Lows

ORDER BY

В дополнение к фильтрации с помощью операторов WHERE, данные можно сортировать по возрастанию или убыванию, используя оператор ORDER BY.

sqlite> SELECT url,title,theme FROM pages ORDER BY url ASC;
sqlite> SELECT url,title FROM pages WHERE theme == 1 ORDER BY url DESC;

ASC указывает на сортировку в порядке возрастания. DESC — в порядке убывания.

Сортировка - ORDER BY

Вопросы для самопроверки:

  1. Что обозначает аббревиатура CRUD в отношении операций с базами данных?
  2. Какой SQL оператор используется для добавления данных в таблицу?
  3. Что происходит при отсутствии явного указания столбцов в команде INSERT?
  4. Как используется оператор SELECT для извлечения всех данных из таблицы?
  5. Какую функцию выполняет оператор WHERE в SQL запросах?
  6. Как можно сортировать данные в SQL запросах? Приведи примеры операторов для сортировки.