์นดํ…Œ๊ณ ๋ฆฌ:

๋ฐ˜์ •ํ˜• ๋ฐ ์ •ํ˜• ๋ฐ์ดํ„ฐ ํ•จ์ˆ˜ (๋ฐฐ์—ด/์˜ค๋ธŒ์ ํŠธ)

OBJECT_CONSTRUCT_KEEP_NULLยถ

์ธ์ž์—์„œ ์ƒ์„ฑ๋˜์–ด NULL ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ํ‚ค-๊ฐ’ ํŽ˜์–ด๋ฅผ ์œ ์ง€ํ•˜๋Š” OBJECT ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ:

OBJECT_CONSTRUCT

๊ตฌ๋ฌธยถ

OBJECT_CONSTRUCT_KEEP_NULL( [<key>, <value> [, <key>, <value> , ...]] )

OBJECT_CONSTRUCT_KEEP_NULL(*)
Copy

์ธ์žยถ

key

ํ‚ค-๊ฐ’ ํŽ˜์–ด์˜ ํ‚ค. ๊ฐ๊ฐ์˜ ํ‚ค๋Š” VARCHAR ๊ฐ’์ž…๋‹ˆ๋‹ค.

value

ํ‚ค์™€ ์—ฐ๊ฒฐ๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋“  ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

*

๋ณ„ํ‘œ(์™€์ผ๋“œ์นด๋“œ)๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํŠน์„ฑ ์ด๋ฆ„์„ ํ‚ค๋กœ, ์—ฐ๊ด€๋œ ๊ฐ’์„ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ์—์„œ OBJECT ๊ฐ’์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํ•จ์ˆ˜์— ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์™€์ผ๋“œ์นด๋“œ๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์ด๋‚˜ ๋ณ„์นญ์œผ๋กœ ํ•œ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, mytable ์ด๋ผ๋Š” ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์—ด์„ ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค.

(mytable.*)
Copy

ํ•„ํ„ฐ๋ง์„ ์œ„ํ•ด ILIKE ๋ฐ EXCLUDE ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ILIKE๋Š” ์ง€์ •๋œ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ์—ด ์ด๋ฆ„์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ํŒจํ„ด์€ ํ•˜๋‚˜๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE๋Š” ์ง€์ •๋œ ์—ด๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์—ด ์ด๋ฆ„์„ ๊ฑธ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

์ด๋Ÿฌํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•œ์ •์ž๊ฐ€ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ILIKE ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” mytable ์˜ ํŒจํ„ด col1% ์™€ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋“  ์—ด์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

(mytable.* ILIKE 'col1%')
Copy

ILIKE ๋ฐ EXCLUDE ํ‚ค์›Œ๋“œ๋Š” ๋‹จ์ผ ํ•จ์ˆ˜ ํ˜ธ์ถœ์—์„œ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ILIKE ๋ฐ EXCLUDE ํ‚ค์›Œ๋“œ๋Š” SELECT ๋ชฉ๋ก์ด๋‚˜ GROUP BY ์ ˆ์—์„œ๋งŒ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

ILIKE ๋ฐ EXCLUDE ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ SELECT ์˜ โ€œ๋งค๊ฐœ ๋ณ€์ˆ˜โ€ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋ฐ˜ํ™˜ยถ

๋ฐ˜ํ™˜๋œ ๊ฐ’์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ OBJECT ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ํ‚ค๊ฐ€ NULL(์ฆ‰, SQL NULL)์ธ ๊ฒฝ์šฐ, ๊ฒฐ๊ณผ ์˜ค๋ธŒ์ ํŠธ์—์„œ ํ‚ค-๊ฐ’ ํŽ˜์–ด๊ฐ€ ์ƒ๋žต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ’์ด NULL์ธ ๊ฒฝ์šฐ, ํ‚ค-๊ฐ’ ํŽ˜์–ด๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

  • ์ƒ์„ฑ๋œ ์˜ค๋ธŒ์ ํŠธ๋Š” ํ‚ค-๊ฐ’ ํŽ˜์–ด์˜ ์›๋ž˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋ณด์กดํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆยถ

์ด ์˜ˆ๋Š” OBJECT_CONSTRUCT ๋ฐ OBJECT_CONSTRUCT_KEEP_NULL ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

SELECT OBJECT_CONSTRUCT('key_1', 'one', 'key_2', NULL) AS WITHOUT_KEEP_NULL,
       OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', 'key_2', NULL) AS KEEP_NULL_1,
       OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', NULL, 'two') AS KEEP_NULL_2;
Copy
+-------------------+-------------------+------------------+
| WITHOUT_KEEP_NULL | KEEP_NULL_1       | KEEP_NULL_2      |
|-------------------+-------------------+------------------|
| {                 | {                 | {                |
|   "key_1": "one"  |   "key_1": "one", |   "key_1": "one" |
| }                 |   "key_2": null   | }                |
|                   | }                 |                  |
+-------------------+-------------------+------------------+

๋‹ค์Œ ์˜ˆ๋Š” OBJECT_CONSTRUCT ๋ฐ OBJECT_CONSTRUCT_KEEP NULL ๊ฐ„์˜ ์ฐจ์ด๋„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ, ์ด ์˜ˆ๋Š” ์ฟผ๋ฆฌ ์ „์— ํ‘œ์‹œ๋˜๋Š” ์ž‘์€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CREATE TABLE demo_table_1_with_nulls (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1_with_nulls (province, created_date) VALUES
  ('Manitoba', '2024-01-18'::DATE),
  ('British Columbia', NULL),
  ('Alberta', '2024-01-19'::DATE),
  (NULL, '2024-01-20'::DATE);
Copy
SELECT *
  FROM demo_table_1_with_nulls
  ORDER BY province;
Copy
+------------------+--------------+
| PROVINCE         | CREATED_DATE |
|------------------+--------------|
| Alberta          | 2024-01-19   |
| British Columbia | NULL         |
| Manitoba         | 2024-01-18   |
| NULL             | 2024-01-20   |
+------------------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc,
       OBJECT_CONSTRUCT_KEEP_NULL(*) AS oc_keep_null
  FROM demo_table_1_with_nulls
  ORDER BY oc_keep_null['PROVINCE'];
Copy
+----------------------------------+----------------------------------+
| OC                               | OC_KEEP_NULL                     |
|----------------------------------+----------------------------------|
| {                                | {                                |
|   "CREATED_DATE": "2024-01-19",  |   "CREATED_DATE": "2024-01-19",  |
|   "PROVINCE": "Alberta"          |   "PROVINCE": "Alberta"          |
| }                                | }                                |
| {                                | {                                |
|   "PROVINCE": "British Columbia" |   "CREATED_DATE": null,          |
| }                                |   "PROVINCE": "British Columbia" |
|                                  | }                                |
| {                                | {                                |
|   "CREATED_DATE": "2024-01-18",  |   "CREATED_DATE": "2024-01-18",  |
|   "PROVINCE": "Manitoba"         |   "PROVINCE": "Manitoba"         |
| }                                | }                                |
| {                                | {                                |
|   "CREATED_DATE": "2024-01-20"   |   "CREATED_DATE": "2024-01-20",  |
| }                                |   "PROVINCE": null               |
|                                  | }                                |
+----------------------------------+----------------------------------+

๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋œ ํ•จ์ˆ˜ OBJECT_CONSTRUCT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋Š” OBJECT_CONSTRUCT ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.