Spec-Zone.ru › Polars

Операции над множествами

Функция

Описание

EXCEPT

Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в первом наборе результатов, но отсутствующие во втором.

EXCEPT BY NAME

Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в первом наборе результатов, но отсутствующие во втором; столбцы сопоставляются по именам, а не по порядковым позициям.

INTERSECT

Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в обоих наборах результатов.

INTERSECT BY NAME

Объединяет наборы результатов двух инструкций SELECT, возвращая только строки, присутствующие в обоих наборах результатов; столбцы сопоставляются по именам, а не по порядковым позициям.

UNION

Объединяет уникальные наборы результатов двух или более инструкций SELECT. В итоговом наборе результатов не будет дублирующихся строк.

UNION ALL

Объединяет полные наборы результатов двух или более инструкций SELECT. Итоговый набор результатов будет содержать все строки каждого запроса.

UNION [ALL] BY NAME

Объединяет наборы результатов двух или более инструкций SELECT, сопоставляя столбцы по именам, а не по порядковым позициям; если ALL опущен, в итоговом результате не будет дублирующихся строк. Эта операция также объединяет столбцы из обоих наборов данных.

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API