ClickHouse/docs/ru/sql-reference/statements/select/intersect.md
2024-10-07 14:42:20 -04:00

2.1 KiB
Raw Blame History

slug sidebar_label
/ru/sql-reference/statements/select/intersect INTERSECT

Секция INTERSECT

INTERSECT возвращает строки, которые есть только в результатах первого и второго запросов. В запросах должны совпадать количество столбцов, их порядок и тип. Результат INTERSECT может содержать повторяющиеся строки.

Если используется несколько INTERSECT и скобки не указаны, пересечение выполняется слева направо. У INTERSECT более высокий приоритет выполнения, чем у UNION и EXCEPT.

SELECT column1 [, column2 ]
FROM table1
[WHERE condition]

INTERSECT

SELECT column1 [, column2 ]
FROM table2
[WHERE condition]

Условие может быть любым в зависимости от ваших требований.

Примеры

Запрос:

SELECT number FROM numbers(1,10) INTERSECT SELECT number FROM numbers(3,8);

Результат:

┌─number─┐
│      3 │
│      4 │
│      5 │
│      6 │
│      7 │
│      8 │
└────────┘

Запрос:

CREATE TABLE t1(one String, two String, three String) ENGINE=Memory();
CREATE TABLE t2(four String, five String, six String) ENGINE=Memory();

INSERT INTO t1 VALUES ('q', 'm', 'b'), ('s', 'd', 'f'), ('l', 'p', 'o'), ('s', 'd', 'f'), ('s', 'd', 'f'), ('k', 't', 'd'), ('l', 'p', 'o');
INSERT INTO t2 VALUES ('q', 'm', 'b'), ('b', 'd', 'k'), ('s', 'y', 't'), ('s', 'd', 'f'), ('m', 'f', 'o'), ('k', 'k', 'd');

SELECT * FROM t1 INTERSECT SELECT * FROM t2;

Результат:

┌─one─┬─two─┬─three─┐
│ q   │ m   │ b     │
│ s   │ d   │ f     │
│ s   │ d   │ f     │
│ s   │ d   │ f     │
└─────┴─────┴───────┘

См. также