<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>나만 알 수 없어서 만든 블로그</title>
    <link>https://tipclass.tistory.com/</link>
    <description>코딩, java,PHP,Mysql,프로그래밍,JAVA,Javascript,AJAX 등 기초 정보 제공</description>
    <language>ko</language>
    <pubDate>Wed, 15 Jul 2026 09:32:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>코딩낙타</managingEditor>
    <item>
      <title>휴지통 복구하기 진짜 제발 이거 쓰세요 유료 툴 필요 없음</title>
      <link>https://tipclass.tistory.com/113</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;문제&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&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;font-family: 'Noto Serif KR';&quot;&gt;어느날 파일 및 드라이브 정리를 하고 싶었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 그랬는지 모르겠다. 그 후 30분 후 나는 절규하며 저 행동을 후회했고 '미친게 아닐까?'하고 후회x1000000했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;134&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGWGz5/btsD27UybHn/XKX2c7BfcCsi3OHW63NkRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGWGz5/btsD27UybHn/XKX2c7BfcCsi3OHW63NkRK/img.png&quot; data-alt=&quot;그냥 저거 보고 바로 지우지 마세요 제발 제발제발제발&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGWGz5/btsD27UybHn/XKX2c7BfcCsi3OHW63NkRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGWGz5%2FbtsD27UybHn%2FXKX2c7BfcCsi3OHW63NkRK%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;134&quot; height=&quot;104&quot; data-origin-width=&quot;134&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;그냥 저거 보고 바로 지우지 마세요 제발 제발제발제발&lt;/figcaption&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;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이제부터 복구 성공한 방법 공유합니다&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Everything 설치 ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★&lt;/b&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;근데 무료다? 이건 그냥 안고가야 하는거 아닌가요?&lt;/p&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;&lt;a href=&quot;https://www.voidtools.com/ko-kr/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.voidtools.com/ko-kr/downloads/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706364539104&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;다운로드 - voidtools&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.voidtools.com&quot; data-og-source-url=&quot;https://www.voidtools.com/ko-kr/downloads/&quot; data-og-url=&quot;https://www.voidtools.com/ko-kr/downloads/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.voidtools.com/ko-kr/downloads/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.voidtools.com/ko-kr/downloads/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;다운로드 - voidtools&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.voidtools.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;b&gt;2. Everything 실행&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vAktj/btsD4toRJpP/kDjPWiGgouuH4lfA4RQdk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vAktj/btsD4toRJpP/kDjPWiGgouuH4lfA4RQdk0/img.png&quot; data-alt=&quot;첫 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vAktj/btsD4toRJpP/kDjPWiGgouuH4lfA4RQdk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvAktj%2FbtsD4toRJpP%2FkDjPWiGgouuH4lfA4RQdk0%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;556&quot; height=&quot;197&quot; data-origin-width=&quot;556&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;첫 화면&lt;/figcaption&gt;
&lt;/figure&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;네, 원드라이브 저거 원수입니다.&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;&lt;b&gt;3. Everything 키워드 검색&lt;/b&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;'미사용 아이콘'이라는 걸 바탕화면에 저는 두고 살았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 미사용 아이콘을 검색했습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&quot;$Recycle.Bin&quot;&lt;/b&gt;&lt;/span&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;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdIpRn/btsD4u89Hvn/P94hIOAMumptAyHcrKgF8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdIpRn/btsD4u89Hvn/P94hIOAMumptAyHcrKgF8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdIpRn/btsD4u89Hvn/P94hIOAMumptAyHcrKgF8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdIpRn%2FbtsD4u89Hvn%2FP94hIOAMumptAyHcrKgF8k%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;702&quot; height=&quot;123&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 명령프롬포트 열기&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;118&quot; data-origin-height=&quot;67&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r1mTv/btsD7lRiyy6/gtq5upyniNEv0VQ1RhVVak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r1mTv/btsD7lRiyy6/gtq5upyniNEv0VQ1RhVVak/img.png&quot; data-alt=&quot;돋보기 누르세요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r1mTv/btsD7lRiyy6/gtq5upyniNEv0VQ1RhVVak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr1mTv%2FbtsD7lRiyy6%2Fgtq5upyniNEv0VQ1RhVVak%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;118&quot; height=&quot;67&quot; data-origin-width=&quot;118&quot; data-origin-height=&quot;67&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;돋보기 누르세요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색창에 cmd 치시면 바로 나옵니다.&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-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EviiE/btsD3dAgyvO/oOd3NEN7GRMb4T2EC9LUA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EviiE/btsD3dAgyvO/oOd3NEN7GRMb4T2EC9LUA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EviiE/btsD3dAgyvO/oOd3NEN7GRMb4T2EC9LUA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEviiE%2FbtsD3dAgyvO%2FoOd3NEN7GRMb4T2EC9LUA0%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;778&quot; height=&quot;420&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 우클릭 후 관리자 권한으로 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;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;5.명령 프롬프트에 쫄지 않고 위치 이동하기&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;cd../.. 를 입력&lt;/li&gt;
&lt;li&gt;cd $Recycle.Bin 입력&lt;/li&gt;
&lt;li&gt;cd 3번에서 찾은 주소 입력 (ex. cd /~~~~/바탕화면)&lt;/li&gt;
&lt;li&gt;dir/a 입력 (내가 찾던 파일들이 들어있는지 확인)&lt;/li&gt;
&lt;li&gt;&amp;nbsp;일부 파일 복구 원하는 경우 (아래링크 참조한 방법 : 안 될 수 있음 되도록이면 나는 6번 추천)
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;copy [파일이름] [파일위치]&amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt; 파일을 복사하는 명령어입니다.&lt;/li&gt;
&lt;li&gt;cd../.. &amp;gt; dir 입력&lt;/li&gt;
&lt;li&gt;ren [파일 이름]&lt;/li&gt;
&lt;li&gt;아래 링크에서 방법 4를 따라하셔도 됩니다.
&lt;figure id=&quot;og_1706365558827&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yvYw7/hyVb5jUPef/KWafvNpcVWNvXLog3rNMA0/img.jpg?width=800&amp;amp;height=458&amp;amp;face=0_0_800_458&quot; data-og-url=&quot;https://4ddig.tenorshare.com/kr/windows-fix/how-to-recover-deleted-files-from-recycle-bin-after-empty.html&quot; data-og-source-url=&quot;https://4ddig.tenorshare.com/kr/windows-fix/how-to-recover-deleted-files-from-recycle-bin-after-empty.html&quot; data-og-host=&quot;4ddig.tenorshare.com&quot; data-og-description=&quot;휴지통을 다 써서 파일이 모두 사라졌다면 어떻게 해야 할까요? 이 문서에서는 데이터를 복구하는 최신 방법과 도구를 제공합니다.&quot; data-og-title=&quot;[5가지 팁]Windows 10/8/7에서 휴지통 삭제 복구 복구하는 꿀팁 함께 봅시다!&quot; data-og-type=&quot;product&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://4ddig.tenorshare.com/kr/windows-fix/how-to-recover-deleted-files-from-recycle-bin-after-empty.html&quot; data-source-url=&quot;https://4ddig.tenorshare.com/kr/windows-fix/how-to-recover-deleted-files-from-recycle-bin-after-empty.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yvYw7/hyVb5jUPef/KWafvNpcVWNvXLog3rNMA0/img.jpg?width=800&amp;amp;height=458&amp;amp;face=0_0_800_458');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[5가지 팁]Windows 10/8/7에서 휴지통 삭제 복구 복구하는 꿀팁 함께 봅시다!&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;휴지통을 다 써서 파일이 모두 사라졌다면 어떻게 해야 할까요? 이 문서에서는 데이터를 복구하는 최신 방법과 도구를 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;4ddig.tenorshare.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://4ddig.tenorshare.com/kr/windows-fix/how-to-recover-deleted-files-from-recycle-bin-after-empty.html&quot;&gt;https://4ddig.tenorshare.com/kr/windows-fix/how-to-recover-deleted-files-from-recycle-bin-after-empty.html&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;폴더 복구를 원하는 경우
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;robocopy [삭제된폴더경로] [복구폴더경로] /MIR
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(ex. robocopy C:$Recycle.Bin /~~~~/바탕화면 D:backup /MIR)&lt;/li&gt;
&lt;li&gt;/MIR 옵션은 지정된 삭제된 폴더에 있는 것을 복구폴더로 옮기면서 트리구조를 그대로 옮긴다는 옵션입니다.&lt;br /&gt;쉽게 말해서 내가 지웠던 폴더와 동일한 폴더 구조를 만드는 것입니다. ★ ★ ★&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;복구폴더 가서 확인하기&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&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;
&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;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;참고로 이 복구는 지운지 얼마 안 된 파일에만 효과가 있습니다.&lt;/p&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;감사합니다.&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>바탕화면삭제</category>
      <category>바탕화면포맷</category>
      <category>복구</category>
      <category>복원</category>
      <category>삭제취소</category>
      <category>원드라이브</category>
      <category>포맷</category>
      <category>휴지통</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/113</guid>
      <comments>https://tipclass.tistory.com/113#entry113comment</comments>
      <pubDate>Sat, 27 Jan 2024 23:28:00 +0900</pubDate>
    </item>
    <item>
      <title>데이터 통신</title>
      <link>https://tipclass.tistory.com/105</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Sync(동기)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;transaction 함수가&amp;nbsp; 서비스를 호출 후 통신이 완료되는 시점까지 대기하다가 통신 결과를 받으면 다음 스크립트를 실행&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Async(비동기)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;transaction 함수가 서비스를 호출 후 통신이 완료되지 않아도 다음 스크립트를 실행하고 통신완료 후 Callback함수로 받음&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/105</guid>
      <comments>https://tipclass.tistory.com/105#entry105comment</comments>
      <pubDate>Mon, 28 Mar 2022 14:13:14 +0900</pubDate>
    </item>
    <item>
      <title>2. OS(LINUX/UNIX) 파워핸들링</title>
      <link>https://tipclass.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;권한(chown),모드(chmod), 파일검색, 복사, rename, remove등 명령어 이해&lt;/b&gt;&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;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. 예제용 폴더 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648166991006&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir [option] directory

-- 상위 경로 포함하여 같이 생성, -p
mkdir -p [상위 폴더]/[하위 폴더]
-- tree [상위폴더] 로 구조를 알 수 있음

