集合操作#
函数 |
描述 |
|---|---|
合并两个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 │
# └─────┴───────┘
交集#
将两个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 │
# └─────┴─────────┘
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 │
# └─────┴─────────┘
按名称合并#
将两个或多个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 │
# └─────┴─────────┴──────┘