<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>CON LAB 콘랩</title>
    <link>https://noodle-dev.tistory.com/</link>
    <description>안녕하세요 개발 공부를 하고 있습니다.</description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 13:38:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>noodle-dev</managingEditor>
    <image>
      <title>CON LAB 콘랩</title>
      <url>https://tistory1.daumcdn.net/tistory/3573437/attach/839de32ff91d495ba376490d3aa668e6</url>
      <link>https://noodle-dev.tistory.com</link>
    </image>
    <item>
      <title>앞으로 공부할 재료들</title>
      <link>https://noodle-dev.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 추천, 기본부터 고급까지 내용충실, 지속적 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=v_hU0jPtLto&quot;&gt;https://www.youtube.com/watch?v=v_hU0jPtLto&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Solidity</category>
      <author>noodle-dev</author>
      <guid isPermaLink="true">https://noodle-dev.tistory.com/139</guid>
      <comments>https://noodle-dev.tistory.com/139#entry139comment</comments>
      <pubDate>Tue, 9 Dec 2025 23:27:38 +0900</pubDate>
    </item>
    <item>
      <title>기간과 기간이 겹치는 로우 조회하는 쿼리</title>
      <link>https://noodle-dev.tistory.com/138</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;기간 A와 기간 B가 겹치는 조건은&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;기간 A와 기간 B가 겹치지 않는 조건의 부정(NOT)과 같다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 활용하면 조건문을 쉽게 작성할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 기간 A와 기간 B가 겹치지 않는 조건&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 기간 A와 기간 B가 겹치지 않는 조건은 다음과 같은 경우이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;겹치지 않는 경우 1: 기간A가 기간B보다 완전히 먼저 끝나는 경우 ( B시작일 &amp;gt; A종료일 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;겹치지 않는 경우 2: 기간A가 기간B보다 완전히 뒤에 끝나는 경우 ( A시작일 &amp;gt; B종료일 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, ( 겹치지 않는 경우 1 OR 겹치지 않는 경우 2)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 쿼리로 표현하면&lt;/p&gt;
&lt;pre id=&quot;code_1765288792715&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TB
 WHERE B시작일 &amp;gt; A종료일
    OR A시작일 &amp;gt; B종료일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 기간 A와 기간 B가 겹치는 조건&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번의 부정 조건은 ( ~(겹치지 않는 경우 1) AND ~(겹치지 않는 경우 2) ) 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 쿼리로 표현하면&lt;/p&gt;
&lt;pre id=&quot;code_1765288543537&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TB
 WHERE B시작일 &amp;lt;= A종료일
   AND A시작일 &amp;lt;= B종료일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로는 쉽게 생각하자.&lt;/p&gt;</description>
      <category>SQL,DBMS/Oracle SQL</category>
      <author>noodle-dev</author>
      <guid isPermaLink="true">https://noodle-dev.tistory.com/138</guid>
      <comments>https://noodle-dev.tistory.com/138#entry138comment</comments>
      <pubDate>Tue, 9 Dec 2025 23:04:39 +0900</pubDate>
    </item>
    <item>
      <title>특정 월의 첫번째 일자, 마지막 일자</title>
      <link>https://noodle-dev.tistory.com/137</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;첫째 일자&lt;/h3&gt;
&lt;pre id=&quot;code_1765288341504&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT TRUNC(SYSDATE, 'MM')	-- 오늘이 속한 달의 1일
FROM DUAL&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'MM'(월) 기준으로 자른다고 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마지막 일자&lt;/h3&gt;
&lt;pre id=&quot;code_1765288393663&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT LAST_DAY(SYSDATE)	-- 오늘이 속한 달의 마지막 일자
FROM DUAL&lt;/code&gt;&lt;/pre&gt;</description>
      <category>SQL,DBMS/Oracle SQL</category>
      <author>noodle-dev</author>
      <guid isPermaLink="true">https://noodle-dev.tistory.com/137</guid>
      <comments>https://noodle-dev.tistory.com/137#entry137comment</comments>
      <pubDate>Tue, 9 Dec 2025 22:54:32 +0900</pubDate>
    </item>
    <item>
      <title>변수 선언자 let, var, const 차이</title>
      <link>https://noodle-dev.tistory.com/136</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;차이점&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 재할당 (값 변경)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가능: var, let&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불가능: const&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const는 상수를 선언하는 키워드로, 값을 한번 할당하면 변경할 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 재선언 (동일 이름 중복 선언)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가능: var&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불가능: let, const&lt;/p&gt;
