0Pricing
SQL Academy · 강의

배열 내부 검색

ANY, 포함과 겹침 연산자를 알아봅니다.

배열 내부 검색은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

배열에는 여러 값이 저장됩니다

PostgreSQL에서 배열 열은 하나의 셀에 여러 값을 저장합니다. 배열 내부를 검색하기 전에 배열이 어떤 형태인지 살펴보면 이해하는 데 도움이 됩니다.

아래 질의는 각 제품이 여러 카테고리에 속할 수 있도록 텍스트 배열로 저장하는 테이블을 생성합니다.

CREATE TABLE products (
  id      SERIAL PRIMARY KEY,
  name    TEXT,
  tags    TEXT[]
);

INSERT INTO products (name, tags) VALUES
  ('Laptop',     ARRAY['electronics', 'computers', 'sale']),
  ('T-Shirt',    ARRAY['clothing', 'summer', 'sale']),
  ('Coffee Mug', ARRAY['kitchen', 'gifts']),
  ('Headphones', ARRAY['electronics', 'audio']),
  ('Notebook',   ARRAY['stationery', 'office']);

ANY로 포함 여부 확인하기

ANY 연산자를 사용하면 값이 배열의 어느 위치에든 나타나는지 확인할 수 있습니다. 구문은 다음과 같습니다: value = ANY(array_column).

이 질의는 전자 제품 태그가 지정된 모든 제품을 찾습니다.

SELECT name, tags
FROM products
WHERE 'electronics' = ANY(tags);

ANY는 텍스트에만 사용되지 않습니다

ANY는 같음 비교를 지원하는 모든 데이터 유형과 함께 사용할 수 있습니다. 다음은 점수를 정수 배열로 저장한 테이블입니다. 이 질의는 하나 이상의 테스트에서 만점인 100점을 받은 학생을 가져옵니다.

CREATE TABLE students (
  student TEXT,
  scores  INT[]
);

INSERT INTO students VALUES
  ('Alice', ARRAY[88, 95, 100]),
  ('Bob',   ARRAY[70, 80, 90]),
  ('Carol', ARRAY[100, 100, 99]);

SELECT student, scores
FROM students
WHERE 100 = ANY(scores);

NOT + ANY로 행 제외하기

배열에 값이 나타나지 않는 행을 찾으려면 NOT을 ANY와 함께 사용하십시오. value <> ANY(arr)는 다른 의미를 갖는다는 점에 유의하십시오. 이 표현식은 어떤 요소든 값과 다르면 참을 반환하므로 거의 항상 참이 됩니다.

신뢰할 수 있는 제외 확인에는 NOT (value = ANY(arr))을 사용하십시오.

-- Find products that are NOT tagged as 'sale'
SELECT name, tags
FROM products
WHERE NOT ('sale' = ANY(tags));

@> 포함 연산자

@> 연산자는 한 배열이 다른 배열의 모든 요소를 포함하는지 확인합니다. 다음과 같이 생각하면 됩니다. 왼쪽 배열에 오른쪽에 나열된 모든 요소가 들어 있나요?

이 질의는 전자 제품 태그와 할인 태그를 모두 가진 제품을 찾습니다.

SELECT name, tags
FROM products
WHERE tags @> ARRAY['electronics', 'sale'];

<@ 포함 관계 연산자

<@ 연산자는 @>의 반대입니다. 왼쪽 배열 전체가 오른쪽 배열 안에 포함되는지 확인합니다.

이 질의는 전체 태그 목록이 전자 제품, 컴퓨터, 할인 집합의 부분 집합인 제품을 찾습니다.

SELECT name, tags
FROM products
WHERE tags <@ ARRAY['electronics', 'computers', 'sale'];

&& 겹침 연산자

&& 연산자는 두 배열에 하나 이상의 공통 요소가 있을 때 참을 반환합니다. 두 목록에 공통된 항목이 있는지 묻는 것과 같은 배열 연산입니다.

