MariaDB оператор INTERSECT

В этом учебном пособии вы узнаете, как использовать оператор INTERSECT с синтаксисом и примерами.

Описание

Хотя в MariaDB нет оператора INTERSECT, вы можете легко смоделировать этот тип запроса, используя условие IN или условие EXISTS. В зависимости от сложности запроса INTERSECT.
Сначала давайте объясним, что такое запрос INTERSECT. INTERSECT запрос возвращает пересечение 2 или более наборов данных. Если запись существует в обоих наборах данных, она будет включена в результаты INTERSECT. Однако, если запись существует в одном наборе данных, а не в другом, она будет опущена в результатах INTERSECT.

INTERSECT запрос

Объяснение: Запрос INTERSECT вернет записи в синей заштрихованной области. Это записи, которые существуют как в SELECT 1, так и в SELECT 2.

Синтаксис

Синтаксис оператора INTERSECT в MariaDB:

SELECT expression1, expression2, .. expression_n
FROM tables
[WHERE conditions]
INTERSECT
SELECT expression1, expression2, .. expression_n
FROM tables
[WHERE conditions];

Параметры или аргументы

expression1, expression2, .. expression_n
Столбцы или вычисления, которые вы хотите получить.
tables
Таблицы, из которых вы хотите получить записи. В предложении FROM должна быть указана хотя бы одна таблица.
WHERE conditions
Необязательный. Условия, которые должны быть выполнены для записей, которые будут выбраны.

Примечание

  • В обоих операторах SELECT должно быть одинаковое количество выражений и одинаковые типы данных.

Пример с одним выражением

Сначала давайте рассмотрим, как имитировать запрос INTERSECT в MariaDB, который имеет одно поле с одинаковым типом данных.
Если база данных поддерживает оператор INTERSECT (чего нет у MariaDB), то таким образом вы бы использовали оператор INTERSECT для возврата общих значений поля product_id из таблиц products и inventory.

Поскольку вы не можете использовать оператор INTERSECT в MariaDB, вы будете использовать оператор IN для имитации запроса INTERSECT следующим образом:

В этом простом примере вы можете использовать оператор IN для возврата всех значений product_id, которые существуют как в таблицах products, так и в inventory
Теперь давайте усложним наш пример, добавив условия WHERE к запросу INTERSECT.
Например, вот как INTERSECT будет выглядеть с условиями WHERE:

Вот как вы бы смоделировали запрос INTERSECT, используя оператор IN, и включили условия WHERE:

В этом примере были добавлены условия в WHERE, которые фильтруют как таблицу products, так и результаты из таблицы inventory.

Пример с несколькими выражениями

Далее давайте посмотрим, как имитировать запрос INTERSECT в MariaDB, который возвращает более одного столбца.
Во-первых, так бы вы использовали оператор INTERSECT для возврата нескольких выражений.

Опять же, поскольку вы не можете использовать оператор INTERSECT в MariaDB, вы можете использовать предложение EXISTS в более сложных ситуациях для имитации запроса INTERSECT следующим образом:

В этом более сложном примере вы можете использовать оператор EXISTS для возврата нескольких выражений, которые существуют в обеих таблицах contacts, где first_name не равно 'Elena' а также таблица customers, где customer_id больше или равен 50.
Поскольку вы применяете INTERSECT, вам нужно соединить поля пересечения следующим образом:

Это соединение выполняется для того, чтобы поля customer_id, last_name и first_name из таблицы customers пересекались с полями contact_id, last_name и first_name из таблицы contacts.