<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>DevSSOM</title>
    <link>https://celltong.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 1 Jul 2026 19:42:58 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>데브쏨</managingEditor>
    <image>
      <title>DevSSOM</title>
      <url>https://tistory1.daumcdn.net/tistory/881196/attach/b9fb8b6c8e4a4fb996a5aa8b2340f734</url>
      <link>https://celltong.tistory.com</link>
    </image>
    <item>
      <title>리눅스 기초 명령어</title>
      <link>https://celltong.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-%EB%AA%85%EB%A0%B9%EC%96%B4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Shell&lt;/h2&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;- 쉘의 종류&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;544&quot; width=&quot;477&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r7ebz/btrfou1glS7/hNcovGGu6CF1lsqhn4kPS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r7ebz/btrfou1glS7/hNcovGGu6CF1lsqhn4kPS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r7ebz/btrfou1glS7/hNcovGGu6CF1lsqhn4kPS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr7ebz%2Fbtrfou1glS7%2FhNcovGGu6CF1lsqhn4kPS1%2Fimg.png&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;544&quot; width=&quot;477&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bash : GNU 프로젝트의 일환으로 개발됨. 리눅스의 기본 Shell은 bash&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;whoami&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 로그인한 사용자 ID를 알려주는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1631945903406&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;whoami&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;passwd&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 로그인한 사용자의 비밀번호를 변경하는 명령어&lt;/p&gt;
&lt;pre id=&quot;code_1631945990616&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;passwd&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;pwd&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 현재 있는 디렉토리의 위치를 알려줌&lt;/p&gt;
&lt;pre id=&quot;code_1631946039406&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pwd&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ls&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 현재 있는 디렉토리의 목록을 출력&lt;/p&gt;
&lt;pre id=&quot;code_1631946092531&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-l 옵션을 추가하게 되면 조금 더 자세하게 출력됨&lt;/p&gt;
&lt;pre id=&quot;code_1631946139775&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -l&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-a 옵션을 추가하게 되면 숨겨진 파일이나 디렉토리를 포함해서 출력함&lt;/p&gt;
&lt;pre id=&quot;code_1631946184520&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls- a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-l 옵션과 -a 옵션을 합쳐서 쓸 수도 있음 -&amp;gt; 숨겨진 파일까지 모두 현재 디렉토리의 목록을 상세히 출력&lt;/p&gt;
&lt;pre id=&quot;code_1631946224451&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -al&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;cd&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 뒤에 다른 폴더의 이름을 적으면 해당 디렉토리로 이동&lt;/p&gt;
&lt;pre id=&quot;code_1631946305121&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd my_project&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;--help&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 명령어 뒤에 붙여써서 그 명령어에 대한 사용 방법을 출력함&lt;/p&gt;
&lt;pre id=&quot;code_1631946368227&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls --help&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CD</category>
      <category>Help</category>
      <category>ls -al</category>
      <category>pwd</category>
      <category>Shell</category>
      <category>기초명령어</category>
      <category>리눅스</category>
      <category>리눅스기초</category>
      <category>리눅스명령어</category>
      <category>쉘</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/377</guid>
      <comments>https://celltong.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-%EB%AA%85%EB%A0%B9%EC%96%B4#entry377comment</comments>
      <pubDate>Sun, 19 Sep 2021 16:36:44 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 파일 시스템</title>
      <link>https://celltong.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;파일 시스템&lt;/h2&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;h2 data-ke-size=&quot;size26&quot;&gt;리눅스 파일 시스템&lt;/h2&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 : 주기억장치나 디스크처럼 물리적인 하드웨어 저장 공간에 저장되는 데이터의 집합&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 시스템의 종류&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FAT : 파일 할당 테이블. 디카 메모리 카드, 컴퓨터 시스템에 널리 쓰이는 파일 시스템 구조. 너무 단순한 구조를 가지고 있어서 공간 활용이 잘 안됨&lt;/li&gt;