-- 권한 설정하여 폴더 생성, -m
mkdir -m [권한] [디렉토리]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Cap 2022-03-25 09-10-31-533.png&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Md0LX/btrxaOoeNAR/m34IBtjOqsKfzW4X7ro7Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Md0LX/btrxaOoeNAR/m34IBtjOqsKfzW4X7ro7Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Md0LX/btrxaOoeNAR/m34IBtjOqsKfzW4X7ro7Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMd0LX%2FbtrxaOoeNAR%2Fm34IBtjOqsKfzW4X7ro7Mk%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;544&quot; height=&quot;146&quot; data-filename=&quot;Cap 2022-03-25 09-10-31-533.png&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. 폴더 권한 확인&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648167138037&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls -l
-- 또는
ll&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Cap 2022-03-25 09-15-31-381.png&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cczvcX/btrxgERgANi/M6HyOk6QcZrwxQgJ9LPXk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cczvcX/btrxgERgANi/M6HyOk6QcZrwxQgJ9LPXk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cczvcX/btrxgERgANi/M6HyOk6QcZrwxQgJ9LPXk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcczvcX%2FbtrxgERgANi%2FM6HyOk6QcZrwxQgJ9LPXk1%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;558&quot; height=&quot;173&quot; data-filename=&quot;Cap 2022-03-25 09-15-31-381.png&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;drwxrwxr-x.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2-1. 첫 번째 문자열 [d]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 149px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 66.6666%;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;첫 번째 문자열&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.6356%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.031%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.6356%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;d&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.031%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;폴더/디렉토리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.6356%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ㅣ&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.031%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;링크&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2-2. 두 번째 ~ 네 번째 문자열 [rwx]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 주인의 일기/쓰기/실행 권한&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;b&gt;2-3&lt;/b&gt;. 다섯 번째 ~ 일곱 번째 문자열 [rwx]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 주인이 속한 그룹의 읽기/쓰기/실행 권한&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;b&gt;2-&lt;/b&gt;4. 여덟 번째 ~ 열 번째 문자열 [r-x]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그외 유저들의 읽기/쓰기/실행 권한&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;b&gt;2-&lt;/b&gt;5. 현재 폴더의 권한 숫자 =&amp;gt; 775&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 78px;&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: 99.8835%; height: 20px;&quot; colspan=&quot;3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;권한 종류&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.1329%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;r&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.0023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 읽기 권한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51.7483%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 17.1329%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;w&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.0023%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 쓰기 권한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51.7483%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.1329%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;x&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 31.0023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 실행 권한&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 51.7483%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;소유자는 rwx=4+2+1 /&amp;nbsp;&amp;nbsp;그룹은 rwx=4+2+1&amp;nbsp; / 공개는 rx=4+1&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. 권한 변경&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;chmod&lt;/b&gt;&amp;nbsp;[변경될&amp;nbsp;퍼미션값][변경할&amp;nbsp;파일]&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648168171902&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 755 ./[파일 또는 디렉토리]

-- 하위 디렉토리, 파일 동일 권한 부여하고 싶은 경우
chmod -R 755 ./[파일 또는 디렉토리]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Cap 2022-03-25 09-30-32-401.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JJChu/btrxchv1lK6/S3K7wFn98v8dm9Gjw40o80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JJChu/btrxchv1lK6/S3K7wFn98v8dm9Gjw40o80/img.png&quot; data-alt=&quot;drwxr--r--로 변경됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JJChu/btrxchv1lK6/S3K7wFn98v8dm9Gjw40o80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJJChu%2Fbtrxchv1lK6%2FS3K7wFn98v8dm9Gjw40o80%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;594&quot; height=&quot;196&quot; data-filename=&quot;Cap 2022-03-25 09-30-32-401.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;drwxr--r--로 변경됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. 소유자, 그룹 변경&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;chown&lt;/b&gt; [변경할 소유자] [변경할 파일]&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648168935254&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; -- 사용자 + 그룹을 userA로 변경하는 경우
    chown userA:userA ./[파일 또는 디렉토리]

-- 하위 디렉토리, 파일도 동일한 오너쉽 부여하고 싶은 경우
    chown -R userA:userA ./[파일 또는 디렉토리] 

-- 사용자를 userA로 변경하는 경우
    chown userA ./[파일 또는 디렉토리]

-- 하위 디렉토리, 파일도 동일한 오너쉽 부여하고 싶은 경우
    chown -R userA ./[파일 또는 디렉토리] 

-- 그룹을 userA로 변경하는 경우
    chown :userA ./[파일 또는 디렉토리]

-- 하위 디렉토리, 파일도 동일한 오너쉽 부여하고 싶은 경우
    chown -R :userA ./[파일 또는 디렉토리]&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;4. 파일, 폴더 삭제 명령어&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;rm&lt;/b&gt; [option] file or directory&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;옵션명&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-f&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;강제 삭제 (확인 과정 없음)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-i&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;확인 후 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-r&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;폴더 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-v&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;삭제되는 정보 출력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;옵션은 생략 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Cap 2022-03-25 09-45-16-524.png&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwKvF/btrxfvmWqHF/K7S625KXClbfyP1Kyfg77k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwKvF/btrxfvmWqHF/K7S625KXClbfyP1Kyfg77k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwKvF/btrxfvmWqHF/K7S625KXClbfyP1Kyfg77k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwKvF%2FbtrxfvmWqHF%2FK7S625KXClbfyP1Kyfg77k%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;504&quot; height=&quot;61&quot; data-filename=&quot;Cap 2022-03-25 09-45-16-524.png&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1648169269721&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 확장자가 log인 파일을 모두 삭제할 때
ls -- log 파일 확인
rm *.log -- 삭제
ls -- 삭제 확인

-- 확인 과정 없이 강제 삭제, -rf
-- 파일, 폴더가 쓰기보호가 되어 있을 때 rf 옵션으로 삭제
rm -rf [디렉토리]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;5. 텍스트 파일 생성하기&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;디렉토리에 test1111이란 텍스트 파일 생성&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648169427687&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;touch test1111

-- test01 디렉토리 안에 텍스트 파일 생성
touch test01/test1111&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;6. 텍스트 파일 출력하기&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;6-1. cat [파일명]&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;6-3. more [파일명]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648170015790&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;more [파일명]

-- 왼쪽 하단에 전체 %인지 표시하며 엔터키는 한 줄씩 출력
-- 스페이스바를 입력하면 한 화면씩 출력된다.
more -n [파일명]

-- n만큼씩 끊어서 화면에 출력해준다. 스페이스바를 입력하면 다음 화면이 출력된다.
more +n [파일명]

-- 확인하고자 하는 파일의 내용이 넘 길 경우 한 화면에 다 출력할 수 없으므로 파이프(|)를 이용
ls -al | more&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;h&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;도움말&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;q&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;종료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;enter&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아래로 읻오&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;space bar, f&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아래로 1페이지 이동&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1페이지씩 앞으로 이동&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;=&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;현재 위치의 행번호 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;/[문자열]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;지정한 문자열 검색&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;n:/[문자열]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;지정한 문자열을 차례대로 검색&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.9535%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;v&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.0465%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;현재 열린 파일의 위치에서 vi 편집기 실행&lt;/span&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;6-4. less [파일명]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 내용 전체 출력하기&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;6-5. tail [파일명]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;tail 명령어는 파일 뒷부분의 내용을 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기본적으로 뒷부분 10행을 출력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;tail + [라인숫자] :&amp;nbsp;&lt;/b&gt;지정한 행부터 끝까지 출력&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;tail -f :&amp;nbsp;&lt;/b&gt;파일출력을 종료하지 않고 파일 변경시마다 자동 출력&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;7. mv 파일 이동&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;mv&lt;/b&gt; [파일 1 or 디렉토리1] [파일2 or 디렉토리2]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;mv &lt;span style=&quot;color: #ee2323;&quot;&gt;-i&lt;/span&gt;&lt;/b&gt; 파일이 존재하면 덮어쓸 것인지 확인&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;8. cp 파일 복사하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;cp &lt;/b&gt;[파일 1 or 디렉토리1] [파일2 or 디렉토리2]&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/104</guid>
      <comments>https://tipclass.tistory.com/104#entry104comment</comments>
      <pubDate>Fri, 25 Mar 2022 11:14:34 +0900</pubDate>
    </item>
    <item>
      <title>1.7 DATABASE 기타 DB객체 (VIEW, TRIGGER, FUNCTION, PROCEDURE, PACKAGE, SYNONYM, LINK 등)</title>
      <link>https://tipclass.tistory.com/103</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;기타&amp;nbsp;DB객체&amp;nbsp;(VIEW,&amp;nbsp;TRIGGER,&amp;nbsp;FUNCTION,&amp;nbsp;PROCEDURE,&amp;nbsp;PACKAGE,&amp;nbsp;SYNONYM,&amp;nbsp;LINK&amp;nbsp;등)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고링크:&amp;nbsp;&lt;a href=&quot;https://gent.tistory.com/361&quot;&gt;https://gent.tistory.com/361&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;VIEW&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;테이블과 흡사한 오브젝트&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;실제로 데이터를 저장하고 있지 않지만 DML 작업이 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;가상의 테이블&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018427&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE [OR REPLACE] [FORM|NOFORCE] VIEW 뷰이름
	[(column_aliases)]
AS
	SELECT
    [WITH READ ONLY]
    [WITH CHECK OPTION [CONSTRAINT 제약조건명]]&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 132px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;OR&amp;nbsp;REPLACE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;해당 구문을 사용하면&amp;nbsp;&lt;b&gt;뷰를 수정할 때 DROP 없이 수정&lt;/b&gt;&amp;nbsp;가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;FORCE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;뷰를 생성할 때 쿼리문의 테이블, 컬럼, 함수 등이 존재하지 않아도 생성 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;NORORCE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;뷰를 생성할 때 쿼리문의 테이블, 컬럼 함수 등이 존재하지 않으면 생성 불가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;column_aliases&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SELECT 컬럼의&amp;nbsp;&lt;b&gt;별칭&lt;/b&gt;을 미리 정의&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WITH&amp;nbsp;READ&amp;nbsp;ONLY&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;SELECT만&lt;/b&gt;&amp;nbsp;가능하다. (INSERT, UPDATE, DELETE 불가능)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WITH CHECK OPTION&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;WHERE&amp;nbsp;절의&amp;nbsp;조건에&amp;nbsp;&lt;b&gt;해당하는&amp;nbsp;데이터만&amp;nbsp;저장,&amp;nbsp;변경&lt;/b&gt;이&amp;nbsp;가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;단순 뷰 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단일 테이블에 필요한 컬럼을 나열한 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;조인, 함수, GROUP BY, UNION 등을 사용하지 않음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단순 뷰는 SELECT, INSERT, UPDATE, DELETE 자유롭게 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648106018428&quot; class=&quot;n1ql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_emp 
AS
    SELECT empno
         , ename
         , job
         , hiredate
      FROM emp
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;복합 뷰 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;함수 등을 사용할 경우 컬럼 별칭 필수 부여 ( EX) *** AS NEW_NAME)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;조인, 함수, GROUP BY, UNION 등을 사용하여 뷰를 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SELECT는 자유롭게 가능하고, INSERT, UPDATE, DELETE 상황에 따라서 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648106018429&quot; class=&quot;pgsql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_emp 
AS
    SELECT a.empno
         , a.ename
         , a.job
         , TO_CHAR(a.hiredate, 'YYYY-MM-DD') AS hiredate
      FROM emp a
         , dept b
     WHERE a.deptno = b.deptno
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;뷰 컬럼 코멘트 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018429&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;COMMENT ON COLUMN v_emp.empno IS '사원번호';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;뷰 삭제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018429&quot; class=&quot;n1ql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP VIEW v_emp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;컬럼 별칭 선언&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; font-family: 'Noto Sans Light';&quot;&gt;컬럼 별칭을 상단에 미리 정의하면 쿼리문의 컬럼 순서대로 별칭이 부여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; font-family: 'Noto Sans Light';&quot;&gt;함수를 사용 후 별칭을 부여하지 않아도 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;SELECT 컬럼의 별칭과 일치하지 않아도&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;순서와 개수만 맞으면 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018430&quot; class=&quot;pgsql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_emp 
(
    empno,
    ename,
    job,
    hiredate
)
AS
    SELECT a.empno
         , a.ename
         , a.job
         , TO_CHAR(a.hiredate, 'YYYY-MM-DD')
      FROM emp a
         , dept b
     WHERE a.deptno = b.deptno
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;FORCE 옵션 사용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;쿼리문에 테이블, 컬럼, 함수 등이 존재하지 않을 경우 오류가 발생하지만 뷰는 생성됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;INVAILD 상태라 뷰는 동작하지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오류가 없으면 정상적으로 뷰 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;테이블, 함수 등을 미리 생성하지 않고 뷰를 먼저 생성해 놓는 경우 유용하게 사용 가능한 옵션&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018430&quot; class=&quot;n1ql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE FORCE VIEW v_emp 
AS
    SELECT empno
         , ename
         , job
         , hiredate
      FROM emp
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WITH READ ONLY 옵션 사용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SELECT만 가능&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018430&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_emp 
AS
    SELECT empno
         , ename
         , job
         , hiredate
      FROM emp
      WITH READ ONLY
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WHIT CHECK OPTION&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;해당 옵션을 사용하면 INSERT, UPDATE, DELETE를 사용할 때 WHERE절의 조건에 해당하는 데이터만 접근이 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ex) deptno = '10'&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018430&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--제약조건명을 지정하지 않는 경우
CREATE OR REPLACE VIEW v_emp 
AS
    SELECT empno
         , ename
         , job
         , hiredate
         , deptno
      FROM emp
     WHERE deptno = '10'
      WITH CHECK OPTION
