Что это такое? SQL-запросы необходимы для работы с информацией из базы данных. Это может быть внесение, извлечение, сортировка, удаление и ряд других операций. При этом не указывается способ осуществления запрашиваемого действия.
Где применяется? Так как разного рода информация присутствует во многих сферах деятельности, то SQL-запросы применяются как в работе с онлайн-ресурсами, так и с программами и приложениями.
В статье рассказывается:
- Структура базы данных
- Механизм работы SQL-запроса
- Виды SQL-запросов
- Примеры SQL-запросов
-
Пройди тест и узнай, какая сфера тебе подходит:
айти, дизайн или маркетинг.Бесплатно от Geekbrains
Структура базы данных
Прежде всего, давайте рассмотрим, что представляет собой база данных и каковы особенности ее иерархии.
База данных SQL есть не что иное, как совокупность сведений, хранящихся в виде таблицы. Наименования ее столбцов отражают краткую характеристику данных, в то время как в строках прописывается полная информация. Поле – это компонент структуры таблицы, содержащий данные об одном аспекте ее элемента.
Допустим, что у компании имеется несколько баз данных. Для того чтобы можно было увидеть их полный перечень, введем команду: SHOW DATABASES, после чего произойдет подключение к базе данных сотрудников.
Полученный результат выглядит подобным образом:
+———————+
| Databases |
+———————+
| mysql |
| information_schema |
| employees |
| test |
| sys |
+———————+
входят в ТОП-30 с доходом
от 210 000 ₽/мес
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка
Только проверенные нейросети с доступом из России и свободным использованием
ТОП-100 площадок для поиска работы от GeekBrains
Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽
Также одна база данных может состоять из нескольких таблиц. В таком случае запрос SHOW TABLES in employees позволит увидеть полный их список. Визуально это выглядит примерно так:
+———————-+
| Tables_in_employees |
+———————-+
| engineering |
| product |
| marketing |
| sales |
+———————-+
Структуру каждой таблицы формирует различный набор столбцов, в которых описываются данные.
Увидеть их можно с помощью выполнения SQL-запроса Describe engineering. Допустим, таблица содержит столбцы, в которых определен один конкретный признак, к примеру, employee_id, first_name, last_name, email, country и salary.
+————+——————-+—————+
| Name | Null | Type |
+————+——————-+—————+
|EMPLOYEE_ID| NOT NULL | INT(6) |
|FIRST_NAME | NOT NULL |VARCHAR2(20) |
|LAST_NAME | NOT NULL |VARCHAR2(25) |
|EMAIL | NOT NULL |VARCHAR2(255) |
|COUNTRY | NOT NULL |VARCHAR2(30) |
|SALARY | NOT NULL |DECIMAL(10,2) |
+————+——————-+—————+
Скачать файлСтроки таблицы, в которых отражена основная информация, называются записями. То есть, они содержат сведения, соответствующие наименованию столбцов (employee_id, first_name, last_name, e-mail, salary и country). Другими словами, в нашем примере строки определяют и выводят информацию об одном сотруднике из группы.
Механизм работы SQL-запроса
Чтобы правильно сформировать SQL-запрос и получить ожидаемый результат, следует четко понимать процесс его выполнения.
Итак, первое действие, которые совершает программа – это грамматическая разбивка и построение синтаксического дерева запроса. Анализ необходим для того, чтобы определить соответствие SQL-запроса требованиям синтаксиса и семантики. С помощью парсера формируется внутреннее определение команды, которое далее поступает обработчику кода.
Прежде чем оптимальный план будет найден, оптимизатор просчитывает все допустимые варианты выполнения, дает оценку качеству и стоимости каждого из возможных планов, анализирует информацию об актуальном состоянии базы данных. Разумеется, работа оптимизатора не всегда может стать идеальной. Именно по этой причине, пользователи и администраторы баз данных нередко вынуждены производить проверку и настройку предложенного плана вручную. Это необходимо для повышения производительности выполнения SQL-запроса.
на обучение «Разработчик» до 08 декабря
Так какой же план может считаться идеальным и пригодным для выполнения?
Повторим, что одним из критериев отбора становится оценка стоимости, в частности, мы говорим о таких аспектах, как число дисковых операций ввода-вывода, стоимость процессора, время, требующееся на отклик и выполнение процесса в целом. Специалисты определяют это как временные сложности.
Результатом обработки запроса данных SQL становится запуск в работу выбранного оптимального плана, после чего пользователь может ознакомиться с результатами.
Виды SQL-запросов
Существуют следующие виды запросов в SQL:
- DDL (Data Definition Language). Это язык определения данных, с помощью которого создается база данных и дается описание ее структуры. DDL запрос позволяет настроить правила размещения различной информации в таблице базы данных.
- DML (Data Manipulation Language) запрос – это язык работы с данными. Как правило, применяемые команды нужны для внесения изменений в уже существующие данные, их удаления и сохранения, обновления записей и т.д.
Читайте также!
Работа с базами данных SQL для новичковПодробнее - DCL (Data Control Language) запрос или язык управления данными. К ним относятся команды, при помощи которых могут быть внесены изменения в настройки расширений, доступа и другие элементы системы управления базой данных.
- TCL (Transaction Control Language) – это язык управления транзакциями. TCL запрос используется, когда необходимо объединить несколько команд DML, направленных на изменение данных, в наборы транзакций.
Примеры SQL-запросов
Ключевые слова
Они используются при составлении запросов:
- WHERE. С помощью этого ключевого слова можно сделать выборку из записей. Например:
SELECT (Column2, Column3) FROM Table1 WHERE Column1 = 1
- GROUP BY. Осуществляется группировка отфильтрованных записей согласно значениям определенных столбцов. Применяется после WHERE.
- AND, OR и BETWEEN. Ключевые слова AND и OR помогают расширить границы выборки, сделанной с помощью WHERE, либо, наоборот, уменьшить при введении требуемых значений. BETWEEN используется в случаях, когда для создания выборки необходимо указать диапазон значений.
- LIMIT. Устанавливает допустимые пределы значений. К примеру, пользователь получил 100 записей из выборки, а ему нужно только первые 20. В этом случае он использует ключевое слово LIMIT20.
Команды
Команда – это то, с чего начинается любой SQL-запрос.
Например, наша цель – создание базы данных, в которую будет внесена информация о прочитанных книгах. Кроме этого, нам потребуется изменять или удалять некоторые сведения. В качестве примера мы будем использовать простейшую систему управления базой данных sqlite3 в среде Linux. Создаем объект при помощи команды sqlite3 demo.db и переходим в командную строку в SQL-запросе:
sqlite3 demo.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter «.help» for usage hints.
sqlite>
Для формирования таблицы, вводим команду CREATE TABLE. В нашем примере мы будем работать с тремя столбцами: id, название книги, автор.
sqlite> CREATE TABLE Books (id INTEGER PRIMARY KEY, title CHAR(255), author CHAR(255));
sqlite> .tables
Books
Команда .tables показывает список таблиц.
Создаем три новые записи в таблице путем команды INSERT:
sqlite> INSERT INTO Books(title, author) VALUES
…> («Язык SQL», «Неизвестный автор»),
…> («SQL. Унесенные ветром», «Маргарет Митчелл»),
…> («Книга №3», «Без автора»);
Далее нам следует указать, в какие столбцы нужно вставить данные. При этом поле id мы не учитываем. Этот столбец выступает в качестве первичного ключа, который производит автоматическую генерацию уникальных значений. Итак, в одном запросе формируем серию записей.
Команда SELECT позволяет извлечь их из таблицы:
sqlite> SELECT * FROM Books;
1|Язык SQL|Неизвестный автор
2|SQL. Унесенные ветром|Маргарет Митчелл
3|Книга №3|Без автора
Мы видим, что каждой записи соответствует своя строка, вертикальные линии означают разделение на столбцы. Предположим, что нам нужны только конкретные из полей, в этом случае меняем звездочку на название полей, прописывая их через запятую. Выглядит это так:
sqlite> SELECT title, author FROM Books;
Язык SQL|Неизвестный автор
SQL. Унесенные ветром|Маргарет Митчелл
Книга №3|Без автора
Команда UPDATE в запросе SQL способствует изменению записей в таблице. Применяя ее, следует указать уникальную характеристику элемента, который должен быть изменен, чтобы программа смогла идентифицировать одну или несколько записей, объединенных в группу. Так, следуя нашему примеру, мы обновляем сведения об авторе в первой и второй книгах:
sqlite> UPDATE Books
…> SET author = «Unknown»
…> WHERE id = 1 OR id = 3;
sqlite>
sqlite> SELECT title, author FROM Books;
Язык SQL|Unknown
SQL. Унесенные ветром|Маргарет Митчелл
Книга №3|Unknown
Требуется удалить записи из таблицы базы данных? Выполнение SQL-запроса осуществляем с использованием команды DELETE. Нам нужно извлечь запись о книге с id, который равен 2:
sqlite> DELETE FROM Books WHERE id = 2;
sqlite>
sqlite> SELECT * FROM Books;
1|Язык SQL|Unknown
3|Книга №3|Unknown
Удаление таблицы полностью из базы данных производится командой DROP TABLE:
sqlite> CREATE TABLE Demo (id INTEGER PRIMARY KEY, text TEXT);
sqlite>
sqlite> .tables
Books Demo
sqlite>
sqlite> DROP TABLE Demo;
sqlite>
sqlite> .tables
Books
ALTER TABLE. С одновременным использованием ключевых слов эта команда позволяется добавить новые столбцы в таблицу или изменить ее название. Например, мы хотим переименовать нашу таблицу с Books на Books that I read:
sqlite> ALTER TABLE Books RENAME TO Books that I read;
sqlite>
sqlite> .tables
Books that I read
А также добавить новый столбец is_finished с булевым типом значения (истина или ложь):
sqlite> ALTER TABLE Books that I read ADD COLUMN is_finished BOOLEAN;
sqlite> UPDATE Books that I read
…> SET is_finished = True;
sqlite>
sqlite> SELECT * FROM Books that I read;
1|Язык SQL|Unknown|1
3|Книга №3|Unknown|1
Агрегатные функции
Данные опции используются, когда требуется произвести дополнительные действия в полученной по запросу SQL выборке:
- COUNT (наименование_столбца). Определяет и возвращает количество строк в выборке, в которых значение столбца не нулевое (NULL).
- SUM (наименование_столбца). Вычисляет и возвращает сумму значений в определенном столбце.
- AVG (наименование_столбца). Определяет среднее значение по столбцу.
- MIN (наименование_столбца). Возвращает минимальное значение выбранного столбца.
- MAX (наименование_столбца). Возвращает максимальное значение выбранного столбца.
Вложенные подзапросы
Представляют собой один SQL-запрос, расположенный внутри другого запроса SQL. Такой механизм используется, если выборка производится по значениям, к которым тоже можно применить фильтр. Предположим, что нам нужно выбрать хоккейные команды, которые становились участниками соревнований в период с 2010 по 2020 год.
SELECT DISTINCT club_name
FROM clubs
WHERE game_year = 2010 AND club_id IN
(SELECT club_id
FROM clubs
WHERE game_year = 2020);
Внедрение в запрос ключевого слова DISTINCT способствует извлечению из выборки повторяющихся результатов.
Читайте также!
Итак, мы рассмотрели некоторые примеры SQL-запросов, которые могут быть простыми или сложными, в зависимости от результата, который требуется получить. Разумеется, информацию, представленную в данной статье, не стоит рассматривать как единственный верный источник всех возможностей в данной области. Однако мы надеемся, что изложенный материал поможет новичкам быстрее и успешнее освоить эту технологию и не совершать ошибки в SQL-запросах.