&lt;li&gt;NTFS : 윈도우즈 NT 계열의 파일시스템 구조로 윈도우 2000 이후에 윈도우에 포함되어 있음. 윈도우 시스템에서 이전에 쓰이던 FAT 구조를 대체하기 위해서 만듦. 시스템과 디스크의 손상을 복구하는 능력이 있음. 보안성도 FAT보다 많이 향상됨&lt;/li&gt;
&lt;li&gt;EXT 시리즈 : EXT3는 온라인 파일 시스템에 굉장한 성능을 보이고, 큰 규모의 디렉토리를 위해 해쉬를 통해 접근가능한 데이터 탐색을 좀 더 빠르게 할 수 있다는 장점이 있음. EXT4는 성능을 더 향상시킨 초대형 파일 시스템.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디렉토리 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 파일 시스템의 디렉토리 구조는 &lt;span style=&quot;color: #9feec3;&quot;&gt;트리(tree)&lt;/span&gt; 구조. 루트에서부터 시작해서 나무가 가지를 뻗듯이 계층적으로 뻗어나감.&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 alignLeft&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;322&quot; width=&quot;562&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crCgZP/btrfp23LBsV/M9QlMto5OBeTssn9VGoKp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crCgZP/btrfp23LBsV/M9QlMto5OBeTssn9VGoKp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crCgZP/btrfp23LBsV/M9QlMto5OBeTssn9VGoKp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrCgZP%2Fbtrfp23LBsV%2FM9QlMto5OBeTssn9VGoKp1%2Fimg.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;322&quot; width=&quot;562&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;소유권과 권한&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 속성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls -al 명령어를 통해 파일 속성 확인&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 유형 : - -&amp;gt; 파일, d : 폴더&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;611&quot; width=&quot;702&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVW12T/btrfqDWXuNb/YKrkBRc8c8ZkL1yemnc690/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVW12T/btrfqDWXuNb/YKrkBRc8c8ZkL1yemnc690/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVW12T/btrfqDWXuNb/YKrkBRc8c8ZkL1yemnc690/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVW12T%2FbtrfqDWXuNb%2FYKrkBRc8c8ZkL1yemnc690%2Fimg.png&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;611&quot; width=&quot;702&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 권한 : r -&amp;gt; 읽기(4), w -&amp;gt; 쓰기(2), x -&amp;gt; 실행(1). 아래는 소유자는 읽기와 쓰기가 가능하고, 그룹과 그 외 사용자는 읽기만 가능한 예시. 권한의 숫자를 다 더하면 7이 나오는데, 그럼 모든 권한이 있다는 뜻. 4 + 2 = 6으로 읽기와 쓰기 권한이 있다는 것이고, 4는 읽기만 있다는 뜻이 되는 것.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;336&quot; width=&quot;388&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqsIG4/btrfnN73Wcc/hvX8oPSfKWxOtrsshShes0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqsIG4/btrfnN73Wcc/hvX8oPSfKWxOtrsshShes0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqsIG4/btrfnN73Wcc/hvX8oPSfKWxOtrsshShes0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqsIG4%2FbtrfnN73Wcc%2FhvX8oPSfKWxOtrsshShes0%2Fimg.png&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;336&quot; width=&quot;388&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일의 권한 변경 : chmod&lt;/h3&gt;
&lt;pre id=&quot;code_1631948827533&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 777 elice.txt
ls -al&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;chmod [파일권한] [변경할 파일 위치 또는 이름]을 입력. 파일 권한은 읽기(4), 쓰기(2), 실행(1)로 숫자로 표현. 777 권한은 모든 사용자가 모든 권한을 얻는다는 의미.&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;h3 data-ke-size=&quot;size23&quot;&gt;파일의 소유권 변경 : chown&lt;/h3&gt;
&lt;pre id=&quot;code_1631948972215&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chown devssom:devssom elice.text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;chown [소유할유저]:[소유할그룹] [소유권 변경하고 싶은 디렉토리 / 파일명] 을 입력해줌. 단, 해당 명령어는 root 권한이 있어야 실행 가능.&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;디렉토리 생성 : mkdir&lt;/h3&gt;
&lt;pre id=&quot;code_1631949338027&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir devssom&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir [생성할 디렉토리 이름] 형식으로 사용. 현재 디렉토리 위치에 새로운 디렉토리를 생성. mkdir [디렉토리 경로/디렉토리명] 사용 가능.&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;빈파일 생성 : touch&lt;/h3&gt;
&lt;pre id=&quot;code_1631949494337&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;touch devssom&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;touch [생성할 파일 이름] 형식으로 사용. touch [디렉토리 경로/파일명] 사용 가능.&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;디렉토리 삭제 : rmdir&lt;/h3&gt;
&lt;pre id=&quot;code_1631949550313&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rmdir devssom&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rmdir [삭제할 디렉토리 이름] 형식으로 사용. 비어있는 디렉토리를 삭제. 지정한 디렉토리에 파일이 있을 경우에는 삭제가 불가능함.&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;파일 및 디렉토리 삭제 : rm&lt;/h3&gt;
&lt;pre id=&quot;code_1631949624477&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm [option] [삭제할 파일 및 디렉토리 이름]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;option&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;-r : 디렉토리와 그 하부 파일까지 삭제&lt;/li&gt;
&lt;li&gt;-f : 삭제 여부를 묻지 않고 바로 삭제&lt;/li&gt;
&lt;li&gt;-i : 삭제할 것인지 확인&lt;/li&gt;
&lt;li&gt;-rf : 삭제 여부를 묻지 않고, 하부 파일이 있는 디렉토리까지 삭제&lt;/li&gt;
&lt;/ul&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스, git</category>
      <category>777</category>
      <category>chmod</category>
      <category>Linux</category>
      <category>권한</category>
      <category>디렉토리구조</category>
      <category>리눅스</category>
      <category>소유권</category>
      <category>파일시스템</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/378</guid>
      <comments>https://celltong.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C#entry378comment</comments>
      <pubDate>Sat, 18 Sep 2021 17:56:48 +0900</pubDate>
    </item>
    <item>
      <title>우분투</title>
      <link>https://celltong.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데비안 GNU/Linux를 기반으로 제작된 데스크탑 환경을 사용하는 리눅스 배포판. 우분투라는 이름은 남아프리카의 반투어인 '우분투'라는 말에서 파생되었는데, 사람들간의 관계와 헌신에 중점을 둔 윤리 사상 혹은 인본주의 사상으로 평화운동의 사상적 뿌리라는 뜻.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 우분투를 사용할까?&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개인용 PC 환경에 최적화 되어 있다&lt;/li&gt;
&lt;li&gt;간결하고 쉽다&lt;/li&gt;
&lt;li&gt;많은 사용자를 가지고 있다 (커뮤니티를 통해 문제해결 방법을 얻을 수 있음)&lt;/li&gt;
&lt;li&gt;약 6개월 단위로 업데이트 되어 보안 이슈가 생겼을 경우 빠른 대처가 가능하다&lt;br /&gt;(나온 연도와 달로 번호를 지정 ex. 19.04 -&amp;gt; 19년도 4월에 공개됨)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;우분투 LTS 버전&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전 번호 뒤에 LTS가 붙어있다면, Long Term Support의 약어로 장기간으로 우분투에서 지원해줘서 가장 안정적인 버전임 (ex. 14.04 LTS, 16.04 LTS, 18.04 LTS)&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;h2 data-ke-size=&quot;size26&quot;&gt;패키지 관리자 - apt&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Advanced Packaging Tool의 약자로 데비안 리눅스(.dev) 또는 파생된 배포판(우분투)에서 소프트웨어를 설치, 제거, 업데이트 하는 관리를 할 때 사용;&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;우분투에서 패키지를 설치하는 apt 명령어를 사용하려고 하면, 권한이 없어 명령 실행이 불가능하다고 뜨는데, apt는 높은 권한이 필요하기 때문. 이때 sudo라는 키워드를 통해서 권한을 획득할 수 있음.&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;h2 data-ke-size=&quot;size26&quot;&gt;root&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스에서 모든 권한을 가지고 있는 최고 관리자를 뜻함. 그렇기 때문에 루트는 운영체제의 모든 것을 제어할 권리를 가짐. 이러한 관리자 권한을 유저가 사용하려면 &quot;sudo 사용할 명령어&quot;의 방식으로 권한을 획득할 수 있음(ex. sudo apt install package).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스, git</category>
      <category>우분투</category>
      <category>우분투LTS</category>
      <category>우분투뜻</category>
      <category>우분투를 사용하는 이유</category>
      <category>우분투왜쓸까</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/376</guid>
      <comments>https://celltong.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC#entry376comment</comments>
      <pubDate>Sat, 18 Sep 2021 15:15:04 +0900</pubDate>
    </item>
    <item>
      <title>리눅스</title>
      <link>https://celltong.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리누스 토발즈에 의해 만들어진 컴퓨터 운영 체제. 자유 소프트웨어와 오픈 소스 개발의 가장 유명한 표본. 리눅스는 GNU 프로젝트의 일환인데, GNU프로젝트란 Gnu is not Unix의 줄임말로, 유닉스 운영체제를 여러 회사에서 각자 개발하며 소스 코드를 공유하지 않는 문화에 대한 반발로 생겼음. 그래서 오픈 소스를 굉장히 지향함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스의 구조&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스의 구조는 크게 4가지. 가장 기본이 되는 CPU, 메모리와 같은 하드웨어에 커널이 올라감.&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 floatLeft&quot; width=&quot;336&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;589&quot; height=&quot;336&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PSpeI/btrfscSkxUy/RpmQGQnSRKviJbmcKxbDxk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PSpeI/btrfscSkxUy/RpmQGQnSRKviJbmcKxbDxk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PSpeI/btrfscSkxUy/RpmQGQnSRKviJbmcKxbDxk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPSpeI%2FbtrfscSkxUy%2FRpmQGQnSRKviJbmcKxbDxk%2Fimg.jpg&quot; width=&quot;336&quot; data-origin-width=&quot;589&quot; data-origin-height=&quot;589&quot; height=&quot;336&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;kernel&lt;/span&gt; : 하드웨어를 제어하는 코드를 통해 소프트웨어와 커뮤니케이션을 하며 시스템의 모든 자원을 통제 관리하는 역할을 수행한다. 프로세스/메모리/파일시스템/장치관리등 컴퓨터의 모든 자원 초기화 및 제어가 가능하다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;shell&lt;/span&gt; : 커널 위의 쉘은 명령어 해석기라고 불리며 사용자가 입력한 명령어를 커널에게 전달하는 역할을 수행한다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;applications&lt;/span&gt; :&amp;nbsp; 흔히 알고 있는 각종 프로그램들.&amp;nbsp;&lt;/li&gt;
&lt;/ul&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;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스의 특징&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유닉스 기반&lt;/li&gt;
&lt;li&gt;멀티 유저와 멀티 태스킹 지원&lt;/li&gt;
&lt;li&gt;CLI 및 GUI 모두 지원&lt;/li&gt;
&lt;li&gt;다양하고 강력한 네트워킹 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리눅스 종류&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;609&quot; width=&quot;786&quot; height=&quot;401&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwf429/btrfsebxp9v/SJ9rxaIYEWUhyxibDj2wVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwf429/btrfsebxp9v/SJ9rxaIYEWUhyxibDj2wVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwf429/btrfsebxp9v/SJ9rxaIYEWUhyxibDj2wVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwf429%2Fbtrfsebxp9v%2FSJ9rxaIYEWUhyxibDj2wVK%2Fimg.png&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;609&quot; width=&quot;786&quot; height=&quot;401&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리눅스, git</category>
      <category>Linux</category>
      <category>리눅스</category>
      <category>리눅스구조</category>
      <category>리눅스종류</category>
      <category>리눅스특징</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/375</guid>
      <comments>https://celltong.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4#entry375comment</comments>
      <pubDate>Sat, 18 Sep 2021 15:08:49 +0900</pubDate>
    </item>
    <item>
      <title>SQL - 윈도우 함수</title>
      <link>https://celltong.tistory.com/entry/SQL-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%95%A8%EC%88%98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;윈도우 함수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순위, 집계 등 행과 행 사이의 관계를 정의하는 함수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;OVER 구문이 필수&lt;/span&gt;로 포함해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1630043466328&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT WINDOW_FUNCTION(ARGUMENTS)
OVER([PARTITION BY 컬럼][ORDER BY절][WINDOWING절])FROM 테이블명;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 91.1628%; height: 180px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 47.5952%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;구조&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 47.5952%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;ARGUMENTS&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;윈도우 함수에 따라서 필요할 때 넣어주는 인수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 47.5952%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;PARTITION BY&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;전체 데이터를 어떤 소그룹으로 나누는 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 47.5952%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;ORDER BY&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;나눠진 소그룹에 대한 정렬 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 47.5952%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;WINDOWING&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;행에 대한 범위 기준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.7078%; text-align: center; height: 80px;&quot; rowspan=&quot;4&quot;&gt;WINDOWING에&lt;br /&gt;사용되는 명령어&lt;/td&gt;
&lt;td style=&quot;width: 29.8874%; text-align: center; height: 20px;&quot;&gt;ROWS&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;물리적 단위로 행의 집합을 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.8874%; text-align: center; height: 20px;&quot;&gt;UNBOUNDED PRECEDING&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;윈도우의 시작 위치가 첫 번째 행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.8874%; text-align: center; height: 20px;&quot;&gt;UNBOUNDED FOLLOWING&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;윈도우의 마지막 위치가 마지막 행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 29.8874%; text-align: center; height: 20px;&quot;&gt;CURRENT ROW&lt;/td&gt;
&lt;td style=&quot;width: 68.2233%; text-align: center; height: 20px;&quot;&gt;윈도우의 시작 위치가 현재 행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 순위 함수&lt;/h3&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/373</guid>
      <comments>https://celltong.tistory.com/entry/SQL-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%95%A8%EC%88%98#entry373comment</comments>
      <pubDate>Tue, 7 Sep 2021 22:43:51 +0900</pubDate>
    </item>
    <item>
      <title>SQL - 종류별 JOIN (조인) 알아보기</title>
      <link>https://celltong.tistory.com/entry/SQL-%EC%A1%B0%EC%9D%B8-EQUI-JOIN-USING-INNER-JOIN-NATURAL-JOIN-CROSS-JOIN</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;JOIN&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개 이상의 테이블들을 &lt;span style=&quot;color: #9feec3;&quot;&gt;연결&lt;/span&gt; 또는 &lt;span style=&quot;color: #9feec3;&quot;&gt;결합&lt;/span&gt;해서 데이터를 출력하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자에 따라 JOIN 방식을 EQUI JOIN과 Non EQUI 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;EQUI JOIN (등가 교집합)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등가 연산자 '&lt;span style=&quot;color: #9feec3;&quot;&gt;=&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;Non EQUI JOIN (비등가 교집합)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등가 연산자 이외의 연산자들 &lt;span style=&quot;color: #9feec3;&quot;&gt;&amp;gt;, &amp;gt;=, &amp;lt;=, &amp;lt;, BETWEEN&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;FROM절 JOIN 형태&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;INNER JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부 조인이라고 하며, 조인 조건에서 동일한 값이 있는 행만 반환. INNER JOIN은 JOIN의 기본값으로 'INNER' 생략 가능.&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;ON 조건절을 활용하면 컬럼명이 다르더라도 조인 조건을 사용할 수 있음.&lt;/p&gt;
&lt;pre id=&quot;code_1629955728000&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM 테이블1 [INNER] JOIN 테이블2    /* INNER JOIN구로 테이블 정의 */
ON 테이블1.컬럼명 = 테이블2.컬럼명;            /* ON구를 사용해 조인 조건 지정 */&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;JOIN을 활용한 쿼리에서도 WHERE문을 이용해서 조건을 걸 수도 있음. 서로 별개니까.&lt;/p&gt;
&lt;pre id=&quot;code_1629959755333&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM 테이블1 (INNER) JOIN 테이블2
ON 테이블1.컬럼명 = 테이블2.컬럼명;
WHERE [조건];    /* 기존과 같이 WHERE문을 이용 */&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;연습문제&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) EMPLOYEE 테이블과 POSITION_T 테이블에는 각 테이블의 구조에 맞도록 사원 정보 및 직급 정보가 담겨 있습니다. EMPLOYEE 테이블의 사원 정보에는 직급의 명칭이 담겨있지 않고, 어떤 직급인지에 대한 직급 ID가 담겨있습니다. 각 사원 정보에 따라서 직급 명칭을 알기 위해 INNER JOIN과 ON을 활용하여 쿼리를 작성해봅시다. EMPLOYEE 테이블과 POSITION_T 테이블의 구조는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;309&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AWMHN/btrdetpACRn/IulXiLLUZvEiBKpJttd3qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AWMHN/btrdetpACRn/IulXiLLUZvEiBKpJttd3qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AWMHN/btrdetpACRn/IulXiLLUZvEiBKpJttd3qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAWMHN%2FbtrdetpACRn%2FIulXiLLUZvEiBKpJttd3qk%2Fimg.png&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;309&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EMPLOYEE테이블과 POSITION_T 테이블에서 직급 ID(POSITION_ID) 가 같은 데이터에 대해 INNER JOIN절 과 ON절을 이용하여 사원 번호(EMPLOYEE_ID), 이름(NAME), 직급 명칭(POSITION_NAME) 을 조회하는 쿼리를 작성하세요. 그리고, 결과에 대해 ORDER BY 를 이용하여 사원 번호를 기준으로 오름차순 정렬을 해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1629957591076&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT EMPLOYEE_ID, NAME, POSITION_NAME
FROM EMPLOYEE
INNER JOIN POSITION_T
ON EMPLOYEE.POSITION_ID = POSITION_T.POSITION_ID
ORDER BY EMPLOYEE_ID ASC;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;168&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZMiKm/btrdaES16C0/JWAjDOXsNxnSxYHEL47uwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZMiKm/btrdaES16C0/JWAjDOXsNxnSxYHEL47uwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZMiKm/btrdaES16C0/JWAjDOXsNxnSxYHEL47uwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZMiKm%2FbtrdaES16C0%2FJWAjDOXsNxnSxYHEL47uwK%2Fimg.png&quot; data-origin-width=&quot;461&quot; data-origin-height=&quot;168&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&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;2) STORE 테이블에는 가게 타입 코드와 가게 이름 정보가 담겨 있으며, STORE_TYPE_CODE 테이블에는 가게 타입 코드와 타입 이름 정보가 담겨 있습니다. STORE 테이블에는 어떠한 타입의 가게인지 가게 타입 이름이 저장되어 있지 않고, 가게 타입 코드 정보가 저장되어 있습니다. STORE_TYPE_CODE 테이블을 이용하여 STORE 테이블에서 각 가게가 어떤 가게 타입인지 코드가 아닌 이름으로 표현되도록 쿼리를 작성해봅시다.&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 alignLeft&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;339&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSOBtq/btrdaGDhDLK/DAU7elCvGJoCpDyyByOXT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSOBtq/btrdaGDhDLK/DAU7elCvGJoCpDyyByOXT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSOBtq/btrdaGDhDLK/DAU7elCvGJoCpDyyByOXT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSOBtq%2FbtrdaGDhDLK%2FDAU7elCvGJoCpDyyByOXT1%2Fimg.png&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;339&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STORE테이블과 STORE_TYPE_CODE 테이블에서 가게 타입 코드(store_type_code) 가 같은 데이터에 대해 INNER JOIN절 과 ON절을 이용하여 가게 이름(store_name)과 타입 이름(store_type_name) 을 조회하는 쿼리를 작성하세요. 결과에 대해 ORDER BY 를 이용하여 가게 이름을 기준으로 오름차순 정렬을 해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1629957968660&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT STORE_NAME, STORE_TYPE_NAME 
FROM STORE
INNER JOIN STORE_TYPE_CODE
ON STORE.STORE_TYPE_CODE = STORE_TYPE_CODE.STORE_TYPE_CODE
ORDER BY STORE_NAME ASC;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;183&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRPogK/btrdcP7PnAi/lz1XUwdg5x58cTSs9U55Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRPogK/btrdcP7PnAi/lz1XUwdg5x58cTSs9U55Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRPogK/btrdcP7PnAi/lz1XUwdg5x58cTSs9U55Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRPogK%2FbtrdcP7PnAi%2Flz1XUwdg5x58cTSs9U55Zk%2Fimg.png&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;183&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&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;USING 조건절&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;같은 이름을 가진 컬럼들 중 &lt;span style=&quot;color: #9feec3;&quot;&gt;원하는 컬럼에 대해서만&lt;/span&gt; 선택적으로 등가 조인이 가능. SQL Server에서는 지원 X&lt;/p&gt;
&lt;pre id=&quot;code_1629958084251&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM 테이블1 JOIN 테이블2
USING(기준컬럼);  
-- USING 조건절 사용시 컬럼이나 테이블에 별칭을 붙일 수 없음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NATURAL JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 테이블 간에 &lt;span style=&quot;color: #9feec3;&quot;&gt;동일한 이름의 컬럼들을 모두&lt;/span&gt; 등가 조인으로 결합시키는 것. INNER JOIN과 달리 별칭 지정 불가.&lt;/p&gt;
&lt;pre id=&quot;code_1629958210854&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM 테이블1 NATURAL JOIN 테이블2
-- 추가로 ON 조건절이나 USING 조건절, WHERE절에서 JOIN 조건 정의 불가 (필요하지도 않음)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CROSS JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JOIN 조건이 없는 경우 생길 수 있는 &lt;span style=&quot;color: #9feec3;&quot;&gt;모든 데이터의 조합&lt;/span&gt;을 조회.&lt;/p&gt;
&lt;pre id=&quot;code_1629958666656&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM PERSON
(CROSS) JOIN PUBLIC_TRANSPORT;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CROSS JOIN의 CROSS도 INNER JOIN의 INNER처럼 생략을 할 수 있는데, 그럼 얘네 둘이 다 앞이 생략되면 어떻게 구분하냐? -&amp;gt; INNER JOIN에는 당연히 ON 조건절이나 USING 조건절이 무조건 들어가야 함. 그런데, INNER JOIN에서 ON 조건절이나 USING 조건절을 사용하지 않으면 그거 자체로 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-origin-width=&quot;1522&quot; data-origin-height=&quot;356&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ljr79/btrdeXxhGoe/xqzgcJY8VhEIFGW6cmLhiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ljr79/btrdeXxhGoe/xqzgcJY8VhEIFGW6cmLhiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ljr79/btrdeXxhGoe/xqzgcJY8VhEIFGW6cmLhiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLjr79%2FbtrdeXxhGoe%2FxqzgcJY8VhEIFGW6cmLhiK%2Fimg.png&quot; data-origin-width=&quot;1522&quot; data-origin-height=&quot;356&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;OUTER JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 테이블 간에 교집합을 조회하고, 한쪽 테이블에만 있는 데이터도 포함시켜서 조회. 한쪽 테이블에만 있는 데이터도 있으면, 없는 다른 쪽에 빈 곳은 NULL 값으로 출력한다. WHERE 조건절에서 한쪽에만 있는 데이터를 포함시킬 테이블 쪽으로 (+) 기호를 위치시키면 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629959143655&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM USER, CLASS
WHERE USER.CLASS_ID (+)= CLASS.CLASS_ID;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;294&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QYLFD/btrdeXD07md/5GYGeArDMiZKd36TGipXbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QYLFD/btrdeXD07md/5GYGeArDMiZKd36TGipXbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QYLFD/btrdeXD07md/5GYGeArDMiZKd36TGipXbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQYLFD%2FbtrdeXD07md%2F5GYGeArDMiZKd36TGipXbK%2Fimg.png&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;294&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(+) 기호가 왼쪽에 있으니까, 왼쪽에 있는 건 USER 테이블. USER 테이블에 있는 모든 데이터를 출력한다는 뜻. 그리고 그거에 맞춰서 CLASS 테이블이 들어오는데, 값이 없는 애들은 NULL로 조회가 된다.&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;h3 data-ke-size=&quot;size23&quot;&gt;SELF JOIN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀프 조인은 테이블이 다른 테이블이 아니라 자기 자신 테이블과 조인한다는 의미. 셀프 조인을 하면 테이블과 컬럼 이름이 모두 동일하기 때문에 각각을 식별하기 위해선 별칭이 필수.&lt;/p&gt;
&lt;pre id=&quot;code_1629960087624&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ALPHA.컬럼명, BETA.컬럼명, ...
FROM 테이블1 ALPHA, 테이블1 BETA    /* 셀프 조인 시 별칭을 지정해줘야 구분이 가능 */
WHERE ALPHA.컬럼명2 = BETA.컬럼명1;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀프 조인 예시- 계층형 질의&lt;/p&gt;
&lt;pre id=&quot;code_1629960436682&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ALPHA.사원번호, ALPHA.관리자, BETA.관리자 차상위
FROM 직원 ALPHA, 직원 BETA
WHERE APLHA.관리자 (+)= BETA.사원번호;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;376&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Prg4c/btrdjdMVqpr/qBEqscqokWNzM7OaTozRj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Prg4c/btrdjdMVqpr/qBEqscqokWNzM7OaTozRj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Prg4c/btrdjdMVqpr/qBEqscqokWNzM7OaTozRj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPrg4c%2FbtrdjdMVqpr%2FqBEqscqokWNzM7OaTozRj1%2Fimg.png&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;376&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase</category>
      <category>CROSS JOIN</category>
      <category>EQUI JOIN</category>
      <category>INNER JOIN</category>
      <category>JOIN</category>
      <category>NATURAL JOIN</category>
      <category>nonequi join</category>
      <category>OUTER JOIN</category>
      <category>SELF JOIN</category>
      <category>SQL</category>
      <category>using</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/372</guid>
      <comments>https://celltong.tistory.com/entry/SQL-%EC%A1%B0%EC%9D%B8-EQUI-JOIN-USING-INNER-JOIN-NATURAL-JOIN-CROSS-JOIN#entry372comment</comments>
      <pubDate>Mon, 6 Sep 2021 16:22:25 +0900</pubDate>
    </item>
    <item>
      <title>SQL - 계층형 질의</title>
      <link>https://celltong.tistory.com/entry/SQL-%EA%B3%84%EC%B8%B5%ED%98%95-%EC%A7%88%EC%9D%98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;계층형 데이터&lt;/h2&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;423&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lzlLN/btrdd5A11Hv/FVD0RU74Sl5JT1kZUt20F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lzlLN/btrdd5A11Hv/FVD0RU74Sl5JT1kZUt20F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lzlLN/btrdd5A11Hv/FVD0RU74Sl5JT1kZUt20F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlzlLN%2Fbtrdd5A11Hv%2FFVD0RU74Sl5JT1kZUt20F1%2Fimg.png&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;423&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&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;이해하기 쉽게 샘플 데이터 먼저 보기. 샘플 데이터를 계층형 구조로 나타내보면, D와 E의 관리자인 C, B와 C의 관리자인 A가 있음. 그러면, D와 E보다는 C가, B와 C보다는 A가 더 상위데이터가 되는 것임. 이렇게 하나의 테이블 안에서 컬럼들이 서로 순환적으로 이루어져 있기 때문에 순환관계 데이터 모델이라고 하고, 이런 데이터를 계층형 데이터라고 함.&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;h2 data-ke-size=&quot;size26&quot;&gt;계층형 질의&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블에 계층형 데이터가 존재하는 경우, 데이터를 조회하기 위해 사용하는 것. 계층형 데이터를 조금 더 보기 편하게 출력하기 위해서 쓴다고 생각하면 됨.&lt;/p&gt;
&lt;pre id=&quot;code_1629867885398&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT LEVEL, 자식 컬럼, 부모 컬럼, 원하는 컬럼
FROM 테이블명
START WITH 부모 컬럼 IS NULL              /* 부모 컬럼이 NULL인 행이 Root(가장 상위)가 됨 */
CONNECT BY PRIOR 자식 컬럼 = 부모 컬럼;   /* 상위 데이터와 하위 데이터의 연결 방식 */&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LEVEL : 검색 항목의 깊이를 의미. 위에서부터 몇 번째 데이터인지 숫자로 나타낸 것&lt;/li&gt;
&lt;li&gt;START WITH : 어떤 데이터가 최상위 데이터가 될 것인지 기준을 잡아주는 것&lt;/li&gt;
&lt;li&gt;CONNECT BY : 상위 데이터와 하위 데이터를 어떻게 연결시켜 줄 거냐? 자식 컬럼과 부모 컬럼의 관계를 정의&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;674&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjXK1h/btrdd5OAVv7/L1D1HnYaKOUxMhDvuH1Ie0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjXK1h/btrdd5OAVv7/L1D1HnYaKOUxMhDvuH1Ie0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjXK1h/btrdd5OAVv7/L1D1HnYaKOUxMhDvuH1Ie0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjXK1h%2Fbtrdd5OAVv7%2FL1D1HnYaKOUxMhDvuH1Ie0%2Fimg.png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;674&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase</category>
      <category>Connect by</category>
      <category>LEVEL</category>
      <category>SQL</category>
      <category>START WITH</category>
      <category>계층형구조</category>
      <category>계층형데이터</category>
      <category>계층형질의</category>
      <category>순환관계</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/371</guid>
      <comments>https://celltong.tistory.com/entry/SQL-%EA%B3%84%EC%B8%B5%ED%98%95-%EC%A7%88%EC%9D%98#entry371comment</comments>
      <pubDate>Sun, 5 Sep 2021 20:20:54 +0900</pubDate>
    </item>
    <item>
      <title>SQL - 집합 연산자 : UNION, UNION ALL, INTERSECT, EXCEPT</title>
      <link>https://celltong.tistory.com/entry/SQL-%EC%A7%91%ED%95%A9-%EC%97%B0%EC%82%B0%EC%9E%90-UNION-UNION-ALL-INTERSECT-EXCEPT</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;집합 연산자&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개 이상의 테이블에서 JOIN을 사용하지 않고, 연관된 데이터를 조회하는 방법 중 하나. 테이블에서 SELECT한 컬럼의 수와 각 컬럼의 데이터타입이 테이블 간 서로 호환이 가능해야됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;UNION&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 테이블을 하나로 만드는 연산. 관계형 대수의 일반 집합 연산에서&amp;nbsp;&lt;span style=&quot;color: #9feec3;&quot;&gt;합집합&lt;/span&gt;의 역할. 합친 후에 테이블에서 &lt;span style=&quot;color: #9feec3;&quot;&gt;중복된 데이터는 제거&lt;/span&gt;. 이를 위해 UNION은 테이블을 합칠 때 정렬 과정을 발생시킴(하지만 최종 결과에 대해 올바른 정렬을 위해서는 ORDER BY 구문을 사용해야함)&amp;nbsp;&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-origin-width=&quot;1524&quot; data-origin-height=&quot;702&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmMySS/btrc8hvEwcD/9jiHAVOLVvACsgihv2Cn50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmMySS/btrc8hvEwcD/9jiHAVOLVvACsgihv2Cn50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmMySS/btrc8hvEwcD/9jiHAVOLVvACsgihv2Cn50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmMySS%2Fbtrc8hvEwcD%2F9jiHAVOLVvACsgihv2Cn50%2Fimg.png&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;702&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;UNION ALL&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UNION과 거의 같은 기능을 수행함. 다만, &lt;span style=&quot;color: #9feec3;&quot;&gt;※ UNION과 달리 중복 제거와 정렬을 하지 않음&lt;/span&gt; &lt;span style=&quot;color: #9feec3;&quot;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw7OFy/btrc9eZLd0E/TOvRAGmVEMuul1vPYyQLR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw7OFy/btrc9eZLd0E/TOvRAGmVEMuul1vPYyQLR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw7OFy/btrc9eZLd0E/TOvRAGmVEMuul1vPYyQLR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw7OFy%2Fbtrc9eZLd0E%2FTOvRAGmVEMuul1vPYyQLR1%2Fimg.png&quot; data-origin-width=&quot;1426&quot; data-origin-height=&quot;672&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;INTERSECT&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 테이블에 대해 겹치는 부분을 추출하는 연산. 관계형 대수의 일반 집합 연산에서 &lt;span style=&quot;color: #9feec3;&quot;&gt;교집합&lt;/span&gt;의 역할. 추출 후에는 중복된 결과를 제거.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로, INTERSECT는 Oracle, Maria DB에서는 지원되지만, MySQL에서는 지원되지 않음.&amp;nbsp;&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-origin-width=&quot;1530&quot; data-origin-height=&quot;652&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lscm8/btrc7O1DxWi/igs9kAyisK2qkOLBDF7nRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lscm8/btrc7O1DxWi/igs9kAyisK2qkOLBDF7nRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lscm8/btrc7O1DxWi/igs9kAyisK2qkOLBDF7nRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flscm8%2Fbtrc7O1DxWi%2Figs9kAyisK2qkOLBDF7nRK%2Fimg.png&quot; data-origin-width=&quot;1530&quot; data-origin-height=&quot;652&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EXCEPT (MINUS)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관계형 대수의 일반 집합 연산에서 차집합의 역할. 두 개의 테이블에서 겹치는 부분을 앞의 테이블에서 제외해서 추출하는 연산. 추출 후에는 중복된 결과를 제거. INTERSECT로 나온 결과물만 빼준다고 생각해도 됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로, Maria DB에서는 10.3 version부터 지원, Oracle DB에서는 MINUS라는 이름으로 지원,&amp;nbsp;MySQL에서는 지원 안됨.&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-origin-width=&quot;1519&quot; data-origin-height=&quot;634&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yzvf2/btrdcQYpWNw/KMfc6DKFqcDtS4Ii2CR3j0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yzvf2/btrdcQYpWNw/KMfc6DKFqcDtS4Ii2CR3j0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yzvf2/btrdcQYpWNw/KMfc6DKFqcDtS4Ii2CR3j0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyzvf2%2FbtrdcQYpWNw%2FKMfc6DKFqcDtS4Ii2CR3j0%2Fimg.png&quot; data-origin-width=&quot;1519&quot; data-origin-height=&quot;634&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase</category>
      <category>Except</category>
      <category>INTERSECT</category>
      <category>minus</category>
      <category>SQL</category>
      <category>union</category>
      <category>UNION ALL</category>
      <category>교집합</category>
      <category>집합연산자</category>
      <category>차이</category>
      <category>차집합</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/370</guid>
      <comments>https://celltong.tistory.com/entry/SQL-%EC%A7%91%ED%95%A9-%EC%97%B0%EC%82%B0%EC%9E%90-UNION-UNION-ALL-INTERSECT-EXCEPT#entry370comment</comments>
      <pubDate>Sat, 4 Sep 2021 14:56:55 +0900</pubDate>
    </item>
    <item>
      <title>SQL - STANDARD SQL</title>
      <link>https://celltong.tistory.com/entry/SQL-STANDARD-SQL</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;관계형 대수&lt;/h2&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 일반 집합 연산&lt;/h3&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;418&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m1tW5/btrdd6mcIX7/k3QDeC7C5ND2OhWVqxQ5j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m1tW5/btrdd6mcIX7/k3QDeC7C5ND2OhWVqxQ5j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m1tW5/btrdd6mcIX7/k3QDeC7C5ND2OhWVqxQ5j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm1tW5%2Fbtrdd6mcIX7%2Fk3QDeC7C5ND2OhWVqxQ5j1%2Fimg.png&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;418&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1563&quot; data-origin-height=&quot;641&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjeHfE/btrc2phm2BD/9SpXKNJtjt2sI7dhKYRms0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjeHfE/btrc2phm2BD/9SpXKNJtjt2sI7dhKYRms0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjeHfE/btrc2phm2BD/9SpXKNJtjt2sI7dhKYRms0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjeHfE%2Fbtrc2phm2BD%2F9SpXKNJtjt2sI7dhKYRms0%2Fimg.png&quot; data-origin-width=&quot;1563&quot; data-origin-height=&quot;641&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&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;2) 순수 관계 연산&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;337&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I1A0V/btrc9d7wwGZ/Zlt7rkNCc5ulv19yijsd9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I1A0V/btrc9d7wwGZ/Zlt7rkNCc5ulv19yijsd9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I1A0V/btrc9d7wwGZ/Zlt7rkNCc5ulv19yijsd9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI1A0V%2Fbtrc9d7wwGZ%2FZlt7rkNCc5ulv19yijsd9K%2Fimg.png&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;337&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1549&quot; data-origin-height=&quot;648&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BsQC5/btrdcPSxrj1/sjeqHIoCxkoVUhWqjGaqH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BsQC5/btrdcPSxrj1/sjeqHIoCxkoVUhWqjGaqH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BsQC5/btrdcPSxrj1/sjeqHIoCxkoVUhWqjGaqH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBsQC5%2FbtrdcPSxrj1%2FsjeqHIoCxkoVUhWqjGaqH1%2Fimg.png&quot; data-origin-width=&quot;1549&quot; data-origin-height=&quot;648&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&gt;&lt;/span&gt;&lt;/figure&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;</description>
      <category>DataBase</category>
      <category>CROSS JOIN</category>
      <category>Except</category>
      <category>INTERSECT</category>
      <category>SQL</category>
      <category>standard sql</category>
      <category>관게형대수</category>
      <category>순수관계연산</category>
      <category>스탠다드sql</category>
      <category>일반집합연산</category>
      <category>카디션 프로덕트</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/369</guid>
      <comments>https://celltong.tistory.com/entry/SQL-STANDARD-SQL#entry369comment</comments>
      <pubDate>Fri, 3 Sep 2021 14:36:41 +0900</pubDate>
    </item>
    <item>
      <title>SQL - 서브쿼리와 서브쿼리 분류(스칼라 서브쿼리)</title>
      <link>https://celltong.tistory.com/entry/SQL-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC%EC%99%80-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EB%B6%84%EB%A5%98%EC%8A%A4%EC%B9%BC%EB%9D%BC-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브쿼리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 쿼리 안에 포함된 또 하나의 쿼리. 메인 쿼리가 서브쿼리를 포함하는 종속적인 관계. 조건문이 복잡해질 때 서브쿼리를 활용함.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;알려지지 않은 기준을 이용한 검색에 유용&lt;br /&gt;ex) 연봉이 상위 5%인 여자를 직원 테이블에서 검색할 때&lt;/li&gt;
&lt;li&gt;메인 쿼리가 실행되기 이전에 한 번만 실행 (서브쿼리부터 실행됨)&lt;/li&gt;
&lt;li&gt;한 문장에서 여러 번 사용 가능(서브쿼리의 서브쿼리)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;서브쿼리 사용시 주의사항&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서브쿼리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;괄호와 함께 사용&lt;/span&gt;되어야 함&lt;/li&gt;
&lt;li&gt;서브쿼리 안에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;ORDER BY 절은 사용할 수 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;서브쿼리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;연산자의&lt;span&gt;&amp;nbsp;&lt;/span&gt;오른쪽&lt;/span&gt;에 사용되어야 함 (메인쿼리 &amp;lt;연산자 서브쿼리)&lt;/li&gt;
&lt;li&gt;서브쿼리는 오로지&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;SELECT문으로만 작성&lt;/span&gt;할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0) 서브쿼리를 몰랐을 때, 검색했던 방법&lt;br /&gt;사원 데브쏨의 급여를 알고 있는 상태에서 더 높은 급여를 받는 사원을 조회할 때&lt;/p&gt;
&lt;pre id=&quot;code_1629855507246&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM employee
WHERE 급여 &amp;gt; 4500;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 서브쿼리를 알면, 사원 데브쏨의 급여를 알지 못해도 검색 가능&lt;/p&gt;
&lt;pre id=&quot;code_1629855681314&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM employee
WHERE 급여 &amp;gt;
(SELECT 급여 FROM employee WHERE 이름='데브쏨');    /* 서브쿼리 */&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;2) emp 테이블에서 사원 번호가 7인 사원보다 나이가 어린 사원의 모든 컬럼을 조회 하는 쿼리를 작성&lt;/p&gt;
&lt;pre id=&quot;code_1629856432385&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM emp
where birthdate &amp;gt;
(select birthdate from emp where empnum = 7);&lt;/code&gt;&lt;/pre&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;p data-ke-size=&quot;size16&quot;&gt;3) emp 테이블에서 전 사원의 급여 평균보다 낮은 급여를 받는 사원의 모든 컬럼을 조회 하는 쿼리를 작성&lt;/p&gt;
&lt;pre id=&quot;code_1629856666373&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM emp
where sal &amp;lt; 
(select avg(sal)
from emp);&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;4) emp 테이블에서 부서번호가 40인 부서의 급여 평균보다 높게 받는 사원들의 모든 컬럼과 나이를 조회하는 쿼리를 작성&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_1629856908796&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FLOOR( (CAST(REPLACE(CURRENT_DATE,'-','') AS UNSIGNED) - 
       CAST(REPLACE(birthdate,'-','') AS UNSIGNED)) / 10000 ) as age&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1629857022333&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *,