;

INSERT INTO v_emp(empno, ename, deptno) VALUES(9999, 'TEST', 20)
 -- ORA-01402: 뷰의 WITH CHECK OPTION의 조건에 위배됨
-- deptno = '20'은 WHERE절의 조건에 부합하지 않아서 INSERT시 오류가 발생




--제약조건명을 지정한 경우
CREATE OR REPLACE VIEW v_emp 
AS
    SELECT empno
         , ename
         , job
         , hiredate
         , deptno
      FROM emp
     WHERE deptno = '10'
      WITH CHECK OPTION CONSTRAINT emp_ck
;



 -- WITH CHECK OPTION [CONSTRAINT 제약조건명]
 -- 제약조건명을 지정하지 않아도 기능은 동일하게 작동
 -- 제약조건이 생성될때 원하는 이름으로 생성되느냐 시스템이 자동으로 이름을 부여하느냐의 차이
 -- 지정하지 않으면 SYS_XXXXXXX로 생성&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;DML 사용 시 유의사항&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단순&amp;nbsp;뷰인&amp;nbsp;경우&amp;nbsp;&lt;b&gt;INSERT,&amp;nbsp;UPDATE,&amp;nbsp;DELETE가&amp;nbsp;자유&lt;/b&gt;로우며&amp;nbsp;(NOT&amp;nbsp;NULL&amp;nbsp;컬럼&amp;nbsp;주의)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;함수, UNION, GROUP BY 등을 사용한 복합 뷰인 경우&amp;nbsp;&lt;b&gt;INSERT, UPDATE, DELETE가 불가능&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(조인만&amp;nbsp;사용한&amp;nbsp;복합&amp;nbsp;뷰인&amp;nbsp;경우&amp;nbsp;제한적으로&amp;nbsp;가능)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018431&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_emp 
AS
    SELECT a.empno
         , a.ename
         , a.job
         , TO_CHAR(a.hiredate, 'YYYY-MM-DD') AS hiredate
         , b.deptno
      FROM emp a
         , dept b
     WHERE a.deptno = b.deptno
;


UPDATE v_emp

      SET deptno = '10'
 WHERE empno = '7369'

-- ORA-01779: 키-보존된것이 아닌 테이블로 대응한 열을 수정할 수 없음
-- deptno 컬럼은 dept 테이블의 컬럼을 사용하였으므로 empno로 접근이 불가

INSERT INTO v_emp(empno, ename, deptno) VALUES(9999, 'TEST', 20)
-- ORA-01776: 조인 뷰에 의하여 하나 이상의 기본 테이블을 수정 불가

INSERT INTO v_emp(empno, ename) VALUES(9999, 'TEST')
-- deptno 컬럼을 제외하면 정상적으로 입력

UPDATE v_emp
   SET hiredate = SYSDATE
 WHERE empno = '7369'

-- ORA-01733: 가상 열은 사용할 수 없음
-- 함수를 사용한 컬럼(hiredaet)은 INSERT, UPDATE를 할 수 없음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018432&quot; class=&quot;n1ql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE VIEW v_emp 
AS
    SELECT empno
         , ename
         , job
      FROM emp
     WHERE deptno = '10'
     
     UNION ALL
     
    SELECT empno
         , ename
         , job
      FROM emp
     WHERE deptno = '20'
;


UPDATE v_emp
      SET ename = 'TEST'
 WHERE empno = '7369'

-- ORA-01732: 뷰에 대한 데이터 조작이 부적합
-- UNION, GROUP BY 등을 사용한 쿼리는 INSERT, UPDATE, DELETE를 사용할 수 없음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;TRIGGER&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터베이스 이벤트에 반응하려 실행되는 프로그램 단위&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;주 사용 목적은 테이블 데이터틔 무결성 보장, 데이터베이스 관리의 자동화 등이라고 할 수 있음&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;DML 트리거&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;DML문 (INSERT,UPDATE,DELETE)이 테이블의 하나 이상의 데이터에 영향을 미칠 때에 자동으로 실행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;프로시저나 함수는 사용자가 직접 호출해야 하지만 오라클에서 알려주지 않고 자동 호출 처리&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;자동으로 실행 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;수동으로는 실행 불가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;작동이 일어난 트리거 대상 테이블에 대해서는 트리거 내용이 존재할 수 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;BEFORE, AFTER 두 가지 트리거 존재&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;트랜잭션 일부로 처리 (COMMIT, ROLLBACK, SVAEPOINT 문장 포함 안 됨)&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;생성 구문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018433&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE [OR REPLACE] TRIGGER &amp;lt;트리거 이름&amp;gt;
{BEFORE|AFTER}&amp;lt;이벤트&amp;gt;ON&amp;lt;테이블&amp;gt;
[FOR EACH ROW]
[WHEN (&amp;lt;조건&amp;gt;)]
[DECLARE &amp;lt;변수선언&amp;gt;]
BEGIN
         &amp;lt;실행코드&amp;gt;
[EXCEPTION &amp;lt;예외사항&amp;gt;]
END &amp;lt;트리거 이름&amp;gt;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;비활성화/활성화 구문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106018434&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter trigger tri_name [disable|enable];
alter table table_name [disable|enable] all triggers;&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;FUNCTION&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고 링크: &lt;a href=&quot;https://exmemory.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://exmemory.tistory.com/77&lt;/a&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;오라클에서는 TO_DATE, CONCAT 과 같은 내장 함수가 있지만 사용자가 생성할 수 있음&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;생성 문법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106661379&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE FUNCTION function_name (agr1 NUMBER)
    RETURN VARCHAR2
IS
    return_value VARCHAR(14);
BEGIN
    SELECT 
    	data
    INTO
    	return_value
    FROM 
    	TABLE
    WHERE 
    	sequence = arg1
        and ROWNUM =1;
    RETURN return_value;
END;

-- 실행하는 법
SELECT function_name(1000413) FROM dual;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위의 방법은 Function 반환 결과가 1 Row 1 Column 일때 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;여러개의 Row와 여러개의 Column을 반환하려면 Oracle Table Function 또는 Pipelined Table Function을 사용해야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Oracle Table Function은 Result Set(Multi column + Multi Row)의 형태를 인자 값으로 받아들여 값을 Return할 수 있는 PL/SQL Function&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Pipelined Table Function은 Oracle Table Function과 비슷하지만 전체 집합을 한 번에 처리하지 않고 Row 단위로 한 건씩 처리 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Pipelined Table Function&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648106871402&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 1. Return 받을 Object Type 생성
CREATE OR REPLACE TYPE test_type AS OBJECT
(
    sn NUMBER,
    yyyymmdd VARCHAR2(16)
);

-- 2. Object Type을 가지는 Collection Type 생성
CREATE OR REPLACE TYPE test_table AS TABLE OF test_type;

-- 3. Pipelined Table Function 생성
CREATE OR REPLACE FUNCTION test_func_2 (sn NUMBER)
    RETURN test_table
    PIPELINED
IS
    t_type test_type;
BEGIN
    FOR rec IN (
         SELECT sn
        		, yyyymmdd
         FROM data_table
         WHERE sequence = sn
    ) LOOP
        t_type := test_type(rec.sn, rec.yyyymmdd);
        PIPE ROW(t_type);
    END LOOP;
    
    RETURN;
END;

-- Pipelined Table Function를 실행하는 방법
SELECT * FROM TABLE(test_func_2(1000413));&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PROCEDURE&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오라클에서의 프로시저는 PL/SQL을 통해 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;자주 사용하는 SQL을 프로시저로 만든 뒤 필요 할때마다 호출,사용하여 작업 효율 향상&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;함수는 특정 연산을 수행한 뒤 결과 값을 반환하지만 프로시저는 특정한 로직을 처리하기만 하고 결과 값은 반환하지 않는 서브 프로그램&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;프로시저 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107018967&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE PROCEDURE EX_PROC
(
   P_DEPARTMENT IN VARCHAR2,
   P_STUDENT_CNT IN NUMBER
)
IS
P_UNIVERSITY VARCHAR2(100)  := '서울대학교';

BEGIN

INSERT INTO UNIVERSITY1 (UNIVERSITY, DEPARTMENT, STUDENT_CNT)
VALUES (P_UNIVERSITY, P_DEPARTMENT, P_STUDENT_CNT);
COMMIT;

END EX_PROC;

-- 실행
EXEC EX_PROC('물리학과',500);

-- 결과

UNIVERSITY || DEPARTMENT || STUDENT_CNT
서울대학교 || 물리학과 || 500&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PACKAGE&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고 링크: &lt;a href=&quot;https://coding-factory.tistory.com/456&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://coding-factory.tistory.com/456&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;변수, 상수, 서브프로그램 등의 항목을 묶어놓은 객체&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;컴파일 과정을 거쳐 데이터베이스에 저장되며 다른 프로그램에서 패키지의 항목을 참조하고 실행 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;사용하는 이유&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;프로시저 같은 서브 프로그램의 수가 많아지고 관리가 어려운 상황을 방지하기 위하여 사용&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;사용법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;선언부, 본문, 실행부로 구성&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;선언부&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107339116&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE PACKAGE EX_PKG IS --패키지 선언

FUNCTION FUNC_1(P_PRODUCT_ID IN NUMBER) --패키지로 묶을 함수
RETURN VARCHAR2;

PROCEDURE PROC_1; --패키지로 묶을 프로시저1

PROCEDURE PROC_2(P_PRODUCT_ID IN NUMBER); --패키지로 묶을 프로시저2

