WordPress DemoSite

Тестовый сайт для экспериментов и демонстраций возможностей

Джойны (JOINs) и агрегация в SQL

SQL (Structured Query Language) — это язык программирования, используемый для работы с реляционными базами данных. Он позволяет выполнять различные операции, такие как выборка данных, вставка, обновление, удаление, а также агрегация и соединение данных из нескольких таблиц. В этом ответе я расскажу о джойнах (соединениях) и агрегации в SQL.


Джойны (JOINs)

Джойны используются для объединения данных из двух или более таблиц на основе связанных столбцов. Основные типы джойнов:

  1. INNER JOIN
    Возвращает только те строки, которые имеют совпадения в обеих таблицах.
   SELECT orders.order_id, customers.customer_name
   FROM orders
   INNER JOIN customers ON orders.customer_id = customers.customer_id;
  1. LEFT JOIN (или LEFT OUTER JOIN)
    Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если совпадений нет, то в правой таблице будут значения NULL.
   SELECT employees.name, departments.department_name
   FROM employees
   LEFT JOIN departments ON employees.department_id = departments.department_id;
  1. RIGHT JOIN (или RIGHT OUTER JOIN)
    Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если совпадений нет, то в левой таблице будут значения NULL.
   SELECT employees.name, departments.department_name
   FROM employees
   RIGHT JOIN departments ON employees.department_id = departments.department_id;
  1. FULL JOIN (или FULL OUTER JOIN)
    Возвращает все строки из обеих таблиц. Если совпадений нет, то в недостающих местах будут значения NULL.
   SELECT employees.name, departments.department_name
   FROM employees
   FULL JOIN departments ON employees.department_id = departments.department_id;
  1. CROSS JOIN
    Возвращает декартово произведение двух таблиц (все возможные комбинации строк).
   SELECT employees.name, departments.department_name
   FROM employees
   CROSS JOIN departments;

Агрегация

Агрегация используется для выполнения вычислений над набором данных, таких как подсчет суммы, среднего значения, минимального или максимального значения и т.д. Основные агрегатные функции:

  1. COUNT()
    Подсчитывает количество строк.
   SELECT COUNT(*) AS total_orders
   FROM orders;
  1. SUM()
    Вычисляет сумму значений в столбце.
   SELECT SUM(price) AS total_sales
   FROM sales;
  1. AVG()
    Вычисляет среднее значение.
   SELECT AVG(price) AS average_price
   FROM products;
  1. MIN()
    Находит минимальное значение.
   SELECT MIN(price) AS min_price
   FROM products;
  1. MAX()
    Находит максимальное значение.
   SELECT MAX(price) AS max_price
   FROM products;
  1. GROUP BY
    Группирует строки по указанному столбцу для выполнения агрегации.
   SELECT department_id, AVG(salary) AS avg_salary
   FROM employees
   GROUP BY department_id;
  1. HAVING
    Фильтрует результаты агрегации (аналог WHERE, но для агрегированных данных).
   SELECT department_id, AVG(salary) AS avg_salary
   FROM employees
   GROUP BY department_id
   HAVING AVG(salary) > 50000;

Пример с джойнами и агрегацией

Предположим, у нас есть две таблицы: orders (заказы) и customers (клиенты). Мы хотим узнать общую сумму заказов для каждого клиента.

SELECT customers.customer_name, SUM(orders.amount) AS total_amount
FROM customers
INNER JOIN orders ON customers.customer_id = orders.customer_id
GROUP BY customers.customer_name
HAVING SUM(orders.amount) > 1000;

Этот запрос:

  1. Соединяет таблицы customers и orders по customer_id.
  2. Группирует результаты по имени клиента.
  3. Считает общую сумму заказов для каждого клиента.
  4. Фильтрует клиентов, у которых общая сумма заказов превышает 1000.

Полный стэк: .NET | AMQP | Android | api | Bash | Bootstrap | C++ | cms | Composer | css | Data | Elasticsearch | ESP32 | Git | GraphQL | Gulp | JavaScript | JetStream | Joomla | js | Kotlin | Laravel | LEMP | Linux | LMS | Markdown | MODX | Moodle | MySQL | NATS | Nginx | Node.js | OpenCart | Parsedown | PHP | Python | RabbitMQ | SCSS | SEO | Simpla | SOAP | SQL | startup | Swift | Symfony | Tailwind | Translation | Twig | Ubuntu | Unit | web3 | Webasyst | Webpack | WebSocket | WordPress | XML | Бизнес | блокчейн | ИИ | интернет-магазин | ЛК | Руководство | ТЗ | фреймворк | Яндекс.Трекер