&lt;pre id=&quot;code_1765287198935&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var tester = &quot;Hi&quot;;
var tester = &quot;Hello&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 재선언해도 오류 안 남 -&amp;gt; 기존에 동일 이름의 변수를 선언했던 것을 까먹고 오용할 가능성 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. Scope (범위)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Function Scope: var&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Block Scope: let, const&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;var는 함수 내부에 선언된 경우만 지역변수로 인식하며, 그 외는 모두 전역변수로 간주한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, &lt;u&gt;if, for, while, try, catch 문 등의 코드 블럭 내부&lt;/u&gt;에서 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;var로 선언된 변수&lt;/span&gt;&lt;/b&gt;는 전역변수로 간주되어, 블럭 외부에서도 참조할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;u&gt;if, for, while, try, catch 문 등의 코드 블럭 내부&lt;/u&gt;에서&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;let, const로 선언된 변수&lt;/b&gt;&lt;/span&gt;는 지역변수로 간주되어, 외부에서 참조할 수 없다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4. 변수 호이스팅&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실행: var&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;미실행: let, const&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;호이스팅(Hoisting)&lt;/b&gt;이란, 코드 실행 전 변수 선언을 먼저 하여 뒤에서 선언된 변수도 앞 코드에서 참조할 수 있게 된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;var&lt;/b&gt;는 &lt;b&gt;선언과 동시에 undefined로 초기화&lt;/b&gt;된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그러므로 아래 코드에서 에러가 발생하지 않는다.&lt;/p&gt;
&lt;pre id=&quot;code_1765287683517&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(tester);	// undefined
var tester = &quot;HI&quot;;
console.log(tester);	// HI&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;반면 &lt;b&gt;let, const&lt;/b&gt;는 코드 실행 전 &lt;b&gt;변수 선언은 되지만 초기화되지 않는다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉 아래 코드에서 에러가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1765287749754&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(tester);	// ReferenceError: tester is not defined
let tester = &quot;HI&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;var 보다는 const, let을 사용하자.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;값이 변경될 가능성이 없으면 const를 사용하자.&lt;/p&gt;</description>
      <category>Javascript</category>
      <author>noodle-dev</author>
      <guid isPermaLink="true">https://noodle-dev.tistory.com/136</guid>
      <comments>https://noodle-dev.tistory.com/136#entry136comment</comments>
      <pubDate>Tue, 9 Dec 2025 22:44:18 +0900</pubDate>
    </item>
    <item>
      <title>Oracle Join, ANSI Join</title>
      <link>https://noodle-dev.tistory.com/135</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. ANSI Join&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안시 조인은 일반적으로 알고 있는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, INNER JOIN, CROSS JOIN 등으로 조인하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5rwpM/dJMcabCIdDk/ayksjQeA1ozHKGAYykdqMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5rwpM/dJMcabCIdDk/ayksjQeA1ozHKGAYykdqMk/img.png&quot; data-alt=&quot;ref. https://www.codeproject.com/articles/Visual-Representation-of-SQL-Joins#comments-section&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5rwpM/dJMcabCIdDk/ayksjQeA1ozHKGAYykdqMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5rwpM%2FdJMcabCIdDk%2FayksjQeA1ozHKGAYykdqMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;472&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ref. https://www.codeproject.com/articles/Visual-Representation-of-SQL-Joins#comments-section&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. INNER JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 테이블에서 조건에 일치하는 데이터만 조회한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;집합 개념으로 보면 교집합에 해당한다.&lt;/p&gt;
&lt;pre id=&quot;code_1765285775098&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TABLE_A T1
  INNER JOIN TABLE_B T2
          ON T1.ID = T2.ID&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. OUTER JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건에 일치하는 데이터, 조건에 일치하지 않는 데이터 모두 가져온다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) LEFT OUTER JOIN&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 테이블을 메인 테이블로 하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 테이블 데이터는 모두 가져오고, 오른쪽 테이블 데이터는 조건에 해당하는 데이터만 가져오고 없으면 NULL로 조회된다.&lt;/p&gt;
