도서/모두를 위한 postgreSQL

Day8. 쿼리에 사용되는 연산자와 함수2

joje* 2023. 6. 27. 00:13

1. JSONB 연산자

: 불리언 타입으로 '?' 연산자를 사용해 가장 바깥 단의 JSONB에 해당하는 문자열의 '키 값'이 존재하는지 확인할 수 있다.

  • SELECT '{"username":"sumin","content":"hello world"}'::jsonb ? 'username' AS result;- true

: 가장 바깥단의 JSONB에 배열 속 원소가 '키 값'으로 1개 이상 존재하는지 물어볼 때는 '?!' 연산자를 사용한다.

  • SELECT '{"hello":0,"psql":1, "world":2}'::jsonb ?| array ['a','psql'] AS result;- true 

: 가장 바깥단의 JSONB 배열 속의 원소가 "키 값"으로 모두 존재하는지 물어볼 때는 '?&'연산자를 사용한다.

  • SELECT '{"hello":0,"psql":1,"world":2}'::jsonb ?& array['psql','world'] AS result; -true

: '||' 연산자를 사용하여 JSONB와 JSONB를 병합할 수 있다.

  • SELECT '{"username":"minho"}'::jsonb || '{"contents":"hello"}':: jsonb AS result;-{"contents","hello","username","minho"}

:JSONB 속의 데이터를 삭제할 때는 '-' 연산자를 사용한다

  • SELECT '{"a","0","b":"1","c","2"} :: jsonb - 'b' AS result;-{"a","0","c","2"}

:복수의 원소를 삭제하고 싶은 경우, '-' 연산자의 우항에 text[] 원소로 삭제하고 싶은 복수의 원소를 넣어주면 된다.

  • SELECT '{"a":"0","b":"1","c":"2"} :: jsonb - ARRAY['b','c'] AS result; - {"a":"0"}

:JSONB 배열의 원소를 삭제하는 방법 역시 '-' 연산자를 사용한다.다만 우항에는 배열의 원소가 아닌 인덱스 번호가 들어간다.

  • SELECT '["a","b","c"] :: jsonb - -1 AS result;-["a","b"]

: 배열과 마찬가지로 포함관계를 표현할 때는'@>','<@' 연산자를 사용한다. 

 

2. JSON 생성함수

:JSON 오브젝트 생성함수는 다음과 같은 형식으로 만들어준다.

  • json_build_object("<키1>","<밸류1>","<키2>","<밸류2>",...)
  • SELECT json_build_object('a',1,'b',2) AS result;-{"a":1,"b":2}

:JSONB 오브젝트 생성함수는 다음과 같은 형식으로 만들어준다.

  • jsonb_build_object("<키1>","<밸류1>","<키2>","<밸류2>",...)

: JSON 배열을 생성하는 방법은 아래와 같다.

  • json_build_array("<원소1>","<원소2>","<원소3>","<원소4>",...)
  • SELECT json_build_array('a','1','b','2','c','3') AS result;-["a","1","b","2","c","3"]

3. JSON 처리함수

: json 배열의 원수의 갯수를 세는 경우 아래와 같은 함수를 사용한다.

  • SELECT json_array_length('["a",1,"b",2,"c"]'::json) AS length; -5

: 키 값을 텍스트 데이터 타입으로, 밸류 값을 JSON 데이터 타입의 컬럼으로 정리하고 싶은 경우 json_each() 혹은 jsonb_each() 함수를 이용한다.

  • SELECT * FROM json_each('{"sujin":"i like postgresql","Siyoun":"i like postgresql too"}');

: 만일 밸류 값도 출력받길 원한다면 json_each_text() 함수를 이용한다

 

: JSON 배열 속 원소를 컬럼으로 불러오는 경우 'json_array_elements()' 함수를 이용한다.

  • SELECT * FROM json_array_elements('[1,"a",{"b":"c"},["d",2,3]]');- 1 "a" {"b":"c"} ["d",2,3]

: json_array_elements()로 불러온 원소들의 데이터 타입을 텍스트로 변경해서 불러오고 싶은 경우,

json_array_elements_text() 함수를 이용한다