Назначение языка SQL
SQL (Structured Query Language - язык структурированных запросов) - набор инструкций для управления реляционными базами данных (т.е. такими, в которых информация хранится в виде таблиц). SQL состоит из инструкций, приближенных к командам на обычном английском языке (предложения в повелительном наклонении), например:
SELECT FIRSTNAME, LASTNAME FROM USERS WHERE AGE > 30;
Это означает "выбрать имя и фамилию из каждой записи таблицы 'Пользователи', где возраст больше 30 лет".
Инструкции SQL можно разделить на три группы:
- изменяющие базу данных (создание таблиц, запросов, других объектов, а также их изменение, удаление с помощью ключевых слов create, alter, drop);
- изменяющие данные в таблицах (insert, update, delete);
- запросы по фильтру (select... where...);
- агрегирующие (группирующие) запросы для подсчета сумм, средних значений и т.д. (select... group by...).
Язык SQL поддерживается большинством современных популярных реляционных СУБД (систем управления базами данных), в том числе:
- Microsoft Access;
- MSSQL;
- MySQL;
- PostgreSQL;
- SQLite.
В различных программных продуктах синтаксис SQL может различаться. Инструкции для разных СУБД могут быть несовместимыми.
Создание объектов баз данных с помощью SQL
Рассмотрим работу с SQL на примере таблицы дла хранения занисей о книгах в библиотеке. Создать ее можно с помощью инструкции:
CREATE BOOKS (ID INT PRIMARY KEY, TITLE TEXT NOT NULL, AUTHOR TEXT);
SQL-инструкции в большинстве реализаций заканчиваются точкой с запятой.
К полям при создании таблиц применяют различные ограничители (constraints): допустимы ли пустые значения в данном поле, должны ли значения поля во всех строках быть уникальными, является ли поле первичным или вторичным ключом и т.п.
В созданной таблице имеются колонки (поля) для хранения целочисленного идентификатора ID (первичный ключ), названия книги TITLE (произвольный непустой текст) и AUTHOR (текстовое поле, которое может быть пустым, т.к. не у каждой книги есть определенный автор). Первичный ключ - уникальный идентификатор (как правило, число), по которому легко найти запись. Ключи служат для связывания таблиц друг с другом. Если таблицы связаны по ключу, то в колонке зависимой таблицы должны упоминаться только занчения, заданные в ключевой колонке таблицы, от которой она зависит.
Если мы решим изменить структуру таблицы - следует задействовать инструкцию со словом ALTER:
ALTER TABLE BOOKS
ADD COLUMN
ISSUEYEAR INT;
Этой инструкцией мы добавляем поле ISSUEYEAR целочисленного типа, в котором будет храниться год выпуска книги.
Если таблица нам больше не нужна, мы можем удалить ее из базы данных со вcем содержимым:
DROP TABLE BOOKS;
СУБД, как правило, следят за тем, чтобы при удалении таблицы не пострадали те, с которыми она связана: в таком случае операция будет прервана и появится сообщение об ошибке.
Изменение данных в таблице и выборки из таблиц
Заполнять таблицу данными можно с помощью инструкций INSERT
:
INSERT INTO BOOKS VALUES (1,'Толстой Л.Н', 'Князь Серебряный', 1977);
В данной записи содержится фактическая ошибка: эту книгу написал не Л.Н. Толстой, а А.К. Толстой, поэтому воспользуемся инструкцией UPDATE
для исправления:
UPDATE BOOKS SET AUTHOR = 'Толстой А.К.' WHERE ID=1;
При необходимости можно удалить неактуальную запись (например, если данная книга выбыла из библиотечного фонда):
DELETE FROM BOOKS WHERE ID=1;
Чтобы выбрать из таблицы строки по какому-либо критерию, следует задействовать инструкцию SELECT и фильтр (WHERE). Например, найдем все строки, где упоминается автор по фамилии Толстой Л.Н:
SELECT * FROM BOOKS WHERE AUTHOR = 'Толстой Л.Н';
Знак звездочки означает, что показать нужно все поля. Если интересует какие-то конкретные, можно сформировать запрос по-другому:
SELECT AUTHOR, TITLE FROM BOOKS WHERE AUTHOR = 'Толстой Л.Н.';
Чтобы найти строки, где упоминаются и другие авторы по фамилии Толстой (не только Л.Н.), используют оператор LIKE:
SELECT * FROM BOOKS WHERE AUTHOR LIKE '%Толстой%' SORT BY AUTHOR;
Знаки процента (%) здесь означают, что вместо них может быть любая комбинация букв и цифр, т.е. будут найдены записи с авторами "Толстой Л.Н", "Толстой А.К.", "Толстой А.Н.", просто "Толстой". Благодаря оператору SORT BY записи будут еще и отсортированы по именам авторов.
Наиболее часто используемые запросы могут быть сохранены как отчеты (VIEW), например:
CREATE VIEW TOLSTOY AS SELECT * FROM BOOKS WHERE AUTHOR LIKE '%Толстой%';
Агрегирующие запросы помогают выполнять групповые операции: подсчет сумм по значениям поля, средних значений и т.п. В нашем примере мы можем подсчитать количество книг, написанных писателями Толстыми.
SELECT COUNS(*) FROM BOOKS WHERE AUTHOR LIKE '%Толстой%' GROUP BY AUTHOR;
Данный запрос покажет, сколько из книг из принадлежащих библиотеке написал каждый из писателей Толстых, поскольку в конце дополнительно указан оператор GROUP BY.