Оператор PostgreSQL IN

Читать первым в Telegram

Данная статья относится к циклу статей, посвященных PostgreSQL. В предыдущей статье мы говорили об условии PostgreSQL FETCH. Теперь же мы углубимся в изучение оператора IN, используемого в условии WHERE для проверки списка значений.

Синтаксис оператора PostgreSQL IN

Как уже было сказано ранее, оператор IN используется в условии WHERE, чтобы проверить, соответствует ли заданное значение какому-либо значению в списке значений.

Синтаксис оператора IN выглядит следующим образом:

value IN (value1,value2,...)

Выражение возвращает true, если значение соответствует какому-либо значению в списке, то есть value1 и value2. Список значений может быть списком чисел или строк или результирующим набором оператора SELECT, как показано в запросе ниже:

value IN (SELECT value FROM tbl_name);

Оператор внутри скобок называется подзапросом, который представляет собой запрос, вложенный в другой запрос.

Примеры использования оператора PostgreSQL IN

Предположим, что вам необходимо узнать информацию об аренде клиентов под номерами 1 и 2, вы можете использовать оператор IN в условии WHERE, как показано ниже:

SELECT
  customer_id,
  rental_id,
  return_date
FROM
  rental
WHERE
  customer_id IN (1, 2)
ORDER BY
  return_date DESC;

Используйте знак равенства (=) или оператор OR, чтобы переписать запрос, описанный выше, следующим образом:

SELECT
  rental_id,
  customer_id,
  return_date
FROM
  rental
WHERE
  customer_id = 1
OR customer_id = 2
ORDER BY
  return_date DESC;

Запрос, использующий оператор IN, короче и читабельней нежели запрос, использующий знак равенства и оператор OR. К тому же, PostgreSQL выполняет запрос с оператором IN намного быстрее, чем тот же запрос, который использует список операторов OR.

Оператор PostgreSQL NOT IN

Вы можете объединить оператор IN с оператором NOT, чтобы выбрать строки, значения которых не совпадают со значениями из списка. Следующий запрос найдёт информацию об аренде клиентов, номера которых не 1 или 2:

SELECT
  customer_id,
  rental_id,
  return_date
FROM
  rental
WHERE
  customer_id NOT IN (1, 2);

Вы также можете изменить написание оператора NOT IN, используя знак неравенства (<>) и оператор AND, как показано ниже:

SELECT
  customer_id,
  rental_id,
  return_date
FROM
  rental
WHERE
  customer_id <> 1
AND customer_id <> 2;

Запрос возвращает тот же вывод, что и при использовании оператора NOT IN.

Оператор PostgreSQL с подзапросом

Следующий запрос возвращает список идентификаторов клиентов, дата возврата арендованного имущества которых соответствует 2005-05-27:

SELECT
  customer_id
FROM
  rental
WHERE
  CAST (return_date AS DATE) = '2005-05-27';

Вы можете использовать список идентификаторов клиентов в качестве входных данных для оператора IN, как показано ниже:

SELECT
  first_name,
  last_name
FROM
  customer
WHERE
  customer_id IN (
    SELECT
      customer_id
    FROM
      rental
    WHERE
      CAST (return_date AS DATE) = '2005-05-27'
  );

На этом мы заканчиваем ознакомление с оператором PostgreSQL IN и продолжаем двигаться дальше. Далее речь пойдёт об операторе BETWEEN.

Источник: PostgreSQL Tutorial from Scratch

Поддержать проект

Социальные сети проекта:

Подпишись, чтобы ничего не пропустить!