아래 질의는 주어진 쇼핑 목록과 하나 이상의 태그가 겹치는 제품을 찾습니다.

SELECT name, tags
FROM products
WHERE tags && ARRAY['audio', 'summer', 'gifts'];

겹침과 포함의 차이점

@>와 &&를 혼동하기 쉽습니다. 다음과 같이 비교하면 명확합니다.

  • tags @> ARRAY['a','b'] — 해당 행에는 'a'와 'b'가 모두 있어야 합니다.
  • tags && ARRAY['a','b'] — 해당 행에는 'a' 또는 'b' 중 하나 이상이 있으면 됩니다.
-- Contains: must have BOTH 'electronics' AND 'sale'
SELECT name FROM products WHERE tags @> ARRAY['electronics', 'sale'];

-- Overlap: must have AT LEAST ONE of 'electronics' or 'sale'
SELECT name FROM products WHERE tags && ARRAY['electronics', 'sale'];

array_length로 크기에 따라 필터링하기

배열에 특정 개수의 요소가 있는 행을 찾고 싶을 때가 있습니다. array_length(arr, 1)은 첫 번째 차원의 요소 개수를 반환합니다.

이 질의는 태그가 정확히 세 개인 제품을 찾습니다.

SELECT name, tags
FROM products
WHERE array_length(tags, 1) = 3;

배열 검색을 다른 조건과 결합하기

배열 연산자는 일반 SQL 조건과 함께 사용할 수 있습니다. 이를 AND, OR 및 다른 WHERE 절 조건자와 결합하면 정확한 필터를 만들 수 있습니다.

-- Products tagged 'sale' AND whose name starts with a letter before 'N'
SELECT name, tags
FROM products
WHERE 'sale' = ANY(tags)
  AND name < 'N'
ORDER BY name;

속도를 위한 배열 인덱싱

대규모 테이블에서는 인덱스가 없으면 배열 검색이 느릴 수 있습니다. PostgreSQL의 GIN(일반화 역색인) 인덱스는 배열 열에 맞게 설계되었으며 @>, <@ 및 && 연산자를 효율적으로 지원합니다.

ANY는 GIN 인덱스를 직접 사용하지 않지만, 겹침 연산자와 포함 연산자는 GIN 인덱스를 사용합니다.

-- Create a GIN index on the tags array column
CREATE INDEX idx_products_tags ON products USING GIN (tags);

-- This query can now use the index
SELECT name FROM products WHERE tags @> ARRAY['electronics'];

빠른 확인: 배열 연산자

PostgreSQL 배열 검색 연산자에 대한 이해도를 확인해 보십시오.

수업 복습

이 수업에서는 PostgreSQL 배열 내부를 검색하는 세 가지 핵심 방법을 배웠습니다.

  • = ANY(arr) — 단일 값이 배열의 어느 위치에든 존재하는지 확인합니다.
  • @>(포함) — 배열에 지정된 모든 요소가 들어 있는지 확인합니다.
  • &&(겹침) — 배열이 다른 배열과 하나 이상의 요소를 공유하는지 확인합니다.

또한 반대 방향의 포함 관계를 확인하는 <@, 크기에 따라 필터링하는 array_length, 대규모 데이터 집합에서 배열 검색을 빠르게 만드는 GIN 인덱스도 살펴보았습니다. 이러한 연산자를 표준 WHERE 조건과 결합하면 여러 값을 가진 데이터를 정확하고 표현력 있게 제어할 수 있습니다.

자주 묻는 질문

“배열 내부 검색” 강의는 무료인가요?

네 — “배열 내부 검색” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“배열 내부 검색”에서 뭘 배우나요?

ANY, 포함과 겹침 연산자를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“배열 내부 검색” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 배열 열 기초
  2. 배열 내부 검색
  3. UNNEST와 집계
  4. 배열과 정규화된 테이블 비교
← SQL Academy(으)로 돌아가기