Ответ
В работе с базами данных из Node.js (используя драйверы типа pg для PostgreSQL или mysql2) чаще всего используются следующие SQL-конструкции:
1. CRUD-операции:
-- SELECT (часто с WHERE для фильтрации)
SELECT id, name, email FROM users WHERE active = TRUE ORDER BY created_at DESC;
-- INSERT (с RETURNING для получения вставленных данных в pg)
INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id;
-- Параметры $1, $2 подставляются из Node.js для безопасности от SQL-инъекций
-- UPDATE
UPDATE orders SET status = 'shipped' WHERE id = $1;
-- DELETE
DELETE FROM sessions WHERE expires_at < NOW();
2. JOIN для связывания таблиц:
-- Получение заказов с информацией о пользователях
SELECT o.id, o.total, u.name, u.email
FROM orders o
INNER JOIN users u ON o.user_id = u.id;
3. Агрегирующие функции с GROUP BY:
-- Аналитика: сумма продаж по категориям
SELECT category, SUM(price) as total_sales
FROM products
GROUP BY category
HAVING SUM(price) > 1000; -- Фильтрация результатов агрегации
4. Работа с транзакциями (критично для целостности данных):
BEGIN;
UPDATE accounts SET balance = balance - $1 WHERE id = $2;
UPDATE accounts SET balance = balance + $1 WHERE id = $3;
COMMIT;
-- В Node.js это оборачивается в client.query('BEGIN') ... client.query('COMMIT')
В Node.js-приложениях крайне важно использовать параметризованные запросы (как в примерах выше $1, $2), чтобы избежать SQL-инъекций. Для сложных запросов часто используют ORM, такие как Sequelize или Prisma, которые генерируют подобный SQL.
Ответ 18+ 🔞
Э, слушай, а вот реально, когда в Node.js с базами данных работаешь — там же не просто так SQL-ки швырять, там целая наука, ёпта. Смотри, какие конструкции чаще всего вылазят, прямо как назойливые мухи на пикнике.
1. CRUD-операции — это вообще основа основ, без них нихуя не сделаешь:
-- SELECT (обычно с WHERE, чтобы не тащить всю таблицу, как дурак)
SELECT id, name, email FROM users WHERE active = TRUE ORDER BY created_at DESC;
-- INSERT (в PostgreSQL ещё RETURNING прикручивают, чтобы сразу узнать, что вставилось — удобно, блядь)
INSERT INTO users (name, email) VALUES ($1, $2) RETURNING id;
-- Эти $1, $2 — это чтобы SQL-инъекции не пролезли, а то будет тебе хиросима и нигерсраки
-- UPDATE
UPDATE orders SET status = 'shipped' WHERE id = $1;
-- DELETE
DELETE FROM sessions WHERE expires_at < NOW();
2. JOIN для связывания таблиц — тут уже начинается магия, а иногда и пиздец:
-- Берём заказы и прикручиваем к ним пользователей, чтобы всё в кучу
SELECT o.id, o.total, u.name, u.email
FROM orders o
INNER JOIN users u ON o.user_id = u.id;
3. Агрегирующие функции с GROUP BY — когда нужно не просто данные, а какую-то аналитику, ёбать копать:
-- Считаем, сколько денег с каждой категории содрали
SELECT category, SUM(price) as total_sales
FROM products
GROUP BY category
HAVING SUM(price) > 1000; -- А это чтобы отсеять мелочь, которая не стоит внимания
4. Работа с транзакциями — вот тут доверия ебать ноль, поэтому всё должно быть точно, как часы:
BEGIN;
UPDATE accounts SET balance = balance - $1 WHERE id = $2;
UPDATE accounts SET balance = balance + $1 WHERE id = $3;
COMMIT;
-- В Node.js это оборачивается в client.query('BEGIN') ... client.query('COMMIT'), и если что-то пошло не так — откатываем всё к хуям
И главное, чувак, в Node.js-приложениях используй параметризованные запросы (эти самые $1, $2), а то одна SQL-инъекция — и твой проект накрылся медным тазом. Для особо хитрожопых запросов, конечно, берут ORM вроде Sequelize или Prisma, но они под капотом ту же самую простыню SQL-кода генерируют, только вид сбоку.