&lt;pre id=&quot;code_1765285361667&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TABLE_A T1
  LEFT OUTER JOIN TABLE_B T2
               ON T1.ID = T2.ID&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) RIGHT OUTER JOIN&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오른쪽 테이블을 메인 테이블로 하여&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오른쪽 테이블 데이터는 모두 가져오고, 왼쪽 테이블 데이터는 조건에 해당하는 데이터만 가져오고 없으면 NULL로 조회된다.&lt;/p&gt;
&lt;pre id=&quot;code_1765285614527&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TABLE_A T1
  RIGHT OUTER JOIN TABLE_B T2
                ON T1.ID = T2.ID&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;3) FULL &lt;/span&gt;OUTER JOIN&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽, 오른쪽 테이블 모두를 메인으로 하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 데이터를 가져오고 조건에 맞지 않는 데이터는 각자 NULL로 조회한다.&lt;/p&gt;
&lt;pre id=&quot;code_1765285680484&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TABLE_A T1
  FULL OUTER JOIN TABLE_B T2
               ON T1.ID = T2.ID&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;C. CROSS JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 경우의 수를 조회한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;별도 조인 조건이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 테이블 레코드가 n개, 오른쪽 테이블 레코드가 m개라면 CROSS JOIN하여 조회 시 최종적으로 n*m개의 레코드가 조회된다.&lt;/p&gt;
&lt;pre id=&quot;code_1765286121199&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
  FROM TABLE_A T1
  CROSS JOIN TABLE_B T2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Oracle Join&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FROM 절에 테이블 모두 기술하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WHERE절에 JOIN조건을 명시하는 구조이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;ORACLE JOIN은 FULL OUTER JOIN이 불가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;A. INNER JOIN&lt;/h3&gt;
&lt;pre id=&quot;code_1765286346134&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM TABLE_A T1,
     TABLE_B T2
WHERE T1.ID = T2.ID&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;INNER JOIN은 (+) 표시가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;B. OUTER JOIN&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) LEFT OUTER JOIN&lt;/h4&gt;
&lt;pre id=&quot;code_1765285473616&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM TABLE_A T1,
     TABLE_B T2
WHERE T1.ID = T2.ID (+)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LEFT OUTER JOIN일 경우, WHERE 절의 JOIN 조건 중 오른쪽 테이블 컬럼 쪽에 (+)를 붙이면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) RIGHT OUTER JOIN&lt;/h4&gt;
&lt;pre id=&quot;code_1765286299718&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM TABLE_A T1,
     TABLE_B T2
WHERE T1.ID (+) = T2.ID&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RIGHT OUTER JOIN일 경우, WHERE 절의 JOIN 조건 중 왼쪽 테이블 컬럼 쪽에 (+)를 붙이면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;C. CROSS JOIN&lt;/h3&gt;
&lt;pre id=&quot;code_1765286409640&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
FROM TABLE_A T1,
     TABLE_B T2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CROSS JOIN은 조인 조건이 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;D. 심화: WHERE절에서 메인이 아닌 테이블에 대한 조건을 거는 경우&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;만약 WHERE 조건에 T2 컬럼에 대한 조건을 거는 경우,&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1765286685108&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT *
FROM TABLE_A T1,
     TABLE_B T2
WHERE T1.ID = T2.ID (+)
  AND T2.SEND_YN = 'Y'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;이렇게 하면 T2.SEND_YN 이 NULL인 레코드는 모두 제외된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7; text-align: start;&quot;&gt;T2에 대한 컬럼이 NULL인 경우도 가져오고 싶다면&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1765286685109&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT *
FROM TABLE_A T1,
     TABLE_B T2
WHERE T1.ID = T2.ID (+)
  AND T2.SEND_YN(+) = 'Y'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;T2에 대한 컬럼 쪽에 (+)를 기술한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>SQL,DBMS/Oracle SQL</category>
      <author>noodle-dev</author>
      <guid isPermaLink="true">https://noodle-dev.tistory.com/135</guid>
      <comments>https://noodle-dev.tistory.com/135#entry135comment</comments>
      <pubDate>Tue, 9 Dec 2025 22:25:30 +0900</pubDate>
    </item>
  </channel>
</rss>