END EX_PKG; --패키지 종료&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;본문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107364504&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE OR REPLACE PACKAGE BODY  EX_PKG  IS --패키지 본문

    ----------패키지 선언부 함수1----------
    FUNCTION FUNC_1(P_PRODUCT_ID IN NUMBER)
    RETURN VARCHAR2
    IS V_PRODUCT_NAME VARCHAR(100);
    BEGIN
    SELECT PRODUCT_NAME INTO V_PRODUCT_NAME
    FROM PRODUCTS
    WHERE PRODUCT_ID = P_PRODUCT_ID;
    RETURN NVL(V_PRODUCT_NAME, '해당제품없음');

    END FUNC_1;

   ----------패키지 선언부 프로시저1----------
    PROCEDURE PROC_1
    IS
    CURSOR EX_CUR IS
    SELECT 
    PRODUCT_ID,
    PRODUCT_NAME
    FROM PRODUCTS;
    
    BEGIN
    
    FOR I  IN EX_CUR LOOP
    
    DBMS_OUTPUT.PUT_LINE(' 제품ID : ' || I.PRODUCT_ID);
    DBMS_OUTPUT.PUT_LINE(' 제품명 : ' || I.PRODUCT_NAME);
    
    END LOOP;
    
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');
    
    END PROC_1;

    ----------패키지 선언부 프로시저2----------
    PROCEDURE PROC_2(P_PRODUCT_ID IN NUMBER)
    IS
    CURSOR EX_CUR IS
    SELECT 
    PRODUCT_ID,
    PRODUCT_NAME
    FROM PRODUCTS
    WHERE PRODUCT_ID = P_PRODUCT_ID;
    
    BEGIN
    
    FOR I  IN EX_CUR LOOP
    
    DBMS_OUTPUT.PUT_LINE(' 제품ID : ' || I.PRODUCT_ID);
    DBMS_OUTPUT.PUT_LINE(' 제품명 : ' || I.PRODUCT_NAME);

    END LOOP;
    
    EXCEPTION
    WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(SQLERRM||'에러 발생 ');
    
    END PROC_2;

END EX_PKG; --패키지 종료&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;실행부&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107377397&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용
SET SERVEROUTPUT ON; 

-- 패키지 실행
VARIABLE RESULT VARCHAR2;
EXEC :RESULT := EX_PKG.FUNC_1(10);
PRINT :RESULT;

EXEC EX_PKG.PROC_1;

EXEC EX_PKG.PROC_2(10);&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;SYNONYM&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ALIAS처럼 &lt;b&gt;이름을 줄여주는&lt;/b&gt; 역할 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;시노님은 &lt;b&gt;테이블의 이름을 설정&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보통 다른 유저의 객체(테이블, 뷰, 프로시저, 함수, 패키지, 시퀀스 등)를 &lt;b&gt;참조&lt;/b&gt;할 때 많이 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;실제로 SYNONYM을 이용하는 이유는 다른 유저의 객체를 사용할때 유저의 이름과 객체의&amp;nbsp;&amp;nbsp;실제이름을 사용하는데&amp;nbsp;그&amp;nbsp;두개를&amp;nbsp;감춤으로써&amp;nbsp;&lt;b&gt;데이터베이스의&amp;nbsp;보안을&amp;nbsp;개선&lt;/b&gt;하기위해&amp;nbsp;사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;시노님 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PUBLIC은 모든 사용자가 접근이 가능하도록 설정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PUBLIC을 선언해주지 않으면 기본값으로 PRIVATE가 선언&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648107543629&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE [ PUBLIC ] SYNONYM [ 시노님 이름 ]
FOR [ 객체 이름 ]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. 권한 부여&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107637729&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GRANT ALL ON oracleStury TO user2;
-- user2에게 테이블 조작 권한 부여

GRANT SELECT ON oracleStury TO user2;
-- user2에게 테이블 SELECT 권한 부여&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. USER 테이블 접근&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[유저명].[테이블명]&lt;/b&gt;&lt;/span&gt;을 적어줘야 조회 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107704200&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM user1.oracleStudy;

CREATE SYNONYM u1_oralStudy FOR user1.oracleStudy;
-- synonym을 사용하여 테이블 이름을 변경

SELECT * FROM u1_oralStudy;
-- 시노님으로 만든 이름을 사용할 수 있음
-- user1.oracleStudy 와 u1_oralStudy 의 값이 동일하게 출력 예정&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;b&gt;시노님 삭제&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648107871484&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP SYNONYM u1_oralStudy;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;LINK&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고 링크: &lt;a href=&quot;https://kkh0977.tistory.com/377&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kkh0977.tistory.com/377, &lt;/a&gt;&lt;a href=&quot;https://bebeya1.tistory.com/3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://bebeya1.tistory.com/3&lt;/a&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;디비 링크 란 물리적으로 데이터베이스가 분리되어 있을 경우 오라클 서버의 ALIAS(별명)을 이용하여 서로 다른 DB에 접근하는 Oracle DBMS만의 기술&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터베이스 링크는 오라클(Oracle) 서버들끼리 데이터베이스 링크를 만들어서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;하나의 데이터베이스처럼 사용하기 위한&lt;/b&gt;&lt;/span&gt; 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;디비 링크를 사용하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;다른 컴퓨터에 있는 테이블 및 함수 등을 조회&lt;/b&gt; &lt;/span&gt;가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;​디비 링크를 사용하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;서로 다른 DB간에 조인&lt;/b&gt;&lt;/span&gt;도 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;다른컴퓨터 테이블 및 함수 등을 사용하기 위해서는 사용 컴퓨터에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;컴퓨터 디비 링크 정보를 등록&lt;/b&gt;&lt;/span&gt; 필수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PUBLIC/PRIVATE&lt;/b&gt; 종류의 링크가 존재&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;&quot;&gt;PUBLIC&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;모든 사용자가 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보안에는 취약하지만 편리함&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;&quot;&gt;PRIVATE&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;특정 사용자가 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보안 우수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;각각의 사용자마다 DBLINK를 생성해줘야 생성 시에도 작업이 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;&quot;&gt;등록 방법&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;만약 원격 DB에 접속해서 무언가를 하실려면 어떤 계정에 대한 Link가 필요하며, tnsnames.ora 파일에 있는 원격 디비에 대한 Alias를 등록 필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;같은 DB 서버 상의 디비 링크 등록은 오라클 DBMS를 사용해서 간편하게 등록 후 테이블 및 함수 등을 조회 및 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;LINK 생성&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. 생성 권한 부여&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터베이스 링크를 생성하기 위해서는 &quot;DATABASE LINK&quot;라는 권한이 필요&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648108540827&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PRIVATE 데이터베이스 링크 생성 권한을 부여합니다.
GRANT CREATE DATABASE LINK TO TESTUSER;

PUBLIC 데이터베이스 링크 생성 권한을 부여합니다.
GRANT CREATE PUBLIC DATABASE LINK TO TESTUSER;

PRIVATE 데이터베이스 링크 생성 권한을 회수합니다.
Revoke CREATE DATABASE LINK FROM TESTUSER;

PUBLIC 데이터베이스 링크 생성 권한을 회수합니다.
GRANT DROP PUBLIC DATABASE LINK TO TESTUSER;&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. 데이터베이스 링크 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터베이스 링크 생성 권한을 부여 받은 TESTUSER로 접속 후 명령어를 실행하여 데이터베이스 링크를 생성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;&quot;&gt;보안을 위해서 PRIVATE 링크를 생성하기를 원한다면 PUBLIC 빼고 명령어를 실행&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648108612924&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE  PUBLIC DATABASE LINK TESTUSER_LINK
CONNECT TO R_USER IDENTIFIED BY &quot;RPassword&quot; USING &quot;TestUser_TNS&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;3. 데이터베이스 링크 삭제&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light'; color: #ee2323;&quot;&gt;&lt;b&gt;삭제 시 주의 할 점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기존에 존재하던 DB 링크를&lt;span style=&quot;color: #ffffff; background-color: #ee2323;&quot;&gt;&lt;b&gt; 삭제하고 같은 이름으로 새로 DB 링크를 생성하였을 경우, 기존 DB 링크를 사용하던 프로시저나 뷰는 다시 컴파일 필요&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648108735007&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DROP  PUBLIC  DATABASE LINK TESTUSER_LINK;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;4. 생성된 데이터베이스 링크로 쿼리문을 실행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;만든 링크 데이터베이스 명인 TESTUSER_LINK 를 이용해서 &lt;b&gt;원격지 테이블을 조회&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648108842626&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM REMOTE_TABLE@TESTUSER_LINK;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;REMOTE_TABLE은 원격지 오라클 데이터베이스의 테이블 명&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터베이스 TESTUSER_LINK 링크를 생성할 때 유저를 넣는데 해당 유저의 권한으로 조회가 가능한 테이블만 컨트롤 가능&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/103</guid>
      <comments>https://tipclass.tistory.com/103#entry103comment</comments>
      <pubDate>Thu, 24 Mar 2022 16:13:52 +0900</pubDate>
    </item>
    <item>
      <title>1.6 DATABASE (PL/SQL)</title>
      <link>https://tipclass.tistory.com/102</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PL/SQL (Procedural&amp;nbsp;Language&amp;nbsp;extension&amp;nbsp;to&amp;nbsp;SQL)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SQL을 확장한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;절차적 언어&lt;/b&gt;&lt;/span&gt;(Procedural Language)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;관계형 데이터베이스에서 사용되는 Oracle의 표준 데이터 엑세스 언어로,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;프로시저 생성자를 SQL과 완벽하게 통합&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유저 프로세스가 PL/SQL 블록을 보내면, 서버 프로세서는 PL/SQL Engine에서 해당 블록을 받고 SQL과 Procedural를 나눠서 SQL은 SQL Statement Executer로 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PL/SQL 프로그램의 종류는 크게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Procedure, Function, Trigger&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 나뉨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오라클에서 지원하는 프로그래밍 언어의 특성을 수용하여 SQL에서는 사용할수없는 절차적 프로그래밍 기능을 가지고 있어 SQL의 단점을 보완&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;프로시저 생성자와 SQL의 통합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;성능 향상 : 잘 만들어진 PL/SQL 명령문이라는 가정하에 좋아진다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;모듈식 프로그램 개발 가능 : 논리적인 작업 을 진행하는 여러 명령어들을 하나의 블록을 만들 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이식성이 좋다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;기본&amp;nbsp;특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;블록&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;단위의 실행 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;BEGIN, END;&lt;/b&gt;를 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;마지막 라인에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;/&lt;/b&gt;를 입력하면 해당 블록이&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;변수, 상수 등을 선언하여 SQL과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;절차형 언어&lt;/b&gt;에서 사용&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;변수의 선언은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DECLARE절&lt;/b&gt;에서만 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;변수는&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;BEGIN 섹션에서 새 값이 할당&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IF문을 사용하여 조건에 따라&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문장들을 분기&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;LOOP문을 사용하여 일련의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;문장을 반복&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;커서를 사용하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;여러 행을 검색&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사용 가능한 SQL은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Query, DML, TCL&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;=&amp;gt; DDL (CREATE, DROP, ALTER, TRUNCATE &amp;hellip;), DCL (GRANT, REVOKE) 명령어는 동적 SQL을 이용할 때만 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PL/SQL의 SELECT문은 해당 SELECT의 결과를 PL/SQL Engine으로 보냄&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;1) 변수를 DECLARE 해야 함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2) INTO절을 꼭 선언하여 넣을 변수를 꼭 표현해주어야 함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;3) SELECT 문장은 반드시 한 개의 행이 검색되어야 함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;4) INTO절을 꼭 사용해야 함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;5) 검색되는 행이 없으면 문제가 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;기본&amp;nbsp;PL/SQL&amp;nbsp;Block&amp;nbsp;구조&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.124%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;영역&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.5426%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;옵션 / 필수 여부&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 21.124%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;DECLARE (선언)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.5426%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;모든&amp;nbsp;변수나&amp;nbsp;상수를&amp;nbsp;선언하는&amp;nbsp;부분&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;=&amp;gt; 변수/상수/커서 등 선언&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;옵션&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.124%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;BEGIN&amp;nbsp; (실행)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.5426%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;제어문, 반복문, 함수 정의 등 로직을 기술&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;필수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.124%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;EXCEPTION&amp;nbsp; (예외)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.5426%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;에러가 발생할 때 예외 상황&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;옵션&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.124%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;END (종료)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 45.5426%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;필수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PL/SQL&amp;nbsp;Block의&amp;nbsp;종류&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;익명 블록 : 이름이 없는 PL/SQL Block을 말함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이름 있는 블록 : DB의 객체로 저장되는 블록이 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;프로시저 : 리턴 값을 하나 이상 가질 수 있는 프로그램을 말함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;함수 : 리턴 값을 반드시 반환해야 하는 프로그램을 말함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;패키지 : 하나 이상의 프로시저, 함수, 변수, 예외 등의 묶음을 말함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;트리거 : 지정된 이벤트가 발생하면 자동으로 실행되는 PL/SQL 블록&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;PL/SQL 프로그램의 작성 요령&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PL/SQL블록 내에서는 한문장이 종료할때마다 세미콜론(;)을 사용하여 한문장이 끝났다는것을 명시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;END 뒤에 세미콜론( ; )을 사용하여 하나의 블록이 끝났다는 것을 명시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단일행주석은 --&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;여러행 주석은 /* */&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;쿼리문을 수행하기 위해서 '/'가 반드시 입력되어야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;행에 '/'가 있으면 종결된것으로 간주&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;[참고] 오라클에서&amp;nbsp;&lt;b&gt;화면 출력을 위해서는 PUT_LINE&lt;/b&gt;이란 프로시저를 이용&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;DBMS_OUTPUT.PUT_LINE(출력할 내용) 같이 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사용하여 출력되는 내용을 화면에 보여주기 위해서는 환경 변수 SERVEROUTPUT(디폴트값이 OFF이므로) ON으로 변경&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105975322&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 메시지 출력하기 예시

