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

Функция all_

Функция all_ создает SQL-выражение value = ALL (subquery). Она принимает первым параметром колонку или выражение для сравнения, а вторым параметром - подзапрос или выражение select. Функция возвращает объект BinaryExpression, который можно использовать в условиях WHERE, HAVING и других частях запроса.

Оператор ALL возвращает истину, только если сравнение с каждым элементом подзапроса дает истину. Если подзапрос не возвращает строк, результат считается истинным по правилам SQL.

Синтаксис

all_(expr, subquery)

Пример

Давайте создадим таблицу статей и проверим, что числовое значение больше всех значений в подзапросе:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, all_ engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('num', Integer), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'num': 10}, {'id': 2, 'title': 'article', 'num': 20}, {'id': 3, 'title': 'article', 'num': 30}, ]) stmt = select(articles.c.title).where( all_(articles.c.num, select(articles.c.num)) ) with engine.connect() as conn: res = conn.execute(stmt).fetchall() print(res)

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

[]

Пример

Давайте сравним значение с подзапросом, который возвращает меньший набор чисел, и посмотрим на результат:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, all_ engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('num', Integer), ) metadata.create_all(engine) with engine.begin() as conn: conn.execute(articles.insert(), [ {'id': 1, 'title': 'article', 'num': 10}, {'id': 2, 'title': 'article', 'num': 20}, {'id': 3, 'title': 'article', 'num': 30}, ]) subq = select(articles.c.num).where(articles.c.num < 25) stmt = select(articles.c.title).where( all_(articles.c.num > 5, subq) ) with engine.connect() as conn: res = conn.execute(stmt).fetchall() print(res)

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

[('article',), ('article',), ('article',)]

Пример

Давайте посмотрим, какой SQL-запрос генерирует функция all_:

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, select, all_ engine = create_engine('sqlite:///:memory:') metadata = MetaData() articles = Table( 'articles', metadata, Column('id', Integer, primary_key=True), Column('title', String), Column('num', Integer), ) stmt = select(articles.c.title).where( all_(articles.c.num, select(articles.c.num).where(articles.c.num > 5)) ) print(stmt)

Итоговый SQL запрос:

SELECT articles.title FROM articles WHERE articles.num = ALL (SELECT articles.num FROM articles WHERE articles.num > 5)

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

  • функцию any_,
    которая сравнивает значение с любым элементом подзапроса
  • функцию between,
    которая проверяет вхождение значения в диапазон
  • функцию and_,
    которая объединяет условия логическим И
  • функцию or_,
    которая объединяет условия логическим ИЛИ
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить