В этой статье разберемся, что такое SQL и как работают основные SQL-запросы.
Что такое SQL
SQL (Structured Query Language) — язык структурированных запросов. Он предназначен для управления реляционными базами данных в СУБД, таких как PostgreSQL, MySQL, Oracle и Microsoft SQL Server. Что такое реляционные базы данных, мы рассказали в статье. С помощью SQL можно добавлять, удалять, изменять и извлекать данные из базы данных. Также язык позволяет описывать данные и их структуру, взаимодействовать с другими языками через библиотеки и модули SQL и устанавливать разрешения на доступ к данным.
SQL — наиболее распространенный язык программирования в области работы с БД.
— Он используется для:
— веб-разработки,
— бизнес-аналитики,
— администрирования баз данных,
— обработки данных.
Виды SQL команд
Существует несколько видов SQL-команд.
Data Definition Language (DDL), или язык определения данных — это группа операторов для определения структуры БД и работы с объектами этой базы. DDL включает в себя следующие команды:
-
1
CREATE. Команда для создания новых объектов базы данных, например, таблиц, индексов или представлений. Создадим с помощью этой команды таблицу:
CREATE TABLE TableName;
Вместо TableName укажите название таблицы.
-
2
ALTER. Команда, с помощью которой можно изменять структуру существующих объектов базы данных, например, добавлять или удалять столбцы в таблице. Добавим в созданную таблицу столбец, который будет хранить числовые значения:
ALTER TABLE TableName ADD COLUMN column INT;
Где:
— TableName — название таблицы;
— column — название столбца.
-
3
DROP. Команда для удаления объектов базы данных. Удалим таблицу с помощью этой команды:
DROP TABLE TableName;
Вместо TableName укажите название таблицы.
Data Manipulation Language (DML), или язык манипуляций с данными. Это команды для управления данными. DML включает в себя:
-
1
SELECT. Команда для извлечения данных из БД. Извлечем все данные из таблицы:
SELECT * FROM TableName;
Вместо TableName укажите название таблицы.
-
2
INSERT. Вставляет новые записи в таблицу. Предположим, у нас есть таблица с наименованиями и стоимостью товаров, добавим в нее запись:
INSERT INTO Products (id, name, price) VALUES (1, 'bread', 30);
Где:
— id — уникальный идентификатор товара;
— name — название товара в строковом формате;
— price — цена товара в числовом формате.
-
3
UPDATE. Обновляет и изменяет существующие записи в таблице. Например, изменим стоимость товара в таблице с id равным '1':
UPDATE Products SET price = 35 WHERE id = 1;
-
4
DELETE. Удаляет записи из таблицы. Команда DELETE удалит все строки в таблице, если не указано других условий. Удалим товар с идентификатором равным '1' из таблицы Products:
DELETE FROM Products WHERE id = 1;
Data Control Language (DCL), или язык контроля данных — группа операторов для управления правами доступа к данным в БД. Администраторы баз данных могут устанавливать различные уровни доступа для пользователей или ролей для обеспечения безопасности и защиты данных. DCL-команды:
-
1
GRANT. Команда для предоставления различных прав доступа к объектам базы данных другим пользователям. Откроем доступ к таблице:
GRANT ALL PRIVILEGES ON Products TO user;
Где:
— Products — название таблицы, к которой вы хотите предоставить доступ;
— user — пользователь, которому эти права выдаются.
-
2
REVOKE. Команда отзывает предоставленные к объектам права. Например:
REVOKE ALL PRIVILEGES ON Products TO user;
Где:
— Products — название таблицы, доступ к которой необходимо ограничить;
— user — пользователь, у которого отзываются права.
Transaction Control Language (TCL), или язык управления транзакциями — группа операторов, управляющих транзакциями в базе данных. SQL команды транзакции:
-
1.
COMMIT. Фиксирует изменения, сделанные в транзакции, сохраняет их в БД. После выполнения команды изменения необратимы.
-
2.
ROLLBACK. Отменяет изменения, сделанные в текущей транзакции.
-
3.
SAVEPOINT. Создает точки сохранения внутри транзакции. При необходимости поможет сделать откат до определенного состояния.
Правила написания запросов
При написании SQL-запросов необходимо следовать следующим правилам:
-
1
SQL не чувствителен к регистру, например, SELECT можно написать как в верхнем, так и в нижнем регистре. Однако писать ключевые слова принято в верхнем регистре, а имена таблиц и столбцов в нижнем. Также имена таблиц и столбцов в запросах нужно писать в точности так, как они были названы изначально. Например, если таблица называется Products, а в запросе написать products, запрос выполнится некорректно.
-
2
Оставлять комментарии можно несколькими способами. Многострочные комментарии будут начинаться с '/*' и заканчиваться '*/'. Однострочные комментарии будут писаться с двойного дефиса (--). Например:
/* Это многострочный комментарий */ CREATE DATABASE Name; -- Это однострочный комментарий CREATE DATABASE Name; -- Это тоже однострочный комментарий
-
3
Если имя таблицы, столбца или значение содержит пробелы или специальные символы, оно должно быть заключено в кавычки (« »). Строковые значения заключаются в одинарные кавычки ('). Например:
-- Создание таблицы с именем, содержащим пробелы CREATE TABLE "my table"; -- Вставка строки INSERT INTO my_table (column) VALUES ('строка');
- 4 Каждый SQL запрос должен завершаться точкой с запятой (;).
-
5
Для экранирования специальных символов внутри строк используется обратный слеш (\). Например, если мы ищем строчку с цитатой, запрос будет выглядеть так:
SELECT * FROM Quotes WHERE contents LIKE 'Plato is said to once have said \"Lorem ipsum dolor sit amet\".';
- 6 Числа вносятся в таблицы без кавычек.
- 7 Пробелы и отступы игнорируются в SQL-запросах. Однако их стоит использовать, чтобы запросы имели читабельный вид.
Основные команды SQL
SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP — это основные команды SQL.
Рассмотрим синтаксис некоторых из них. Для примера воспользуемся данными из таблицы Employees со списком сотрудников компании.
SELECT
Команда SELECT может использоваться со следующими ключевыми словами:
— DISTINCT — выбирает уникальные значения из столбцов, устраняя повторения.
— ALL — возвращает все данные из таблицы.
— FROM — указывает на таблицу из которой извлекаются данные.
— WHERE — устанавливает фильтрацию.
— GROUP BY — устанавливает правила группировки данных.
— HAVING — устанавливает правила фильтрации сгруппированных записей.
— ORDER BY — сортирует данные по возрастанию или убыванию.
— LIMIT — задает количество записей, которые необходимо получить из результата запроса.
Обязательными элементами запроса SELECT являются только SELECT и FROM.
С помощью следующей команды извлечем имена сотрудников из таблицы, чей возраст старше 30, отсортируем результаты по убыванию возраста и вернем только первые 2 записи:
SELECT name
FROM Employees
WHERE age > 30
ORDER BY age DESC
LIMIT 2;
INSERT
Команда INSERT в SQL состоит из двух ключевых слов:
— INSERT INTO — указывает на таблицу, в которую нужно добавить данные.
— VALUES — указывает значения, которые вставляются в таблицу. Указать значения можно списком, который соответствует порядку столбцов в таблице, или через подзапрос.
Добавим в таблицу Employees нового сотрудника. Сделать это можно двумя способами:
-- Простая вставка значений в таблицу с указанием столбцов
INSERT INTO Employees (name, age, salary)
VALUES ('Leon', 30, 18);
-- Вставка значений в таблицу без указания столбцов (все столбцы)
INSERT INTO Employees
VALUES ('Andrey', 25, 150, gym);
UPDATE
Ключевые слова запроса UPDATE:
— SET — определяет столбцы и значения для обновления.
— WHERE — задает условие для определения записей, которые нужно обновить. Если условия нет, обновляются все строки в таблице.
Команда UPDATE для изменения зарплаты сотрудников в таблице Employees, у которых в хобби указан gym, будет выглядеть так:
UPDATE Employees
SET salary = 100
WHERE hobby = 'gym';
DELETE
Запрос будет состоять из следующих ключевых слов:
— DELETE FROM — указывает на таблицу, из которой необходимо удалить данные.
— WHERE — определяет, какие строки из таблицы нужно удалить. Если не указать условие, будут удалены все строки таблицы.
Удалим из таблицы Employees сотрудников, чей возраст меньше 30:
DELETE FROM Employees
WHERE age < 30;
Ограничения целостности в базах данных
Для обеспечения надежности и целостности данных в соответствии с принципами ACID в базах данных вводятся определенные правила — ограничения целостности (integrity constraints). Они определяют допустимые значения и структуру данных в БД. Это помогает предотвратить ошибочные операции.
Ниже описаны некоторые ограничения целостности в БД с примерами.
Первичный ключ (Primary Key Constraint)
Первичный ключ гарантирует уникальность в столбце или группе столбцов. Например, в таблице Employees каждый id должен быть уникальным.
/* Создание таблицы Employees с первичным ключом на столбце id.
Где:
— id — уникальный идентификатор для сотрудников,
— name — столбец столбец с именами сотрудников с типом данных строка длиной до 50 символов. */
CREATE TABLE Employees (
id INT PRIMARY KEY,
name VARCHAR(50)
);
Ограничение NOT NULL
Ограничение NOT NULL требует, чтобы столбец не содержал значения NULL, то есть не был пустым. Например, столбец name в таблице Employees не может быть пустым.
-- Создание таблицы Employees с ограничением NOT NULL в столбце name.
CREATE TABLE Employees (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL
);
Ограничение на уникальность (Unique Constraint)
Ограничение на уникальность предотвращает дублирование информации. Например:
-- Создание таблицы Products с ограничением на уникальность в столбце product_code.
CREATE TABLE Products (
product_id INT PRIMARY KEY,
product_code VARCHAR(50) UNIQUE,
product_name VARCHAR(100)
);
Попытка вставить или обновить запись с уже существующим значением в столбце product_code приведет к ошибке.
При попытке нарушения целостности система может среагировать несколькими способами:
- 1 Откат. Состояние БД восстановится до состояния, зарегистрированного в журнале на момент начала транзакции.
- 2 Компенсирующие действия. Например, выполнится альтернативная операция, которая не нарушит целостность данных.
- 3 Игнорирование. Попытка нарушения целостности будет проигнорирована, и система продолжит выполнение операции.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