SET serveroutput ON

BEGIN 

    dbms_output.put_line('God!!');

END;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b990Wk/btrxcawlx9C/TxtBg8JLEge5nlCKnlvARK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b990Wk/btrxcawlx9C/TxtBg8JLEge5nlCKnlvARK/img.png&quot; data-alt=&quot;put_line 출력 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b990Wk/btrxcawlx9C/TxtBg8JLEge5nlCKnlvARK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb990Wk%2Fbtrxcawlx9C%2FTxtBg8JLEge5nlCKnlvARK%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;308&quot; height=&quot;82&quot; data-origin-width=&quot;308&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;put_line 출력 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;변수 선언&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;블록 내에서 변수를 사용하려면 선언부(DECLARE)에서 선언해야하며 변수명 다음에 데이터 타입을 기술 필요&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;문법&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;identifier&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;[CONSTANT]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;datatype&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;[NOT NULL]&lt;br /&gt;[:=|DEFAULT expression];&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.3488%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;identifier&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;변수명(식별자)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.3488%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;CONSTANT&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;상수로 지정 (초기에 반드시 할당해야 함)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.3488%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;datatype&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;자료형을&amp;nbsp;기술&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.3488%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;NOT&amp;nbsp;NULL&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;값을&amp;nbsp;반드시&amp;nbsp;포함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.3488%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;expression&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Literal,&amp;nbsp;다른&amp;nbsp;변수,&amp;nbsp;연산자나&amp;nbsp;함수를&amp;nbsp;포함하는&amp;nbsp;표현식&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1648105975323&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;--    DECLARE 변수이름 데이터타입;
DECLARE NAME VARCHAR2(10);

--    DECLARE 변수이름 데이터타입 :=값;
DECLARE NAME VARCHAR2(10) := '값';

--   DECLARE 변수이름 데이터타입 DEFAULT 기본값;
DECLARE NAME VARCHAR2(10) DEFAULT '디폴트';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;변수를 한꺼번에 여러 개 선언하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105975324&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   DECLARE 

	NAME    VARCHAR2(20);

	AGE      NUMBER(2); 

	GENDER VARCHAR(50)   DEFAULT '남';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;변수를 선언하는 사용 예제&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105975324&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	DECLARE NAME VARCHAR2(100) := ' DECLARE 최초 선언';

	BEGIN

		DBMS_OUTPUT.put_Line('난최고다'|| NAME); -- 출력

	END;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yBTK6/btrw52lTu5q/J80D3iHlytv87TQu3XKXbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yBTK6/btrw52lTu5q/J80D3iHlytv87TQu3XKXbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yBTK6/btrw52lTu5q/J80D3iHlytv87TQu3XKXbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyBTK6%2Fbtrw52lTu5q%2FJ80D3iHlytv87TQu3XKXbK%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;245&quot; height=&quot;85&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;변수&amp;nbsp;Type을&amp;nbsp;선언할때&amp;nbsp;꼭&amp;nbsp;명시적으로&amp;nbsp;작성하지&amp;nbsp;않고&amp;nbsp;사용하는&amp;nbsp;방법&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;1. %ROWTYPE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;해당&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;테이블이나&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;뷰의 컬럼 속성&lt;/b&gt;&lt;/span&gt;을 그대로 들고 오는 형태&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사용방법 : 변수명 테이블이름&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;%ROWTYPE&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105975324&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DECLARE 
	DATA EMP%ROWTYPE;
BEGIN
	SELECT 	* INTO DATA 
	FROM 	EMP 
	WHERE 	EMPNO = '1234';
	DBMS_OUTPUT.PUT_LINE(DATA.ENAME ||','||DATA.DEPTNO);
END;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;2. %TYPE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;해당 테이블의&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;nbsp;컬럼&amp;nbsp;속성을&amp;nbsp;지정&lt;/b&gt;&lt;/span&gt;하여 그대로 들고 오는 형태&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사용방법&amp;nbsp;:&amp;nbsp;변수명&amp;nbsp;테이블이름.컬럼명&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;%TYPE&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105975325&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DECLARE 
	V_ENAME  EMP.ENAME%TYPE;
	V_DEPTNO EMP.DEPTNO%TYPE;
BEGIN
	SELECT 	ENAME, DEPTNO INTO V_ENAME, V_DEPTNO
	FROM 	EMP 
	WHERE 	EMPNO = '1234';
	DBMS_OUTPUT.PUT_LINE(V_ENAME ||','||V_DEPTNO);
END;&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;변수&amp;nbsp;대입&amp;nbsp;방법&lt;/b&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;1. 명시적인 값 대입&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;font-family: 'Noto Sans Light';&quot;&gt;변수값을 저장하기 위해서는 := 를 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;:= 의 좌측에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;변수&lt;/b&gt;&lt;/span&gt;를 , 우측에는 값을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;기술&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;identifier&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;:=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;expression&lt;/b&gt;&lt;/span&gt;;&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;font-family: 'Noto Sans Light';&quot;&gt;2. SELECT 문을 이용하여 값 대입&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기존 SELECT 문과는 다르게&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;INTO절 추가&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;INTO절에는 조회 결과 값을 저장할 변수를 기술&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;select 문은 INTO절에 의해 하나의 행만을 저장 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;문법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;SELECT&amp;nbsp;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;select_list&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;INTO&amp;nbsp;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;{variable_name1[,variable_name2,..]|record_name}&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;FROM&amp;nbsp;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;table_name&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WHERE&lt;/b&gt;&amp;nbsp; condition;&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;font-family: 'Noto Sans Light';&quot;&gt;SELECT 다음에 기술한 컬럼은 INTO 절에 있는 변수와 1:1로 대응 필수 =&amp;gt; 개수와 데이터 타입, 길이를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;일치&lt;/b&gt;해야 함&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/102</guid>
      <comments>https://tipclass.tistory.com/102#entry102comment</comments>
      <pubDate>Thu, 24 Mar 2022 16:13:23 +0900</pubDate>
    </item>
    <item>
      <title>1.5 DATABASE  서브쿼리 VS 스칼라쿼리 (각각의 장단점 이해)</title>
      <link>https://tipclass.tistory.com/101</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;서브쿼리&amp;nbsp;VS&amp;nbsp;스칼라쿼리&amp;nbsp;(각각의&amp;nbsp;장단점&amp;nbsp;이해)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고링크:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://ttend.tistory.com/619&quot;&gt;https://ttend.tistory.com/619&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1648105923275&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;SQL 기초] 서브쿼리(Sub Query) 개념&quot; data-og-description=&quot;서브쿼리(Sub Query)는 SQL 문장의 하부 절에 쿼리문을 사용하는 것이다. 즉, 메인쿼리의 SELECT문 하부의 WHERE절이나 FROM절에서 사용되는 쿼리를 서브쿼리라고 한다. 쿼리 안에 쿼리가 포함된 상태라&quot; data-og-host=&quot;ttend.tistory.com&quot; data-og-source-url=&quot;https://ttend.tistory.com/619&quot; data-og-url=&quot;https://ttend.tistory.com/619&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Gb07P/hyNOtSWD1b/QSRlKXwOX8kpPsfUQFaJZK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cB6xwz/hyNOjiuueu/OFI4WKHaFPEskunKqoEs9K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://ttend.tistory.com/619&quot; data-source-url=&quot;https://ttend.tistory.com/619&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Gb07P/hyNOtSWD1b/QSRlKXwOX8kpPsfUQFaJZK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cB6xwz/hyNOjiuueu/OFI4WKHaFPEskunKqoEs9K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SQL 기초] 서브쿼리(Sub Query) 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서브쿼리(Sub Query)는 SQL 문장의 하부 절에 쿼리문을 사용하는 것이다. 즉, 메인쿼리의 SELECT문 하부의 WHERE절이나 FROM절에서 사용되는 쿼리를 서브쿼리라고 한다. 쿼리 안에 쿼리가 포함된 상태라&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ttend.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리 =&amp;gt; SQL 문장의 하부절에 쿼리문을 사용하는 것&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105923275&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; SCOTT @ ORACLE &amp;gt; SELECT ename, sal FROM emp
  2     WHERE sal &amp;gt;
  3             (SELECT sal FROM emp WHERE ename='CLARK');
 
ENAME                       SAL
-------------------- ----------
JONES                      2975
BLAKE                      2850
SCOTT                      3000
KING                       5000
FORD                       3000&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;서브쿼리 주의사항&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Light';&quot;&gt;연산자의 오른쪽에 위치해야한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;괄호로 묶어주어야한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;서브쿼리의&amp;nbsp;위치에&amp;nbsp;따른&amp;nbsp;명칭&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;위치&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;명칭&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #8a3db6; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;SELECT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;스칼라 서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #8a3db6; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;FROM&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;인라인 뷰&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #8a3db6; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WHERE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;서브쿼리&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;단일&amp;nbsp;행&amp;nbsp;서브쿼리(Single-Row&amp;nbsp;Subquery)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리의 결과가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1개의 행만&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단일 행 서브쿼리에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;단일행 비교연사자&lt;/b&gt;&lt;/span&gt;인 =, &amp;lt;&amp;gt;, &amp;lt;, &amp;gt; 등의 연산자를 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105923277&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- =연산자를 사용해서 이름이 smith인 직원과 같은 부서의 직원 조회
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, deptno FROM emp
  2               WHERE deptno = (SELECT deptno FROM emp WHERE ename='SMITH');
 
ENAME                    DEPTNO
-------------------- ----------
SMITH                        20
JONES                        20
SCOTT                        20
ADAMS                        20
FORD                         20


-- &quot;&amp;gt;&quot; 연산자를 사용해서 이름이 clark인 직원의 급여보다 많은 직원 조회
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, sal FROM emp WHERE ename='CLARK';
 
