홈으로 돌아가기

JSON 문자열에서 SQL 조건을 위한 표기법

JSON 구성에서 SQL 조건을 설명하기 위한 문자열 표기법이 제안됩니다. 비교, 집합, MIN/MAX/BETWEEN을 사용한 구간 지원. regex를 통한 검증, 변환 예제 및 유사체 분석.

백엔드를 위한 JSON에서 온 문자열 SQL 표기법
Advertisement 728x90

JSON에서 SQL 조건 생성을 위한 컴팩트 문자열 표기법

JSON 파일에서 SQL 쿼리를 만들 때, 길고 복잡한 조건문이 자주 등장합니다. 기존 방식은 "vendor_id": [17,-23] 같은 배열을 사용해 vendor_id = 17 OR NOT vendor_id = 23으로 변환했습니다. 간결하지만 범위(range), MIN/MAX 집계, 그리고 모호한 구문을 지원하지 못하는 한계가 있었습니다.

새로운 표기법은 정규식으로 검증되는 문자열 형식을 통해 이를 해결합니다. =, <, >, ! 연산자를 사용해 모든 데이터 타입에 대한 비교, 집합, 범위, 부정을 지원합니다. 마이너스 기호(-)는 데이터 타입과 무관하게 논리 부정을 나타냅니다.

핵심 표기 요소

이 표기법은 X=operand 같은 문자열을 표준 SQL로 변환합니다. MIN, MAX, BETWEEN 같은 이진 함수도 지원합니다.

Google AdInline article slot
X=y        -> X = y
X<y        -> X < y
X>y        -> X > y

X!=y       -> X < y OR X > y
X<=y       -> X < y OR X = y
X>=y       -> X > y OR X = y

두 요소 집합의 경우:

X=[y1, y2]     -> (X = y1 OR X = y2)
X>[y1, y2]     -> (X > MAX(y1, y2))
X<[y1, y2]     -> (X < MIN(y1, y2))

X!=[y1, y2]    -> (X != y1 AND X != y2)
X<=[y1, y2]    -> (X <= MIN(y1, y2))
X>=[y1, y2]    -> (X >= MAX(y1, y2))

X>>[y1, y2]    -> BETWEEN(y1, y2)
X><[y1, y2]    -> (NOT BETWEEN(y1, y2))

임의 크기의 집합도 비슷한 로직을 따릅니다: 동등 비교는 OR, 부정은 AND, 경계는 MIN/MAX를 사용합니다.

배열 대비 장점

JSON 배열에서 문자열로 전환하면 파싱과 검증이 간단해집니다:

Google AdInline article slot
  • 검증: 요소별 스키마 검사 대신 정규식 사용.
  • 완전성: 범위와 집계 내장 지원—확장 불필요.
  • 가독성: 수학적 직관 활용—X>[y1,y2]는 X가 모든 요소보다 큼을 의미.

예시로 간결화:

전통 SQL: WHERE (age >= 18 AND age <= 65) OR age > 70

표기법: age>=[18,65] OR age>70

Google AdInline article slot

AI 모델 평가

DeepSeek 분석에서 강점 강조:

  • 컴팩트함: 의미 손실 없이 높은 정보 밀도.
  • 직관성: X!=[y1,y2]는 어느 것とも 같지 않음을 명확히.
  • 확장성: >> (포함 범위), >< (제외 범위)로 범위 쉽게 추가.

잠재 문제:

  • 초보자 모호성: X>[5,10]은 MAX 이해 필요.
  • 빈 집합: X=[] 동작 정의 필요.
  • 충돌: >>가 비트 시프트와 겹칠 수 있음.

개선 제안:

  • 범위 대안: X..[y1,y2], X:[y1,y2].
  • 엄격 범위 괄호: X>>(10,20).

유사 사례와 독창성

가장 가까운 유사 사례:

| 언어/DSL | 예시 | 유사성 |

|----------|--------------------------|-----------------------------|

| Quist | 300 <= number < 500 | 이중 비교, 집합 |

| SQL++ | lang IN ["en", "de"]| 배열 IN |

| PRQL | derive full_name = ...| 함수적 접근 |

표기법 독창성:

  • BETWEEN/NOT BETWEEN을 위한 화살표 >>, ><.
  • 집합 경계를 위한 >=[y1,y2] 조합.
  • 완전 표현력의 미니멀리즘.

비교:

  • 표기법: age>=[18,65] OR status=[active,pending]
  • Quist: (18 <= age <= 65 OR status:in active, pending)
  • SQL: (age >= 18 AND age <= 65) OR status IN ('active', 'pending')

주요 요점

  • SQL 전처리기나 백엔드 JSON DSL에 적합.
  • 정규식 기반 파싱: 빠르고 복잡한 파서 불필요.
  • 모든 비교 가능 데이터 타입 지원.
  • 논리 부정용 마이너스로 통합 간소화.
  • 토론용 첫 버전—최적화는 아직.

— Editorial Team

Advertisement 728x90

다음 읽기