Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
ORDER BY — сортировка результатов запроса
ORDER BY — это SQL-клауза, которая сортирует результаты запроса по одному или нескольким столбцам. Это фундаментальная операция при работе с базами данных и необходима для логически упорядоченной выдачи данных пользователю.
Базовый синтаксис
SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC];
- ASC (ascending) — сортировка по возрастанию (по умолчанию)
- DESC (descending) — сортировка по убыванию
Практические примеры с SQL
-- Сортировка по возрастанию (по умолчанию)
SELECT id, name, salary
FROM employees
ORDER BY salary; -- От минимальной к максимальной
-- Сортировка по убыванию
SELECT id, name, salary
FROM employees
ORDER BY salary DESC; -- От максимальной к минимальной
-- Сортировка по нескольким столбцам
SELECT id, name, salary, department
FROM employees
ORDER BY department ASC, salary DESC;
-- Сначала по отделу (A→Z), потом в каждом отделе от большей зарплаты к меньшей
Примеры в Python с ORM
Если вы используете SQLAlchemy (популярный ORM в Python):
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Employee(Base):
__tablename__ = "employees"
id = Column(Integer, primary_key=True)
name = Column(String)
salary = Column(Integer)
department = Column(String)
# Сортировка по возрастанию зарплаты
Session = sessionmaker(bind=engine)
session = Session()
employees = session.query(Employee).order_by(Employee.salary).all()
# SELECT * FROM employees ORDER BY salary ASC;
# Сортировка по убыванию
employees = session.query(Employee).order_by(Employee.salary.desc()).all()
# SELECT * FROM employees ORDER BY salary DESC;
# Сортировка по нескольким столбцам
from sqlalchemy import asc, desc
employees = session.query(Employee).order_by(
asc(Employee.department),
desc(Employee.salary)
).all()
Сортировка в Python без БД
Если данные уже загружены в памяти:
employees = [
{"name": "Alice", "salary": 50000},
{"name": "Bob", "salary": 60000},
{"name": "Charlie", "salary": 45000},
]
# Сортировка по зарплате (возрастание)
sorted_asc = sorted(employees, key=lambda x: x["salary"])
# Сортировка по зарплате (убывание)
sorted_desc = sorted(employees, key=lambda x: x["salary"], reverse=True)
# По нескольким ключам (сначала по имени, потом по зарплате)
sorted_multi = sorted(employees, key=lambda x: (x["name"], x["salary"]))
Производительность ORDER BY
- На маленьких таблицах — не критично
- На больших таблицах — нужен индекс на столбец сортировки
-- Без индекса: полный скан таблицы + сортировка (медленно)
SELECT * FROM employees ORDER BY salary;
-- С индексом: использование B-tree структуры (быстро)
CREATE INDEX idx_salary ON employees(salary);
SELECT * FROM employees ORDER BY salary; -- Теперь быстро
Ключевые моменты
- ORDER BY идёт в конце запроса (после WHERE, GROUP BY)
- ASC — по умолчанию
- DESC — для обратного порядка
- Множественная сортировка — приоритет слева направо
- Индексы критичны для производительности на больших объёмах
- NULL значения обычно идут в конце (поведение зависит от БД)