{"id":8085,"date":"2020-01-21T10:30:47","date_gmt":"2020-01-21T18:30:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8085"},"modified":"2024-09-12T00:46:45","modified_gmt":"2024-09-12T07:46:45","slug":"ansi-join-enhancements-and-ansi-merge","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/ko\/ansi-join-enhancements-and-ansi-merge\/","title":{"rendered":"ANSI JOIN \uac1c\uc120 \uc0ac\ud56d \ubc0f ANSI MERGE"},"content":{"rendered":"<h2><span style=\"font-weight: 400\">\uc18c\uac1c<\/span><\/h2>\n<p><span style=\"font-weight: 400\">ANSI JOIN\uc5d0 \ub300\ud55c N1QL \uc9c0\uc6d0\uc740 \ubc84\uc804 5.5\uc5d0\uc11c \ucc98\uc74c \ub3c4\uc785\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \ud604\uc7ac ANSI JOIN(\ubc84\uc804 5.5 \ubc0f 6.0)\uc5d0\ub294 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc774 \ud0a4 \uc2a4\ud398\uc774\uc2a4\uc5ec\uc57c \ud55c\ub2e4\ub294 \uc81c\ud55c\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc81c\ud55c\uc740 \ubc84\uc804 6.5\uc5d0\uc11c \ud574\uc81c\ub429\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">MERGE \ubb38\uc5d0 \ub300\ud55c N1QL \uc9c0\uc6d0\uc740 \ud604\uc7ac \uc870\ud68c \uc870\uc778\uacfc \uc720\uc0ac\ud558\uac8c ON KEYS \uc808\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ubc84\uc804 6.5\uc5d0\uc11c\ub294 ANSI MERGE \uad6c\ubb38\uc774 \uc9c0\uc6d0\ub420 \uc608\uc815\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">ANSI JOIN \uac1c\uc120 \uc0ac\ud56d<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Couchbase Server \ubc84\uc804 6.5\uc5d0\uc11c N1QL\uc740 \ud45c\ud604\uc2dd \ubc0f \ud558\uc704 \ucffc\ub9ac\ub97c ANSI JOIN\uc758 \uc624\ub978\ucabd\uc73c\ub85c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774\uc804 \ubc84\uc804 5.5 \ubc0f 6.0\uc5d0\uc11c\ub294 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc774 \ud0a4 \uc2a4\ud398\uc774\uc2a4\uc5ec\uc57c \ud588\uc2b5\ub2c8\ub2e4. ANSI JOIN\uc758 \uc624\ub978\ucabd\uc774 \ud0a4 \uc2a4\ud398\uc774\uc2a4\uac00 \uc544\ub2cc \uacbd\uc6b0 \uc624\ub958\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud0a4 \uacf5\uac04\uc5d0 \ub300\ud55c \uc81c\ud55c\uc740 \ubc84\uc804 5.5 \ubc0f 6.0\uc5d0\ub9cc \uc874\uc7ac\ud558\uba70, ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0\ub9cc \uc801\uc6a9\ub429\ub2c8\ub2e4. ANSI JOIN\uc758 \uc67c\ucabd\uc740 \ud0a4 \uacf5\uac04, \uc2dd, \ud558\uc704 \ucffc\ub9ac \ub610\ub294 \ub2e4\ub978 \uc870\uc778\/\uc911\ucca9\/\uc5b8\ub124\uc2a4\ud2b8 \uc5f0\uc0b0\uc774 \ub420 \uc218 \uc788\uc73c\uba70, ANSI JOIN\uc774 \ube44ANSI \uc870\uc778\/\uc911\ucca9 \uc5f0\uc0b0\uacfc \ud63c\ud569\ub418\uc9c0 \uc54a\ub294 \ud55c \ub2e4\ub978 \uc870\uc778\/\uc911\ucca9\/\uc5b8\ub124\uc2a4\ud2b8 \uc5f0\uc0b0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">ANSI JOIN\uc758 \uc624\ub978\ucabd\uc73c\ub85c \ud45c\ud604\ud558\uae30<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc774\uc81c ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4<\/span><\/p>\n<pre class=\"lang:default mark:3,4 decode:true\">SELECT DISTINCT route.destinationairport\r\nFROM `travel-sample` airport JOIN\r\n  [ {\"destinationairport\": \"KEF\", \"sourceairport\": \"SFO\", \"type\": \"route\"},\r\n    {\"destinationairport\": \"KEF\", \"sourceairport\": \"LHR\", \"type\": \"route\"} ] AS route\r\n  ON airport.faa = route.sourceairport AND route.type = \"route\"\r\nWHERE airport.type = \"airport\" AND airport.city = \"San Francisco\";<\/pre>\n<p><span style=\"font-weight: 400\">\uc774 \uc608\uc5d0\uc11c\ub294 \uba85\uc2dc\uc801 \uac1d\uccb4 \ubc30\uc5f4\uc774 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \ud45c\ud604\uc2dd\uc73c\ub85c \uc9c0\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0 \ud45c\ud604\uc2dd\uc5d0\ub294 \ubcc4\uce6d(\uc704 \uc608\uc5d0\uc11c\ub294 \"route\")\uc774 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4(AS \ud0a4\uc6cc\ub4dc\ub294 \uc120\ud0dd \uc0ac\ud56d\uc774\uc9c0\ub9cc).\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud45c\ud604\uc2dd\uc774 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 ExpressionScan \uc5f0\uc0b0\uc790\ub294 \uc124\uba85 \uacc4\ud68d\uc5d0\uc11c \ud45c\ud604\uc2dd\uc758 \uacb0\uacfc \uc9d1\ud569\uc744 \ubc18\ubcf5\ud558\ub294 \ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default mark:35-45,50-53 decode:true\">\"plan\": {\r\n    \"#operator\": \"Sequence\",\r\n    \"~children\": [\r\n        {\r\n            \"#operator\": \"IndexScan3\",\r\n            \"as\": \"airport\",\r\n            \"index\": \"ix_airport_city\",\r\n            \"index_id\": \"eee67e7e615a1b49\",\r\n            \"index_projection\": {\r\n                \"primary_key\": true\r\n            },\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\",\r\n            \"spans\": [\r\n                {\r\n                    \"exact\": true,\r\n                    \"range\": [\r\n                        {\r\n                            \"high\": \"\\\"San Francisco\\\"\",\r\n                            \"inclusion\": 3,\r\n                            \"low\": \"\\\"San Francisco\\\"\"\r\n                        }\r\n                    ]\r\n                }\r\n            ],\r\n            \"using\": \"gsi\"\r\n        },\r\n        {\r\n            \"#operator\": \"Fetch\",\r\n            \"as\": \"airport\",\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\"\r\n        },\r\n        {\r\n            \"#operator\": \"HashJoin\",\r\n            \"build_aliases\": [\r\n                \"route\"\r\n            ],\r\n            \"build_exprs\": [\r\n                \"(`route`.`sourceairport`)\"\r\n            ],\r\n            \"on_clause\": \"(((`airport`.`faa`) = (`route`.`sourceairport`)) and ((`route`.`type`) = \\\"route\\\"))\",\r\n            \"probe_exprs\": [\r\n                \"(`airport`.`faa`)\"\r\n            ],\r\n            \"~child\": {\r\n                \"#operator\": \"Sequence\",\r\n                \"~children\": [\r\n                    {\r\n                        \"#operator\": \"ExpressionScan\",\r\n                        \"alias\": \"route\",\r\n                        \"expr\": \"[{\\\"destinationairport\\\": \\\"KEF\\\", \\\"sourceairport\\\": \\\"SFO\\\", \\\"type\\\": \\\"route\\\"}, {\\\"destinationairport\\\": \\\"KEF\\\", \\\"sourceairport\\\": \\\"LHR\\\", \\\"type\\\": \\\"route\\\"}]\",\r\n                        \"uncorrelated\": true\r\n                    }\r\n                ]\r\n            }\r\n        },\r\n        {\r\n            \"#operator\": \"Parallel\",\r\n            \"~child\": {\r\n                \"#operator\": \"Sequence\",\r\n                \"~children\": [\r\n                    {\r\n                        \"#operator\": \"Filter\",\r\n                        \"condition\": \"(((`airport`.`type`) = \\\"airport\\\") and ((`airport`.`city`) = \\\"San Francisco\\\"))\"\r\n                    },\r\n                    {\r\n                        \"#operator\": \"InitialProject\",\r\n                        \"distinct\": true,\r\n                        \"result_terms\": [\r\n                            {\r\n\r\n                                \"expr\": \"(`route`.`destinationairport`)\"\r\n                            }\r\n                        ]\r\n                    },\r\n                    {\r\n                        \"#operator\": \"Distinct\"\r\n                    }\r\n                ]\r\n            }\r\n        },\r\n        {\r\n            \"#operator\": \"Distinct\"\r\n        }\r\n    ]\r\n},\r\n<\/pre>\n<p>&nbsp;<\/p>\n<h3><span style=\"font-weight: 400\">ANSI \uc870\uc778\uc758 \uc624\ub978\ucabd\uc5d0 \uc788\ub294 \ud558\uc704 \ucffc\ub9ac<\/span><\/h3>\n<p><span style=\"font-weight: 400\">ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0\uc11c \ud558\uc704 \ucffc\ub9ac\ub97c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4<\/span><\/p>\n<pre class=\"lang:default mark:3,4 decode:true\">SELECT DISTINCT route.destinationairport\r\nFROM `travel-sample` airport JOIN\r\n ( SELECT destinationairport, sourceairport\r\n   FROM `travel-sample` WHERE type = \"route\" ) AS route\r\n ON airport.faa = route.sourceairport\r\nWHERE airport.type = \"airport\" AND airport.city = \"San Francisco\";\r\n<\/pre>\n<p><span style=\"font-weight: 400\">\uc774 \uc608\uc5d0\uc11c\ub294 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \ud558\uc704 \ucffc\ub9ac\uac00 \uc0ac\uc6a9\ub429\ub2c8\ub2e4. \ud45c\ud604\uc2dd\uacfc \ub9c8\ucc2c\uac00\uc9c0\ub85c \ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \ud558\uc704 \ucffc\ub9ac\uc5d0\ub294 \ubcc4\uce6d(\uc704 \uc608\uc5d0\uc11c\ub294 \"route\")\ub3c4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4(AS \ud0a4\uc6cc\ub4dc\ub294 \uc120\ud0dd \uc0ac\ud56d\uc774\uc9c0\ub9cc).<\/span><\/p>\n<p><span style=\"font-weight: 400\">ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \ud558\uc704 \ucffc\ub9ac\uac00 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \uc124\uba85\uc5d0 \ud558\uc704 \ucffc\ub9ac \uc790\uccb4\uc5d0 \ub300\ud55c \uacc4\ud68d\uc774 \ud45c\uc2dc\ub429\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default mark:35-45,48-111 decode:true\">\"plan\": {\r\n    \"#operator\": \"Sequence\",\r\n    \"~children\": [\r\n        {\r\n            \"#operator\": \"IndexScan3\",\r\n            \"as\": \"airport\",\r\n            \"index\": \"ix_airport_city\",\r\n            \"index_id\": \"eee67e7e615a1b49\",\r\n            \"index_projection\": {\r\n                \"primary_key\": true\r\n            },\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\",\r\n            \"spans\": [\r\n                {\r\n                    \"exact\": true,\r\n                    \"range\": [\r\n                        {\r\n                            \"high\": \"\\\"San Francisco\\\"\",\r\n                            \"inclusion\": 3,\r\n                            \"low\": \"\\\"San Francisco\\\"\"\r\n                        }\r\n                    ]\r\n                }\r\n            ],\r\n            \"using\": \"gsi\"\r\n        },\r\n        {\r\n            \"#operator\": \"Fetch\",\r\n            \"as\": \"airport\",\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\"\r\n        },\r\n        {\r\n            \"#operator\": \"HashJoin\",\r\n            \"build_aliases\": [\r\n                \"route\"\r\n            ],\r\n            \"build_exprs\": [\r\n                \"(`route`.`sourceairport`)\"\r\n            ],\r\n            \"on_clause\": \"((`airport`.`faa`) = (`route`.`sourceairport`))\",\r\n            \"probe_exprs\": [\r\n                \"(`airport`.`faa`)\"\r\n            ],\r\n            \"~child\": {\r\n                \"#operator\": \"Sequence\",\r\n                \"~children\": [\r\n                    {\r\n                        \"#operator\": \"Sequence\",\r\n                        \"~children\": [\r\n                            {\r\n                                \"#operator\": \"IndexScan3\",\r\n                                \"index\": \"ix_type\",\r\n                                \"index_id\": \"d925e49b3a11ae3d\",\r\n                                \"index_projection\": {\r\n                                    \"primary_key\": true\r\n                                },\r\n                                \"keyspace\": \"travel-sample\",\r\n                                \"namespace\": \"default\",\r\n                                \"spans\": [\r\n                                    {\r\n                                        \"exact\": true,\r\n                                        \"range\": [\r\n                                            {\r\n                                                \"high\": \"\\\"route\\\"\",\r\n                                                \"inclusion\": 3,\r\n                                                \"low\": \"\\\"route\\\"\"\r\n                                            }\r\n                                        ]\r\n                                    }\r\n                                ],\r\n                                \"using\": \"gsi\"\r\n                            },\r\n\r\n                            {\r\n                                \"#operator\": \"Fetch\",\r\n                                \"keyspace\": \"travel-sample\",\r\n                                \"namespace\": \"default\"\r\n                            },\r\n                            {\r\n                                \"#operator\": \"Parallel\",\r\n                                \"~child\": {\r\n                                    \"#operator\": \"Sequence\",\r\n                                    \"~children\": [\r\n                                        {\r\n                                            \"#operator\": \"Filter\",\r\n                                            \"condition\": \"((`travel-sample`.`type`) = \\\"route\\\")\"\r\n                                        },\r\n                                        {\r\n                                            \"#operator\": \"InitialProject\",\r\n                                            \"result_terms\": [\r\n                                                {\r\n                                                    \"expr\": \"(`travel-sample`.`destinationairport`)\"\r\n                                                },\r\n                                                {\r\n                                                    \"expr\": \"(`travel-sample`.`sourceairport`)\"\r\n                                                }\r\n                                            ]\r\n\r\n                                        }\r\n                                    ]\r\n                                }\r\n                            }\r\n                        ]\r\n                    },\r\n                    {\r\n                        \"#operator\": \"Alias\",\r\n                        \"as\": \"route\"\r\n                    }\r\n                ]\r\n            }\r\n        },\r\n        {\r\n            \"#operator\": \"Parallel\",\r\n            \"~child\": {\r\n                \"#operator\": \"Sequence\",\r\n                \"~children\": [\r\n                    {\r\n                        \"#operator\": \"Filter\",\r\n                        \"condition\": \"(((`airport`.`type`) = \\\"airport\\\") and ((`airport`.`city`) = \\\"San Francisco\\\"))\"\r\n                    },\r\n                    {\r\n                        \"#operator\": \"InitialProject\",\r\n\r\n                        \"distinct\": true,\r\n                        \"result_terms\": [\r\n                            {\r\n                                \"expr\": \"(`route`.`destinationairport`)\"\r\n                            }\r\n                        ]\r\n                    },\r\n                    {\r\n                        \"#operator\": \"Distinct\"\r\n                    }\r\n                ]\r\n            }\r\n        },\r\n        {\r\n            \"#operator\": \"Distinct\"\r\n        }\r\n    ]\r\n},\r\n<\/pre>\n<p>\ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc73c\ub85c \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \uc0c1\uad00\ub41c \ud558\uc704 \ucffc\ub9ac\uac00 \ub420 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc0c1\uad00\ub41c \ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \uc624\ub958\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4.<\/p>\n<h3><span style=\"font-weight: 400\">\ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc788\uc744 \ub54c \uc0ac\uc6a9\ub418\ub294 \ud574\uc2dc \uc870\uc778<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\ud0a4 \uc2a4\ud398\uc774\uc2a4\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \uc911\ucca9 \ub8e8\ud504 \uc870\uc778\uc774 \uae30\ubcf8 \uc870\uc778 \ubc29\ubc95\uc774\uba70, \uc624\ub978\ucabd \ud0a4 \uc2a4\ud398\uc774\uc2a4\uc5d0 USE HASH \ud78c\ud2b8\uac00 \uc9c0\uc815\ub418\uba74 \ud574\uc2dc \uc870\uc778\uc774 \uace0\ub824\ub429\ub2c8\ub2e4. \ub610\ud55c \uc911\ucca9 \ub8e8\ud504 \uc870\uc778\uc744 \uc0ac\uc6a9\ud560 \ub54c\ub294 \ud0a4 \uacf5\uac04\uc5d0 \uc801\uc808\ud55c \ubcf4\uc870 \uc778\ub371\uc2a4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \ubc18\ub300\ub85c, \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uc5d0 \uc778\ub371\uc2a4\uac00 \uc5c6\uc73c\ubbc0\ub85c \ud574\uc2dc \uc870\uc778\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc870\uc778\uc744 \uc218\ud589\ud558\ub294 \uac83\uc774 \ub354 \ud6a8\uc728\uc801\uc785\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \uc911\ucca9 \ub8e8\ud504 \uc870\uc778\uc740 \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uc758 \uacb0\uacfc \uc9d1\ud569\uc744 \uac01 \uc678\ubd80 \ubb38\uc11c\uc5d0 \ub300\ud574 \ubc18\ubcf5\uc801\uc73c\ub85c \uc2a4\uce94\ud574\uc57c \ud558\ubbc0\ub85c \uc0ac\uc2e4\uc0c1 \ub370\uce74\ub974\ud2b8 \uc870\uc778\uc785\ub2c8\ub2e4. \ub530\ub77c\uc11c \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc788\ub294 \uacbd\uc6b0 USE HASH \ud78c\ud2b8\uac00 \uc9c0\uc815\ub418\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub3c4 \ud574\uc2dc \uc870\uc778\uc774 \uae30\ubcf8 \uc870\uc778 \ubc29\ubc95\uc785\ub2c8\ub2e4. \ud574\uc2dc \uc870\uc778\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0(\uc608: \ub3d9\uc77c\uc131 \uc870\uc778 \uc870\uac74\uc774 \uc5c6\ub294 \uacbd\uc6b0, USE NL \ud78c\ud2b8\uac00 \uc0ac\uc6a9\ub41c \uacbd\uc6b0, \ucee4\ubba4\ub2c8\ud2f0 \uc5d0\ub514\uc158\uc774 \uc0ac\uc6a9 \uc911\uc778 \uacbd\uc6b0(\ud574\uc2dc \uc870\uc778\uc740 \uc5d4\ud130\ud504\ub77c\uc774\uc988 \uc5d0\ub514\uc158\uc5d0\uc11c\ub9cc \uc0ac\uc6a9 \uac00\ub2a5)) \uc911\ucca9 \ub8e8\ud504 \uc870\uc778\uc774 \uace0\ub824\ub429\ub2c8\ub2e4. \uc704\uc758 \uc124\uba85 \ud30c\uc77c\uc5d0\uc11c \ud45c\ud604\uc2dd\uacfc \ud558\uc704 \ucffc\ub9ac\uac00 \ubaa8\ub450 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc788\ub294 \uacbd\uc6b0\ub97c \ubcf4\uba74 \ub450 \uc124\uba85 \ud30c\uc77c \ubaa8\ub450\uc5d0\uc11c \ud574\uc2dc \uc870\uc778 \uc5f0\uc0b0\uc790\uac00 \uc0ac\uc6a9\ub418\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ud0a4 \uc2a4\ud398\uc774\uc2a4\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0, \ud0a4 \uc2a4\ud398\uc774\uc2a4\uc5d0 USE INDEX \ub610\ub294 USE KEYS \ud78c\ud2b8\ub97c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uac00 ANSI JOIN\uc758 \uc624\ub978\ucabd\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0, \uba85\ubc31\ud55c \uc774\uc720\ub85c \ud45c\ud604\uc2dd \ub610\ub294 \ud558\uc704 \ucffc\ub9ac\uc5d0 USE INDEX \ub610\ub294 USE KEYS \ud78c\ud2b8\ub97c \uc9c0\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc720\uc77c\ud55c \ud78c\ud2b8\ub294 \uc870\uc778 \ud78c\ud2b8(USE HASH \ub610\ub294 USE NL)\uc785\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">ANSI NEST \uc9c0\uc6d0<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc774\uc81c \ud45c\ud604\uc2dd\uc774\ub098 \ud558\uc704 \ucffc\ub9ac\ub97c ANSI NEST\uc758 \uc624\ub978\ucabd\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, ANSI NEST\uc5d0\ub3c4 \ub3d9\uc77c\ud55c \uac1c\uc120 \uc0ac\ud56d\uc774 \uc801\uc6a9\ub429\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">ANSI \ubcd1\ud569<\/span><\/h2>\n<p><span style=\"font-weight: 400\">MERGE \ubb38\uc744 \uc0ac\uc6a9\ud558\uba74 '\uc18c\uc2a4'\uc758 \ubb38\uc11c\ub97c '\ub300\uc0c1'\uc5d0 \ubcd1\ud569\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc989, \uc77c\uce58\ud558\ub294 \ubb38\uc11c\uac00 \ubc1c\uacac\ub418\uba74 \ub300\uc0c1 \ubb38\uc11c\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uace0 \uc77c\uce58\ud558\ub294 \ubb38\uc11c\uac00 \ubc1c\uacac\ub418\uc9c0 \uc54a\uc73c\uba74 \ub300\uc0c1\uc5d0 \ubb38\uc11c\ub97c \uc0bd\uc785\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\"\uc77c\uce58\"\uc758 \uac1c\ub150\uc740 \uc77c\uce58 \uc870\uac74\uc5d0 \uc758\ud574 \uacb0\uc815\ub429\ub2c8\ub2e4. \uc774\uc804 \ubc84\uc804\uc758 Couchbase N1QL\uc5d0\uc11c\ub294 \ubb38\uc11c \ud0a4\uc5d0 \uae30\ubc18\ud55c \"\uc77c\uce58\", \uc989 \uc18c\uc2a4\uac00 \ub300\uc0c1\uc5d0 \ub300\ud55c \ubb38\uc11c \ud0a4\ub97c \uc0dd\uc131\ud574\uc57c \uc77c\uce58 \ud56d\ubaa9\uc774 \uc788\ub294\uc9c0(\ud574\ub2f9 \ubb38\uc11c \ud0a4\ub97c \uac00\uc9c4 \ubb38\uc11c\uac00 \ub300\uc0c1\uc5d0 \uc774\ubbf8 \uc788\ub294\uc9c0) \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 MERGE \ubb38 \uad6c\ubb38\uc758 ON KEYS \uc808\uc744 \ud1b5\ud574 \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">ON KEYS \uc808\uc774 \uc788\ub294 MERGE \ubb38\uc744 \uc870\ud68c \ubcd1\ud569\uc774\ub77c\uace0 \ud569\ub2c8\ub2e4. \uc774\ub294 \ubb38\uc11c \ud0a4\uc5d0 \ub300\ud55c \uc870\uc778\uc774 \ud544\uc694\ud558\uace0 ON KEYS \uc808\uc744 \uc0ac\uc6a9\ud558\ub294 ANSI JOIN \uc9c0\uc6d0 \uc774\uc804\uc758 \uc870\uc778 \uad6c\ubb38, \uc989 \uc870\ud68c \uc870\uc778\uacfc \uc720\uc0ac\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c MERGE \ubb38\uc758 \uc790\uc5f0\uc2a4\ub7ec\uc6b4 \ud655\uc7a5\uc740 ANSI MERGE \uad6c\ubb38, \uc989 ON \uc808\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubcd1\ud569 \uc870\uac74\uc744 \uc9c0\uc815\ud558\uc5ec \uc784\uc758\uc758 \ud45c\ud604\uc2dd\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc77c\uce58 \uc5ec\ubd80\uac00 \uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ud310\ub2e8\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\ub294 \uac83\uc785\ub2c8\ub2e4. ANSI MERGE\ub294 Couchbase \uc11c\ubc84 \ubc84\uc804 6.5\uc758 N1QL\uc5d0\uc11c \uc9c0\uc6d0\ub429\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub2e4\uc74c\uc740 ANSI MERGE \ubb38\uc758 \uc608\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default mark:2,3 decode:true\">MERGE INTO `travel-sample` AS route USING `travel-sample` AS airport \r\n  ON route.sourceairport = airport.faa AND airport.type = \"airport\"\r\n   AND route.type = \"route\"\r\nWHEN MATCHED THEN UPDATE SET route.old_equipment = route.equipment,\r\n                             route.equipment = \"797\", route.updated = true\r\n     WHERE route.airline = \"BA\" AND airport.country = \"France\"\r\n       AND CONTAINS(route.equipment, \"319\");\r\n<\/pre>\n<p><span style=\"font-weight: 400\">\uc774 \uc608\uc5d0\uc11c \ubcd1\ud569 \uc870\uac74\uc740 ON \uc808\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc9c0\uc815\ub429\ub2c8\ub2e4. \uc774\uac83\uc740 ANSI JOIN\uc758 ON \uc808\uacfc \ub9e4\uc6b0 \uc720\uc0ac\ud569\ub2c8\ub2e4. \uc2e4\uc81c\ub85c \ub0b4\ubd80\uc801\uc73c\ub85c ANSI MERGE \ubb38\uc740 \ub3d9\uc77c\ud55c ON \uc808\uc774 \uc788\ub294 ANSI JOIN\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc18c\uc2a4 \ubb38\uc11c\uc5d0 \uc77c\uce58\ud558\ub294 \ud56d\ubaa9\uc774 \uc788\ub294\uc9c0 \uc5ec\ubd80\ub97c \ud655\uc778\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc704\uc758 \ubcd1\ud569 \ubb38\uc5d0 \ub300\ud55c \uc124\uba85\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default mark:40-42 decode:true\">\"plan\": {\r\n    \"#operator\": \"Sequence\",\r\n    \"~children\": [\r\n        {\r\n            \"#operator\": \"IndexScan3\",\r\n            \"as\": \"airport\",\r\n            \"index\": \"ix_type\",\r\n            \"index_id\": \"d925e49b3a11ae3d\",\r\n            \"index_projection\": {\r\n                \"primary_key\": true\r\n            },\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\",\r\n            \"spans\": [\r\n                {\r\n                    \"exact\": true,\r\n                    \"range\": [\r\n                        {\r\n                            \"high\": \"\\\"airport\\\"\",\r\n                            \"inclusion\": 3,\r\n                            \"low\": \"\\\"airport\\\"\"\r\n                        }\r\n                    ]\r\n                }\r\n            ],\r\n            \"using\": \"gsi\"\r\n        },\r\n        {\r\n            \"#operator\": \"Fetch\",\r\n            \"as\": \"airport\",\r\n            \"keyspace\": \"travel-sample\",\r\n            \"namespace\": \"default\"\r\n        },\r\n        {\r\n            \"#operator\": \"Parallel\",\r\n            \"~child\": {\r\n                \"#operator\": \"Sequence\",\r\n                \"~children\": [\r\n                    {\r\n                        \"#operator\": \"NestedLoopJoin\",\r\n                        \"alias\": \"route\",\r\n                        \"on_clause\": \"((((`route`.`sourceairport`) = (`airport`.`faa`)) and ((`airport`.`type`) = \\\"airport\\\")) and ((`route`.`type`) = \\\"route\\\"))\",\r\n                        \"~child\": {\r\n                            \"#operator\": \"Sequence\",\r\n                            \"~children\": [\r\n                                {\r\n                                    \"#operator\": \"IndexScan3\",\r\n                                    \"as\": \"route\",\r\n                                    \"index\": \"ix_type\",\r\n                                    \"index_id\": \"d925e49b3a11ae3d\",\r\n                                    \"index_projection\": {\r\n                                        \"primary_key\": true\r\n                                    },\r\n                                    \"keyspace\": \"travel-sample\",\r\n                                    \"namespace\": \"default\",\r\n                                    \"nested_loop\": true,\r\n                                    \"spans\": [\r\n                                        {\r\n                                            \"exact\": true,\r\n                                            \"range\": [\r\n                                                {\r\n                                                    \"high\": \"\\\"route\\\"\",\r\n                                                    \"inclusion\": 3,\r\n                                                    \"low\": \"\\\"route\\\"\"\r\n                                                }\r\n                                            ]\r\n                                        }\r\n                                    ],\r\n                                    \"using\": \"gsi\"\r\n                                },\r\n                                {\r\n                                    \"#operator\": \"Fetch\",\r\n                                    \"as\": \"route\",\r\n                                    \"keyspace\": \"travel-sample\",\r\n                                    \"namespace\": \"default\",\r\n                                    \"nested_loop\": true\r\n                                }\r\n                            ]\r\n                        }\r\n                    },\r\n                    {\r\n                        \"#operator\": \"Merge\",\r\n                        \"as\": \"route\",\r\n                        \"keyspace\": \"travel-sample\",\r\n                        \"namespace\": \"default\",\r\n                        \"update\": {\r\n                            \"#operator\": \"Sequence\",\r\n                            \"~children\": [\r\n                                {\r\n                                    \"#operator\": \"Filter\",\r\n                                    \"condition\": \"((((`route`.`airline`) = \\\"BA\\\") and ((`airport`.`country`) = \\\"France\\\")) and contains((`route`.`equipment`), \\\"319\\\"))\"\r\n                                },\r\n                                {\r\n                                    \"#operator\": \"Clone\"\r\n                                },\r\n                                {\r\n                                    \"#operator\": \"Set\",\r\n                                    \"set_terms\": [\r\n                                        {\r\n                                            \"path\": \"(`route`.`old_equipment`)\",\r\n                                            \"value\": \"(`route`.`equipment`)\"\r\n                                        },\r\n                                        {\r\n                                            \"path\": \"(`route`.`equipment`)\",\r\n                                            \"value\": \"\\\"797\\\"\"\r\n                                        },\r\n                                        {\r\n                                            \"path\": \"(`route`.`updated`)\",\r\n                                            \"value\": \"true\"\r\n                                        }\r\n                                    ]\r\n                                },\r\n                                {\r\n                                    \"#operator\": \"SendUpdate\",\r\n                                    \"alias\": \"route\",\r\n                                    \"keyspace\": \"travel-sample\",\r\n                                    \"namespace\": \"default\"\r\n                                }\r\n                            ]\r\n                        }\r\n                    }\r\n                ]\r\n            }\r\n        },\r\n        {\r\n            \"#operator\": \"Discard\"\r\n        }\r\n    ]\r\n},\r\n<\/pre>\n<p><span style=\"font-weight: 400\">\uc124\uba85\uc5d0\uc11c \uc6d0\ubcf8\uacfc \ub300\uc0c1 \uac04\uc758 (\ub0b4\ubd80\uc801\uc73c\ub85c \ubcc0\ud658\ub41c) ANSI JOIN \uc5f0\uc0b0\uc5d0 \uc0ac\uc6a9\ub418\ub294 NestedLoopJoin \uc5f0\uc0b0\uc790\ub97c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<p>\uc870\uc778 \ud78c\ud2b8\ub294 \uc18c\uc2a4\uc5d0\uc11c \uc9c0\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"lang:default mark:1 decode:true\">MERGE INTO `travel-sample` AS route USING `travel-sample` AS airport USE HASH(build)\r\n  ON route.sourceairport = airport.faa AND airport.type = \"airport\"\r\n   AND route.type = \"route\"\r\nWHEN MATCHED THEN UPDATE SET route.old_equipment = route.equipment,\r\n                             route.equipment = \"797\", route.updated = true\r\n     WHERE route.airline = \"BA\" AND airport.country = \"France\"\r\n       AND CONTAINS(route.equipment, \"319\");<\/pre>\n<p>\uc774 \uc608\uc81c\uc5d0\uc11c\ub294 \uacf5\ud56d\uc5d0 \ud574\uc2dc \ud78c\ud2b8\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \uc9c0\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3><span style=\"font-weight: 400\">ANSI MERGE\uc5d0\uc11c \uc5ec\ub7ec \uc77c\uce58 \ud56d\ubaa9 \ucc98\ub9ac\ud558\uae30<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc870\ud68c \ubcd1\ud569\uc5d0\uc11c\ub294 \ubcd1\ud569 \uc870\uac74\uc774 \ubb38\uc11c \ud0a4\uc5d0 \uc788\uae30 \ub54c\ubb38\uc5d0 \uac01 \uc18c\uc2a4 \ubb38\uc11c\uc5d0 \ub300\ud574 \ud558\ub098\uc758 \uc7a0\uc7ac\uc801 \ub300\uc0c1 \ubb38\uc11c \uc77c\uce58\ub9cc \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc81c \ubcd1\ud569 \uc870\uac74\uc774 \uc784\uc758\uc758 \ud45c\ud604\uc2dd\uc774\ubbc0\ub85c ANSI MERGE\uc5d0\uc11c\ub294 \uac01 \uc18c\uc2a4 \ubb38\uc11c\uc5d0 \ub300\ud574 \uc7a0\uc7ac\uc801\uc73c\ub85c \uc5ec\ub7ec \uac1c\uc758 \ub300\uc0c1 \ubb38\uc11c\uac00 \uc77c\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\uc815\ub41c \uac01 \ubcd1\ud569 \uc791\uc5c5\uc5d0 \ub300\ud574 \ubcd1\ud569 \uc791\uc5c5\uc740 \uac01 \uc18c\uc2a4 \ubb38\uc11c\uc5d0 \ub300\ud574 \ucd5c\ub300 \ud55c \ubc88\ub9cc \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc77c\uce58\ud558\ub294 \ubb38\uc11c\uac00 \uc5ec\ub7ec \uac1c \uc788\ub294 \uacbd\uc6b0 \ub3d9\uc77c\ud55c \uc18c\uc2a4 \ubb38\uc11c\uc5d0 \ub300\ud574 \ubcd1\ud569 \uc791\uc5c5\uc744 \ub450 \ubc88 \uc2dc\ub3c4\ud558\uba74 \uc624\ub958\uac00 \ubc18\ud658\ub429\ub2c8\ub2e4(\uc624\ub958 \ucf54\ub4dc 5320 \ub610\ub294 5330). \uc774\ub7ec\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud558\uba74 \ub3d9\uc77c\ud55c \uc18c\uc2a4 \ubb38\uc11c\uc5d0 \ub300\ud574 \uc5ec\ub7ec \uac1c\uc758 \uc77c\uce58 \ud56d\ubaa9\uc774 \ubc1c\uc0dd\ud558\uc9c0 \uc54a\ub3c4\ub85d \ubcd1\ud569 \uc870\uac74(ON \uc808)\uc744 \uc138\ubd84\ud654\ud574\uc57c \ud569\ub2c8\ub2e4.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">ANSI MERGE\uc5d0 \ub300\ud55c \uc0bd\uc785 \uc791\uc5c5<\/span><\/h3>\n<p><span style=\"font-weight: 400\">\uc870\ud68c \ubcd1\ud569\uc5d0\uc11c INSERT \uc791\uc5c5\uc744 \uc9c0\uc815\ud558\uba74 \uc0bd\uc785\ub418\ub294 \ubb38\uc11c\ub9cc \uc81c\uacf5\ub429\ub2c8\ub2e4. \uc870\ud68c \ubcd1\ud569\uc5d0\ub294 \ubb38\uc11c \ud0a4\uac00 \uc77c\uce58\ud574\uc57c \ud558\uace0, \uc77c\uce58\ud558\ub294 \ubb38\uc11c\uac00 \uc5c6\ub294 \uacbd\uc6b0(\uc989, \ud574\ub2f9 \ubb38\uc11c \ud0a4\ub97c \uac00\uc9c4 \ubb38\uc11c\uac00 \ub300\uc0c1\uc5d0 \uc5c6\ub294 \uacbd\uc6b0)\uc5d0\ub9cc INSERT \uc791\uc5c5\uc774 \ud2b8\ub9ac\uac70\ub418\ubbc0\ub85c \uc0c8\ub85c \uc0bd\uc785\ub41c \ubb38\uc11c\ub294 \ub3d9\uc77c\ud55c \ubb38\uc11c \ud0a4\ub97c \uc0ac\uc6a9\ud558\uae30\ub9cc \ud558\uba74 \ub429\ub2c8\ub2e4. \ubb38\uc11c \ud0a4\uac00 \ub354 \uc774\uc0c1 \uc77c\uce58 \uc870\uac74\uc774 \ub420 \ud544\uc694\uac00 \uc5c6\uae30 \ub54c\ubb38\uc5d0 ANSI MERGE\uc758 \uacbd\uc6b0 \ub354 \uc774\uc0c1 \uadf8\ub807\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub530\ub77c\uc11c INSERT \uc791\uc5c5\uc744 \uc9c0\uc815\ud560 \ub54c \ubb38\uc11c \ud0a4\ub3c4 INSERT \uc791\uc5c5\uc758 \uc77c\ubd80\ub85c \uc9c0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4<\/span><\/p>\n<pre class=\"lang:default mark:4 decode:true\">MERGE INTO `travel-sample` AS route USING `travel-sample` AS airport \r\n  ON route.sourceairport = airport.faa AND airport.type = \"airport\"\r\n   AND route.type = \"route\"\r\nWHEN NOT MATCHED THEN INSERT (KEY UUID(), VALUE {\"sourceairport\": airport.faa, \"targetairport\": \"SFO\", \"type\": \"route\"}) \r\n     WHERE airport.country = \"France\";\r\n<\/pre>\n<p><span style=\"font-weight: 400\">\uc774\uc5d0 \ube44\ud574 \uc870\ud68c \ubcd1\ud569\uc744 \uc704\ud55c INSERT \uc791\uc5c5\uc758 \uad6c\ubb38\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default decode:true\">WHEN NOT MATCHED THEN INSERT &lt;expr&gt;<\/pre>\n<p><span style=\"font-weight: 400\">\uc5ec\uae30\uc11c \uc740 \uc0bd\uc785\ud560 \ubb38\uc11c\uc785\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub2e4\uc74c\uc740 ANSI MERGE\uc5d0 \ub300\ud55c INSERT \uc791\uc5c5\uc758 \uad6c\ubb38\uc785\ub2c8\ub2e4:<\/span><\/p>\n<pre class=\"lang:default decode:true\">WHEN NOT MATCHED THEN INSERT (&lt;key_expr&gt;, &lt;value_expr&gt;)\r\nWHEN NOT MATCHED THEN INSERT (KEY &lt;key_expr&gt;, VALUE &lt;value_expr&gt;)<\/pre>\n<p><span style=\"font-weight: 400\">\uc5ec\uae30\uc11c \uc740 \uc0c8\ub85c \uc0bd\uc785\ub41c \ubb38\uc11c\uc758 \ubb38\uc11c \ud0a4\ub97c \uc9c0\uc815\ud558\uace0 \uc740 \uc0c8 \ubb38\uc11c\ub97c \uc9c0\uc815\ud569\ub2c8\ub2e4. \uc774 \ub458\uc740 \uc27c\ud45c\ub85c \uad6c\ubd84\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ud615\uc2dd\uc740 \ub450 \uac00\uc9c0\uac00 \uc788\uc73c\uba70, KEY \ubc0f VALUE \ud0a4\uc6cc\ub4dc\ub294 \uc120\ud0dd \uc0ac\ud56d\uc785\ub2c8\ub2e4. \uc0c8\ub85c\uc6b4 \uad04\ud638 \uc30d\ub3c4 \ud544\uc694\ud569\ub2c8\ub2e4.<\/span><\/p>\n<p><span style=\"font-weight: 400\">\ub2e4\ub978 \ubcd1\ud569 \uc791\uc5c5(\uc5c5\ub370\uc774\ud2b8 \uc791\uc5c5, \uc0ad\uc81c \uc791\uc5c5)\uc740 \uc870\ud68c \ubcd1\ud569\uacfc ANSI \ubcd1\ud569 \uac04\uc5d0 \ub3d9\uc77c\ud558\uac8c \uc720\uc9c0\ub429\ub2c8\ub2e4.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">\uc694\uc57d<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Couchbase 6.5\uc758 ANSI JOIN \uac1c\uc120 \uc0ac\ud56d \ubc0f ANSI MERGE \uc9c0\uc6d0\uc73c\ub85c N1QL\uc758 ANSI \uaddc\uc815 \uc900\uc218\uac00 \ud5a5\uc0c1\ub418\uc5c8\uc73c\uba70, \ud2b9\ud788 \uad00\uacc4\ud615 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub9c8\uc774\uadf8\ub808\uc774\uc158\ud560 \ub54c N1QL\uc744 \ub354\uc6b1 \uc0ac\uc6a9\uc790 \uce5c\ud654\uc801\uc73c\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>Introduction N1QL support for ANSI JOIN was first introduced in version 5.5. Currently there is a restriction in ANSI JOIN (version 5.5 and 6.0) in that the right-hand side of an ANSI JOIN must be a keyspace. This restriction will [&hellip;]<\/p>","protected":false},"author":3021,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,1812],"tags":[],"ppma_author":[9065],"class_list":["post-8085","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-n1ql-query"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v26.3) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>ANSI JOIN Enhancements and ANSI MERGE - The Couchbase Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/ko\/ansi-join-enhancements-and-ansi-merge\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ANSI JOIN Enhancements and ANSI MERGE\" \/>\n<meta property=\"og:description\" content=\"Introduction N1QL support for ANSI JOIN was first introduced in version 5.5. Currently there is a restriction in ANSI JOIN (version 5.5 and 6.0) in that the right-hand side of an ANSI JOIN must be a keyspace. This restriction will [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/ko\/ansi-join-enhancements-and-ansi-merge\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-21T18:30:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-12T07:46:45+00:00\" \/>\n<meta name=\"author\" content=\"Bingjie Miao, Principal Software Engineer Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bingjie Miao, Principal Software Engineer Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/\"},\"author\":{\"name\":\"Bingjie Miao, Senior Software Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6\"},\"headline\":\"ANSI JOIN Enhancements and ANSI MERGE\",\"datePublished\":\"2020-01-21T18:30:47+00:00\",\"dateModified\":\"2024-09-12T07:46:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/\"},\"wordCount\":1457,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Server\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/\",\"name\":\"ANSI JOIN Enhancements and ANSI MERGE - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2020-01-21T18:30:47+00:00\",\"dateModified\":\"2024-09-12T07:46:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ANSI JOIN Enhancements and ANSI MERGE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6\",\"name\":\"Bingjie Miao, Senior Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8834c93ec327fc373f7cf1896138b95b\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g\",\"caption\":\"Bingjie Miao, Senior Software Engineer, Couchbase\"},\"description\":\"Bingjie Miao is a principal software engineer at Couchbase. Bingjie has 20 years of experience in relational and NoSQL databases. His main area of expertise is query optimization and query execution.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ko\/author\/bingjie-miaocouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"ANSI JOIN Enhancements and ANSI MERGE - The Couchbase Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/ko\/ansi-join-enhancements-and-ansi-merge\/","og_locale":"ko_KR","og_type":"article","og_title":"ANSI JOIN Enhancements and ANSI MERGE","og_description":"Introduction N1QL support for ANSI JOIN was first introduced in version 5.5. Currently there is a restriction in ANSI JOIN (version 5.5 and 6.0) in that the right-hand side of an ANSI JOIN must be a keyspace. This restriction will [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/ko\/ansi-join-enhancements-and-ansi-merge\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-01-21T18:30:47+00:00","article_modified_time":"2024-09-12T07:46:45+00:00","author":"Bingjie Miao, Principal Software Engineer Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bingjie Miao, Principal Software Engineer Couchbase","Est. reading time":"7\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/"},"author":{"name":"Bingjie Miao, Senior Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6"},"headline":"ANSI JOIN Enhancements and ANSI MERGE","datePublished":"2020-01-21T18:30:47+00:00","dateModified":"2024-09-12T07:46:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/"},"wordCount":1457,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Server","SQL++ \/ N1QL Query"],"inLanguage":"ko-KR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/","url":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/","name":"ANSI JOIN Enhancements and ANSI MERGE - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2020-01-21T18:30:47+00:00","dateModified":"2024-09-12T07:46:45+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/ansi-join-enhancements-and-ansi-merge\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"ANSI JOIN Enhancements and ANSI MERGE"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","description":"NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4, Couchbase","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"\uce74\uc6b0\uce58\ubca0\uc774\uc2a4 \ube14\ub85c\uadf8","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3a65595a167e56276aec1f708072c2e6","name":"\ube59\uc9c0\uc5d0 \ubbf8\uc544\uc624, \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4, Couchbase","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8834c93ec327fc373f7cf1896138b95b","url":"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g","caption":"Bingjie Miao, Senior Software Engineer, Couchbase"},"description":"\ube59\uc9c0\uc5d0 \ubbf8\uc544\uc624\ub294 Couchbase\uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. Bingjie\ub294 \uad00\uacc4\ud615 \ubc0f NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubd84\uc57c\uc5d0\uc11c 20\ub144\uc758 \uacbd\ub825\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\uc758 \uc8fc\uc694 \uc804\ubb38 \ubd84\uc57c\ub294 \ucffc\ub9ac \ucd5c\uc801\ud654 \ubc0f \ucffc\ub9ac \uc2e4\ud589\uc785\ub2c8\ub2e4.","url":"https:\/\/www.couchbase.com\/blog\/ko\/author\/bingjie-miaocouchbase-com\/"}]}},"authors":[{"term_id":9065,"user_id":3021,"is_guest":0,"slug":"bingjie-miaocouchbase-com","display_name":"Bingjie Miao, Principal Software Engineer Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/d0ea9ddc7d74a893baf9227b26296cccf1eed2fc94c0c94e7fb04485b7251025?s=96&d=mm&r=g","author_category":"","last_name":"Miao, Principal Software Engineer, Couchbase","first_name":"Bingjie","job_title":"","user_url":"","description":"\ube59\uc9c0\uc5d0 \ubbf8\uc544\uc624\ub294 Couchbase\uc758 \uc218\uc11d \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uc5d4\uc9c0\ub2c8\uc5b4\uc785\ub2c8\ub2e4. Bingjie\ub294 \uad00\uacc4\ud615 \ubc0f NoSQL \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ubd84\uc57c\uc5d0\uc11c 20\ub144\uc758 \uacbd\ub825\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\uc758 \uc8fc\uc694 \uc804\ubb38 \ubd84\uc57c\ub294 \ucffc\ub9ac \ucd5c\uc801\ud654 \ubc0f \ucffc\ub9ac \uc2e4\ud589\uc785\ub2c8\ub2e4."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/8085","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/users\/3021"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/comments?post=8085"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/posts\/8085\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/media?parent=8085"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/categories?post=8085"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/tags?post=8085"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/ko\/wp-json\/wp\/v2\/ppma_author?post=8085"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}