Skip to content

SQL команды

SQL (Structured Query Language) - это стандартизированный язык запросов для управления данными в реляционных базах данных. SQL предоставляет набор команд и операторов для определения, изменения и управления данными в базе данных. Язык SQL представляет собой совокупность операторов, инструкций, вычисляемых функций. В SQL-запросах описываются только операции над данными. Реализация запросов осуществляется средствами СУБД.

Data Definition Language

DDL (Data Definition Language) команды для определения структуры базы данных, создания, изменения и удаления таблиц, индексов и других базовых объектов данных.

CREATE

CREATE команда для создания объектов СУБД

CREATE
-- Создание БД
CREATE DATABASE db1;

-- Создание таблицы, указываем из каких столбцов состоит таблица и какие типы данных в ней могут храниться
CREATE TABLE table1 (nomerceh INT, tabnom SERIAL , fio CHAR(20) UNIQUE);

-- Создание псевдотаблицы
CREATE VIEW poor AS SELECT tabnom, fio FROM table1 WHERE tabnom < 120;

-- Создание индекса
CREATE UNIQUE INDEX indkdtb ON table1 (tabnom);

-- Создание синонима имени таблицы
CREATE SYNONYM t1 FOR db1.table1;

ALTER

ALTER команда для изменения структуры существующих данных

ALTER
-- Изменить имя БД
ALTER DATABASE db1 MODIFY NAME = db2;

-- Изменение имени таблицы
ALTER TABLE table1 RENAME TO table2;

-- Изменение столбцов в таблице
ALTER TABLE table2 ADD (dolzhnost CHAR(20) BEFORE fio),
DROP(tabnom);

-- Упорядочивание таблицы по индексу
ALTER INDEX indkdtb TO CLUSTER;

DROP

DROP команда для удаления существующих объектов БД

DROP
-- Удалить БД
DROP DATABASE db1;

-- Удалить таблицу
DROP TABLE table1;

-- Удалить индекс
DROP INDEX indkdtb;

-- Удалить синоним
DROP SYNONYM t1;

-- Удалить псевдотаблицу
DROP VIEW poor;

TRUNCATE

TRUNCATE команда для удаление данных из таблиц

TRUNCATE
TRUNCATE TABLE table1;

Data Manipulation Language

DML (Data Manipulation Language) команды предназначены для манипулирования данными в базе данных.

SELECT

SELECT команда для извлечения данных.

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

После ключевого слова SELECT в операторе размещается несколько предложений, описывающих, какой именно результат должен быть извлечен из базы данных. Подчеркнем, что оператор описывает именно результат, но не алгоритм его вычисления, даже если запись выглядит как последовательность действий. СУБД, в том числе система PostgreSQL, может изменять порядок выполнения отдельных операций, с тем чтобы выполнить все вычисление наиболее эффективным способом

SELECT
-- Вывести все записи таблицы
-- использование «звездочки» приводит к зависимости приложения от схемы базы данных: приложение должно быть готово принять 
-- столько колонок, сколько их имеется в хранимой таблице, независимо от того,
-- нужны значения этих колонок для работы приложения или нет.
SELECT * FROM persons;

-- Вывести количество записей в таблице
SELECT COUNT(*) FROM persons;

-- Вывести определенные столбцы из таблицы
-- Предложение FROM оператора SELECT указывает список источников данных, из которых выбираются данные для результата.
-- Источниками данных могут быть таблицы базы данных, представления или любые конструкции SQL, вырабатывающие таблицы
SELECT name, tabnom FROM persons;

-- Вывести данные по условию
-- Предложение WHERE задает условия, которым должны удовлетворять строки входных таблиц,
-- для того чтобы эти строки использовались при выполнении оператора.
SELECT name, tabnom FROM persons WHERE tabnom>100;

-- Вывести только уникальные значения
SELECT DISTINCT name, tabnom FROM persons;

-- Вывести упорядоченные данные по признаку (ASC - по возрастанию, DESC - по убыванию)
SELECT name, tabnom FROM persons ORDER BY tabnom ASC;

-- Вывести сгруппированные значения по признаку
SELECT COUNT(*) FROM persons GROUP BY name;

INSERT

INSERT команда для добавления новых строк в таблицу

Добавление новых данных производится оператором INSERT, содержащим два предложения. Первое из них (INTO) указывает, куда помещаются новые данные, и содержит имя таблицы, за которым может следовать список атрибутов, заключенный в круглые скобки. Второе предложение (VALUES) задает значения, которые добавляются в базу данных.

INSERT
-- Вставка данных в таблицу
INSERT INTO persons VALUES (1, 123, "Alexandr");

-- Вставка данных в таблицу с указанием столбца
INSERT INTO persons (id, tabno, name) VALUES (1, 123, "Alexandr");

UPDATE

UPDATE команда для обновления существующих данных

UPDATE
-- Обновить конкретные значения
-- Указываем имя таблицы
UPDATE table1
-- Указываем какие конкретно значения следует обновить
SET column1 = value1, column2 = value2, ...
-- Указываем по каким критериям нужно выбрать запись для обновления
WHERE id=6;

