<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>wlsekf 님의 블로그</title>
    <link>https://wlsekf.tistory.com/</link>
    <description>wlsekf 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 16 May 2026 06:00:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>wlsekf</managingEditor>
    <item>
      <title>2026 정보처리기사</title>
      <link>https://wlsekf.tistory.com/42</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2026 정보처리기사&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;목차&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1과목 소프트웨어 설계&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 요구사항 확인&lt;br /&gt;&amp;nbsp; 001. 소프트웨어 생명 주기&lt;br /&gt;&amp;nbsp; 002. 스크럼(Scrum) 기법&lt;br /&gt;&amp;nbsp; 003. XP(eXtreme Programming) 기법&lt;br /&gt;&amp;nbsp; 004. 현행 시스템 파악&lt;br /&gt;&amp;nbsp; 005. 기발 기술 환경 파악&lt;br /&gt;&amp;nbsp; 006. 요구사항 정의&lt;br /&gt;&amp;nbsp; 007. 요구사항 분석&lt;br /&gt;&amp;nbsp; 008. 요구사항 분석 CASE와 HIPO&lt;br /&gt;&amp;nbsp; 009. UML(Unified Modeling Language)&lt;br /&gt;&amp;nbsp; 010. 주요 UML 다이어그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 화면 설계&lt;br /&gt;&amp;nbsp; 011. 사용자 인터페이스&lt;br /&gt;&amp;nbsp; 012. UI 설계 도구&lt;br /&gt;&amp;nbsp; 013. 품질 요구사항&lt;br /&gt;&amp;nbsp; 014. UI 상세 설계&lt;br /&gt;&amp;nbsp; 015. HCI / UX / 감성공학&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 애플리케이션 설계&lt;br /&gt;&amp;nbsp; 016. 소프트웨어 아키텍처&lt;br /&gt;&amp;nbsp; 017. 아키텍처 패턴&lt;br /&gt;&amp;nbsp; 018. 객체지향(Object-Oriented)&lt;br /&gt;&amp;nbsp; 019. 객체지향 분석 및 설계&lt;br /&gt;&amp;nbsp; 020. 모듈&lt;br /&gt;&amp;nbsp; 021. 공통 모듈&lt;br /&gt;&amp;nbsp; 022. 코드&lt;br /&gt;&amp;nbsp; 023. 디자인 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 인터페이스 설계&lt;br /&gt;&amp;nbsp; 024. 시스템 인터페이스 요구사항 분석&lt;br /&gt;&amp;nbsp; 025. 인터페이스 요구사항 검증&lt;br /&gt;&amp;nbsp; 026. 인터페이스 방법 명세화&lt;br /&gt;&amp;nbsp; 027. 미들웨어 솔루션 명세&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;2과목 소프트웨어 개발&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 데이터 입&amp;middot;출력 구현&lt;br /&gt;&amp;nbsp; 028. 자료 구조&lt;br /&gt;&amp;nbsp; 029. 트리(Tree)&lt;br /&gt;&amp;nbsp; 030. 정렬(Sort)&lt;br /&gt;&amp;nbsp; 031. 검색 - 이분 검색 / 해싱&lt;br /&gt;&amp;nbsp; 032. 데이터베이스 개요&lt;br /&gt;&amp;nbsp; 033. 절차형 SQL&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 통합 구현&lt;br /&gt;&amp;nbsp; 034. 단위 모듈 구현&lt;br /&gt;&amp;nbsp; 035. 단위 모듈 테스트&lt;br /&gt;&amp;nbsp; 036. 개발 지원 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 제품 소프트웨어 패키징&lt;br /&gt;&amp;nbsp; 037. 소프트웨어 패키징&lt;br /&gt;&amp;nbsp; 038. 디지털 저작권 관리(DRM)&lt;br /&gt;&amp;nbsp; 039. 소프트웨어 설치 매뉴얼 작성&lt;br /&gt;&amp;nbsp; 040. 소프트웨어 사용자 매뉴얼 작성&lt;br /&gt;&amp;nbsp; 041. 소프트웨어 버전 등록&lt;br /&gt;&amp;nbsp; 042. 소프트웨어 버전 관리 도구&lt;br /&gt;&amp;nbsp; 043. 빌드 자동화 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 애플리케이션 테스트 관리&lt;br /&gt;&amp;nbsp; 044. 애플리케이션 테스트&lt;br /&gt;&amp;nbsp; 045. 애플리케이션 테스트의 분류&lt;br /&gt;&amp;nbsp; 046. 테스트 기법에 따른 애플리케이션 테스트&lt;br /&gt;&amp;nbsp; 047. 개발 단계에 따른 애플리케이션 테스트&lt;br /&gt;&amp;nbsp; 048. 통합 테스트&lt;br /&gt;&amp;nbsp; 049. 테스트 케이스 / 테스트 시나리오 / 테스트 오라클&lt;br /&gt;&amp;nbsp; 050. 테스트 자동화 도구&lt;br /&gt;&amp;nbsp; 051. 결함 관리&lt;br /&gt;&amp;nbsp; 052. 복잡도&lt;br /&gt;&amp;nbsp; 053. 애플리케이션 성능 개선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 인터페이스 구현&lt;br /&gt;&amp;nbsp; 054. 모듈 간 공통 기능 및 데이터 인터페이스 확인&lt;br /&gt;&amp;nbsp; 055. 모듈 연계를 위한 인터페이스 기능 식별&lt;br /&gt;&amp;nbsp; 056. 모듈 간 인터페이스 데이터 표준 확인&lt;br /&gt;&amp;nbsp; 057. 인터페이스 구현&lt;br /&gt;&amp;nbsp; 058. 인터페이스 보안&lt;br /&gt;&amp;nbsp; 059. 인터페이스 구현 검증&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;3과목 데이터베이스 구축&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 논리 데이터베이스 설계&lt;br /&gt;&amp;nbsp; 060. 데이터베이스 설계&lt;br /&gt;&amp;nbsp; 061. 데이터 모델의 개념&lt;br /&gt;&amp;nbsp; 062. E-R(개체-관계) 모델&lt;br /&gt;&amp;nbsp; 063. 관계형 데이터베이스의 구조&lt;br /&gt;&amp;nbsp; 064. 관계형 데이터베이스의 제약 조건 - 키(Key)&lt;br /&gt;&amp;nbsp; 065. 관계형 데이트베이스의 제약 조건 - 무결성&lt;br /&gt;&amp;nbsp; 066. 관계대수 및 관계해석&lt;br /&gt;&amp;nbsp; 067. 정규화(Normalization)&lt;br /&gt;&amp;nbsp; 068. 반정규화(Denormalization)&lt;br /&gt;&amp;nbsp; 069. 시스템 카탈로그&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 물리 데이터베이스 설계&lt;br /&gt;&amp;nbsp; 070. 트랜잭션 분석 / CRUD 분석&lt;br /&gt;&amp;nbsp; 071. 인덱스 설계&lt;br /&gt;&amp;nbsp; 072. 뷰(View) 설계&lt;br /&gt;&amp;nbsp; 073. 파티션 설계&lt;br /&gt;&amp;nbsp; 074. 분산 데이터베이스 설계&lt;br /&gt;&amp;nbsp; 075. 데이터베이스 보안 / 암호화&lt;br /&gt;&amp;nbsp; 076. 데이터베이스 보안 - 접근통제&lt;br /&gt;&amp;nbsp; 077. 데이터베이스 백업&lt;br /&gt;&amp;nbsp; 078. 스토리지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. SQL 응용&lt;br /&gt;&amp;nbsp; 079. SQL의 개념&lt;br /&gt;&amp;nbsp; 080. DDL&lt;br /&gt;&amp;nbsp; 081. DCL&lt;br /&gt;&amp;nbsp; 082. DML&lt;br /&gt;&amp;nbsp; 083. DML - SELECT-1&lt;br /&gt;&amp;nbsp; 084. DML - SELECT-2&lt;br /&gt;&amp;nbsp; 085. DML - JOIN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. SQL 활용&lt;br /&gt;&amp;nbsp; 086. 프로시저(Procedure)&lt;br /&gt;&amp;nbsp; 087. 트리거(Trigger)&lt;br /&gt;&amp;nbsp; 088. 사용자 정의 함수&lt;br /&gt;&amp;nbsp; 089. DBMS 접속 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 데이터 전환&lt;br /&gt;&amp;nbsp; 090. 데이터 전환&lt;br /&gt;&amp;nbsp; 091. 데이터 전환 방안&lt;br /&gt;&amp;nbsp; 092. 데이터 검증&lt;br /&gt;&amp;nbsp; 093. 오류 데이터 측정 및 정제&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;4과목 프로그래밍 언어 활용&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 서버 프로그램 구현&lt;br /&gt;&amp;nbsp; 094. 서버 개발&lt;br /&gt;&amp;nbsp; 095. 보안 및 API&lt;br /&gt;&amp;nbsp; 096. 배치 프로그램&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로그래밍 언어 활용&lt;br /&gt;&amp;nbsp; 097. 데이터 타입&lt;br /&gt;&amp;nbsp; 098. 변수&lt;br /&gt;&amp;nbsp; 099. 연산자&lt;br /&gt;&amp;nbsp; 100. 데이터 입&amp;middot;출력&lt;br /&gt;&amp;nbsp; 101. 제어문&lt;br /&gt;&amp;nbsp; 102. 반복문&lt;br /&gt;&amp;nbsp; 103. 배열과 문자열&lt;br /&gt;&amp;nbsp; 104. 포인터&lt;br /&gt;&amp;nbsp; 105. 구조체&lt;br /&gt;&amp;nbsp; 106. Python의 기초&lt;br /&gt;&amp;nbsp; 107. Python의 활용&lt;br /&gt;&amp;nbsp; 108. 스크립트 언어&lt;br /&gt;&amp;nbsp; 109. 라이브러리&lt;br /&gt;&amp;nbsp; 110. 예외 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 응용 SW 기초 기술 활용&lt;br /&gt;&amp;nbsp; 111. 운영체제의 개념&lt;br /&gt;&amp;nbsp; 112. Windows&lt;br /&gt;&amp;nbsp; 113. UNIX / LINUX / MacOS&lt;br /&gt;&amp;nbsp; 114. 기억장치 관리의 개요&lt;br /&gt;&amp;nbsp; 115. 가상기억장치 구현 기법 / 페이지 교체 알고리즘&lt;br /&gt;&amp;nbsp; 116. 가상기억장치 기타 관리 사항&lt;br /&gt;&amp;nbsp; 117. 프로세스의 개요&lt;br /&gt;&amp;nbsp; 118. 스케줄링&lt;br /&gt;&amp;nbsp; 119. 주요 스케줄링 알고리즘&lt;br /&gt;&amp;nbsp; 120. 환경 변수&lt;br /&gt;&amp;nbsp; 121. 운영체제 기본 명령어&lt;br /&gt;&amp;nbsp; 122. 인터넷&lt;br /&gt;&amp;nbsp; 123. OSI 참조 모델&lt;br /&gt;&amp;nbsp; 124. 네트워크 관련 장비&lt;br /&gt;&amp;nbsp; 125. TCP/IP&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;5과목 정보시스템 구축 관리&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 소프트웨어 개발 방법론 활용&lt;br /&gt;&amp;nbsp; 126. 소프트웨어 개발 방법론&lt;br /&gt;&amp;nbsp; 127. S/W 공학의 발전적 추세&lt;br /&gt;&amp;nbsp; 128. 상향식 비용 산정 기법&lt;br /&gt;&amp;nbsp; 129. 수학적 산정 기법&lt;br /&gt;&amp;nbsp; 130. 프로젝트 일정 계획&lt;br /&gt;&amp;nbsp; 131. 소프트웨어 개발 방법론 결정&lt;br /&gt;&amp;nbsp; 132. 소프트웨어 개발 표준&lt;br /&gt;&amp;nbsp; 133. 소프트웨어 개발 방법론 테일러링&lt;br /&gt;&amp;nbsp; 134. 소프트웨어 개발 프레임워크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. IT프로젝트 정보 시스템 구축 관리&lt;br /&gt;&amp;nbsp; 135. 네트워크 관련 신기술&lt;br /&gt;&amp;nbsp; 136. 네트워크 구축&lt;br /&gt;&amp;nbsp; 137. 경로 제어 / 트래픽 제어&lt;br /&gt;&amp;nbsp; 138. SW 관련 신기술&lt;br /&gt;&amp;nbsp; 139. 보안 관련 신기술&lt;br /&gt;&amp;nbsp; 140. HW 관련 신기술&lt;br /&gt;&amp;nbsp; 141. Secure OS&lt;br /&gt;&amp;nbsp; 142. DB 관련 신기술&lt;br /&gt;&amp;nbsp; 143. 회복 / 병행제어&lt;br /&gt;&amp;nbsp; 144. 교착상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 소프트웨어 개발 보안 구축&lt;br /&gt;&amp;nbsp; 145. Secure SDLC&lt;br /&gt;&amp;nbsp; 146. 세션 통제&lt;br /&gt;&amp;nbsp; 147. 입력 데이터 검증 및 표현&lt;br /&gt;&amp;nbsp; 148. 보안 기능&lt;br /&gt;&amp;nbsp; 149. 에러처리&lt;br /&gt;&amp;nbsp; 150. 코드 오류&lt;br /&gt;&amp;nbsp; 151. 캡슐화&lt;br /&gt;&amp;nbsp; 152. 암호 알고리즘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 시스템 보안 구축&lt;br /&gt;&amp;nbsp; 153. 서비스 공격 유형&lt;br /&gt;&amp;nbsp; 154. 서버 인증&lt;br /&gt;&amp;nbsp; 155. 보안 아키텍처 / 보안 프레임워크&lt;br /&gt;&amp;nbsp; 156. 로그 분석&lt;br /&gt;&amp;nbsp; 157. 보안 솔루션&lt;/p&gt;</description>
      <category>study ../정보처리기사</category>
      <category>2026</category>
      <category>데이터베이스 구축</category>
      <category>소프트웨어 개발</category>
      <category>소프트웨어 설계</category>
      <category>정보시스템 구축 관리</category>
      <category>정보처리기사</category>
      <category>정처기</category>
      <category>프로그래밍 언어 활용</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/42</guid>
      <comments>https://wlsekf.tistory.com/42#entry42comment</comments>
      <pubDate>Tue, 12 May 2026 23:24:19 +0900</pubDate>
    </item>
    <item>
      <title>[과목 II. SQL 기본 및 활용] 제3장 관리 구문: contents</title>
      <link>https://wlsekf.tistory.com/41</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 II. SQL 기본 및 활용&lt;br /&gt;&amp;nbsp; 제3장 관리 구문&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 DML&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 TCL&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 DDL&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 DCL&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 트랜잭션의 특성&lt;br /&gt;&amp;nbsp; * 원자성(Atomicity): 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되든지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (All or Nothing)&lt;br /&gt;&amp;nbsp; * 일관성(Consistency): 트랜잭션이 실행 되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.&lt;br /&gt;&amp;nbsp; * 고립성(Isolation): 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.&lt;br /&gt;&amp;nbsp; * 지속성(Durability): 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.&lt;br /&gt;&lt;br /&gt;# DISTINCT&lt;br /&gt;&amp;nbsp; * SQL에서 중복 행을 제거하는 데 사용되는 키워드&lt;br /&gt;&lt;br /&gt;# 테이블 생성 시 주의해야 할 사항&lt;br /&gt;&amp;nbsp; * 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용하고 가능한 단수형을 권고한다.&lt;br /&gt;&amp;nbsp; * 한 테이블 내에서는 칼럼명을 중복되게 지정할 수 없다.&lt;br /&gt;&amp;nbsp; * 벤더에서 사전에 정의한 예약어(Reserved word)를 사용할 수 없다.&lt;br /&gt;&lt;br /&gt;# 외래키&lt;br /&gt;&amp;nbsp; * 테이블 생성 시 설정할 수 있다.&lt;br /&gt;&amp;nbsp; * 외래키 값은 NULL 값을 가질 수 있다.&lt;br /&gt;&amp;nbsp; * 한 테이블에 하나 이상 생성할 수 있다.&lt;br /&gt;&amp;nbsp; * 외래키 값은 참조 무결성 제약을 받을 수 있다.&lt;br /&gt;&lt;br /&gt;# DELETE(/MODIFIY) Action&lt;br /&gt;&amp;nbsp; * CASCADE: Master 삭제 시 Child 같이 삭제&lt;br /&gt;&amp;nbsp; * Set Null: Master 삭제 시 Child 해당 필드 Null&lt;br /&gt;&amp;nbsp; * Set Default: Master 삭제 시 Child 해당 필드 Default 값으로 설정&lt;br /&gt;&amp;nbsp; * RESTRICT: Child 테이블에 PK 값이 없는 경우만 Master 삭제 허용&lt;br /&gt;&amp;nbsp; * No Action: 참조 무결성을 위반하는 삭제/수정 액션을 취하지 않음&lt;br /&gt;&lt;br /&gt;# INSERT Action&lt;br /&gt;&amp;nbsp; * AUTOMATIC: Master 테이블에 PK가 없는 경우 Master PK를 생성 후 Child 입력&lt;br /&gt;&amp;nbsp; * Set Null: Master 테이블에 PK가 없는 경우 Child 외부키를 Null 값으로 처리&lt;br /&gt;&amp;nbsp; * Set Default: Master 테이블에 PK가 없는 경우 Child 외부키를 지정된 기본값으로 입력&lt;br /&gt;&amp;nbsp; * DEPENDANT: Master 테이블에 PK가 존재할 때만 Child 입력 허용&lt;br /&gt;&amp;nbsp; * No Action: 참조 무결성을 위반하는 입력 액션을 취하지 않음&lt;br /&gt;&lt;br /&gt;# 산술 연산자 우선 순위&lt;br /&gt;&amp;nbsp; * (), *, /, +, -&lt;br /&gt;&lt;br /&gt;# DROP&lt;br /&gt;&amp;nbsp; * DDL&lt;br /&gt;&amp;nbsp; * ROLLBACK 불가능&lt;br /&gt;&amp;nbsp; * AUTO COMMIT&lt;br /&gt;&amp;nbsp; * 테이블이 사용했던 Storage를 모두 Release&lt;br /&gt;&amp;nbsp; * 테이블의 정의 자체를 완전히 삭제함&lt;br /&gt;&lt;br /&gt;# TRUNCATE&lt;br /&gt;&amp;nbsp; * DDL(일부 DML 성격 가짐)&lt;br /&gt;&amp;nbsp; * ROLLBACK 불가능&lt;br /&gt;&amp;nbsp; * AUTO COMMIT&lt;br /&gt;&amp;nbsp; * 테이블이 사용했던 Storage 중 최초 테이블 생성 시 할당된 Storage만 남기고 Release&lt;br /&gt;&amp;nbsp; * 테이블을 최초 생성된 초기 상태로 만듦&lt;br /&gt;&lt;br /&gt;# DELETE&lt;br /&gt;&amp;nbsp; * DML&lt;br /&gt;&amp;nbsp; * COMMIT 이전 ROLLBACK 가능&lt;br /&gt;&amp;nbsp; * 사용자 COMMIT&lt;br /&gt;&amp;nbsp; * 테이블을 모두 Delete해도 사용했던 Storage는 Release 되지 않음&lt;br /&gt;&amp;nbsp; * 데이터만 삭제&lt;br /&gt;&lt;br /&gt;# 오라클&lt;br /&gt;&amp;nbsp; * DDL 문장 수행 후 자동으로 COMMIT을 수행한다.&lt;br /&gt;&amp;nbsp; * DDL 문장의 수행은 내부적으로 트랜잭션을 종료시킨다.&lt;br /&gt;&lt;br /&gt;# SQL Server&lt;br /&gt;&amp;nbsp; * DDL 문장 수행 후 자동으로 COMMIT을 수행하지 않는다.&lt;br /&gt;&amp;nbsp; * CREATE TABLE 문장도 TRANSACTION의 범주에 포함된다.&lt;br /&gt;&lt;br /&gt;# 트랜잭션(Transaction)&lt;br /&gt;&amp;nbsp; * 데이터베이스의 논리적 연산 단위&lt;br /&gt;&lt;br /&gt;# ROLLBACK&lt;br /&gt;&amp;nbsp; * ROLLBACK 구문은 COMMIT 되지 않은 상위의 모든 TRANSACTION을 모두 ROLLBACK 한다.&lt;br /&gt;&lt;br /&gt;# TOP N&lt;br /&gt;&amp;nbsp; * SQL Server의 TOP N 질의문에서 N에 해당하는 값이 동일한 경우 함께 출력되도록 하는 WITH TIES 옵션을 ORDER BY 절과 함께 사용하여야 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>DCL</category>
      <category>DDL</category>
      <category>DML</category>
      <category>Tcl</category>
      <category>관리 구문</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/41</guid>
      <comments>https://wlsekf.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 21 Aug 2025 00:12:24 +0900</pubDate>
    </item>
    <item>
      <title>[과목 II. SQL 기본 및 활용] 제3장 관리 구문: index</title>
      <link>https://wlsekf.tistory.com/40</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 II. SQL 기본 및 활용&lt;br /&gt;&amp;nbsp; 제3장 관리 구문&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 DML&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 TCL&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 DDL&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 DCL&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 제약 조건의 종류&lt;br /&gt;&amp;nbsp; * PRIMARY KEY(기본키)&lt;br /&gt;&amp;nbsp; * UNIQUE KEY(고유키)&lt;br /&gt;&amp;nbsp; * NOT NULL&lt;br /&gt;&amp;nbsp; * CHECK&lt;br /&gt;&amp;nbsp; * FOREIGN KEY(외래키)&lt;br /&gt;&lt;br /&gt;# 테이블 칼럼에 대한 정의 변경&lt;br /&gt;&amp;nbsp; * Oracle: ALTER TABLE 테이블명 MODIFY (칼럼명1 데이터 유형 [DEFAULT 식] [NOT NULL], 칼럼명2 데이터 유형 ...);&lt;br /&gt;&amp;nbsp; * SQL Server: ALTER TABLE 테이블명 ALTER COLUMN 칼럼명 데이터 유형 [DEFAULT 식] [NOT NULL];&lt;br /&gt;&lt;br /&gt;# NULL&lt;br /&gt;&amp;nbsp; * NULL(ASCII 코드 00번)은 공백(BLANK, ASCII 코드 32번)이나 숫자 0(ZERO, ASCII 48)과는 전혀 다른 값이며, 조건에 맞는 데이터가 없을 때의 공집합과도 다르다. 'NULL'은 '아직 정의되지 않은 미지의 값'이거나 '현재 데이터를 입력하지 못하는 경우'를 의미한다.&lt;br /&gt;&lt;br /&gt;# 테이블 생성의 주의사항&lt;br /&gt;&amp;nbsp; * 테이블명은 객체를 의미할 수 있는 적절한 이름을 사용한다. 가능한 단수형을 권고한다.&lt;br /&gt;&amp;nbsp; * 테이블명은 다른 테이블의 이름과 중복되지 않아야 한다.&lt;br /&gt;&amp;nbsp; * 한 테이블 내에서는 칼럼명이 중복되게 지정될 수 없다.&lt;br /&gt;&amp;nbsp; * 테이블 이름을 지정하고 각 칼럼들은 괄호 '()'로 묶어 지정한다.&lt;br /&gt;&amp;nbsp; * 각 칼럼들은 콤마 ','로 구분되고, 테이블 생성문의 끝은 항상 세미콜론 ';'으로 끝난다.&lt;br /&gt;&amp;nbsp; * 칼럼에 대해서는 다른 테이블까지 고려하여 데이터베이스 내에서 일관성 있게 사용하는 것이 좋다. (데이터 표준화 관점)&lt;br /&gt;&amp;nbsp; * 칼럼 뒤에 데이터 유형은 꼭 지정되어야 한다.&lt;br /&gt;&amp;nbsp; * 테이블명과 칼럼명은 반드시 문자로 시작해야 하고, 벤더별로 길이에 대한 한계가 있다.&lt;br /&gt;&amp;nbsp; * 벤더에서 사전에 정의한 예약어(Reserved word)는 쓸 수 없다.&lt;br /&gt;&amp;nbsp; * A-Z, a-z, 0-9, _, $, # 문자만 허용된다.&lt;br /&gt;&lt;br /&gt;# 테이블의 불필요한 칼럼 삭제&lt;br /&gt;&amp;nbsp; * ALTER TABLE 테이블명 DROP COLUMN 삭제할 칼럼명;&lt;br /&gt;&lt;br /&gt;# 테이블에 데이터를 입력하는 두 가지 유형&lt;br /&gt;&amp;nbsp; * INSERT INTO 테이블명 (COLUMN_LIST) VALUES (COLUMN_LIST에 넣을 VALUE_LIST);&lt;br /&gt;&amp;nbsp; * INSERT INTO 테이블명 VALUES (전체 COLUMN에 넣을 VALUE_LIST);&lt;br /&gt;&lt;br /&gt;# 입력된 데이터의 수정&lt;br /&gt;&amp;nbsp; * UPDATE 테이블명 SET 수정되어야할 칼럼명 = 수정되길 원하는 새로운 값;&lt;br /&gt;&lt;br /&gt;# TRUNCATE TABLE&lt;br /&gt;&amp;nbsp; * 테이블 자체가 삭제되는 것이 아니고, 해당 테이블에 들어있던 모든 행들이 제거되고 저장 공간을 재사용 가능하도록 해제한다. 테이블 구조를 완전히 삭제하기 위해서는 DROP TABLE을 실행하면 된다.&lt;br /&gt;&lt;br /&gt;# 트랜잭션의 특성&lt;br /&gt;&amp;nbsp; * 원자성(Atomicity): 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되든지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다. (all or nothing)&lt;br /&gt;&amp;nbsp; * 일관성(Consistency): 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 된다.&lt;br /&gt;&amp;nbsp; * 고립성(Isolation): 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 된다.&lt;br /&gt;&amp;nbsp; * 지속성(Durability): 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.&lt;br /&gt;&lt;br /&gt;# 롤백(ROLLBACK)&lt;br /&gt;&amp;nbsp; * 테이블 내 입력한 데이터나 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경사항을 취소할 수 있다.&lt;br /&gt;&amp;nbsp; * 데이터 변경사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자들이 데이터 변경을 할 수 있게 된다.&lt;br /&gt;&lt;br /&gt;# BEGIN TRANSACTION&lt;br /&gt;&amp;nbsp; * BEGIN TRAN 구문도 가능&lt;br /&gt;&amp;nbsp; * 트랜잭션을 시작하고 COMMIT TRANSACTION(TRANSACTION은 생략 가능)으로 트랜잭션을 종료한다.&lt;br /&gt;&amp;nbsp; * ROLLBACK 구문을 만나면 최초의 BEGIN TRANSACTION 시점까지 모두 ROLLBACK이 수행된다.&lt;br /&gt;&lt;br /&gt;# 저장점(SAVEPOINT)&lt;br /&gt;&amp;nbsp; * 롤백(ROLLBACK) 할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백할 수 있다.&lt;br /&gt;&amp;nbsp; * Oracle: SAVEPOINT SVPT1; ... ROLLBACK TO SVPT1;&lt;br /&gt;&amp;nbsp; * SQL Server: SAVE TRANSACTION SVTR; ... ROLLBACK TRANSACION SVTR;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>study ../SQLD</category>
      <category>DCL</category>
      <category>DDL</category>
      <category>DML</category>
      <category>Tcl</category>
      <category>관리 구문</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/40</guid>
      <comments>https://wlsekf.tistory.com/40#entry40comment</comments>
      <pubDate>Wed, 20 Aug 2025 22:42:14 +0900</pubDate>
    </item>
    <item>
      <title>[과목 II. SQL 기본 및 활용] 제2장 SQL 활용: contents</title>
      <link>https://wlsekf.tistory.com/39</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 II. SQL 기본 및 활용&lt;br /&gt;&amp;nbsp; 제2장 SQL 활용&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 서브 쿼리&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 집합 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 그룹 함수&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 윈도우 함수&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 Top N 쿼리&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제6절 계층형 질의와 셀프 조인&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제7절 PIVOT 절과 UNPIVOT 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제8절 정규 표현식&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 다중 칼럼(Multi Column) 서브 쿼리&lt;br /&gt;&amp;nbsp; * 서브 쿼리의 실행 결과로 여러 칼럼을 반환한다. 메인 쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. 서브 쿼리와 메인 쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 한다.&lt;br /&gt;&lt;br /&gt;# 집합 연산자&lt;br /&gt;&amp;nbsp; * UNION: 여러 개의 SQL 문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다.&lt;br /&gt;&amp;nbsp; * UNION ALL: 여러 개의 SQL 문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 질의 결과가 상호 배타적(Exclusive)일 때 많이 사용한다. 개별 SQL 문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일하다. (결과의 정렬 순서에는 차이가 있을 수 있음)&lt;br /&gt;&amp;nbsp; * INTERSECT: 여러 개의 SQL 문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다.&lt;br /&gt;&amp;nbsp; * EXCEPT: 앞의 SQL 문의 결과에서 뒤의 SQL 문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함)&lt;br /&gt;&lt;br /&gt;# 오라클 계층형 질의&lt;br /&gt;&amp;nbsp; * START WITH 절은 계층 구조의 시작점을 지정하는 구문&lt;br /&gt;&amp;nbsp; * ORDER SIBLINGS BY 절은 형제 노드 사이에서 정렬을 지정하는 구문&lt;br /&gt;&amp;nbsp; * 순방향 전개란 부모 노드로부터 자식 노드 방향으로 전개하는 것&lt;br /&gt;&amp;nbsp; * 루트 노드의 LEVEL 값은 1이다.&lt;br /&gt;&lt;br /&gt;# 계층형 질의문&lt;br /&gt;&amp;nbsp; * SQL Server에서의 계층형 질의문은 CTE(Common Table Expression)를 재귀 호출함으로써 계층 구조를 전개한다.&lt;br /&gt;&amp;nbsp; * SQL Server에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.&lt;br /&gt;&amp;nbsp; * 오라클의 계층형 질의문에서 WHERE 절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는 데 활용된다.&lt;br /&gt;&amp;nbsp; * 오라클 계층형 질의문에서 PRIOR 키워드는 SELECT, WHERE 절에서도 사용할 수 있다.&lt;br /&gt;&lt;br /&gt;# 반환되는 데이터의 형태에 따른 서브 쿼리 분류&lt;br /&gt;&amp;nbsp; * Single Row 서브 쿼리(단일 행 서브 쿼리): 서브 쿼리의 실행 결과가 항상 1건 이하인 서브 쿼리를 의미한다. 단일 행 서브 쿼리는 단일 행 비교 연산자와 함께 사용된다. 단일 행 비교 연산자에는 =, &amp;lt;, &amp;lt;=, &amp;gt;, &amp;gt;=, &amp;lt;&amp;gt;이 있다.&lt;br /&gt;&amp;nbsp; * Multi Row 서브 쿼리(다중 행 서브 쿼리): 서브 쿼리의 실행 결과가 여러 건인 서브 쿼리를 의미한다. 다중 행 서브 쿼리는 다중 행 비교 연산자와 함께 사용된다. 다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다.&lt;br /&gt;&amp;nbsp; * Multi Column 서브&amp;nbsp; 쿼리(다중 칼럼 서브 쿼리): 서브 쿼리의 실행 결과로 여러 칼럼을 반환한다. 메인 쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. 서브 쿼리와 메인 쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 한다.&lt;br /&gt;&lt;br /&gt;# 윈도우 함수&lt;br /&gt;&amp;nbsp; * PERCENT_RANK: 파티션별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여, 값이 아닌 행의 순서별 백분율을 구하는 함수&lt;br /&gt;&amp;nbsp; * DENSE_RANK: 순위를 구하는 함수로 동일한 순위를 하나의 등수로 취급&lt;br /&gt;&amp;nbsp; * CUME_DIST: 파티션별 윈도우의 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율을 구하는 함수&lt;br /&gt;&amp;nbsp; * RANK: 파티션 내의 ORDER BY에 의한 순위를 구하는 함수로, 동일한 순위에 대해서는 동일한 순위를 부여&lt;br /&gt;&amp;nbsp; * RATIO_TO_REPORT: 파티션 내의 주어진 칼럼 값에 대한 합계와 행별 백분율을 소수점으로 구하는 함수&lt;br /&gt;&amp;nbsp; * NTILE: 파티션별 전체 건수를 주어진 인자로 N 등분한 결과를 반환&lt;br /&gt;&amp;nbsp; * PARTITION BY 절과 GROUP BY 절은 의미적으로 유사&lt;br /&gt;&amp;nbsp; * PARTITION BY 절이 없으면 전체 집합을 하나의 Partition으로 정의한 것과 동일&lt;br /&gt;&amp;nbsp; * 결과에 대한 함수 처리&lt;br /&gt;&amp;nbsp; * 윈도위 함수의 적용 범위는 Partition을 넘을 수 없다.&lt;br /&gt;&lt;br /&gt;# 서브 쿼리&lt;br /&gt;&amp;nbsp; * 단일 행 서브 쿼리의 비교 연산자는 다중 행 서브 쿼리의 비교 연산자로 사용할 수&amp;nbsp; 없지만, 반대의 경우는 가능하다.&lt;br /&gt;&amp;nbsp; * 비 연관 서브 쿼리가 주로 메인 쿼리에 값을 제공하기 위한 목적으로 사용된다.&lt;br /&gt;&amp;nbsp; * 메인 쿼리의 결과가 서브 쿼리로 제공될 수도 있고, 서브 쿼리의 결과가 메인 쿼리로 제공될 수 있으므로 실행 순서는 상황에 따라 달라진다.&lt;br /&gt;&lt;br /&gt;# 뷰&lt;br /&gt;&amp;nbsp; * 뷰는 단지 정의만을 가지고 있으며, 실행 시점에 질의를 재작성하여 수행한다.&lt;br /&gt;&amp;nbsp; * 뷰의 장점 중 독립성은 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.&lt;br /&gt;&amp;nbsp; * 뷰는 보안을 강화하기 위한 목적으로도 활용될 수 있다.&lt;br /&gt;&amp;nbsp; * 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있다.&lt;br /&gt;&lt;br /&gt;# GRANT와 REVOKE&lt;br /&gt;&amp;nbsp; * 어떤 사용자가 WITH GRANT OPTION과 함께 권한을 허가받았으면 그 사용자는 해당 권한을 WITH GRANT OPTION 유무와 관계없이 다른 사용자에게 허가할 수 있다.&lt;br /&gt;&amp;nbsp; * PUBLIC을 사용하면 자신에게 허가된 권한을 모든 사용자들에게 허가할 수 있다.&lt;br /&gt;&amp;nbsp; * REVOKE 문을 사용하여 권한을 취소하면 권한을 취소당한 사용자가 WITH GRANT OPTION을 통해서 다른 사용자에게 허가했던 권한들도 모두 연쇄적으로 취소된다.&lt;br /&gt;&amp;nbsp; * REVOKE 문을 사용하여 권한을 취소할 때 그 권한을 허가한 사용자가 권한을 취소할 수 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>PIVOT 절과 UNPIVOT 절</category>
      <category>sql 활용</category>
      <category>Top N 쿼리</category>
      <category>계층형 질의와 셀프 조인</category>
      <category>그룹 함수</category>
      <category>서브 쿼리</category>
      <category>윈도우 함수</category>
      <category>정규 표현식</category>
      <category>집합 연산자</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/39</guid>
      <comments>https://wlsekf.tistory.com/39#entry39comment</comments>
      <pubDate>Mon, 18 Aug 2025 22:36:30 +0900</pubDate>
    </item>
    <item>
      <title>[과목 II. SQL 기본 및 활용] 제2장 SQL 활용: index</title>
      <link>https://wlsekf.tistory.com/38</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 II. SQL 기본 및 활용&lt;br /&gt;&amp;nbsp; 제2장 SQL 활용&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 서브 쿼리&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 집합 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 그룹 함수&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 윈도우 함수&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 Top N 쿼리&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제6절 계층형 질의와 셀프 조인&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제7절 PIVOT 절과 UNPIVOT 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제8절 정규 표현식&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 일반 집합 연산자를 SQL과 비교&lt;br /&gt;&amp;nbsp; * UNION 연산은 UNION 기능으로, INTERSECTION 연산은 INTERSECT 기능으로, DIFFERENCE 연산은 EXCEPT(오라클은 MINUS) 기능으로,&amp;nbsp;PRODUCT 연산은 CROSS JOIN 기능으로 구현되었다.&lt;br /&gt;&lt;br /&gt;# PRIOR&lt;br /&gt;&amp;nbsp; * CONNECT BY 절에 사용되며, 현재 읽은 칼럼을 지정한다. PRIOR 자식 = 부모 형태를 사용하면 계층 구조에서 부모 데이터에서 자식 데이터(부모 &amp;rarr; 자식) 방향으로 전개하는 순방향 전개를 한다. 그리고 PRIOR 부모 = 자식 형태를 사용하면 반대로 자식 데이터에서 부모 데이터(자식 &amp;rarr; 부모) 방향으로 전개하는 역방향 전개를 한다.&lt;br /&gt;&lt;br /&gt;# START WITH 절&lt;br /&gt;&amp;nbsp; * 계층 구조 전개의 시작 위치를 지정하는 구문이다. 즉, 루트 데이터를 지정한다. (액세스)&lt;br /&gt;&lt;br /&gt;# ORDER SIBLINGS BY&lt;br /&gt;&amp;nbsp; * 형제 노드(동일 LEVEL) 사이에서 정렬을 수행한다.&lt;br /&gt;&lt;br /&gt;# 계층형 질의(Hierarchical Query)&lt;br /&gt;&amp;nbsp; * 테이블에 계층형 데이터가 존재하는 경우 데이터를 조회하기 위해서 계층형 질의(Hierarchical Query)를 사용한다. 계층형 데이터란 동일 테이블에 계층적으로 상위와 하위 데이터가 포함된 데이터를 말한다.&lt;br /&gt;&lt;br /&gt;# 셀프 조인(Self Join)&lt;br /&gt;&amp;nbsp; * 동일 테이블 사이의 조인을 말한다. 따라서 FROM 절에 동일 테이블이 두 번 이상 나타난다. 동일 테이블 사이의 조인을 수행하면 테이블과 칼럼 이름이 모두 동일하기 때문에 식별을 위해 반드시 테이블 별칭(Alias)를 사용해야 한다.&lt;br /&gt;&lt;br /&gt;# 셀프 조인(Self Join) 문장&lt;br /&gt;&amp;nbsp; * SELECT ALIAS명1.칼럼명, ALIAS명2.칼럼명, ... FROM 테이블 ALIAS명1, 테이블 ALIAS명2 WHERE ALIAS명1.칼럼명2 = ALIAS명2.칼럼명1;&lt;br /&gt;&lt;br /&gt;# 서브 쿼리를 사용할 때 주의사항&lt;br /&gt;&amp;nbsp; * 서브 쿼리를 괄호로 감싸서 사용한다.&lt;br /&gt;&amp;nbsp; * 서브 쿼리는 단일 행(Single Row) 또는 복수 행(Multiple Row) 비교 연산자와 함께 사용 가능하다. 단일 행 비교 연산자는 서브 쿼리의 결과가 반드시 1건 이하어야 하고 복수 행 비교 연산자는 서브 쿼리의 결과 건수와 상관없다.&lt;br /&gt;&amp;nbsp; * 서브 쿼리에서는 ORDER BY 절을 사용하지 못한다. SELECT 절에서 오직 한 개만 올 수 있기 때문에 ORDER BY 절은 메인 쿼리의 마지막 문장에 위치해야 한다.&lt;br /&gt;&lt;br /&gt;# 인라인 뷰(Inline View)&lt;br /&gt;&amp;nbsp; * FROM 절에서 사용되는 서브 쿼리를 인라인 뷰(Inline View)라고 한다. 서브 쿼리의 결과가 마치 실행 시에 동적으로 생성된 테이블인 것처럼 사용할 수 있다. 인라인 뷰는 SQL 문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스게 해당 정보가 저장되지 않는다.&lt;br /&gt;&lt;br /&gt;# 뷰 사용의 장섬&lt;br /&gt;&amp;nbsp; * 독립성: 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.&lt;br /&gt;&amp;nbsp; * 편리성: 복잡한 질의를 뷰로 생성하여 관련 질의를 단순하게 작성할 수 있다. 또한 해당 형태의 SQL을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.&lt;br /&gt;&amp;nbsp; * 보안성: 직원의 급여 정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 해당 칼럼을 빼고 생성하여 사용자에게 정보를 감출 수 있다.&lt;br /&gt;&lt;br /&gt;# Grouping Columns&lt;br /&gt;&amp;nbsp; * 가질 수 있는 모든 경우에 대하여 Subtotal을 생성해야 하는 경우에는 CUBE를 사용하는 것이 바람직하나, ROLLUP에 비해 시스템에 많은 부담을 주므로 사용에 주의해야 한다.&lt;br /&gt;&lt;br /&gt;# CUBE&lt;br /&gt;&amp;nbsp; * 결합 가능한 모든 값에 대하여 다차원 집계를 생성한다. CUBE도 결과에 대한 정렬이 필요한 경우는 ORDER BY 절에 명시적으로 정렬 칼럼이 표시되어야 한다.&lt;br /&gt;&lt;br /&gt;# GROUPING SETS&lt;br /&gt;&amp;nbsp; * 다양한 소계 집합을 만들 수 있는데, GROUPING SETS에 표시된 인수들에 대한 개별 집계를 구할 수 있으며, 이때 표시된 인수들 간에는 계층 구조인 ROLLUP과는 달리 평등한 관계이므로 인수의 순서가 바뀌어도 결과는 같다. 그리고 GROUPING SETS 함수도 결과에 대한 정렬이 필요한 경우는 ORDER BY 절에 명시적으로 정렬 칼럼이 표시되어야 한다.&lt;br /&gt;&lt;br /&gt;# RANK 함수&lt;br /&gt;&amp;nbsp; * ORDER BY를 포함한 QUERY 문에서 특정 항목(칼럼)에 대한 순위를 구하는 함수이며 동일한 값에 대해서는 동일한 순위를 부여한다.&lt;br /&gt;&lt;br /&gt;# DENSE_RANK 함수&lt;br /&gt;&amp;nbsp; * RANK 함수와 흡사하나, 동일한 순위를 하나의 건수를 취급하는 것이 다른 점이다.&lt;br /&gt;&lt;br /&gt;# ROW_NUMBER 함수&lt;br /&gt;&amp;nbsp; * RANK나 DENSE_RANK 함수가 동일한 값에 대해서는 동일한 순위를 부여하는데 반해, 동일한 값이라도 고유한 순위를 부여한다.&lt;br /&gt;&lt;br /&gt;# LAG 함수&lt;br /&gt;&amp;nbsp; * 파티션별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있다. 이후 몇 번째 행의 값을 가져오는 것은 LEAD 함수이며, SQL Server에서는 지원하지 않는 함수이다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>PIVOT 절과 UNPIVOT 절</category>
      <category>sql 활용</category>
      <category>Top N 쿼리</category>
      <category>계층형 질의와 셀프 조인</category>
      <category>그룹 함수</category>
      <category>서브 쿼리</category>
      <category>윈도우 함수</category>
      <category>정규 표현식</category>
      <category>집합 연산자</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/38</guid>
      <comments>https://wlsekf.tistory.com/38#entry38comment</comments>
      <pubDate>Mon, 18 Aug 2025 21:19:42 +0900</pubDate>
    </item>
    <item>
      <title>[과목 II. SQL 기본 및 활용] 제1장 SQL 기본: contents</title>
      <link>https://wlsekf.tistory.com/37</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 II. SQL 기본 및 활용&lt;br /&gt;&amp;nbsp; 제1장 SQL 기본&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 관계형 데이터베이스 개요&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 SELECT 문&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 함수&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 WHERE 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 GROUP BY, HAVING 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제6절 ORDER BY 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제7절 조인&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제8절 표준 조인&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 데이터 조작어(DML: Data Manipulation Language)&lt;br /&gt;&amp;nbsp; * 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 한다. (SELECT)&lt;br /&gt;&amp;nbsp; * 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어들을 말한다. 예를 들어 데이터를 테이블의 새로운 행에 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어 (INSERT, UPDATE, DELETE)&lt;br /&gt;&amp;nbsp; * INSERT: 테이블에 데이터를 입력할 때 사용&lt;br /&gt;&amp;nbsp; * UPDATE: 입력한 정보 중에 잘못 입력되거나 변경이 발생되어 정보를 수정할 때 사용&lt;br /&gt;&amp;nbsp; * DELETE: 테이블의 정보가 필요 없게 되었을 경우 데이터 삭제를 수행&lt;br /&gt;&lt;br /&gt;# 데이터 정의어(DDL: Data Definition Language)&lt;br /&gt;&amp;nbsp; * 테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령어들로 그러한 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어 (CREATE, ALTER, DROP, RENAME)&lt;br /&gt;&lt;br /&gt;# 데이터 제어어(DCL: Data Control Language)&lt;br /&gt;&amp;nbsp; * 데이터베이스에 접근하고 객체들을 사용할 수 있도록 권한을 부여하거나 회수하는 명령어 (GRANT, REVOKE)&lt;br /&gt;&lt;br /&gt;# 트랜잭션 제어어(TCL: Transaction Control Language)&lt;br /&gt;&amp;nbsp; * 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업 단위(트랜잭션) 별로 제어하는 명령어&lt;br /&gt;&amp;nbsp; * COMMIT, ROLLBACK&lt;br /&gt;&lt;br /&gt;# SELECT 문&lt;br /&gt;&amp;nbsp; * WHERE 절은 필수가 아니므로 생략 가능하다.&lt;br /&gt;&amp;nbsp; * DISTINCT 옵션을 통해 중복된 데이터가 있을 경우 1건으로 처리해 출력할 수 있다.&lt;br /&gt;&amp;nbsp; * SELECT, FROM은 필수이므로 생략되면 에러가 발생된다.&lt;br /&gt;&amp;nbsp; * SELECT List에 서브쿼리가 사용될 수 있다.&lt;br /&gt;&lt;br /&gt;# WHERE 절&lt;br /&gt;&amp;nbsp; * 데이터베이스에서 조회되는 데이터에 대한 조건을 설정하여 원하는 데이터만들 검색하기 위해 사용하는 절&lt;br /&gt;&amp;nbsp; * 집계 함수를 사용할 수 없다.&lt;br /&gt;&lt;br /&gt;# COLUMN1의 값이 NULL이 아닌 경우를 찾아내는 문장(ANSI 표준 기준)&lt;br /&gt;&amp;nbsp; * SELECT * FROM MYTABLE WHERE COLUMN1 IS NOT NULL;&lt;br /&gt;&lt;br /&gt;# 함수의 실행 결과&lt;br /&gt;&amp;nbsp; * LOWER('SQL Expert'): 'sql expert'&lt;br /&gt;&amp;nbsp; * UPPER('SQL Expert'): 'SQL EXPERT'&lt;br /&gt;&amp;nbsp; * ASCII('A'): 65&lt;br /&gt;&amp;nbsp; * LTRIM('xxYYZZxYZxx', 'x'): ' YYZZxYZxx'&lt;br /&gt;&lt;br /&gt;# 연산자의 종류&lt;br /&gt;&amp;nbsp; ## 비교 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; * =: 같다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * &amp;gt;: 보다 크다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * &amp;gt;=: 보다 크거나 같다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;: 보다 작다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;=: 보다 작거나 같다.&lt;br /&gt;&amp;nbsp; ## SQL 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; * BETWEEN a AND b: a와 b의 값 사이에 있으면 된다. (a와 b값이 포함됨)&lt;br /&gt;&amp;nbsp; &amp;nbsp; * IN (list): 리스트에 있는 값 중에서 어느 하나라도 일치하면 된다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * LIKE '비교 문자열': 비교 문자열과 형태가 일치하면 된다. (%, _ 사용)&lt;br /&gt;&amp;nbsp; &amp;nbsp; * IS NULL: NULL 값인 경우&lt;br /&gt;&amp;nbsp; ## 논리 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; * AND: 앞에 있는 조건과 뒤에 오는 조건이 참(TRUE)이 되면 결과도 참(TRUE)이 된다. 즉 앞의 조건과 뒤의 조건을 동시에 만족해야 한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * OR: 앞에 있는 조건이 참(TRUE)이거나 뒤의 조건이 참(TRUE)이 되어야 결과도 참(TRUE)이 된다. 즉, 앞뒤의 조건 중 하나만 참(TRUE)이면 된다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NOT: 뒤에 오는 조건에 반대되는 결과를 되돌려 준다.&lt;br /&gt;&amp;nbsp; ## 부정 비교 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; * !=: 같지 않다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * ^=: 같지 않다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * &amp;lt;&amp;gt;: 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NOT 칼럼명 =: ~와 같지 않다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NOT 칼럼명 &amp;gt;: ~보다 크지 않다.&lt;br /&gt;&amp;nbsp; ## 부정 SQL 연산자&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NOT BETWEEN a AND b: a와 b의 값 사이에 있지 않다. (a, b값을 포함하지 않는다.)&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NOT IN (list): 리스트 값과 일치하지 않는다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * IS NOT NULL: NULL 값을 갖지 않는다.&lt;br /&gt;&lt;br /&gt;# GROUP BY 절과 HAVING 절&lt;br /&gt;&amp;nbsp; * 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.&lt;br /&gt;&amp;nbsp; * GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.&lt;br /&gt;&amp;nbsp; * 집계 함수는 WHERE 절에는 올 수 없다.&lt;br /&gt;&amp;nbsp; * HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.&lt;br /&gt;&lt;br /&gt;# 함수&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;* LENGTH: 문자열의 길이를 반환하는 함수&lt;/span&gt;&lt;br /&gt;&amp;nbsp; * CHR: 주어진 ASCII 코드에 대한 문자를 반환하는 함수&lt;br /&gt;&amp;nbsp; * REPLACE: 문자열을 치환하는 함수&lt;br /&gt;&lt;br /&gt;# 단일행 함수&lt;br /&gt;&amp;nbsp; ## 문자형 함수: 문자를 입력하면 문자나 숫자 값을 반환한다. (LOWER, UPPER, SUBSTR/SUBSTRING, LENGTH/LEN, LTRIM, RTRIM, TRIM, ASCII)&lt;br /&gt;&amp;nbsp; &amp;nbsp; * LOWER(문자열): 문자열의 알파벳 문자를 소문자로 바꾸어 준다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * UPPER(문자열): 문자열의 알파벳 문자를 대문자로 바꾸어 준다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * ASCII(문자): 문자나 숫자를 ASCII 코드 번호로 바꾸어 준다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * CHR/CHAR(ASCII 번호): ASCII 코드 번호를 문자나 숫자로 바꾸어 준다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * CONCAT(문자열1, 문자열2): 오라클, My SQL에서 유효한 함수이며 문자열1과 문자열2를 연결한다. 합성 연산자 '||' (오라클), '+' (SQL Server)와 동일하다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * SUBSTR/SUBSTRING(문자열, m[, n]): 문자열 중 m 위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다. n이 생략되면 마지막 문자까지이다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * LENGTH/LEN(문자열): 문자열의 개수를 숫자값으로 돌려준다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * LTRIM(문자열, [지정 문자]): 문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거한다. (지정 문자가 생략되면 공백 값이 디폴트). SQL Server에서는 LTRIM 함수에 지정 문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * RTRIM(문자열, [지정 문자]): 문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당 문자를 제거한다. (지정 문자가 생략되면 공백 값이 디폴트). SQL Server에서는 RTRIM 함수에 지정 문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * TRIM([leading | trailing | both] 지정 문자 FROM 문자열): 문자열에서 머리말, 꼬리말, 또는 양쪽에 있는 지정 문자를 제거한다. (leading | trailing | both가 생략되면 both가 디폴트). SQL Server에서는 TRIM 함수에 지정 문자를 사용할 수 없다. 즉, 공백만 제거할 수 있다.&lt;br /&gt;&amp;nbsp; ## 숫자형 함수: 숫자를 입력하면 숫자 값을 반환한다. (ABS, MOD, ROUND, TRUNC, SIGN, CHR/CHAR, CEIL/CEILING, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN)&lt;br /&gt;&amp;nbsp; ## 날짜형 함수: DATE 타입의 값을 연산한다. (SYSDATE/GETDATE, EXTRACT/DATEPART, TO_NUMBER(TO_CHAR(d, 'YYYY' | 'MM' | 'DD')) / YEAR | MONTH | DAY&lt;br /&gt;&amp;nbsp; ## 변환형 함수: 문자, 숫자, 날짜형 값의 데이터 타입을 변환한다. (TO_NUMBER, TO_CHAR, TO_DATE / CAST, CONVERT)&lt;br /&gt;&amp;nbsp; ## NULL 관련 함수: NULL을 처리하기 위한 함수 (NVL/ISNULL, NULLIF, COALESCE)&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NVL(표현식1, 표현식2) / ISNULL(표현식1, 표현식2): 표현식1의 결괏값이 NULL이면 표현식2의 값을 출력한다. 단 표현식1과 표현식2의 결과 데이터 타입이 같아야 한다. NULL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; * NULLIF(표현식1, 표현식2): 표현식1이 표현식2와 같으면 NULL을, 같지 않으면 표현식1을 리턴한다. &lt;br /&gt;&amp;nbsp; &amp;nbsp; * COALESCE(표현식1, 표현식2, ...): 임의의 개수 표현식에서 NULL이 아닌 최초의 표현식을 나타낸다. 모든 표현식이 NULL이라면 NULL을 리턴한다. &lt;br /&gt;&lt;br /&gt;# 집계 함수&lt;br /&gt;&amp;nbsp; * COUNT(*): NULL 값을 포함한 행의 수를 출력한다.&lt;br /&gt;&amp;nbsp; * COUNT(표현식): 표현식의 값이 NULL 값인 것을 제외한 행의 수를 출력한다.&lt;br /&gt;&amp;nbsp; * SUM([DISTINCT | ALL] 표현식): 표현식의 NULL 값을 제외한 합계를 출력한다.&lt;br /&gt;&amp;nbsp; * AVG([DISTINCT | ALL] 표현식): 표현식의 NULL 값을 제외한 평균을 출력한다.&lt;br /&gt;&amp;nbsp; * MAX([DISTINCT | ALL] 표현식): 표현식의 최댓값을 출력한다. (문자, 날짜 데이터 타입도 사용 가능)&lt;br /&gt;&amp;nbsp; * MIN([DISTINCT | ALL] 표현식): 표현식의 최솟값을 출력한다. (문자, 날짜 데이터 타입도 사용 가능)&lt;br /&gt;&amp;nbsp; * STDDEV([DISTINCT | ALL] 표현식): 표현식의 표준 편차를 출력한다.&lt;br /&gt;&amp;nbsp; * VARIAN([DISTINCT | ALL] 표현식): 표현식의 분산을 출력한다.&lt;br /&gt;&amp;nbsp; * 기타 통계 함수: 벤더별로 다양한 통계식을 제공한다.&lt;br /&gt;&lt;br /&gt;# SELECT 문장 실행 순서&lt;br /&gt;&amp;nbsp; * FROM &amp;rarr; WHERE &amp;rarr; GROUP BY &amp;rarr; HAVING &amp;rarr; SELECT &amp;rarr; ORDER BY&lt;br /&gt;&lt;br /&gt;# JOIN&lt;br /&gt;&amp;nbsp; * 일반적으로 조인은 PK와 FK 값의 연관성에 의해 성립된다.&lt;br /&gt;&amp;nbsp; * DBMS 옵티마이저는 FROM 절에 나열된 테이블들이 아무리 많아도 항상 2개의 테이블씩 짝을 지어 JOIN을 수행한다.&lt;br /&gt;&amp;nbsp; * EQUI JOIN은 조인에 관여하는 테이블 간의 칼럼 값들이 정확하게 일치하는 경우에 사용되는 방법이다.&lt;br /&gt;&amp;nbsp; * EQUI JOIN은 '=' 연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용하는 경우에는 모두 NON EQUI JOIN이다.&lt;br /&gt;&amp;nbsp; * 대부분 NON EQUI JOIN을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다.&lt;br /&gt;&lt;br /&gt;# 순수 관계 연산자&lt;br /&gt;&amp;nbsp; * SELECT, PROJECT, JOIN, DIVIDE&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>study ../SQLD</category>
      <category>GROUP BY 절</category>
      <category>HAVING 절</category>
      <category>ORDER BY 절</category>
      <category>Select 문</category>
      <category>sql 기본</category>
      <category>where 절</category>
      <category>관계형 데이터베이스 개요</category>
      <category>조인</category>
      <category>표준 조인</category>
      <category>함수</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/37</guid>
      <comments>https://wlsekf.tistory.com/37#entry37comment</comments>
      <pubDate>Sun, 17 Aug 2025 21:56:49 +0900</pubDate>
    </item>
    <item>
      <title>[과목 II. SQL 기본 및 활용] 제1장 SQL 기본: index</title>
      <link>https://wlsekf.tistory.com/36</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 II. SQL 기본 및 활용&lt;br /&gt;&amp;nbsp; 제1장 SQL 기본&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 관계형 데이터베이스 개요&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 SELECT 문&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 함수&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 WHERE 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 GROUP BY, HAVING 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제6절 ORDER BY 절&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제7절 조인&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제8절 표준 조인&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 데이터 제어어(DCL: Data Control Language)&lt;br /&gt;&amp;nbsp; * 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어&lt;br /&gt;&lt;br /&gt;# SELECT [ALL/DISTINCT] 보고 싶은 칼럼명 FROM 해당 칼럼들이 있는 테이블명;&lt;br /&gt;&amp;nbsp; * ALL: Default 옵션이므로 별도로 표시하지 않아도 된다.&lt;br /&gt;&amp;nbsp; * DISTINCT: 중복된 데이터가 있는 경우 1건으로 처리해서 출력한다.&lt;br /&gt;&lt;br /&gt;# WHERE 절은 FROM 절 다음에 위치하며, 조건식은 아래 내용으로 구성된다.&lt;br /&gt;&amp;nbsp; * 칼럼(Column)명(보통 조건식의 좌측에 위치)&lt;br /&gt;&amp;nbsp; * 비교 연산자&lt;br /&gt;&amp;nbsp; * 문자, 숫자, 표현식(보통 조건식의 우측에 위치)&lt;br /&gt;&amp;nbsp; * 비교 칼럼명(JOIN&amp;nbsp; 사용시)&lt;br /&gt;&lt;br /&gt;# NULL의 연산&lt;br /&gt;&amp;nbsp; * NULL 값과의 연산(+, -, *, / 등)은 NULL 값을 리턴&lt;br /&gt;&amp;nbsp; * NULL 값과의 비교 연산(=, &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=)은 거짓(FALSE)을 리턴&lt;br /&gt;&amp;nbsp; * 특정 값보다 크다, 적다라고 표현할 수 없음&lt;br /&gt;&lt;br /&gt;# 부정 비교 연산자&lt;br /&gt;&amp;nbsp; * !=: 같지 않다.&lt;br /&gt;&amp;nbsp; * ^=: 같지 않다.&lt;br /&gt;&amp;nbsp; * &amp;lt;&amp;gt;: 같지 않다. (ISO 표준, 모든 운영체제에서 사용 가능)&lt;br /&gt;&amp;nbsp; * NOT 칼럼명 =: ~와 같지 않다.&lt;br /&gt;&amp;nbsp; * NOT 칼럼명 &amp;gt;: ~보다 크지 않다.&lt;br /&gt;&lt;br /&gt;# GROUP BY 절과 HAVING 절의 특성&lt;br /&gt;&amp;nbsp; * GROUP BY 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용한다.&lt;br /&gt;&amp;nbsp; * 집계 함수의 통계 정보는 NULL 값을 가진 행을 제외하고 수행한다.&lt;br /&gt;&amp;nbsp; * GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.&lt;br /&gt;&amp;nbsp; * 집계 함수는 WHERE 절에는 올 수 없다. (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다.)&lt;br /&gt;&amp;nbsp; * WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거한다.&lt;br /&gt;&amp;nbsp; * HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.&lt;br /&gt;&amp;nbsp; * GROUP BY 절에 의해 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을 만족하는 내용만 출력한다.&lt;br /&gt;&amp;nbsp; * HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치한다.&lt;br /&gt;&lt;br /&gt;# DUAL 테이블의 특성&lt;br /&gt;&amp;nbsp; * 사용자 SYS가 소유하며 모든 사용자가 액세스 가능한 테이블이다.&lt;br /&gt;&amp;nbsp; * SELECT ~ FROM ~ 의 형식을 갖추기 위한 일종의 DUMMY 테이블이다.&lt;br /&gt;&amp;nbsp; * DUMMY라는 문자열 유형의 칼럼에 'X'라는 값이 들어 있는 행을 1건 포함하고 있다.&lt;br /&gt;&lt;br /&gt;# NULL 관련 함수&lt;br /&gt;&amp;nbsp; * 오라클 함수: NVL(표현식1, 표현식2), ISNULL(표현식1, 표현식2)&lt;br /&gt;&amp;nbsp; * SQL Server 함수: NULLIF(표현식1, 표현식2), COALESCE(표현식1, 표현식2, ...)&lt;br /&gt;&lt;br /&gt;# ORDER BY 문장&lt;br /&gt;&amp;nbsp; * SELECT 칼럼명 [ALIAS명] FROM 테이블명 [WHERE 조건식] [GROUP BY 칼럼(Column)이나 표현식] [HAVING 그룹 조건식]&amp;nbsp;[ORDER BY 칼럼(Column)이나 표현식 [ASC 또는 DESC] ];&lt;br /&gt;&amp;nbsp; * ASC(Ascending): 조회한 데이터를 오름차순으로 정렬한다. (기본 값이므로 생략 가능)&lt;br /&gt;&amp;nbsp; * DESC(Descending): 조회한 데이터를 내림차순으로 정렬한다.&lt;br /&gt;&lt;br /&gt;# GROUP BY 문장&lt;br /&gt;&amp;nbsp; * SELECT [DISTINCT] 칼럼명 [ALIAS명] FROM 테이블명 [WHERE 조건식] [GROUP BY 칼럼(Column)이나 표현식] [HAVING 그룹 조건식]&lt;br /&gt;&lt;br /&gt;# NULL 포함 연산의 결과&lt;br /&gt;&amp;nbsp; * NULL + 2, 2 + NULL, NULL - 2, 2 - NULL, NULL * 2, 2 * NULL, NULL / 2, 2 / NULL의 결과는 모두 NULL이다.&lt;br /&gt;&lt;br /&gt;# ORDER BY 절 특징&lt;br /&gt;&amp;nbsp; * 기본적인 정렬 순서는 오름차순(ASC)이다.&lt;br /&gt;&amp;nbsp; * 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력된다.&lt;br /&gt;&amp;nbsp; * 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 이른 값이 먼저 출력된다.&lt;br /&gt;&amp;nbsp; * 오라클에서는 NULL 값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.&lt;br /&gt;&amp;nbsp; * 반면, SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.&lt;br /&gt;&lt;br /&gt;# SELECT 문장 실행 순저&lt;br /&gt;&amp;nbsp; (1) 발췌 대상 테이블을 참조한다. (FROM)&lt;br /&gt;&amp;nbsp; (2) 발췌 대상 데이터가 아닌 것은 제거한다. (WHERE)&lt;br /&gt;&amp;nbsp; (3) 행들을 소그룹화한다. (GROUP BY)&lt;br /&gt;&amp;nbsp; (4) 그루핑된값의 조건에 맞는 것만을 출력한다. (HAVING)&lt;br /&gt;&amp;nbsp; (5) 데이터 값을 출력/계산한다. (SELECT)&lt;br /&gt;&amp;nbsp; (6) 데이터를 정렬한다. (ORDER BY)&lt;br /&gt;&lt;br /&gt;# EQUI JOIN 문장&lt;br /&gt;&amp;nbsp; * SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... FROM 테이블1, 테이블2 WHERE 테이블1.칼럼명1 = 테이블2.칼럼명2; &amp;rarr; WHERE 절에 JOIN 조건을 넣는다.&lt;br /&gt;&lt;br /&gt;# ANSI/ISO SQL 표준 EQUI JOIN 문장&lt;br /&gt;&amp;nbsp; * SELECT 테이블1.칼럼명, 테이블2.칼럼명, ... FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.칼럼명1 = 테이블2.칼럼명2; &amp;rarr; ON 절에 JOIN 조건을 넣는다.&lt;br /&gt;&lt;br /&gt;# 조인(JOIN)&lt;br /&gt;&amp;nbsp; * 두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 조인(JOIN)이라고 하며, 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 조인이 성립된다. 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 조인이 성립된다.&lt;br /&gt;&lt;br /&gt;# 순수 관계 연산자와 SQL 문장 비교&lt;br /&gt;&amp;nbsp; * SELECT 연산은 WHERE 절로 구현&lt;br /&gt;&amp;nbsp; * PROJECT 연산은 SELECT 절로 구현&lt;br /&gt;&amp;nbsp; * (NATURAL) JOIN 연산은 다양한 JOIN 기능으로 구현&lt;br /&gt;&amp;nbsp; * DIVIDE 연산은 현재 사용되지 않음&lt;br /&gt;&lt;br /&gt;# ANSI/ISO SQL에서 표시하는 FROM 절의 JOIN 형태&lt;br /&gt;&amp;nbsp; * INNER JOIN&lt;br /&gt;&amp;nbsp; * NATURAL JOIN&lt;br /&gt;&amp;nbsp; * USING 조건절&lt;br /&gt;&amp;nbsp; * ON 조건절&lt;br /&gt;&amp;nbsp; * CROSS JOIN&lt;br /&gt;&amp;nbsp; * OUTER JOIN(LEFT, RIGHT, FULL)&lt;br /&gt;&lt;br /&gt;# INNER JOIN&lt;br /&gt;&amp;nbsp; * INNER JOIN은 OUTER(외부) JOIN과 대비하여 내부 JOIN이라고 하며 JOIN 조건에서 동일한 값이 있는 행만 반환한다.&lt;br /&gt;&lt;br /&gt;# CROSS JOIN&lt;br /&gt;&amp;nbsp; * 테이블 간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다. 결과는 양쪽 집합의 M * N 건의 데이터 조합이 발생한다.&lt;br /&gt;&lt;br /&gt;# LEFT OUTER JOIN&lt;br /&gt;&amp;nbsp; * 조인 수행 시에 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다. 즉, Table A와 B가 있을 때 (Table 'A'가 기준이 됨), A와 B를 비교해서 B의 JOIN 칼럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, B의 JOIN 칼럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 칼럼들은 NULL 값으로 채운다.&lt;br /&gt;&lt;br /&gt;# FULL OUTER JOIN&lt;br /&gt;&amp;nbsp; * 조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다. 즉 Table A와 B가 있을 때 (Table 'A', 'B' 모두 기준이 됨), RIGHT OUTER JOIN과 LEFT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.&lt;br /&gt;&lt;br /&gt;# OUTER JOIN 문장 예시&lt;br /&gt;&amp;nbsp; * LEFT OUTER JOIN: SELECT X.KEY1, Y.KEY2 FROM TAB1 X LEFT OUTER JOIN TAB2 Y ON (X.KEY1 = Y.KEY2)&lt;br /&gt;&amp;nbsp; * RIGHT OUTER JOIN: SELECT X.KEY1, Y.KEY2 FROM TAB1 X RIGHT OUTER FOIN TAB2 Y ON (X.KEY1 = Y.KEY2)&lt;br /&gt;&amp;nbsp; * FULL OUTER JOIN: SELECT X.KEY1, Y.KEY2 FROM TAB1 X FULL OUTER JOIN TAB2 Y ON (X.KEY1 = Y.KEY2)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>GROUP BY 절</category>
      <category>HAVING 절</category>
      <category>ORDER BY 절</category>
      <category>Select 문</category>
      <category>sql 기본</category>
      <category>where 절</category>
      <category>관계형 데이터베이스 개요</category>
      <category>조인</category>
      <category>표준 조인</category>
      <category>함수</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/36</guid>
      <comments>https://wlsekf.tistory.com/36#entry36comment</comments>
      <pubDate>Sun, 17 Aug 2025 19:04:16 +0900</pubDate>
    </item>
    <item>
      <title>[과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: contents</title>
      <link>https://wlsekf.tistory.com/35</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 I. 데이터 모델링의 이해&lt;br /&gt;&amp;nbsp; 제2장 데이터 모델과 SQL&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 정규화&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 관계와 조인의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 모델이 표현하는 트랜잭션의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 Null 속성의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 본질식별자 vs. 인조식별자&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 함수 종속성(Functional Dependency)&lt;br /&gt;&amp;nbsp; * ab &amp;rarr; cde, e &amp;rarr; b, d &amp;rarr; ab: ab는 자신인 ab와 cde를 결정하므로 모든 속성을 결정한다. 따라서 후보 키가 된다.&lt;br /&gt;&amp;nbsp; * e &amp;rarr; b, ae &amp;rarr; ab &amp;rarr; cde, ae &amp;rarr; cde: ae는 모든 속성을 결정한다.&lt;br /&gt;&amp;nbsp; * d &amp;rarr; ab &amp;rarr; cde: d는 모든 속성을 결정한다.&lt;br /&gt;&lt;br /&gt;# 제2정규형&lt;br /&gt;&amp;nbsp; * 엔터티의 일반 속성은 주식별자 전체에 종속이어야 한다.&lt;br /&gt;&lt;br /&gt;# 정규화와 성능&lt;br /&gt;&amp;nbsp; * 정규화를 수행하면 중복 속성을 제거하여 용량을 최소화&lt;br /&gt;&amp;nbsp; * 일반적으로 정규화 수행 시 데이터 처리 성능이 향상&lt;br /&gt;&amp;nbsp; * 반정규화가 조회 성능을 항상 향상시키는 것은 아니며, 때로는 정규와에 의해 성능이 향상될 수도 있다.&lt;br /&gt;&amp;nbsp; * 정규화로 인해 조회 성능이 저하될 수 있다. 이 때문에 반정규화를 고려한다.&lt;br /&gt;&lt;br /&gt;# 1차 정규화의 대상&lt;br /&gt;&amp;nbsp; * 칼럼에 의한 반복적인 속성값을 갖는 형태는 속성의 원자성을 위배&lt;br /&gt;&amp;nbsp; * 반복적인 속성 나열 형태에서는 각 속성에 대해 'or' 연산자로 연결된 조건들이 사용되는데, 이때 어느 하나의 속성이라도 인덱스가 정의되지 않으면 'or'로 연결된 모든 조건절들이 인덱스를 사용하지 않고 한 번의 전체 데이터 스캔으로 처리되게 되어 성능 저하가 나타날 수 있다.&lt;br /&gt;&amp;nbsp; * 모든 반복 속성에 인덱스를 생성하면 검색 속도는 좋아지겠지만 반대로 너무 많은 인덱스 때문에 입력, 수정, 삭제의 성능이 저하&lt;br /&gt;&lt;br /&gt;# 어떤 릴레이션 R이 제2정규형이고, 기본키에 속하지 않은 속성 모두가 기본키에 이행적 함수 종속이 아닐 때 제3정규형에 속한다.&lt;br /&gt;&lt;br /&gt;# 데이터 모델링의 정규화&lt;br /&gt;&amp;nbsp; * 정규화는 논리 데이터 모델 상세화 과정의 대표적인 활동으로, 논리 데이터 모델의 일관성을 확보하고 중복을 제거하여 속성들이 가장 적절한 엔터티에 배치되도록 함으로써 보다 더 신뢰성 있는 데이터 구조를 얻는 데 목적이 있다.&lt;br /&gt;&amp;nbsp; * 제1정규형은 모든 인스턴스가 반드시 하나의 값을 가져야 함을 의미한다.&lt;br /&gt;&amp;nbsp; * 제3정규형을 만족하는 엔터티의 일반 속성은 주식별자 전체에 종속적이다.&lt;br /&gt;&amp;nbsp; * 반정규화는 성능을 위해 데이터 중복을 허용하는 것이지만 성능의 향상을 항상 보장하는 것은 아니다.&lt;br /&gt;&lt;br /&gt;# 관계(Relationship)와 조인(Join)&lt;br /&gt;&amp;nbsp; * 조인(Join)이란 식별자를 상속하고, 상속된 속성을 매핑키로 활용하여 데이터를 결합하는 것을 의미한다.&lt;br /&gt;&amp;nbsp; * 부모의 식별자를 자식의 식별자로 포함하면 식별 관계, 부모의 식별자를 자식의 일반 속성으로 상속하면 비식별 관계라고 할 수 있다.&lt;br /&gt;&amp;nbsp; * 관계(Relationship)를 맺는다는 것은 식별자를 상속시키고 해당 식별자를 매핑키로 활용해 데이터를 결합해 보겠다는 것을 의미한다.&lt;br /&gt;&lt;br /&gt;# NULL&lt;br /&gt;&amp;nbsp; * 모르는 값을 의미&lt;br /&gt;&amp;nbsp; * 값의 부재를 의미&lt;br /&gt;&amp;nbsp; * 공백 문자(Empty String) 혹은 숫자 0과 동일하지 않다.&lt;br /&gt;&amp;nbsp; * NULL과의 모든 비교(IS NULL 제외)는 알 수 없음(Unknown)을 반환한다.&lt;br /&gt;&lt;br /&gt;# 순차적으로 수행되는 작업 A와 B가 반드시 모두 수행되거나 모두 수행되지 않아야 한다고 할 때, 이에 대한 설명&lt;br /&gt;&amp;nbsp; * A와 B는 하나의 트랜잭션으로 묶여 처리되어야 한다.&lt;br /&gt;&amp;nbsp; * 커밋은 A와 B를 모두 수행한 다음에 해주어야 한다.&lt;br /&gt;&amp;nbsp; * A와 B에 주어진 조건은 트랜잭션의 원자성(Atomicity)에 해당한다.&lt;br /&gt;&amp;nbsp; * A까지만 수행되고 시스템 장애가 발생했다면 A를 undo해야 한다.&lt;br /&gt;&lt;br /&gt;# NULL 값&lt;br /&gt;&amp;nbsp; * NULL 값에 어떤 숫자를 더해도 결과는 항상 NULL이다.&lt;br /&gt;&amp;nbsp; * NULL 값과 어떤 숫자의 크기를 비교한 결과는 항상 unknown이다.&lt;br /&gt;&amp;nbsp; * &quot;NULL = NULL&quot; 연산의 결과는 FALSE 또는 unknown이다.&lt;br /&gt;&amp;nbsp; * 집계 함수를 계산할 때 NULL 값은 0이 아니라 계산에서 제외된다.&lt;br /&gt;&lt;br /&gt;# 본질식별자와 인조식별자&lt;br /&gt;&amp;nbsp; * 인조식별자는 대체로 본질식별자가 복잡한 구성을 가질 때 만들어진다.&lt;br /&gt;&amp;nbsp; * 인조식별자를 사용하면 중복 데이터를 막기 어려워진다.&lt;br /&gt;&amp;nbsp; * 인조식별자를 사용하면 본질식별자를 사용할 때와 비교하여 추가적인 인덱스가 필요해진다.&lt;br /&gt;&amp;nbsp; * 인조식별자는 단점도 존재하므로 꼭 필요한 경우에만 사용하는 것이 바람직하다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>null 속성의 이해</category>
      <category>관계와 조인의 이해</category>
      <category>데이터 모델과 SQL</category>
      <category>모델이 표현하는 트랜잭션의 이해</category>
      <category>본질식별자 vs. 인조식별자</category>
      <category>정규화</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/35</guid>
      <comments>https://wlsekf.tistory.com/35#entry35comment</comments>
      <pubDate>Wed, 13 Aug 2025 23:28:55 +0900</pubDate>
    </item>
    <item>
      <title>[과목 I. 데이터 모델링의 이해] 제2장 데이터 모델과 SQL: index</title>
      <link>https://wlsekf.tistory.com/34</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 I. 데이터 모델링의 이해&lt;br /&gt;&amp;nbsp; 제2장 데이터 모델과 SQL&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 정규화&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 관계와 조인의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 모델이 표현하는 트랜잭션의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 Null 속성의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 본질식별자 vs. 인조식별&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 정규형&lt;br /&gt;&amp;nbsp; * 제1정규형: 모든 속성은 반드시 하나의 값을 가져야 한다.&lt;br /&gt;&amp;nbsp; * 제2정규형: 엔터티의 일반 속성은 주식별자 전체에 종속이어야 한다.&lt;br /&gt;&amp;nbsp; * 제3정규형: 엔터티의 일반 속성 간에는 서로 종속적이지 않다.&lt;br /&gt;&lt;br /&gt;# 1차 정규화&lt;br /&gt;&amp;nbsp; * 중복 속성에 대한 분리가 1차 정규화의 대상이 되며, 로우 단위의 중복도 1차 정규화의 대상이 되지만 칼럼 단위로 중복이 되는 경우도 1차 정규화의 대상이다.&lt;br /&gt;&lt;br /&gt;# 널(NULL)의 특성&lt;br /&gt;&amp;nbsp; * 널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.&lt;br /&gt;&amp;nbsp; * 테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.&lt;br /&gt;&amp;nbsp; * 널 값을 포함하는 연산의 경우 결괏값도 널 값이다. 모르는 데이터에 숫자를 더하거나 빼도 결과는 마찬가지로 모르는 데이터인 것과 같다.&lt;br /&gt;&amp;nbsp; * 결괏값은 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다. 널 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 공백보다는 'x' 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>null 속성의 이해</category>
      <category>관계와 조인의 이해</category>
      <category>데이터 모델과 SQL</category>
      <category>모델이 표현하는 트랜잭션의 이해</category>
      <category>본질식별자 vs. 인조식별자</category>
      <category>정규화</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/34</guid>
      <comments>https://wlsekf.tistory.com/34#entry34comment</comments>
      <pubDate>Wed, 13 Aug 2025 22:49:09 +0900</pubDate>
    </item>
    <item>
      <title>[과목 I. 데이터 모델링의 이해] 제1장 데이터 모델링의 이해: contents</title>
      <link>https://wlsekf.tistory.com/33</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;과목 I. 데이터 모델링의 이해&lt;br /&gt;&amp;nbsp; 제1장 데이터 모델링의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제1절 데이터 모델의 이해&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제2절 엔터티&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제3절 속성&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제4절 관계&lt;br /&gt;&amp;nbsp; &amp;nbsp; 제5절 식별자&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;br /&gt;# 데이터 모델링의 특징&lt;br /&gt;&amp;nbsp; * 현실 세계를 일정한 형식에 맞추어 표현하는 추상화의 의미&lt;br /&gt;&amp;nbsp; * 시스템 구현을 포함한 업무분석 및 업무형상화 목적&lt;br /&gt;&amp;nbsp; * 복잡한 현실을 제한된 언어나 표기법으로 이해하기 쉽게 하는 단순화의 의미&lt;br /&gt;&amp;nbsp; * 모호함을 배제하고 누구나 이해가 가능하도록 정확하게 현상을 기술하는 정확화의 의미&lt;br /&gt;&lt;br /&gt;# 데이터 모델링&lt;br /&gt;&amp;nbsp; * 업무 정보를 구성하는 기초 정보들을 일정한 표기법으로 표현하여 정보 시스템의 구축의 대상이 되는 업무 내용을 정확하게 분석&lt;br /&gt;&amp;nbsp; * 분석된 모델로 실제 데이터베이스를 생성하여 개발 및 데이터관리에 사용&lt;br /&gt;&amp;nbsp; * 데이터 모델링 자체로도 업무를 설명하고 분석하는 부분에서 매우 중요한 의미&lt;br /&gt;&lt;br /&gt;# 데이터 모델링을 할 때 유의해야 할 사항&lt;br /&gt;&amp;nbsp; * 중복(Duplication): 데이터 모델은 같은 데이터를 사용하는 사람 등을 파악하는 데 도움을 주어 데이터베이스가 여러 장소에 같은 정보를 저장하는 잘못을 하지 않도록 하여 중복성을 최소화&lt;br /&gt;&amp;nbsp; * 비유연성(Inflexibility): 데이터의 정의를 데이터의 사용 프로세스와 분리함으로써 데이터 모델링은 데이터 혹은 프로세스의 작은 변화가 애플리케이션과 데이터베이스에 중대한 변화를 일으킬 수 있는 가능성을 최소화&lt;br /&gt;&amp;nbsp; * 비일관성(Inconsistency): 데이터 모델링을 할 때 데이터와 데이터 간의 상호 연관 관계에 대해 명확하게 정의, 사용자가 처리하는 프로세스 혹은 이와 관련된 프로그램과 테이블의 연계성을 높이는 것은 데이터 모델이 업무 변경에 대해 취약하게 만드는 단점에 해당&lt;br /&gt;&lt;br /&gt;# 데이터 독립성의 구성요소&lt;br /&gt;&amp;nbsp; * 외부스키마: 여러 사용자 관점&lt;br /&gt;&amp;nbsp; * 개념스키마: 통합된 모든 사용자의 관점&lt;br /&gt;&amp;nbsp; * 내부스키마: 물리적인 저장구조를 표현&lt;br /&gt;&lt;br /&gt;# 개념스키마(Conceptual Schema)&lt;br /&gt;&amp;nbsp; * 모든 사용자 관점을 통합한 조직 전체 관점의 통합적 표현&lt;br /&gt;&amp;nbsp; * 모든 응용 시스템들이나 사용자들이 필요로 하는 데이터를 통합한 조직 전체의 DB를 기술한 것으로 DB에 저장되는 데이터와 그들 간의 관계를 표현하는 스키마&lt;br /&gt;&lt;br /&gt;# ERD&lt;br /&gt;&amp;nbsp; * 1976년 피터 첸(Peter Chen)에 의해 Entity-Relationship Model(E-R Model)이라는 표기법이 만들어졌다.&lt;br /&gt;&amp;nbsp; * 일반적으로 ERD를 작성할 때 엔터티 도출 &amp;rarr; 엔터티 배치 &amp;rarr; 관계 설정 &amp;rarr; 관계명 기술의 흐름으로 작업을 진행&lt;br /&gt;&amp;nbsp; * 관계의 명칭은 관계 표현에서 매우 중요한 부분에 해당&lt;br /&gt;&lt;br /&gt;# 엔터티의 특징&lt;br /&gt;&amp;nbsp; * 반드시 해당 업무에서 필요하고 관리하고자 하는 정보이어야 한다.&lt;br /&gt;&amp;nbsp; * 유일한 식별자에 의해 식별이 가능해야 한다.&lt;br /&gt;&amp;nbsp; * 영속적으로 존재하는 (두 개 이상의) 인스턴스의 집합이어야 한다.&lt;br /&gt;&amp;nbsp; * 엔터티는 업무 프로세스에 의해 이용되어야 한다.&lt;br /&gt;&amp;nbsp; * 엔터티는 반드시 속성이 있어야 한다.&lt;br /&gt;&amp;nbsp; * 엔터티는 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.&lt;br /&gt;&lt;br /&gt;# 발생 시점에 따라 구분할 수 있는 엔터티의 유형&lt;br /&gt;&amp;nbsp; * 기본 엔터티(Fundamental Entity)&lt;br /&gt;&amp;nbsp; * 중심 엔터티(Main Entity)&lt;br /&gt;&amp;nbsp; * 행위 엔터티(Active Entity)&lt;br /&gt;&lt;br /&gt;# 엔터티에 이름을 부여하는 방법&lt;br /&gt;&amp;nbsp; * 가능하면 현업 업무에서 사용하는 용어를 사용&lt;br /&gt;&amp;nbsp; * 가능하면 약어를 사용하지 않음&lt;br /&gt;&amp;nbsp; * 단수명사 사용&lt;br /&gt;&amp;nbsp; * 모든 엔터티를 통틀어서 유일하게 이름이 부여&lt;br /&gt;&amp;nbsp; * 엔터티 생성 의미대로 이름을 부여&lt;br /&gt;&lt;br /&gt;# 속성&lt;br /&gt;&amp;nbsp; * 업무에서 필요로 하는 인스턴스에서 관리하고자 하는 의미상 더 이상 분리가 되지 않는 최소의 데이터 단위&lt;br /&gt;&amp;nbsp; * 기본 속성(Basic Attribute): 업무 분석을 통해 바로 정의한 속성&lt;br /&gt;&amp;nbsp; * 설계 속성(Designed Attribute): 원래 업무상 존재하지는 않지만 설계를 하면서 도출해 내는 속성&lt;br /&gt;&amp;nbsp; * 파생 속성(Derived Attribute): 다른 속성으로부터 계산이나 변형이 되어 생성되는 속성, 데이터를 조회할 때 빠른 성능을 낼 수 있도록 하기 위해 원래 속성값을 계산하여 저장할 수 있도록 만든 속성&lt;br /&gt;&lt;br /&gt;# 속성&lt;br /&gt;&amp;nbsp; * 엔터티에 대한 자세하고 구체적인 정보를 나타낸다.&lt;br /&gt;&amp;nbsp; * 하나의 엔터티는 두 개 이상의 속성을 갖는다.&lt;br /&gt;&amp;nbsp; * 하나의 인스턴스에서 각각의 속성은 한 개의 속성값을 가져야 한다.&lt;br /&gt;&amp;nbsp; * 속성도 집합이다.&lt;br /&gt;&lt;br /&gt;# 2차 정규화&lt;br /&gt;&amp;nbsp; * 1st NF를 만족하고, 모든 Non-key 칼럼은 기본키 전체에 종속되어야 한다.&lt;br /&gt;&amp;nbsp; * 즉, 기본키에 종속적이지 않거나 기본키 일부 칼럼(들)에만 종속적인 칼럼은 분리되어야 한다.&lt;br /&gt;&lt;br /&gt;# 도메인(Domain)&lt;br /&gt;&amp;nbsp; * 각 엔터티(테이블)의 속성에 대해서 어떤 유형의 값이 들어가는지를 정의하는 개념&lt;br /&gt;&amp;nbsp; * 속성이 가질 수 있는 값의 범위를 지칭하는 용어&lt;br /&gt;&lt;br /&gt;# 데이터 모델링을 할 때 속성의 명칭을 부여하는 방법&lt;br /&gt;&amp;nbsp; * 지나친 약어 사용은 가급적 제한하도록 한다.&lt;br /&gt;&amp;nbsp; * 속성의 이름에는 서술식 용어는 사용하지 않도록 한다.&lt;br /&gt;&amp;nbsp; * 전체 데이터 모델에서 유일성을 확보하는 것이 좋다.&lt;br /&gt;&amp;nbsp; * 가급적 해당 업무에서 자주 사용하는 이름을 이용하도록 한다.&lt;br /&gt;&lt;br /&gt;# 데이터 모델링의 관계&lt;br /&gt;&amp;nbsp; * 관계는 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있으나 ERD에서는 관계를 연결 할 때, 존재와 행위를 구분하지 않고 단일화된 표기법을 사용&lt;br /&gt;&amp;nbsp; * UML(Unified Modeling Language)에는 클래스 다이어그램의 관계 중 연관 관계(Association)와 의존 관계(Dependency)가 있고 이것은 실선과 점선으로 다르게 표현&lt;br /&gt;&amp;nbsp; * 연관 관계는 항상 이용하는 관계로 존재적 관계에 해당하고, 의존 관계는 상대방 클래스의 행위에 의해 관계가 형성되는 행위적 관계에 해당&lt;br /&gt;&amp;nbsp; * 연관 관계는 소스코드에서 멤버 변수로 선언하여 사용하게 하고 의존 관계는 오퍼레이션에서 파라미터 등으로 이용할 수 있도록 되어 있다.&lt;br /&gt;&amp;nbsp; * 관계의 표기법은 관계명, 관계차수, 선택성(선택사양)의 3가지 개념으로 표현&lt;br /&gt;&lt;br /&gt;# 물리적 독립성&lt;br /&gt;&amp;nbsp; * 물리 스키마가 변경되어도 논리 스키마에 영향을 주지 않는다.&lt;br /&gt;&amp;nbsp; * 파일 저장 구조의 변경이 논리 스키마와 응용 프로그램에 영향을 주지 않는다.&lt;br /&gt;&lt;br /&gt;# 관계차수(Relationship Degree/Cardinality)&lt;br /&gt;&amp;nbsp; * 1:1, 1:M과 같이 두 엔터티 간의 관계에서 참여자의 수를 나타내는 것&lt;br /&gt;&amp;nbsp; * 관계의 기수성&lt;br /&gt;&lt;br /&gt;# 두 개의 엔터티 사이에 정의한 관계에 대해 확인해야 할 사항&lt;br /&gt;&amp;nbsp; * 두 개의 엔터티 사이에 관심 있는 연관 규칙이 존재&lt;br /&gt;&amp;nbsp; * 두 개의 엔터티 사이에 정보의 조합이 발생&lt;br /&gt;&amp;nbsp; * 업무기술서, 장표에 관계 연결을 가능하게 하는 동사(Verb)가 존재&lt;br /&gt;&amp;nbsp; * 업무기술서, 장표에 관계 연결에 대한 규칙이 서술&lt;br /&gt;&lt;br /&gt;# 주식별자를 지정할 때 고려해야 할 사항&lt;br /&gt;&amp;nbsp; * 주식별자에 의해 엔터티 내의 모든 인스턴스들이 유일하게 구분되어야 한다.&lt;br /&gt;&amp;nbsp; * 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.&lt;br /&gt;&amp;nbsp; * 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.&lt;br /&gt;&amp;nbsp; * 주식별자가 지정이 되면 반드시 값이 들어와야 한다.&lt;br /&gt;&lt;br /&gt;# 주식별자의 특징&lt;br /&gt;&amp;nbsp; * 유일성: 주식별자에 의해 엔터티 내의 모든 인스턴스들은 유일하게 구분된다.&lt;br /&gt;&amp;nbsp; * 존재성: 주식별자는 반드시 데이터값이 존재함을 의미한다.&lt;br /&gt;&amp;nbsp; * 불변성: 주식별자가 한번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 한다.&lt;br /&gt;&amp;nbsp; * 최소성: 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.&lt;br /&gt;&lt;br /&gt;# 데이터 모델링에서 식별자 관계&lt;br /&gt;&amp;nbsp; * 목적: 강한 연결 관계 표현&lt;br /&gt;&amp;nbsp; * 자식 주식별자 영향: 자식 주식별자의 구성에 포함됨&lt;br /&gt;&amp;nbsp; * 표기법: 실선 표현&lt;br /&gt;&amp;nbsp; * 연결 고려사항: 반드시 부모 엔터티에 종속, 자식 주식별자 구성에 부모 주식별자 포함 필요, 상속받은 주식별자 속성을 타 엔터티에 이전 필요&lt;br /&gt;&lt;br /&gt;# 데이터 모델링에서 비식별자 관계&lt;br /&gt;&amp;nbsp; * 목적: 약한 연결 관계 표현&lt;br /&gt;&amp;nbsp; * 자식 주식별자 영향: 자식 일반 속성에 포함됨&lt;br /&gt;&amp;nbsp; * 표기법: 점선 연결&lt;br /&gt;&amp;nbsp; * 연결 고려사항: 약한 종속 관계, 자식 주식별자 구성을 독립적으로 구성, 자식 주식별자 구성에 부모 주식별자 부분 필요, 상속받은 주식별자 속성을 타 엔터티에 차단 필요, 부모쪽의 관계 참여가 선택 관계&lt;br /&gt;&lt;br /&gt;# 식별자의 분류 체계&lt;br /&gt;&amp;nbsp; * 주식별자: 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조 관계를 연결할 수 있는 식별자&lt;br /&gt;&amp;nbsp; * 보조식별자: 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 대표성을 가지지 못해 참조 관계 연결을 못함&lt;br /&gt;&amp;nbsp; * 내부식별자: 엔터티 내부에서 스스로 만들어지는 식별자&lt;br /&gt;&amp;nbsp; * 외부식별자: 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자&lt;br /&gt;&amp;nbsp; * 단일식별자: 하나의 속성으로 구성된 식별자&lt;br /&gt;&amp;nbsp; * 복합식별자: 둘 이상의 속성으로 구성된 식별자&lt;br /&gt;&amp;nbsp; * 본질식별자: 업무에 의해 만들어지는 식별자&lt;br /&gt;&amp;nbsp; * 인조식별자: 업무적으로 만들어지지는 않지만 원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만들어진 식별자&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;</description>
      <category>study ../SQLD</category>
      <category>관계</category>
      <category>데이터 모델링의 이해</category>
      <category>데이터 모델의 이해</category>
      <category>속성</category>
      <category>식별자</category>
      <category>엔터티</category>
      <author>wlsekf</author>
      <guid isPermaLink="true">https://wlsekf.tistory.com/33</guid>
      <comments>https://wlsekf.tistory.com/33#entry33comment</comments>
      <pubDate>Mon, 11 Aug 2025 22:57:48 +0900</pubDate>
    </item>
  </channel>
</rss>