Какие основные типы SQL-запросов для работы с базой данных вы знаете?

Ответ

Основные типы SQL-запросов делятся на группы по языкам DDL (определение данных), DML (манипуляция данными), DQL (запрос данных) и DCL (управление доступом).

DML (Data Manipulation Language) — Манипуляция данными

SELECT — извлечение данных.

SELECT id, name, email FROM users WHERE active = TRUE ORDER BY created_at DESC;

INSERT — добавление новых записей.

INSERT INTO products (name, price, category_id) VALUES ('Keyboard', 99.99, 2);

UPDATE — изменение существующих записей.

UPDATE orders SET status = 'shipped', shipped_at = NOW() WHERE id = 1001;

DELETE — удаление записей.

DELETE FROM session_logs WHERE created_at < NOW() - INTERVAL '30 days';

DDL (Data Definition Language) — Определение структуры

  • CREATE TABLE — создание таблицы.
  • ALTER TABLE — изменение структуры таблицы (добавление столбца, индекса).
  • DROP TABLE — удаление таблицы.

Ключевые операторы для работы с данными

JOIN — объединение данных из нескольких таблиц.

SELECT u.name, o.order_date, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

GROUP BY с агрегатными функциями (COUNT, SUM, AVG, MAX, MIN) — группировка и агрегация.

SELECT department_id, COUNT(*) as emp_count, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5;

Транзакции (BEGIN, COMMIT, ROLLBACK) — обеспечение атомарности группы операций.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- или ROLLBACK в случае ошибки

Ответ 18+ 🔞

Да ты посмотри, какие категории выдумали, блядь! SQL-запросы, сука, поделили как в аптеке — по полочкам: DDL, DML, DQL, DCL. Ёпта, прямо как в армии: свой — чужой, стрелять — не стрелять.

Ну ладно, начнём с самого сочного — DML (Data Manipulation Language). Это типа наш рабочий инструмент, чтобы данные тырить, пихать, менять и выкидывать нахуй. Без этого нихуя не работает.

SELECT — это наш главный шпион, вытаскивает всё, что спрятано. Смотри, как просто:

SELECT id, name, email FROM users WHERE active = TRUE ORDER BY created_at DESC;

Вот сидит эта таблица users, а мы ей: «Давай-ка, сука, всех активных, да пофамильно, да с конца списка!». И она, такая покорная, вываливает.

INSERT — это когда надо запихнуть новую запись, как последнего пьяного в переполненную маршрутку.

INSERT INTO products (name, price, category_id) VALUES ('Keyboard', 99.99, 2);

Вот ты взял клавиатуру, ценник налепил — и хуяк, она уже в базе, как родная. Магия, блядь.

UPDATE — а это когда надо подрихтовать, поправить, потому что накосячили. Типа, «ой, заказ ещё не отправили, а надо бы».

UPDATE orders SET status = 'shipped', shipped_at = NOW() WHERE id = 1001;

Говорим базе: «Слушай сюда, сука, заказ номер 1001 — теперь «отправлен», и время проставь текущее». И база покорно делает, волнение ебать.

DELETE — это уже серьёзно, это как вызвать чистильщика. Удаляем всё, что старое и не нужно.

DELETE FROM session_logs WHERE created_at < NOW() - INTERVAL '30 days';

«Всё, что старше месяца — нахуй в корзину». Жёстко, но справедливо.

А это DDL (Data Definition Language) — это уже архитекторы, блядь. Они не с данными возятся, они сараи строят.

  • CREATE TABLE — фундамент залили, стены поставили.
  • ALTER TABLE — «ой, забыли розетку в углу, давайте пристроим».
  • DROP TABLE — «всё, пиздец, сносим эту хибарку к ебеням». Опасная команда, хуй с горы.

Дальше операторы, без которых нихуя не соберёшь. JOIN — это когда данные из двух таблиц надо склеить, как два куска разбитой тарелки.

SELECT u.name, o.order_date, o.total
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

Смотри, users и orders — как муж и жена. INNER JOIN говорит: «Дайте мне только тех, кто в паре, одиночки нахуй не нужны». И мы получаем, кто и что заказал. Красота.

GROUP BY — это когда надо всех по стойкам «смирно» построить и посчитать.

SELECT department_id, COUNT(*) as emp_count, AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5;

Разбиваем всех работяг по отделам, считаем, сколько их, и среднюю зарплату выводим. А HAVING — это такой охранник: «Отделы, где меньше пяти человек — даже не показывай, мелочь пузатая».

И на сладкое — Транзакции. Это святое, блядь. Либо всё, либо нихуя.

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- или ROLLBACK в случае ошибки

Представь: ты переводишь сто рублей с одного счёта на другой. BEGIN — начали операцию. Сперва списали, потом зачислили. Если всё прошло гладко — COMMIT, деньги перелетели. Если посередине свет вырубили — ROLLBACK, и всё откатывается назад, как будто ничего и не было. Атомарность, сука, в рот меня чих-пых! Без этого был бы пиздец, все друг друга обворовали бы.