배열 내부 검색
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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 배열 열 기초
- 배열 내부 검색
- UNNEST와 집계
- 배열과 정규화된 테이블 비교