ENAME                       SAL
-------------------- ----------
CLARK                      2450
 
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, sal FROM emp
  2     WHERE sal &amp;gt; (SELECT sal FROM emp WHERE ename='CLARK');
 
ENAME                       SAL
-------------------- ----------
JONES                      2975
BLAKE                      2850
SCOTT                      3000
KING                       5000
FORD                       3000&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;다중&amp;nbsp;행&amp;nbsp;서브쿼리(Multiple-Row&amp;nbsp;Subquery)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; font-family: 'Noto Sans Light';&quot;&gt;서브쿼리의 결과가 여러 건 출력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 195px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;다중&amp;nbsp;행&amp;nbsp;서브쿼리에서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;다중행&amp;nbsp;비교&amp;nbsp;연산자들&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 31.1628%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IN&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;값은 값을 찾음 =와 같은 역할&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;서브쿼리의 반환이 1행 이상일 때 그 행들의 값을 반환&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 31.1628%; text-align: center; height: 10px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; ANY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px; width: 68.8372%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;최솟값을 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 31.1628%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt; ALL&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;최솟값을 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 31.1628%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;lt; ANY&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 68.8372%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;최댓값을 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 31.1628%; text-align: center; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;gt; ALL&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.8372%; height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;최댓값을 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 31.1628%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;EXIST&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 68.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리 값이 있을 경우 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 22px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #8a3db6; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;최솟값, 최대값의 의미보다는 등호(&amp;lt;, &amp;gt;)의 위치가 더 중요&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;text-align: center; height: 22px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;gt; ANY는 이후 뒤 따라 나오는 서브쿼리의 여러 값 중에서 어느 값보다 큰 값을 의미&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;&amp;lt; ALL은 뒤의 서브쿼리의 모든 값보다 작은 값을 의미&lt;/span&gt;&lt;/b&gt;&lt;/span&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;pre id=&quot;code_1648105923279&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- job이 president인 사람과 같은 부서에 근무하는 사람을 조회
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, job, deptno FROM emp
  2                 WHERE deptno
  3                 IN (SELECT deptno FROM emp WHERE job='PRESIDENT');
 
ENAME                JOB                    DEPTNO
-------------------- ------------------ ----------
MILLER               CLERK                      10
KING                 PRESIDENT                  10
CLARK                MANAGER                    10&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;최솟값, 최대값의 의미보다는 등호(&amp;lt;, &amp;gt;)의 위치가 더 중요&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105923280&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- &amp;gt; ANY는 이후 뒤 따라 나오는 서브쿼리의 여러 값 중에서 어느 값보다 큰 값을 의미
-- &amp;lt; ALL은 뒤의 서브쿼리의 모든 값보다 작은 값을 의미

SCOTT @ ORACLE &amp;gt; SELECT ename, sal FROM emp WHERE job='SALESMAN';
 
ENAME                       SAL
-------------------- ----------
ALLEN                      1600
WARD                       1250
MARTIN                     1250
TURNER                     1500
 
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, sal FROM emp
  2     WHERE sal &amp;gt; ANY(SELECT sal FROM emp WHERE job='SALESMAN');
 
ENAME                       SAL
-------------------- ----------
KING                       5000
FORD                       3000
SCOTT                      3000
JONES                      2975
BLAKE                      2850
CLARK                      2450
ALLEN                      1600
TURNER                     1500
MILLER                     1300
 
9 개의 행이 선택되었습니다.
 
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, sal FROM emp
  2     WHERE sal &amp;lt; ALL(SELECT sal FROM emp WHERE job='SALESMAN');
 
ENAME                       SAL
-------------------- ----------
ADAMS                      1100
JAMES                       950
SMITH                       800&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;다중&amp;nbsp;컬럼&amp;nbsp;서브쿼리(Multi-Column&amp;nbsp;Subquery)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리의&amp;nbsp;결과가&amp;nbsp;여러&amp;nbsp;칼럼을&amp;nbsp;출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;메인쿼리 WHERE절과 서브쿼리에서 반환하는 컬럼의 수가 반드시 같아야만 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105923281&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 부서별로 가장 작은 급여(sal)를 받는 직원을 조회
 
 SCOTT @ ORACLE &amp;gt; SELECT deptno, ename, sal FROM emp
  2               WHERE (deptno, sal) IN
  3                       (SELECT deptno, MIN(sal) FROM emp GROUP BY deptno)
  4               ORDER BY deptno;
 
    DEPTNO ENAME                       SAL
---------- -------------------- ----------
        10 MILLER                     1300
        20 SMITH                       800
        30 JAMES                       950&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;스칼라&amp;nbsp;서브쿼리(Scala&amp;nbsp;Subquery)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SQL에서 단일값을 스칼라값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;스칼라 서브쿼리는 SELECT절에 오는 서브쿼리로 결과값으로 1행만 반환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105923281&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 직업이 &amp;lsquo;MANAGER&amp;rsquo;인 사원의 사원명, 부서명, job을 조회
-- SELECT문 안에 SELECT문이 스칼라 서브쿼리로 사용.
 
 
 SCOTT @ ORACLE &amp;gt; SELECT ename,
  2                          (SELECT dname FROM dept d 
                                WHERE d.deptno = e.deptno) dname, job
  3                FROM emp e
  4                WHERE job ='MANAGER';
 
ENAME                DNAME                        JOB
-------------------- ---------------------------- ------------------
JONES                RESEARCH                     MANAGER
BLAKE                SALES                        MANAGER
CLARK                ACCOUNTING                   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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;상호연관&amp;nbsp;서브쿼리(Correlated&amp;nbsp;Subquery)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;상호관련 서브쿼리라고도 칭함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;메인쿼리의 값을 서브쿼리에 주고 서브쿼리를 수행한 다음 그 결과를 다시 메인쿼리로 반환해서 수행하는 쿼리&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105923281&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; SCOTT @ ORACLE &amp;gt; SELECT ename, sal, deptno FROM emp ORDER BY deptno, sal;
 
ENAME                       SAL     DEPTNO
-------------------- ---------- ----------
MILLER                     1300         10
CLARK                      2450         10
KING                       5000         10
SMITH                       800         20
ADAMS                      1100         20
JONES                      2975         20
SCOTT                      3000         20
FORD                       3000         20
JAMES                       950         30
MARTIN                     1250         30
WARD                       1250         30
TURNER                     1500         30
ALLEN                      1600         30
BLAKE                      2850         30
 
14 개의 행이 선택되었습니다.
 
 
-- 부서별 평균 sal
 
 SCOTT @ ORACLE &amp;gt; SELECT deptno, AVG(sal) FROM emp GROUP BY deptno;
 
    DEPTNO   AVG(SAL)
---------- ----------
        30 1566.66667
        20       2175
        10 2916.66667
 
 
 
 
 
 SCOTT @ ORACLE &amp;gt; SELECT ename, deptno, sal
  2  FROM emp e1
  3  WHERE sal &amp;gt; (SELECT AVG(sal)
  4             FROM emp e2
  5             WHERE e2.deptno=e1.deptno)
  6  ORDER BY deptno;
 
ENAME                    DEPTNO        SAL
-------------------- ---------- ----------
KING                         10       5000
JONES                        20       2975
SCOTT                        20       3000
FORD                         20       3000
ALLEN                        30       1600
BLAKE                        30       2850
 
6 개의 행이 선택되었습니다.
 
 
-- 1) 메인쿼리에서 부서번호(e1.deptno)를 읽어서 서브쿼리로 전달
-- 2) 서브쿼리는 메인쿼리에서 받은 부서번호로 평균 급여 계산
-- 3) 다시 메인쿼리는 서브쿼리의 평균 급여보다 큰 급여의 직원 출력&lt;/code&gt;&lt;/pre&gt;</description>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/101</guid>
      <comments>https://tipclass.tistory.com/101#entry101comment</comments>
      <pubDate>Thu, 24 Mar 2022 16:12:26 +0900</pubDate>
    </item>
    <item>
      <title>1-4. DATABASE (WHERE SELECT, EXISTS, BETWEEN, GROUP BY, HAVING, GROUPING, ROLLUP, RANK)</title>
      <link>https://tipclass.tistory.com/100</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WHERE&amp;nbsp;SELECT,&amp;nbsp;EXISTS,&amp;nbsp;BETWEEN,&amp;nbsp;GROUP&amp;nbsp;BY,&amp;nbsp;HAVING&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;WHERE &amp;amp; HAVING 비교&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;having은 전체 결과, where은 개별 행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;having은 집계된 값에서 지정된 조건을 충족하는 행만 반환하도록 지정&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ex) 총 거래 건수가 100건이 넘는 매장의 이름과 거래 건수는?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;having은 그룹을 필터링 / where은 행을 필터링&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;집계 함수는 having과 함께 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;where절을 having 에 포함된 하위 쿼리에 있지 않으면 집계 함수와 함께 사용 불가능&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(COUNT, MIN, MAX, SUM, AVG 등)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;GROUP BY 앞에 WHERE. GROUP BY 뒤에 HAVING&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; font-family: 'Noto Sans Light';&quot;&gt;Having은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용된다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; font-family: 'Noto Sans Light';&quot;&gt;Where은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다.&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;EXISTS&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;EXISTS(&lt;/b&gt;&lt;/span&gt;서브&amp;nbsp;쿼리&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;는&amp;nbsp;서브&amp;nbsp;쿼리의&amp;nbsp;결과가&lt;i&gt;&lt;b&gt;&amp;nbsp;&quot;한&amp;nbsp;건이라도&amp;nbsp;존재하면&quot;&amp;nbsp;&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TRUE&amp;nbsp;&lt;/b&gt;&lt;/span&gt;없으면&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;FALSE&lt;/b&gt;&lt;/span&gt;를&amp;nbsp;리턴&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;EXISTS는 서브 쿼리에 일치하는 결과가 한 건이라도 있으면 쿼리를 더 이상 수행하지 않는다.&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;ROLLUP &amp;amp; GROUP BY&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWHdsv/btrw64dp6Mz/VHqEVSPOoICzQujVdWFio1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWHdsv/btrw64dp6Mz/VHqEVSPOoICzQujVdWFio1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWHdsv/btrw64dp6Mz/VHqEVSPOoICzQujVdWFio1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWHdsv%2Fbtrw64dp6Mz%2FVHqEVSPOoICzQujVdWFio1%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;1280&quot; height=&quot;1100&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;GROUP BY&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Light';&quot;&gt;성별 기준으로 여자 및 남자 각 몇 명인지 출력&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;ROLLUP&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Light';&quot;&gt;GROUP BY 결과를 총 집계도 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;조인테이블도 가능하다&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;GROUPING,&amp;nbsp;ROLLUP,&amp;nbsp;RANK&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;a href=&quot;https://gent.tistory.com/386&quot;&gt;https://gent.tistory.com/386&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;https://jhnyang.tistory.com/473,&quot;&gt;https://jhnyang.tistory.com/473,&lt;/a&gt;&lt;a href=&quot;https://jhnyang.tistory.com/473&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;a href=&quot;https://myjamong.tistory.com/191&quot;&gt;https://myjamong.tistory.com/191&lt;/a&gt;&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;GROUPING&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Light';&quot;&gt;그룹쿼리에서 사용하는 함수로 파라미터의 평가값이&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NULL 이면 1, NULL&amp;nbsp;이&amp;nbsp;아닌&amp;nbsp;경우에는&amp;nbsp;0&lt;/b&gt;&lt;/span&gt;을&amp;nbsp;반환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;GROUPING 함수에서 사용될 컬럼은 반드시 GROUP BY 절에서 명시해야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ROLLUP을 이용하여 NULL로 묶인 컬럼에 CASE문으로 나눠서 출력해도 됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105856765&quot; class=&quot;pgsql&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
