РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
207 of 711 menu

Функция intersect_all

Функция intersect_all возвращает все строки, которые присутствуют в обоих запросах, сохраняя дубликаты. В отличие от intersect, она не удаляет повторяющиеся строки из результата. Первым параметром функция принимает второй запрос, с которым выполняется пересечение. Обычно применяется к объектам Select.

Синтаксис

select(...).intersect_all(select(...))

Пример

Давайте создадим два простых запроса и объединим их через intersect_all:

from sqlalchemy import select, literal q1 = select(literal(1).label('num')) q2 = select(literal(1).label('num')) res = q1.intersect_all(q2) print(res)

Результат выполнения кода:

"SELECT 1 AS num INTERSECT ALL SELECT 1 AS num"

Пример

Давайте выполним запрос с intersect_all на таблице articles и выведем полученные строки:

from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'status': 'published'}, {'id': 2, 'title': 'article 2', 'status': 'draft'}, {'id': 3, 'title': 'article 3', 'status': 'published'}, ]) q1 = select(articles.c.status) q2 = select(articles.c.status) res = q1.intersect_all(q2) with engine.connect() as conn: for row in conn.execute(res): print(row)

Результат выполнения кода:

('published',) ('draft',) ('published',)

Пример

Давайте сравним поведение intersect и intersect_all на одинаковых данных:

from sqlalchemy import create_engine, select, MetaData, Table, Column, Integer, String engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('status', String), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article 1', 'status': 'published'}, {'id': 2, 'title': 'article 2', 'status': 'published'}, ]) q1 = select(articles.c.status) q2 = select(articles.c.status) res_plain = q1.intersect(q2) res_all = q1.intersect_all(q2) with engine.connect() as conn: print('intersect:', list(conn.execute(res_plain))) print('intersect_all:', list(conn.execute(res_all)))

Результат выполнения кода:

"intersect: [('published',)]" "intersect_all: [('published',), ('published',)]"

Смотрите также

  • функцию intersect,
    которая возвращает уникальные строки из обоих запросов
  • функцию union_all,
    которая объединяет результаты с сохранением дубликатов
  • функцию union,
    которая объединяет результаты без дубликатов
  • функцию select,
    которая создает запрос на выборку данных
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить