Операции над множествами
Функция | Описание |
|---|---|
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в первом наборе результатов, но отсутствующие во втором. | |
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в первом наборе результатов, но отсутствующие во втором; столбцы сопоставляются по именам, а не по порядковым позициям. | |
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в обоих наборах результатов. | |
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в обоих наборах результатов; столбцы сопоставляются по именам, а не по порядковым позициям. | |
Объединяет уникальные наборы результатов двух или более инструкций SELECT. В итоговом наборе результатов не будет дублирующихся строк. | |
Объединяет полные наборы результатов двух или более инструкций SELECT. Итоговый набор результатов будет содержать все строки каждого запроса. | |
Объединяет наборы результатов двух или более инструкций SELECT, сопоставляя столбцы по именам, а не по порядковым позициям; если |
EXCEPT
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в первом наборе результатов, но отсутствующие во втором.
Пример:
lf1 = pl.LazyFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
})
lf2 = pl.LazyFrame({
"id": [2, 3, 4],
"age": [30, 25, 45],
"name": ["Bob", "Charlie", "David"],
})
pl.sql("""
SELECT id, name FROM lf1
EXCEPT
SELECT id, name FROM lf2
""").sort(by="id").collect()
# shape: (1, 2)
# ┌─────┬───────┐
# │ id ┆ name │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪═══════╡
# │ 1 ┆ Alice │
# └─────┴───────┘
EXCEPT BY NAME
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в первом наборе результатов, но отсутствующие во втором; столбцы сопоставляются по именам, а не по порядковым позициям. Это позволяет двум запросам иметь разный порядок столбцов или разное количество столбцов (для сравнения используются только столбцы с совпадающими именами).
Пример:
lf1 = pl.LazyFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
})
lf2 = pl.LazyFrame({
"name": ["Bob", "Charlie", "David"],
"id": [2, 3, 4],
})
pl.sql("""
SELECT * FROM lf1
EXCEPT BY NAME
SELECT * FROM lf2
""").sort(by="id").collect()
# shape: (1, 2)
# ┌─────┬───────┐
# │ id ┆ name │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪═══════╡
# │ 1 ┆ Alice │
# └─────┴───────┘
INTERSECT
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в обоих наборах результатов.
Пример:
pl.sql("""
SELECT id, name FROM lf1
INTERSECT
SELECT id, name FROM lf2
""").sort(by="id").collect()
# shape: (2, 2)
# ┌─────┬─────────┐
# │ id ┆ name │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪═════════╡
# │ 2 ┆ Bob │
# │ 3 ┆ Charlie │
# └─────┴─────────┘
INTERSECT BY NAME
Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в обоих наборах результатов; столбцы сопоставляются по именам, а не по порядковым позициям. Это позволяет двум запросам иметь разный порядок столбцов или разное количество столбцов (для сравнения используются только столбцы с совпадающими именами).
Пример:
lf1 = pl.LazyFrame({
"id": [1, 2, 3],
"name": ["Alice", "Bob", "Charlie"],
})
lf2 = pl.LazyFrame({
"name": ["Bob", "Charlie", "David"],
"id": [2, 3, 4],
})
pl.sql("""
SELECT * FROM lf1
INTERSECT BY NAME
SELECT * FROM lf2
""").sort(by="id").collect()
# shape: (2, 2)
# ┌─────┬─────────┐
# │ id ┆ name │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪═════════╡
# │ 2 ┆ Bob │
# │ 3 ┆ Charlie │
# └─────┴─────────┘
UNION
Объединяет уникальные наборы результатов двух или более инструкций SELECT. В итоговом наборе результатов не будет дублирующихся строк.
Пример:
pl.sql("""
SELECT id, name FROM lf1
UNION
SELECT id, name FROM lf2
""").sort(by="id").collect()
# shape: (4, 2)
# ┌─────┬─────────┐
# │ id ┆ name │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪═════════╡
# │ 1 ┆ Alice │
# │ 2 ┆ Bob │
# │ 3 ┆ Charlie │
# │ 4 ┆ David │
# └─────┴─────────┘
UNION ALL
Объединяет полные наборы результатов двух или более инструкций SELECT. Итоговый набор результатов будет содержать все строки каждого запроса.
Пример:
pl.sql("""
SELECT id, name FROM lf1
UNION ALL
SELECT id, name FROM lf2
""").sort(by="id").collect()
# shape: (6, 2)
# ┌─────┬─────────┐
# │ id ┆ name │
# │ --- ┆ --- │
# │ i64 ┆ str │
# ╞═════╪═════════╡
# │ 1 ┆ Alice │
# │ 2 ┆ Bob │
# │ 2 ┆ Bob │
# │ 3 ┆ Charlie │
# │ 3 ┆ Charlie │
# │ 4 ┆ David │
# └─────┴─────────┘
UNION BY NAME
Объединяет наборы результатов двух или более инструкций SELECT, сопоставляя столбцы по именам, а не по порядковым позициям; если ALL опущен, в итоговом результате не будет дублирующихся строк. Эта операция также объединяет столбцы из обоих наборов данных.
Пример:
pl.sql("""
SELECT * FROM lf1
UNION BY NAME
SELECT * FROM lf2
""").sort(by="id").collect()
# shape: (6, 3)
# ┌─────┬─────────┬──────┐
# │ id ┆ name ┆ age │
# │ --- ┆ --- ┆ --- │
# │ i64 ┆ str ┆ i64 │
# ╞═════╪═════════╪══════╡
# │ 1 ┆ Alice ┆ null │
# │ 2 ┆ Bob ┆ null │
# │ 2 ┆ Bob ┆ 30 │
# │ 3 ┆ Charlie ┆ 25 │
# │ 3 ┆ Charlie ┆ null │
# │ 4 ┆ David ┆ 45 │
# └─────┴─────────┴──────┘
© 2020 Ritchie Vink
© 2022 Polars contributors
Licensed under the MIT License.
https://docs.pola.rs/api/python/stable/reference/sql/set_operations.html