← Назад к вопросам

Что такое ORDER BY?

2.2 Middle🔥 61 комментариев
#Python Core#Soft Skills

Комментарии (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 значения обычно идут в конце (поведение зависит от БД)