FLOOR( (CAST(REPLACE(CURRENT_DATE,'-','') AS UNSIGNED) - 
       CAST(REPLACE(birthdate,'-','') AS UNSIGNED)) / 10000 ) as age

FROM emp
where sal &amp;gt; 
(select avg(sal)
from emp
where deptno = 40);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리 = 부서번호가 40인 부서의 급여 평균&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;반환에 따른 서브쿼리 분류&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단일 행 서브쿼리(Single-Row Subquery)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 결과가 한 행만 나오는 서브쿼리. 서브쿼리가 결과를 1개의 값만 반환하고, 그 결과를 메인쿼리로 전달하는 쿼리&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;p data-ke-size=&quot;size16&quot;&gt;: = 같다, &amp;lt;&amp;gt; 같지 않다, &amp;gt; 크다, &amp;gt;= 크거나 같다, &amp;lt; 작다, &amp;lt;= 작거나 같다&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;ex) 사원번호가 1인 사람보다 더 많은 급여를 받는 모든 직원들을 조회&lt;/p&gt;
&lt;pre id=&quot;code_1629857302892&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM employee
WHERE 급여 &amp;gt;   /* 단일 행 연산자 */
(SELECT 급여 FROM employee WHERE 사원번호 = 1);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사원번호는 기본적으로 1개만 있으므로 한 개의 행만 반환함 = 단일 행&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;다중 행 서브쿼리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 서브쿼리가 &lt;span style=&quot;color: #9feec3;&quot;&gt;결과를 2개 이상 반환&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;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IN : 하나라도 만족하면 반환&lt;/li&gt;
&lt;li&gt;ANY : 하나라도 만족하면 반환, 비교 연산 가능&lt;/li&gt;
&lt;li&gt;ALL : 전부 만족하면 반환, 비교 연산 가능&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&amp;lt; ANY : 최대값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&amp;gt; ANY : 최소값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&amp;gt; ALL : 최대값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;&amp;lt; ALL : 최소값&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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) 급여가 가장 큰 사람을 찾을 때&lt;/p&gt;
&lt;pre id=&quot;code_1629857600070&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM employee
WHERE 급여 IN  /* 다중 행 연산자 */
(SELECT max(급여) FROM employee GROUP BY 부서번호);&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;2) emp 테이블에서 MANAGER 업무를 가진 사원 중 제일 높은 급여를 받는 사원보다 높은 급여를 받는 사원을 조회하는 쿼리&lt;/p&gt;
&lt;pre id=&quot;code_1629858224866&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM emp
where sal &amp;gt;
(select max(sal)
from emp
where job = 'MANAGER');&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;3) emp테이블에서 각 부서별 급여를 제일 많이 받는 사원의 월급을 받는 사원들을 조회하는 쿼리&lt;/p&gt;
&lt;pre id=&quot;code_1629858476347&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
from emp
where sal = any