-- Обновить все значения в определенных столбцах
UPDATE table1
-- Указываем имена и значения столбцов которые нужно обновить
SET column1 = value1, column2 = value2;
-- ВАЖНО! Поскольку не указанно условие WHERE, будут изменены значения для всех записей таблицы. 

DELETE

DELETE команда для удаления данных из таблицы

DELETE
-- Удалить все данные в таблице
DELETE FROM table1;

-- Удалить конкретную строку (или набор строк)
DELETE FROM table1 WHERE id=1;

MERGE

MERGE команда для слияния двух таблиц. Заменяет операторы: INSERT, UPDATE, DELETE

MERGE
MERGE INTO table1 USING table2
ON (condition)
WHEN MATCHED THEN
   UPDATE SET column1 = value1, column2 = value2, ...
WHEN NOT MATCHED THEN
   INSERT (column1, column2, ...)
   VALUES (value1, value2, ...);

Команды доступа к данным

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

GRANT

GRANT команда для предоставления прав пользователям на взаимодействие с объектами БД

GRANT
-- Общий сиртаксис предоставления привилегий командой GRANT
GRANT privilege1, privilege2
ON db1, table1
TO user_or_role_or_public;

-- Пример выдачи всех прав на таблицу table1 пользователю user1
GRANT ALL ON table1 TO user1;

-- Пример выдачи ограниченных прав пользователю user2
GRANT SELECT, INSERT ON table1 TO user2;

-- Предоставить права на обновление и выбор отдельных строк в таблице
GRANT UPDATE(column1, column2), SELECT ON table1 TO PUBLIC;

-- Даем пользователю права, которые он может передавать другим пользователям
GRANT SELECT ON table1 TO user1 WITH GRANT OPTION;

REVOKE

REVOKE команда, которая отзывает предоставленные ранее права

REVOKE
-- Общий синтаксис отзыва прав
REVOKE privileges
ON object_name
FROM user_or_role;

-- Отзываем все выданные права на таблицу table1 для user1
REVOKE ALL ON table1 FROM user1;

-- Отзываем определенные права
REVOKE UPDATE(column1, column2), SELECT ON table1 FROM PUBLIC;

DENY

DENY команда для запрета выдачи прав

DENY
-- Общий синтаксис
DENY privilege1
ON object_name
TO user_or_role;

-- Явно запрещаем пользователю манипулировать таблицей table1
DENY ALL ON table1 FROM user1;

-- Запрещаем делать определенные вещи
DENY UPDATE(column1, column2), SELECT ON table1 FROM PUBLIC;

DECRIBE

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

DECRIBE
-- describe в MySQL и Oracle
DESCRIBE table1;
-- или
DESC table1;

-- describe в Postgres
\d table1

-- SQL-запрос для выдачи списка пользователей с правами над таблицами db1
SELECT * FROM information_schema.table_privileges WHERE table_catalog='db1';

Операторы управления транзакциями

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

BEGIN TRANSACTION

BEGIN TRANSACTION Этот оператор начинает новую транзакцию. Все последующие операции SQL, выполняемые после BEGIN TRANSACTION, считаются частью этой транзакции.

BEGIN TRANSACTION
-- postgres
BEGIN TRANSACTION;

-- mysql
START TRANSACTION;

SAVEPOINT

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

SAVEPOINT
SAVEPOINT savepoint1;

--- ROLLBACK TO откатывает транзакцию до указанной точки сохранения, отменяя все изменения, внесенные после этой точки.
ROLLBACK TO savepoint1;

--- RELEASE SAVEPOINT освобождает точку сохранения. Это означает, что изменения, внесенные после этой точки, 
--- становятся постоянными, и откат к этой точке больше невозможен.
RELEASE SAVEPOINT savepoint1;

COMMIT

COMMIT подтверждает успешное завершение транзакции. Все изменения, внесенные в базу данных в рамках этой транзакции, фиксируются, и они становятся постоянными.

COMMIT
COMMIT;

Первичные и внешние ключи

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

Ключи - это некие сущности, созданные для установления определенных ограничений, которые поддерживают целостность и доступность данных в таблицах баз данных. Ключи в sql созданы для того, чтобы указать дополнительную функциональность столбца. Будь то уникальность или то, что столбец ссылается на другую таблицу (внешний ключ).

Первичный ключ (Primary Key)

  • Уникальность: Первичный ключ должен обеспечивать уникальность значений в столбце или группе столбцов в таблице. Ни одно значение первичного ключа не может повторяться в пределах таблицы.
  • Не нулевое значение: Значения первичного ключа не могут быть NULL (пустыми).
  • Идентификация записи: Первичный ключ идентифицирует уникальную запись в таблице. Это позволяет точно указать на конкретную строку данны
PRIMARY KEY
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(50),
    department_id INT
);

Внешний ключ (Foreign Key)

  • Связь с другой таблицей: Внешний ключ устанавливает связь между столбцом (или группой столбцов) в текущей таблице и первичным ключом другой таблицы. Это создает ссылочную целостность данных.
  • Ограничение ссылочной целостности: Внешний ключ может содержать только значения, которые ссылаются на существующие значения в столбце первичного ключа связанной таблицы.
FOREIGN KEY
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- В приведенном примере customer_id в таблице orders является внешним ключом, который ссылается на столбец customer_id в таблице customers.