Раздел помощи SpaceWeb

Базовые команды SQL: руководство

22 фев, 2024

Что такое SQL 

SQL (Structured Query Language) – это стандартный язык программирования и управления реляционными базами данных. Он используется для создания, модификации и управления данными в реляционных БД. 

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

  • выборка данных, 
  • вставка новых записей, 
  • обновление существующих данных,
  • удаление записей.

В целом, SQL – это крайне мощный и универсальный инструмент для работы с системами реляционных баз данных (СУБД), что сделало его одним из самых используемых используемым языков в области разработки ПО и администрирования БД.

Виды SQL-команд

SQL-команды можно разделить на несколько основных категорий в зависимости от их функциональности и применения:
 

  1. DDL (Data Definition Language) – «Язык определения данных»

DDL представляет собой набор инструкций, применяемых для определения и управления структурой базы данных. Он предоставляет возможности создания, модификации и удаления объектов базы данных – таблиц, индексов, представлений и других.

К этой категории относятся следующие команды CREATE, ALTER, DROP, RENAME, COMMENT и TRUNCATE.

  1. DML (Data Manipulation Language) – «Язык манипуляции данными»

DML представляет собой подмножество команд для изменения данных внутри базы данных. В отличие от DDL, который применяется для определения структуры базы данных, DML сосредотачивается на вставке, изменении и удалении данных в таблицах.

Основные команды DML включают INSERT, UPDATE, DELETE и MERGE.

  1. DCL (Data Control Language) – «Язык управления доступом к данным»

DCL – это набор команд, используемых для управления правами доступа к данным в базе данных. DCL обеспечивает контроль над тем, кто и как может получить доступ к данным, изменять их или управлять ими в базе данных. 

Основные команды DCL включают в себя GRANT и REVOKE.  

  1.  TCL (Transaction Control Language) – «Язык управления транзакциями»

TCL – это набор команд, предназначенных для управления транзакциями в базе данных. 

Важно! Транзакции – это логические блоки операций, которые выполняются как единое целое: все операции должны быть успешно завершены, или ни одна из них не должна быть выполнена. 

TCL предоставляет команды для управления стартом, завершением и отменой транзакций. В них входят: BEGIN, COMMIT, ROLLBACK и ROLLBACK TO SAVEPOINT.

  1. DQL (Data Query Language) – «Язык запросов данных» 

DQL – набор команд языка SQL, предназначенный для выполнения запросов к базе данных с целью извлечения данных. Цель DQL – получение информации из базы данных, а не изменение ее структуры или содержимого. 

Основная команда DQL – это SELECT, которая используется для извлечения данных из одной или нескольких таблиц. 

Ограничения целостности в БД с примерами

Ограничения целостности в базе данных – это правила, направленные на обеспечение корректности и согласованности данных в базе. Они используются для того, чтобы гарантировать, что данные соответствуют определенным стандартам и требованиям. 

Вот несколько основных видов ограничений целостности: 

Команда

Описание

Пример использования

PRIMARY KEY

Гарантирует уникальность значений в столбце (или группе столбцов) и предотвращает наличие NULL-значений.

CREATE TABLE Workers (
 WorkerID INT PRIMARY KEY,
 FirstName VARCHAR(50),
 LastName VARCHAR(50)
);

FOREIGN KEY

Устанавливает связь между столбцом в текущей таблице и PRIMARY KEY столбцом в другой таблице, обеспечивая согласованность данных.

CREATE TABLE Orders (
 OrderID INT PRIMARY KEY,
 xID INT,
 OrderDate DATE,
 FOREIGN KEY (ClientID) REFERENCES Clients(ClientID)
);

 

UNIQUE

Гарантирует уникальность значений в столбце (или группе столбцов), но, в отличие от PRIMARY KEY, позволяет иметь NULL-значения

CREATE TABLE Products (
 ProductID INT UNIQUE,
 ProductName VARCHAR(50) UNIQUE
);

 


 

CHECK

Применяется для установки критериев, которым должны удовлетворять данные в конкретном столбце таблицы. Если данные, предлагаемые для вставки или обновления, не соответствуют установленному условию, операция вставки или обновления будет отклонена.

CREATE TABLE Workers (
  WorkerID INT PRIMARY KEY,
  FirstName VARCHAR(50),
  LastName VARCHAR(50),
  Age INT CHECK (Age >= 18),
  Salary DECIMAL(10,2) CHECK (Salary >= 0)
);

NOT NULL

Предотвращает вставку значений NULL в указанный столбец. Если для этого столбца установлено ограничение NOT NULL, то каждая запись, добавляемая в таблицу, обязана содержать ненулевое значение в указанном столбце.

CREATE TABLE Students (
  StudentID INT PRIMARY KEY,
  FirstName VARCHAR(50) NOT NULL,
  LastName VARCHAR(50) NOT NULL,
  Age INT NOT NULL
);

DEFAULT

Устанавливает значение по умолчанию для столбца, если при вставке новой записи не указано значение для этого столбца.

CREATE TABLE Workers (
  WorkerID INT PRIMARY KEY,
  FirstName VARCHAR(50) NOT NULL,
  LastName VARCHAR(50) NOT NULL,
  Age INT DEFAULT 25
);

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

Основные команды SQL

  • Команда SELECT. Используется для извлечения данных из одной или нескольких таблиц. 

Пример:

Этот запрос извлекает данные из таблицы «Workers». Он выбирает имена (FirstName) и фамилии (LastName) сотрудников, которые работают в отделе «PR».

Основной синтаксис SELECT:

  1. SELECT + DISTINCT or ALL. Выбирает указанные столбцы из таблицы (или таблиц). При этом ключевые слова определяют, следует ли выбирать только уникальные записи («DISTINCT») или все записи («ALL»), включая повторяющиеся.
  2. FROM. Указывает, из какой (или каких) таблицы (таблиц) извлекать данные.
  3. WHERE. Предоставляет опциональное условие для фильтрации записей. Только те записи, которые удовлетворяют условиям, будут включены в результат.
  4. GROUP BY. Задает опциональное условие для группировки записей по определенному столбцу или набору столбцов.
  5. HAVING. Это опциональное условие, применяемое после группировки («GROUP BY»). Оно фильтрует группы записей в соответствии с заданными критериями.
  6. ORDER BY. Задает условие для сортировки результатов по указанным столбцам. По умолчанию сортировка осуществляется в порядке увеличения значений; при необходимости можно указать «DESC» для сортировки по убыванию.
  7. LIMIT. Это опциональное условие, которое ограничивает количество выбираемых записей.

Расширенный пример:

Этот запрос выбирает уникальные имена и фамилии сотрудников из отдела «PR», группирует их по отделу, фильтрует только те отделы, где средняя зарплата больше 60 000, сортирует результаты по фамилии в убывающем порядке и ограничивает вывод 10 записями.  

  • Команда INSERT. Добавляет новые записи в таблицу.

Пример: 

INSERT INTO Workers (FirstName, LastName, Age)
VALUES ('Ivan', 'Ivanov', 27);

Эта команда добавляет новую запись в таблицу «Workers». В данном случае, добавляется сотрудник с именем «Ivan», фамилией «Ivanov» и возрастом 27 лет.

  • Команда UPDATE. Меняет уже существующие данные в таблице.

Пример: 

UPDATE Workers
SET Age = 31
WHERE LastName = 'Petrov';

Команда обновляет данные в таблице «Workers». Она устанавливает значение возраста (Age) равным 31 для сотрудников с фамилией «Petrov».

  • Команда DELETE. Удаляет выбранные данные из таблицы.

Пример: 

DELETE FROM Workers
WHERE LastName = 'Petrov';

Команда удаляет записи о сотрудниках с фамилией «Petrov» из таблицы «Workers». Все строки, соответствующие условию, будут удалены.

  • MERGE. Позволяет объединять данные из источника с данными в целевой таблице, обновляя существующие записи и вставляя новые, если они отсутствуют.

Пример:

Этот запрос использует команду MERGE для объединения данных из таблицы источника (SourceTable) с данными в целевой таблице (TargetTable). Если записи совпадают (по значению WorkerID), то обновляется поле Salary. Если запись отсутствует в целевой таблице, она вставляется. Эта команда может быть полезной при синхронизации данных из разных источников.

  • CREATE. Создает новые объекты в базе данных, включая таблицы, индексы или представления.

Пимер: 

Эта команда создает новую таблицу с именем «Workers». Она содержит три столбца: 

  • «id» с типом данных INT (целые числа), который также является первичным ключом. 
  • «name» с типом данных VARCHAR(50) (строки длиной до 50 символов).
  • «salary» с типом данных DECIMAL(10,2) (десятичное число с общим числом цифр 10 и двумя знаками после запятой). 

  • ALTER. Меняет структуры существующих объектов в базе данных. Этой командой можно добавить или удалить столбцы в таблицах. 

Пример: 

Команда изменяет структуру существующей таблицы «Workers», добавляя новый столбец «department» с типом данных VARCHAR(50).

  • DROP. Удаляет объекты базы данных – таблицы или индексы.

Пример:

Эта команда удаляет всю таблицу «Workers» со всеми данными в ней. 

Важно! Удаление таблицы приводит к потере всех данных в ней, поэтому будьте осторожны при использовании этой команды.

  • RENAME. Позволяет переименовывать существующие объекты базы данных.

Пример: 

Эта команда переименовывает таблицу «Workers» в «WorkerData». Теперь ее новое имя – «WorkerData».

  • COMMENT. Добавляет комментарий к объектам базы данных.

Пример:

Эта команда добавляет комментарий, что в таблице «Workers» находятся данные сотрудников компании. Комментарии могут использоваться для предоставления дополнительной информации о структуре базы данных.

  • TRUNCATE. Удаляет все записи из таблицы, но оставляет структуру таблицы нетронутой.

Пример: 

Команда удаляет все строки из таблицы «Workers», но сохраняет саму структуру таблицы. Таким образом, таблица остается, но уже не содержит данные.

Эти команды обеспечивают базовый функционал SQL для работы с данными в реляционных базах данных.

SQL-команды транзакции

SQL обеспечивает возможность эффективного управления транзакциями, которые представляют собой логически связанные операции, выполняемые как единое целое для поддержания целостности и согласованности данных в базе данных. 

Ниже представлены основные команды, связанные с транзакциями:

  • BEGIN. Запускает новую транзакцию, при этом все последующие операции рассматриваются как неотъемлемая часть данной транзакции.
  • COMMIT. Вносит конечные изменения, внесенные в ходе текущей транзакции, и закрепляет их в базе данных. Если транзакция завершена успешно, команда COMMIT сохраняет изменения. В противном случае команда никак не меняет БД.

Пример:

В данном примере все изменения, включая увеличение зарплаты сотрудников PR-отдела, подтверждаются использованием команды COMMIT.

  • ROLLBACK. Эта команда выполняет отмену всех изменений, произведенных в ходе текущей транзакции, и восстанавливает базу данных в состояние, предшествующее началу данной транзакции.

Пример:

Если в процессе выполнения транзакции возникает ошибка, команда ROLLBACK отменяет все изменения, сделанные в рамках текущей транзакции.

  • SAVEPOINT. Создает точку сохранения внутри транзакции. Это позволяет откатывать изменения только до указанной точки, не затрагивая остальные части транзакции.

Пример: 

Этот запрос обновляет зарплаты сотрудников в отделе «PR», увеличивая их на 10%, а затем создает точку сохранения с именем «my_sp». Она позволяет откатиться к этой конкретной точке в случае необходимости, при этом сохраняя часть изменений, выполненных в транзакции.

  • ROLLBACK TO SAVEPOINT. Эта команда откатывает транзакцию до указанной точки сохранения.

Предположим, что после создания точки сохранения «my_sp» у нас возникла ошибка или выполнение операции прервалось. Вы захотели откатиться к точке сохранения, отменив часть изменений, но сохранив другую часть. 

Вот как эта ситуация может выглядеть на практике:

В этом примере, если операция DELETE завершится неудачно (например, из-за наличия ограничений целостности), мы сможем использовать ROLLBACK TO SAVEPOINT my_sp, чтобы отменить только изменения, сделанные после создания точки сохранения «my_sp». В результате, COMMIT сохранит только изменения, которые были сделаны до точки сохранения. 

  • SET TRANSACTION. Управляет характеристиками транзакции – изоляцией транзакции и другими параметрами.

Команды управления данными

Команды GRANT и REVOKE используются в SQL для управления правами доступа к данным в базе данных. Они предоставляют администраторам баз данных контроль над тем, кто может выполнять различные операции с данными в таблицах, представлениях и других объектах базы данных. 

Давайте подробнее поговорим о каждой из них:

  • GRANT. Команда GRANT используется для предоставления определенным пользователям или ролям конкретных привилегий на объекты БД.

Пример:

  

Этот запрос даст пользователю IvanIvanov права на выполнение операций SELECT и INSERT в таблице «Workers».

  • REVОKE. Команда REVOKE используется для отмены предоставленных ранее привилегий у определенных пользователей или ролей.  

Пример: 

Этот запрос отменяет предоставленные ранее права на выполнение операций SELECT и INSERT в таблице «Workers».

Обе команды GRANT и REVOKE играют ключевую роль в обеспечении безопасности базы данных, контролируя, какие пользователи или роли имеют доступ к каким данным и какие операции они могут выполнять.