Ответ
SQL (Structured Query Language) используется для управления реляционными базами данных. Основные операции описываются командами CRUD: Create, Read, Update, Delete.
1. Чтение данных (SELECT):
-- Выбрать все столбцы из таблицы users с ограничением в 10 записей
SELECT * FROM users LIMIT 10;
-- Выбрать конкретные столбцы с фильтрацией и сортировкой
SELECT id, username, email, created_at
FROM users
WHERE is_active = TRUE AND created_at >= '2024-01-01'
ORDER BY created_at DESC;
-- Использование агрегатных функций и группировки
SELECT
department_id,
COUNT(*) as employee_count,
AVG(salary) as avg_salary
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5;
-- JOIN для связи таблиц
SELECT
o.order_id,
o.order_date,
c.customer_name,
p.product_name,
oi.quantity
FROM orders o
INNER JOIN customers c ON o.customer_id = c.customer_id
INNER JOIN order_items oi ON o.order_id = oi.order_id
INNER JOIN products p ON oi.product_id = p.product_id;
2. Вставка данных (INSERT):
-- Вставка одной строки
INSERT INTO products (name, price, category_id)
VALUES ('Wireless Mouse', 29.99, 5);
-- Вставка нескольких строк
INSERT INTO products (name, price, category_id)
VALUES
('Mechanical Keyboard', 99.99, 5),
('USB-C Cable', 19.99, 6);
-- Вставка данных из результата другого запроса
INSERT INTO archived_orders (order_id, total, customer_id)
SELECT order_id, total, customer_id
FROM orders
WHERE order_date < '2023-01-01';
3. Обновление данных (UPDATE):
-- Обновление всех строк, удовлетворяющих условию
UPDATE employees
SET salary = salary * 1.05,
last_raise_date = CURRENT_DATE
WHERE performance_rating >= 4.5;
-- Обновление с использованием подзапроса
UPDATE inventory i
SET stock_count = (
SELECT SUM(quantity)
FROM shipments s
WHERE s.product_id = i.product_id
)
WHERE i.product_id IN (SELECT product_id FROM shipments);
4. Удаление данных (DELETE):
-- Удаление строк по условию (ВСЕГДА используйте WHERE!)
DELETE FROM user_sessions
WHERE last_activity < NOW() - INTERVAL '30 days';
-- Полная очистка таблицы (осторожно!)
TRUNCATE TABLE temp_log_data;
5. Создание и изменение структуры (DDL):
-- Создание таблицы
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);
-- Добавление индекса для ускорения поиска
CREATE INDEX idx_users_email ON users(email);
-- Добавление столбца в существующую таблицу
ALTER TABLE users ADD COLUMN phone_number VARCHAR(20);