Условие WHERE

Оператор WHERE используется в выражениях запросов вставки, обновления и удаления SELECT, UPDATE и DELETE. С его помощью вы можете задать условие выбора определенных записей для их последующего отбора / обновления / удаления. 

Вы задаете условие с помощью следующих операторов сравнения: 

Операция сравнения

SQL оператор

QueryDSL оператор

Равно

=

eq()

Не равно

NOT

ne()

Больше, чем

>

gt()

Больше или равно

>=

goe()

Меньше, чем

<

lt()

Меньше или равно

<=

loe()

Использование оператора WHERE в запросе выборки SELECT 

В следующем примере мы осуществляем выборку из таблицы factories тех предприятий, прибыль которых составляет более 100000 у.е.:

SQL

SELECT name, country, profit FROM factories f WHERE f.profit > 100000;

QueryDSL

selectFrom(factories)
    .where(factories.profit.goe(100000))
    .list(factories.number, factories.country, factories.profit);

Задание сложных условий

Вы можете задавать сложные условия, комбинируя несколько условий с помощью операторов AND и OR. 

В следующем примере мы добавили еще одно условие. Мы осуществляем выборку прибыльных предприятий, расположенных во Франции:

SQL

SELECT name, country, profit FROM factories f WHERE f.profit > 100000 AND country = 'France';

QueryDSL

selectFrom(factories)
    .where(factories.profit.goe(100000).and(factories.country.eq("France")))
    .list(factories.number, factories.country, factories.profit);

Вы можете формировать сложные условия путем комбинирования операторов AND и OR. Чтобы комбинировать несколько операторов, используйте скобки. В следующем примере отражено применение обоих операторов AND и OR. Здесь мы осуществляем выборку всех прибыльных предприятий в Нидерландах, Бельгии и Люксембурге. 

Необходимо выбрать данные из всех колонок таблицы. Для этого мы применяем SELECT * в SQL, и list() в QueryDSL.

SQL

SELECT * FROM factories f WHERE f.profit > 100000 AND (country = 'Netherlands' OR country = 'Belgium' OR country = 'Luxembourg');

QueryDSL

selectFrom(factories)
    .where(
factories.profit.goe(100000).and(factories.country.eq("Netherlands").or(factories.country.eq("Belgium")).or(factories.country.eq("Luxembourg")))
   .list();

Аналогично вы можете использовать оператор WHERE и в запросах UPDATE и DELETE.