CASE
	WHEN GROUPING(D.SALES_NAME) = 1 THEN '합계 TOTAL'
    WHEN D.SALES_NAME IS NULL THEN '매출 없는'
    ELSE D.SALES_NAME
END 부서명, SUM(D.SALES_TOTAL)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;컬럼별로 사용 가능함&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648105856765&quot; class=&quot;routeros&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT job
     , deptno
     , SUM(sal) 
     , GROUPING(job)
     , GROUPING(deptno)
  FROM emp
 WHERE job IN ('ANALYST', 'MANAGER')
 GROUP BY ROLLUP(job, deptno)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;GROUPING_ID&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;GROUPING_ID 함수는 인자로 들어온 각각 칼럼의 GROUPING 함수 값을 2진수로 합쳐 해당 2진수 값을 10진수로 변환한 값을 반환&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;RANK&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;&quot;&gt;참고 링크: &lt;a href=&quot;https://gent.tistory.com/266&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://gent.tistory.com/266&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648108965266&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ENAME 
     , SAL 
     , RANK() OVER (ORDER BY SAL DESC)       RANK 
     , DENSE_RANK() OVER (ORDER BY SAL DESC) DENSE_RANK 
  FROM EMP 
 ORDER BY SAL DESC&lt;/code&gt;&lt;/pre&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-filename=&quot;RANK.png&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQJtrP/btrxai9SR6N/oCds2ctRjsKXN2mr51RuDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQJtrP/btrxai9SR6N/oCds2ctRjsKXN2mr51RuDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQJtrP/btrxai9SR6N/oCds2ctRjsKXN2mr51RuDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQJtrP%2Fbtrxai9SR6N%2FoCds2ctRjsKXN2mr51RuDK%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;607&quot; height=&quot;535&quot; data-filename=&quot;RANK.png&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;RANK()&lt;/b&gt; 함수는 2순위가 2명 이므로 3순위를 건너뛰고 2순위 다음은 4순위로 표시&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;DENSE_RANK()&lt;/b&gt; 함수는 2순위가 2명 이여도 다음 순위는 3순위로 표시&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;순위가 겹치지 않는다면 RANK나 DENSE_RANK는 큰 차이가 없음&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;중복 순위 값 없애기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222; font-family: 'Noto Sans Light';&quot;&gt;급여 외에 보너스 컬럼을 추가하여 급여 순위를 조회하면 중복 순위 없이 순차적인 순위가 표시&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648109084126&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ENAME 
     , SAL
     , COMM
     , RANK() OVER (ORDER BY SAL DESC, COMM DESC) RANNK 
  FROM EMP 
 ORDER BY SAL DESC, COMM DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;RANK.png&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFEJEw/btrw6gFfPAg/kAtHrHdCukXaKkvQnvFLDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFEJEw/btrw6gFfPAg/kAtHrHdCukXaKkvQnvFLDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFEJEw/btrw6gFfPAg/kAtHrHdCukXaKkvQnvFLDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFEJEw%2Fbtrw6gFfPAg%2FkAtHrHdCukXaKkvQnvFLDK%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;607&quot; height=&quot;535&quot; data-filename=&quot;RANK.png&quot; data-origin-width=&quot;607&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;그룹별 순위 구하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;조회된 결과에서 그룹별로 순위를 부여해야 하는 경우에는 PARTITION BY절을 추가하면 해당 그룹 내 순위가 표시&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648109192516&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT DEPT 
     , ENAME 
     , SAL 
     , COMM 
     , RANK() OVER (PARTITION BY DEPT ORDER BY SAL DESC, COMM DESC) RANK 
  FROM EMP 
 ORDER BY DEPT, SAL DESC, COMM DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;다운로드 (1).png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;561&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpnuVH/btrw63yTOFU/5lIYLUTooJDdJocKkPjL7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpnuVH/btrw63yTOFU/5lIYLUTooJDdJocKkPjL7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpnuVH/btrw63yTOFU/5lIYLUTooJDdJocKkPjL7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpnuVH%2Fbtrw63yTOFU%2F5lIYLUTooJDdJocKkPjL7k%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;764&quot; height=&quot;561&quot; data-filename=&quot;다운로드 (1).png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;561&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그룹별 최소값, 최대값 구하기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;KEEP() 함수와&amp;nbsp;&lt;/span&gt;&lt;b&gt;FIRST&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;b&gt;LAST&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp;키워드를 활용하면 그룹 내에 최소값, 최대값을 쉽게 구할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;b&gt;DENSE_RANK&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #222222;&quot;&gt;&amp;nbsp;함수만 사용 가능&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648109238653&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT DEPT 
     , ENAME 
     , SAL 
     , MIN(SAL) KEEP(DENSE_RANK FIRST ORDER BY SAL) OVER(PARTITION BY DEPT) SAL_MIN 
     , MAX(SAL) KEEP(DENSE_RANK LAST ORDER BY SAL) OVER(PARTITION BY DEPT)  SAL_MAX 
  FROM EMP 
 ORDER BY DEPT, SAL DESC&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;그룹별.png&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3lkNy/btrw8PfSeq0/WFPcOOeuJKiQHJC4COLpwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3lkNy/btrw8PfSeq0/WFPcOOeuJKiQHJC4COLpwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3lkNy/btrw8PfSeq0/WFPcOOeuJKiQHJC4COLpwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3lkNy%2Fbtrw8PfSeq0%2FWFPcOOeuJKiQHJC4COLpwk%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;859&quot; height=&quot;562&quot; data-filename=&quot;그룹별.png&quot; data-origin-width=&quot;859&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/100</guid>
      <comments>https://tipclass.tistory.com/100#entry100comment</comments>
      <pubDate>Thu, 24 Mar 2022 16:11:40 +0900</pubDate>
    </item>
    <item>
      <title>1-3. DATABASE (JOIN 내부/외부, 연산자)</title>
      <link>https://tipclass.tistory.com/99</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;JOIN (내부/외부), 연산자&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고 링크: &lt;a href=&quot;https://goddaehee.tistory.com/62&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://goddaehee.tistory.com/62&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;nbsp;조인&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;테이블의 공통 컬럼(외래키 등)을 통하여 테이블을 결합한 후 데이터 처리하는 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;내부 조인, 외부 조인, ANSI 조인 (INNER JOIN, OUTER JOIN)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;SELECT FROM을 이용한 조인&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648110113459&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT  MEM.MEM_ID, MEM.NAME, MEM.DEPART_ID, DEPART.DEPART_NAME
FROM     MEM, DEPART
WHERE MEM.DEPART_ID = DEPART.DEPART_ID;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;ANSI 표준 조인&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;JOIN절을 &lt;b&gt;명시적으로 선언&lt;/b&gt;하여 질의문을 작성 가능&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;SELECT&amp;nbsp;&lt;/b&gt;&lt;/span&gt;컬럼이름1,&amp;nbsp;컬럼이름2,&amp;nbsp;ㆍㆍㆍ &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;테이블명1 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;JOIN&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;테이블명2 &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;ON&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;테이블명1.컬럼명 = 테이블명2.컬럼명;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1648110209501&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.MEM_ID, A.NAME, A.DEPART_ID, B.DEPART_NAME
FROM    MEM A
JOIN    DEPART B
ON     A.DEPART_ID = B.DEPART_ID&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;OUTER 조인&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;EQUI JOIN 문장들의 한 가지 제약점은 그것들이 조인을 생성하려 하는 두 개의 테이블의 두 개 컬럼에서 공통된 값이 없다면 테이블로부터 데이터 반환하지 못함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;정상적으로 조인 조건을 만족하지 못하는 행들을 보기 위해 OUTER JOIN을 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;OUTER JOIN의 연산자는 (+)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;조인시킬 값이 없는 조인측에 (+)를 위치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;OUTER JOIN 연산자는 표현식의 한쪽에만 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1648110416271&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT  A.MEM_ID, A.NAME, A.DEPART_ID, B.DEPART_NAME, C.LOG_TIME
FROM	MEM A
	,DEPART B
	,MEM_MOD_LOG C
WHERE   A.DEPART_ID = B.DEPART_ID
AND     A.MEM_ID = C.MEM_ID (+)
AND       A.NAME = '사자';