(select max(sal) 
from emp 
group by deptno);&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;4) emp테이블에서 각 부서별 나이가 제일 많은 사원의 모든 컬럼을 조회하는 쿼리&lt;/p&gt;
&lt;pre id=&quot;code_1629858892362&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
from emp
where birthdate in

(select min(birthdate)
from emp
group by deptno);&lt;/code&gt;&lt;/pre&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;&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;5) salaries 테이블에서 from_date가 2000-12-31 이전인 사람들의 급여 중 하나의 급여 보다 더 적은 급여를 받은 직원의 급여 정보를 모두 출력&lt;/p&gt;
&lt;pre id=&quot;code_1629859131076&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
from salaries
where salary &amp;lt; any 
(select salary
from salaries
where from_date &amp;lt; '2000-12-31');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리 = from_date가 2000-12-31 이전인 사람들의 급여&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;p data-ke-size=&quot;size16&quot;&gt;6) salaries 테이블에서 from_date가 2000-12-31 이전인 사람들의 급여 중 모든 급여보다 적은 급여를 받은 직원의 급여 정보를 모두 출력&lt;/p&gt;
&lt;pre id=&quot;code_1629859256890&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select *
from salaries
where salary &amp;lt; all
(select salary
from salaries
where from_date &amp;lt; '2000-12-31');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리 = from_date가 2000-12-31 이전인 사람들의 급여&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;위치에 따른 서브쿼리 분류&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;일반적인 서브쿼리&lt;/h4&gt;
&lt;pre id=&quot;code_1629859393421&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM employee
WHERE 급여 &amp;gt;
(SELECT 급여 FROM employee WHERE 이름 = '데브쏨');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9feec3;&quot;&gt;where절(꼬리)에 사용&lt;/span&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;스칼라 서브쿼리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;where절이 아니라, &lt;span style=&quot;color: #9feec3;&quot;&gt;select절(머리)에서 사용&lt;/span&gt;하는 서브쿼리. 스칼라 서브쿼리는 오로지 한 행만 반환. 마치 JOIN을 사용한 것과 같은 결과를 나타냄. 데이터가 많을 때에는 JOIN을 쓰는 것보다 스칼라 서브쿼리를 쓰는게 빠르기 때문에 JOIN 대신 사용함.&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;AS ~ : 별명을 지어줌&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;0) 점수 테이블이 하나가 있고, 이름 테이블이 하나가 있는데, 점수 테이블에 id와 수학 점수가 있고, 이름 테이블에 id와 이름이 있음. 그래서 두 테이블에 중복되는 id를 기준으로 두 테이블을 연결해서 수학 점수와 이름을 한 행에 출력하고 싶어. 게다가 그 와중에 수학점수의 중간고사 평균을 middle_avg라는 별명을 지어줌. 겁나 복잡ㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1629859667678&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT students.name, (
    SELECT math
    FROM middle_test as m
    WHERE m.student_id =    students.student_id
) AS middle_avg
FROM students;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;where m.student_id에서 갑자기 m은 또 뭐냐? -&amp;gt; m은 middle_test 테이블을 다 써주기 귀찮아서 m 하나만 써준 거 -&amp;gt; as m 으로 m테이블 이라는 별명을 만든 거.&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;p data-ke-size=&quot;size16&quot;&gt;1) salaries 테이블에는 한 직원의 연도별 급여들이 들어있으며 스칼라 서브쿼리를 사용해 각 직원별 직원의 평균급여를 검색해야함. 조인을 사용하지 않고, 직원 번호와 평균 급여를 중복 없이 출력하기. &lt;br /&gt;&amp;nbsp;- salaries 테이블에서 직원 번호(emp_no)과 평균급여(avg_salary) 두 가지를 검색&lt;br /&gt;&amp;nbsp;- 평균 급여는 SELECT 절에서 서브쿼리를 이용해 직접 계산하며 별칭을 avg_salary로 지정&lt;br /&gt;&amp;nbsp;- 중복 없이 검색하기 위해 DISTINCT 를 이용&lt;/p&gt;
&lt;pre id=&quot;code_1629860477186&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select distinct emp_no,
(
select avg(salary)
from salaries as A
where A.emp_no = B.emp_no
) as avg_salary

from salaries as 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;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase</category>
      <category>AS</category>
      <category>order by</category>
      <category>select절</category>
      <category>SQL</category>
      <category>메인쿼리</category>
      <category>서브쿼리</category>
      <category>서브쿼리 사용</category>
      <category>스칼라</category>
      <category>스칼라서브쿼리</category>
      <author>데브쏨</author>
      <guid isPermaLink="true">https://celltong.tistory.com/368</guid>
      <comments>https://celltong.tistory.com/entry/SQL-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC%EC%99%80-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC-%EB%B6%84%EB%A5%98%EC%8A%A4%EC%B9%BC%EB%9D%BC-%EC%84%9C%EB%B8%8C%EC%BF%BC%EB%A6%AC#entry368comment</comments>
      <pubDate>Thu, 2 Sep 2021 13:05:36 +0900</pubDate>
    </item>
  </channel>
</rss>