Работая с реляционными базами данных, мы часто сталкиваемся с понятием 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');
Если в вашей таблице есть столбцы с атрибутами 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
позволяет увидеть доступные форматы.
Команда .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;
Примеры применения 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 — в порядке убывания.