-- 데이터가 없을 수도 있는 쪽 JOIN 컬럼에 (+)를 추가하여 OUTER JOIN이 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;FULL OUTER JOIN&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;양쪽 테이블에 다&amp;nbsp;Outer Join을 거는 것을&amp;nbsp;TWO-WAY OUTER JOIN&amp;nbsp;또는&amp;nbsp;FULL OUTER JOIN&amp;nbsp;이라고 함&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/99</guid>
      <comments>https://tipclass.tistory.com/99#entry99comment</comments>
      <pubDate>Thu, 24 Mar 2022 16:09:57 +0900</pubDate>
    </item>
    <item>
      <title>1-2. DATABASE (표준 SQL 이해)</title>
      <link>https://tipclass.tistory.com/98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;표준&amp;nbsp;SQL&amp;nbsp;이해(ORACLE,&amp;nbsp;PostgreSQL,&amp;nbsp;MS-SQL,&amp;nbsp;MySql,&amp;nbsp;Maria&amp;nbsp;등&amp;nbsp;공통점&amp;nbsp;및&amp;nbsp;차이점)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;참고:&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;a href=&quot;https://blog.siner.io/2021/10/11/rdbms-comparison/&quot;&gt;https://blog.siner.io/2021/10/11/rdbms-comparison/&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1648105720495&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;주요 RDBMS의 종류&quot; data-og-description=&quot;이전 게시물인 RDBMS의 특징을 보고 오면 좋습니다. RDBMS DB 엔진 중 유명한 것들을 비교해보고, 특징을 알아보자. 이 게시글을 보는 모두가 데이터베이스를 고르는 과정에 도움이 되었으면 한다. i&quot; data-og-host=&quot;blog.siner.io&quot; data-og-source-url=&quot;https://blog.siner.io/2021/10/11/rdbms-comparison/&quot; data-og-url=&quot;https://blog.siner.io/2021/10/11/rdbms-comparison/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/1EjNF/hyNNtTUxov/ZYoidSRaF38ih3PzeCpgjk/img.png?width=600&amp;amp;height=425&amp;amp;face=0_0_600_425&quot;&gt;&lt;a href=&quot;https://blog.siner.io/2021/10/11/rdbms-comparison/&quot; data-source-url=&quot;https://blog.siner.io/2021/10/11/rdbms-comparison/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/1EjNF/hyNNtTUxov/ZYoidSRaF38ih3PzeCpgjk/img.png?width=600&amp;amp;height=425&amp;amp;face=0_0_600_425');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;주요 RDBMS의 종류&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이전 게시물인 RDBMS의 특징을 보고 오면 좋습니다. RDBMS DB 엔진 중 유명한 것들을 비교해보고, 특징을 알아보자. 이 게시글을 보는 모두가 데이터베이스를 고르는 과정에 도움이 되었으면 한다. i&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.siner.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Oracle&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;온프레미스, 클라우드, 하이브리드 클라우등의 환경을 제공&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;신뢰성을 요구되는 경우엔 오라클을 거의 사용&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;font-family: 'Noto Sans Light';&quot;&gt;** 카카오뱅크가 오라클과 MySQL을 사용하고 있으며, 공고한 시장장악력을 알 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;** WOW도 오라클로 구성되어 있다&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;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Oracle 특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;flashback&lt;/b&gt;&lt;/span&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;font-family: 'Noto Sans Light';&quot;&gt;커밋 이전 상태로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;되돌리는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;과거&amp;nbsp;시점의&amp;nbsp;데이터&amp;nbsp;조회&lt;/b&gt;도&amp;nbsp;가능&lt;/span&gt;&lt;br /&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;font-family: 'Noto Sans Light';&quot;&gt;ex)&amp;nbsp;SELECT&amp;nbsp;*&amp;nbsp;FORM&amp;nbsp;고객&amp;nbsp;AS&amp;nbsp;OF&amp;nbsp;TIMESTAMP&amp;nbsp;(SYSTIMESTAMP&amp;nbsp;-&amp;nbsp;INTERVAL&amp;nbsp;'1'&amp;nbsp;HOUR)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;특정&amp;nbsp;시점에&amp;nbsp;존재했던&amp;nbsp;레코드를&amp;nbsp;조회해&amp;nbsp;새로운&amp;nbsp;테이블을&amp;nbsp;생성-추가&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1648105720496&quot; class=&quot;pgsql&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE 고객_BACKUP AS SELECT * FROM 고객 AS OF TIMESTAMP TO_DATE(&amp;lsquo;201501101020&amp;rsquo;, &amp;lsquo;YYYYMMDDHH24MI&amp;rsquo;)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;GATHER_PLAN_STATISTICS&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SQL&amp;nbsp;Trace를&amp;nbsp;수행하지&amp;nbsp;않고도&amp;nbsp;쿼리&amp;nbsp;plan을&amp;nbsp;단계별로&amp;nbsp;get&amp;nbsp;block을&amp;nbsp;알수있다.&amp;nbsp;쿼리&amp;nbsp;성능을&amp;nbsp;확인-비교&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;튜닝할때&amp;nbsp;아주&amp;nbsp;빈번하게&amp;nbsp;쓰인다고&amp;nbsp;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;136787268-70b5322b-9d06-4796-ab5f-8335e1342178.png&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/91hzF/btrw53SIwq3/aUhLbYFIvde0r2mrM4Rz1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/91hzF/btrw53SIwq3/aUhLbYFIvde0r2mrM4Rz1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/91hzF/btrw53SIwq3/aUhLbYFIvde0r2mrM4Rz1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F91hzF%2Fbtrw53SIwq3%2FaUhLbYFIvde0r2mrM4Rz1k%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;918&quot; height=&quot;495&quot; data-filename=&quot;136787268-70b5322b-9d06-4796-ab5f-8335e1342178.png&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;장점&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단점&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;고성능 트랜잭션 처리 제공하여 처리하여 속도가 빠르다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;구동에 고사양의 장비가 필요&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;(메모리 많이 소요)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;대규모 데이터베이스 지원&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;비용이 많이 듦&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;SQL문을 실행하는 가장 효율적인 방법을 선택&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;쿼리비용 최소화를 위한 테이블 인덱싱 분석&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;MySQL&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;nbsp;특징&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;top n개의 레코드를 가지고 오는 케이스에 특화됨&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;PHP의 인기도와 MySQL의 인기도는 맞물림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;복잡한 알고리즘은 가급적 지원하지 않음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;간단한 처리속도를 향상시키는 것을 추구&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;정확함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 412.5px; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 412.5px; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 412.5px; height: 140px;&quot; rowspan=&quot;2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오픈소스로 무료 이용 가능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 412.5px; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;문자열 비교에서 대소문자를 구분하지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 120px;&quot;&gt;
&lt;td style=&quot;width: 412.5px; height: 120px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;nested loop join만 지원&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; - 바깥 테이블의 처리 범위를 하나씩 접근하면서 추출된 값으로 안쪽 테이블을 조인하는 방식&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; - 중첩 루프문과 동일한 원리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; - 좁은 범위에 유리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; - 순차적으로 처리&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;MSSQL&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;특징 : 관대함&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.8837%; height: 57px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 27px;&quot;&gt;
&lt;td style=&quot;height: 27px; width: 49.8837%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;엔터프라이즈 급 관리 가능한 소프트웨어&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 27px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;상당한 비용이 들어감&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 49.8837%; height: 10px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;우수한 데이터 복구 지원&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;windows 기반 서버에서만 실행되도록 설계되어 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/98</guid>
      <comments>https://tipclass.tistory.com/98#entry98comment</comments>
      <pubDate>Thu, 24 Mar 2022 16:09:30 +0900</pubDate>
    </item>
    <item>
      <title>1-1. DATABASE  (RDBMS/Non-RDBMS)</title>
      <link>https://tipclass.tistory.com/97</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;RDBMS / Non-RDBMS&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;참고 링크: &lt;a href=&quot;https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;Databse &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;일반적으로&amp;nbsp;컴퓨터&amp;nbsp;시스템에&amp;nbsp;전자&amp;nbsp;방식으로&amp;nbsp;저장된&amp;nbsp;구조화된&amp;nbsp;정보&amp;nbsp;또는&amp;nbsp;데이터의&amp;nbsp;체계적인&amp;nbsp;집합을&amp;nbsp;의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;DBMS(DataBase Management System) &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;SQL &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;관계형&amp;nbsp;데이터베이스&amp;nbsp;관리&amp;nbsp;시스템&lt;/b&gt;의&amp;nbsp;데이터를&amp;nbsp;관리하기&amp;nbsp;위해&amp;nbsp;설계된&amp;nbsp;특수&amp;nbsp;목적의&amp;nbsp;프로그래밍&amp;nbsp;언어&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;계형&amp;nbsp;데이터베이스&amp;nbsp;관리&amp;nbsp;시스템&lt;/b&gt;에서&amp;nbsp;자료의&amp;nbsp;검색과&amp;nbsp;관리,&amp;nbsp;데이터베이스&amp;nbsp;스키마&amp;nbsp;생성과&amp;nbsp;수정,&amp;nbsp;데이터베이스&amp;nbsp;객체&amp;nbsp;접근&amp;nbsp;조정&amp;nbsp;관리를&amp;nbsp;위해&amp;nbsp;고안&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;RDBMS (관계형 데이터베이스 관리 시스템)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기존의 RDBMS에서의 저장 방식은 SQL에 의해 저장되고 있으며 정해진 스키마에 따라 데이터를 저장해야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;관계를&amp;nbsp;나타내기&amp;nbsp;위해&amp;nbsp;외래&amp;nbsp;키(foreign&amp;nbsp;key)라는&amp;nbsp;것을&amp;nbsp;사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;외래 키를 이용한 테이블 간 JOIN 가능 ★&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;데이터가 자주 변경되는 시스템에 적합 ★&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;&amp;nbsp;Non-RDBMS(NoSQL)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;관계형&amp;nbsp;데이터베이스가&amp;nbsp;아닌&amp;nbsp;다른&amp;nbsp;형태의&amp;nbsp;데이터&amp;nbsp;저장&amp;nbsp;기술을&amp;nbsp;의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 일관성을 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장 (Scale-Out)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;스키마에&amp;nbsp;맞추어&amp;nbsp;데이터를&amp;nbsp;관리해야&amp;nbsp;된다는&amp;nbsp;한계를&amp;nbsp;극복하고&amp;nbsp;수평적&amp;nbsp;확장성(Scale-out)을&amp;nbsp;쉽게&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있다는&amp;nbsp;장점&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #f89009; font-family: 'Noto Sans Light';&quot;&gt;정확한 데이터 구조를 알 수 없고 데이터가 변경 및 확장될 수 있는 경우에 적합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #f89009; font-family: 'Noto Sans Light';&quot;&gt;중복 데이터를 수정하려면 모든 컬렉션에서 수정해야 하므로 update가 많이 이루어지지 않는 시스템에 적합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #f89009; font-family: 'Noto Sans Light';&quot;&gt;DB를 Scale-Out해야 하는 시스템에 적합&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 380px;&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: 20.3488%; height: 140px; text-align: center;&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Key-Value&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Database&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터가 key, value의 쌍으로 저장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 60px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 60px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;key는 value에 접근하기 위한 용도로 사용되며, 값은 어떠한 형태의 데이터라도 담을 수 있음 (이미지, 비디오 가능)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;간단한 API를 제공하여 질의의 속도가 굉자히 빠른 편&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Redis, Riak, Amazon Dynamo DB&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; text-align: center; height: 120px;&quot; rowspan=&quot;6&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Document&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Database&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터가 Key와 Document (Value가 계층적인 형태)형태로 저장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Document는 객체와 유사하며, 하나의 단위로 취급 (여러 개의 테이블로 나눌 필요가 없음)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;객체-관계 매핑 불필요&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;검색 기능에 최적화&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;사용이 번거롭고 쿼리가 SQL과는 다름&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;질의의 결과가 JSON이나 xml 형태로 출력되어 전체적으로 사용 방법이 RDBMS와 다름&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 20.3488%; text-align: center; height: 40px;&quot; rowspan=&quot;7&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Wide Column&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Database&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Column-family&amp;nbsp;Model&amp;nbsp;기반&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Key에서 필드를 결정하며, Key는 Row(키 값)와 Column-family, Column-name으로 구성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;연관된 데이터들은 Coulmn-family 안에 속하며, 각자 Column-name을 갖고 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;어트리뷰트가 계층적인 구조를 가지고 있다고 이해하는 것이 좋음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 79.6512%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;저장된 데이터는 하나의 커다란 테이블로 표현 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 79.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;질의는 Row, Column-family, Column-name을 통해서 수행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 79.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Hbase, Hypertable&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.3488%; text-align: center;&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Graph Database&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터를 Node와 Edge, Property와 함게 그래프 구조를 사용하여 데이터를 표현하고 저장&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 79.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;개체와 관계를 그래프로 표현한 것이므로 관계형 모델이라고 할 수 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 79.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터 간의 관계 탐색의 키일 경우 적합&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;ex) 페이스북이나 트위터에서 같은 소셜 네트워크에서 친구의 친구를 찾는 질의,추천엔진, 패턴인식&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 79.6512%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Node4J&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;RDBMS 와 Non-RDBMS의 장단점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 159px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 7.7907%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 35.5814%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;RDBMS&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 19px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Non-RDBMS&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 7.7907%; height: 60px; text-align: center;&quot; rowspan=&quot;3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;장점&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;명확한 데이터 구조 보장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유연하고 자유로운 데이터 구조&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터를 중복 없이 한 번만 저장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;언제든 저장된 데이터를 조정하고 새로운 필드 추가 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터 분산에 용이하며 성능향상을 위해 Scale-up, Scale-out 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 7.7907%; height: 80px; text-align: center;&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;단점&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;관계 때문에 JOIN문으로 복잡한 쿼리 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터의 중복 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Scale-up만 지원 (비용 증가)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;중복된 데이터가 변경될 경우 모든 컬렉션에서 작업 수행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유연하지 못한 데이터 구조&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;명확한 데이터 구조를 보장하지 못함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 35.5814%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;스키마가 변경될 경우 번거롭고 어려움&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 56.6279%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;데이터 구조 결정이 어려움&lt;/span&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;</description>
      <category>개발 기본 지식</category>
      <author>코딩낙타</author>
      <guid isPermaLink="true">https://tipclass.tistory.com/97</guid>
      <comments>https://tipclass.tistory.com/97#entry97comment</comments>
      <pubDate>Wed, 23 Mar 2022 17:38:53 +0900</pubDate>
    </item>
  </channel>
</rss>