[수정 순서]

 1. 개념 목차 만들기

 2. PPT로 목차 시각화

 3. 주요 개념들 쿼리 작성 및 결과 시각화

 

Part 01 데이터 모델링

Section 01 데이터모델링

 Point 1 데이터 모델링의 이해

  1. 데이터 모델링

  2. 데이터 모델링의 특징

  3. 데이터 모델링 단계

  4. 데이터 모델링을 위한 ERD

  5. 데이터 모델링 고려사항

 

데이터 모델링의 이해

 

데이터 모델링의 이해

 Point 2 3층 스키마

  1. 3층 스키마

  2. 3층 스키마 구조

3층 스키마

 

 Point 3 엔티티

  1. 엔티티

  2. 엔티티 도출

  3. 엔티티 특징

  4. 엔티티 종류

   1) 유형과 무형 엔티티

   2) 발생시점에 따른 엔티티 종류

엔티티

 

 Point 4 속성

  1. 속성

  2. 속성의 특징과 종류

   1) 속성의 특징

   2) 속성의 종류

속성

 Point 5 관계

  1. 관계

  2. 관계의 종류

   1) 존재관계

   2) 행위관계

  3. 관계 차수

   1) 관계 차수

   2) 관계 차수의 종류

  4. 식별 관계와 비식별 관계

   1) 식별 관계

   2) 비식별 관계

관계

 Point 6 엔티티 식별자

  1. 주식별자

  2. 식별자의 종류

   1) 식별자의 대표성

   2) 생성 여부

   3) 속성의 수

   4) 대체여부

 

Section 2 데이터 모델과 성능

 Point 1 정규화

  1. 정규화

  2. 함수적 종속성

   1) 제 1정규화

   2) 제 2정규화

   3) 제 3정규화

   4) BCNF

 3. 정규화 예제

정규화

 

 Point 2 정규화와 성능

  1. 정규화의 문제점

  2. 정규화를 사용한 성능 튜닝

정규화 문제점

 

 Point 3 반정규화

  1. 반정규화

  2. 반정규화를 수행하는 경우

  3. 반정규화 기법

   1) 계산된 컬럼 추가

   2) 테이블 수직분할

   3) 테이블 수평분할

   4) 테이블 병합

반정규화

 

 Point 4 분산 데이터베이스

  1. 분산 데이터베이스

  2. 분산 데이터베이스 설계 방식

  

분산 데이터베이스
분산 데이터베이스 설계 방식
분산 데이터베이스 장단점

 


 

Part 02 SQL 기본과 활용

Section 1 SQL 기본

 Point 1 관계형 데이터베이스

  1. 관계형 데이터베이스

   1) 관계형 데이터베이스의 등장

   2) 데이터베이스와 데이터베이스 관리 시스템의 차이점

   3) 관계형 데이터베이스 집합 연산과 관계 연산

  2. 테이블 구조

관계형 데이터베이스
테이블 구조

 Point 2 SQL 종류

  1. SQL

  2. SQL 종류

  3. SQL 문의 실행 순서

SQL 종류

 

 Point 3 DDL

  1. 테이블 생성

   1) 기본적인 테이블 생성

   2) 제약조건 사용

   3) 테이블 생성 시에 CASCADE 사용

   4) 테이블명 변경

  2. 테이블 변경

   1) 컬럼 추가

   2) 컬럼 변경

   3) 컬럼 삭제

   4) 컬럼명 변경

  3. 테이블 삭제

  4. 뷰 생성과 삭제

DDL 테이블 생성
DDL 테이블 변경 및 삭제
DDL 뷰

 Point 4 DML

  1. INSERT 문

   1) INSERT 문

   2) SELECT 문으로 입력

   3) Nologging 사용

  2. Update 문

  3. DELETE 문

 

DML 

  4. SELECT 문

   1) SELECT문 사용

   2) Order by를 사용한 정렬

   3) Index를 사용한 정렬

   4) Distinct와 Alias

SELECT ORDER BY
SELECT INDEX

 

 Point 5 WHERE 문 사용

  1. WHERE문이 사용하는 연산자

  2. Like문 사용

  3. Between문 사용

  4. IN문 사용

  5. NULL 값 조회

WHERE 조건문이 사용하는 연산자
LIKE & BETWEEN
NULL 값 관련

 

 Point 6 GROUP 연산

  1. GROUP BY 문

  2. HAVING문 사용

  3. 집계함수 종류

  4. COUNT 함수

  5. GROUP BY 사용 예제

   1) 부서별, 관리자별 급여 평균 계산

   2) 직업별 급여 합계 중에 급여 합계가 1000 이상인 직원

   3) 사원번호 1000 ~ 1003 번의 부서별 급여 합계

 

 Point 7 SELECT 문 실행 순서

 

 Point 8 명시적 형변환과 암시적 형변환

명시적, 암시적 형변환

 

 Point 9 내장형 함수

  1. 내장형 함수

  2. DUAL 테이블

  3. 내장형 함수의 종류

   1) 문자형 함수

   2) 숫자형 함수

   3) 날짜형 함수

내장형 함수 (1)
내장형 함수 (2)

 

 Point 10 DECODE와 CASE 문

  1. DECODE

  2. CASE문

 

 Point 11 ROWNUM과 ROWID

  1. ROWNUM

  2. ROWID

rownum, rowid

 

 Point 12 WITH 구문

WITH

 

 Point 13 DCL

  1. GRANT

  2. REVOKE

DCL

 

 Point 14 TCL

  1. Commit

  2. Rollback

  3. Savepoint

TCL

 

Section 2 SQL 활용

 Point 1 JOIN

  1. Equi JOIN

   1) Equi JOIN

   2) Inner Join

   3) Intersect 연산

  2. Non-Equi JOIN

  3. OUTER JOIN

   1) LEFT OUTER JOIN, RIGHT OUTER JOIN

  4. CROSS JOIN

  5. UNUON을 사용한 합집합 구현

   1) UNION

   2) UNION ALL

  6. 차집합을 만드는 MINUS 

 

 Point 2 계층형 조회(Connect by)

 

 Point 3 서브쿼리(Subquery)

  1. Main query와 Subquery

  2. 단일 행 Subquery와 다중 행 Subquery

  3. 다중 행(Multi row) Subquery

   1) IN

   2) ALL

   3) EXISTS

  4. 스칼라(scala) Subquery

  5. 연관(Correlated) Subquery

 

 Point 4 그룹 함수(Group Function)

  1. Rollup

  2. Grouping 함수

  3. Grouping Sets 함수

  4. Cube 함수

 

 Point 5 윈도우 함수

  1. 윈도우 함수

  2. 순위 함수

  3. 집계 함수(Rank Function)

  4. 행 순서관련 함수

  5. 비율 관련 함수

 

 Point 6 테이블 파티션

  1. Partition 기능

  2. Range Partition

  3. List Partition

  4. Hash Partition

  5. 파티션 인덱스

  

Section 3 SQL 최적화의 원리

 Point 1 옵티마이저와 실행계획

  1. 옵티마이저

  2. 옵티마이저 특징

  3. 옵티마이저의 필요성

  4. 옵티마이저 실행계획 확인

 

 Point 2 옵티마이저 종류

  1. 옵티마이저의 실행 방법

  2. 옵티마이저 엔진

  3. 비용 기반 옵티마이저

 

 Point 3 인덱스

  1. 인덱스

  2. 인덱스 생성

  3. 인덱스 스캔

   1) 인덱스 유일 스캔

   2) 인덱스 범위 스캔

   3) 인덱스 전체 스캔

 

 Point 4 실행계획

 

 Point 5 옵티마이저 조인

  1. Nested Loop 조인

  2. Sort Merge 조인

  3. Hash 조인

 

 

 

 

[AWS Certification + 서버관리 마스터] RDS


[Course Outline]

 1. IAM & EC2

 2. EC2: Elastic Load Balancing(ELB) & Auto Scaling

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


[RDS]

 - Multi-AZ deployment (Synchronously replicate)

 - Automatic failover

 - Provisioned in subnets

 - DB subnet group

 - Use security groups as a firewall

 - Can disable DB access from the Internet

 - Encryption at rest

 - Automatic backup

 - Point in time restore

 - Automatic minor version upgrade

 - Can choose time to perform maintenance

 - Can modify configuration after provisioned 
 - Changes can be applied immediately or during maintenance window
 - Snapshot (Create a point-in-time backup)
 - Read replica: read-only replica (Asynchronously replicate), up to 5
 - Replica lag
 - How to encrypt??
 - Can only stop an instance for 7 days

[Multi-AZ Deployments vs Read Replicas]



[AWS Aurora]

 - MySQL and PostgreSQL-compatible

 - Up to five times faster than MySQL

 - Up to three times faster than PostgreSQL

 - Auto-scales up to 64TB per database instance

 - Up to 15 read-replicas per a cluster


[DynamoDB]

 - Fully managed NoSQL database 

 - Automatically replicate data across three data center

 - Eventual consistent reads by default

 - Read capacity unit & Write capacity unit

 - https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ProvisionedThroughput.html

 - Use cases


 - Which of the following are use cases for Amazon DynamoDB? Choose 3 answers

A. Storing BLOB data.

B. Managing web sessions.

C. Storing JSON documents.

D. Storing metadata for Amazon S3 objects.

E. Running relational joins and complex updates.

F. Storing large amounts of infrequently accessed data.


[Elasticache]
 - Managed Redis and Memcached nodes 
 - High throughput and low latency in-memory data stores
 - Database, cache, Message broker, queue
 - AWS use cases?? Gaming, DB query

[Redshift]

 - OLAP (Online Analytical Processing) 

 - Columnar Data Storage

 - Advanced Compression

 - Massively Parallel Processing

 - https://www.youtube.com/watch?v=AUvn49gey8Y


[Kinesis]

 - https://s3.amazonaws.com/kinesis-demo-bucket/amazon-kinesis-data-visualization-sample/kinesis-data-vis-sample-app.template


[AWS IoT]


[Homework]


 - Qwiklabs

* Hosting WordPress Using Amazon S3

* Caching Static Files with Amazon CloudFront

* Introduction to Amazon Elastic File System(EFS)


 - Reading

* https://aws.amazon.com/rds/faqs/

* AWS Kinesis FAQs

* https://aws.amazon.com/whitepapers/storage-options-aws-cloud




[AWS Certification + 서버관리 마스터] 3주차 VPC(Virtual Private Cloud)


[Course Outline]

 1. IAM & EC2

 2. EC2 : Elastic Load Balancing(ELB) & Auto Scaling

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


 - Amazon Virtual Private Cloud(Amazon VPC)는 사용자의 AWS 계정 전용 가상 네트워크이다.

 - VPC는 AWS 클라우드에서 다른 가상 네트워크와 논리적으로 분리되어 있다.


[VPC]

 - One default VPC per AWS region

 - Block sizes must be between a /16 netmask and /28 netmask

 - Main CIDR range cannot be modified

 - Tenancy: Default (Shared) vs Dedicated (Single)

 - By default, a VPC security group, a NACL, a routing table, a route for local

 - Carefully choose VPC CIDR range to avoid network address conflict if connecting to other networks through VPN or VPC peering

 - Default VPC can be deleted


[Subnet]

 - A logical subdivision of an IP network(VPC)

 - Reside in an Availability Zone

 - Subnet CIDR block can be the same as VPC CIDR block

 - Subnet CIDR block cannot be smaller than /28 netmask

 - The first four IP addresses and the last IP address in each subnet CIDR block are not available

 - https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/what-is-amazon-vpc.html

 - Public Subnet mask vs Private Subnet mask? What's the difference?


[Route Table]

 - VPC has an implicit router

 - VPC automatically comes with the main route table

 - Can modify the main table and create a new custom route table

 - Each subnet must be associated with a routing table

 - If you don't explicitly associate a subnet with a particular route table, the subnet is implicitly associated with the main route table.

 - Each route in a table specifies a destination CIDR and a target

 - Internet Gateway, an egress-only Internet gateway, a virtual private gateway, a NAT device, a peering connection, or a VPC endpoint

 - Use the most specific route that matches the traffic to determine how to route the traffic


[Internet Gateway]

 - Allows communication between instances in VPC and the Internet

 - Horizontally scaled, redundant, and highly available

 - Only One Internet Gateway per VPC


[Egress-Only Internet Gateway]

 - Allows outbound communication over IPv6 from instances in VPC to the Internet

 - Prevents the Internet from initiating an IPv6 connection with instances

 - To allow outbound-only Internet communication over IPv4, use a NAT gateway

 - Horizontally scaled, redundant, and highly available

 - Only One Egress-Only Internet Gateway per VPC


[NAT Gateway]

 - Allows outbound communication over IPv6 from instances in VPC to the Internet

 - Prevents the Internet from initiating an IPv6 connection with instances

 - Horizontally scaled but not redundant and highly available

 - Can Create More Than One NAT Gateway Per Subnet

 - Require an Elastic IP and an Internet Gateway


[NAT Instance]

 - Allows outbound communication over IPv4 from instances in VPC to the internet

 - Prevents the internet from initiating an IPv4 connection with instances

 - Not horizontally scaled, redundant and highly available

 - Can Create More Than One NAT Instance Per Subnet

 - Require a Public IP and internet Gateway

 - ** Must disable source/destination checks on NAT instances **

 - AWS provides custom AMI configured NAT functionality


[Bastion Host]

 - Adding the extra layer of security to instances in private and public subnets


[VPC EndPoint]

 - Enables instances to privately connect your VPC to supported AWS services and VPC endpoint services powered by Private Link without requiring an internet gateway, NAT device, VPN connection, or AWS Direct Connect connection

 - Instances in VPC do not require public IP addresses to communicate with resources in service

 - Traffic between VPC and the other service does not leave the Amazon network

 - Horizontally scaled, redundant and highly available


[VPC Peering]

 - A networking connection between two VPCs that enables routing traffic between them using private addresses

 - Instances in ether VPC can communicate with each other as fi they are within the same network.

 - Can create a VPC peering connection between your own VPCs, or with a VPC in another AWS account.
   The VPCs can be in different regions

 - Not support Transitive routing


[Network ACLs]

 - Subnet level firewall for controlling traffic in and out of subnets

 - Default nACL allows all inbound and outbound traffic by default

 - Custom nACL denies  all inbound and outbound traffic by default

 - Each subnet must be associated with an nACL

 - If you don't explicitly associate a subnet with a particular nACL, the subnet is  implicitly associated with the default nACL.

 - Contains a numbered list of rules that we evaulate in order, starting with the lowest numbered rule

 - Separate inbound and outbound rules

 - Stateless; responses to allowed inbound traffic are subject to the rules for outbound traffic (and vice versa)



[Network ACLs vs Security Group]


[VPC Flow Logs]

 - Capture information about the IP traffic going to and from network interfaces in VPC

 - Can be published to Amazon CloudWatch Logs and Amazon S3

 - https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-logs.html



[Homework]

Qwiklabs

 - Introduction to Amazon Relational Database Service (RDS)

 - Introduction to Amazon DynamoDB

 - Hosting WordPress Using Amazon S3

 - Using Open Data with Amazon S3


Reading

주제 

사이트 

 VPC QnA

 https://aws.amazon.com/ko/vpc/faqs/

 AWS Single VPC Design

 https://aws.amazon.com/ko/answers/networking/aws-single-vpc-design/

 Recommended Network ACL Rules for Your VPC

 https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/vpc-recommended-nacl-rules.html

Architecting for the Cloud

 http://d1.awsstatic.com/whitepapers/AWS_Cloud_Best_Practices.pdf


 - 기본적으로 인터넷 게이트웨이가 연결되어 있는 VPC


 - 퍼블릭 IPv4가 없는 구조



 - 인터넷 게이트웨이와 Elastic IP를 설정하여 인터넷 엑세스가 가능하게 만든 구조


- Private Gateway를 VPC와 Custom Gateway를 추가하여 AWS Cloud 확장


 - VPC endpoint를 사용하여 internet gateway를 거치지 않고 직접적으로 연결



[AWS Certification + 서버관리 마스터] EC2 : Elastic Load Balancing(ELB) & Auto Scaling


[Course Outline]

 1. IAM & EC2

 2. EC2: Elastic Load Balancing(ELB) & Auto Scaling

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


[Elastic Load Balancer]

 - Elastic: Auto scaling

 - Secure: SSL/TLS decryption, Firewall, VPC, Authentication

 - Flexible: Hybrid load balancing

 - Integrated: WAF, CloudFront, Route53, CloudWatch, ECS, ACM

 - Cost-effective: AWS managed service


[Elastic Load Balancer - Type]
 - Class Load Balancer
- HTTP, HTTPS and TCP
- Layer 4 & 7
- Previous (Depreciated) generation
 - Application Load Balancer
- HTTP and HTTPS
- Layer 7
 - Network Load Balancer
- TCP
- Layer 4

[Application Load Balancer]

 - Listener

 - Availability Zones

 - SSL Certificate

 - Target Group

 - Health Check

 - Target

 - Rules


[Auto Scaling Group]

- Launch Configuration

- Launch Template

- Manual Scaling

- Scheduled Scaling

- Dynamic Scaling

- Cooldown

- Health Check Grace Period

- Health Check Type

- CloudWatch Alarm


[Qwiklabs]

 - Creating an Amazon Virtual Private Cloud (VPC) with AWS CloudFormation

 - Building Your First Amazon Virtual Private Cloud (VPC)

 - Introduction to Amazon Relational Database Service (RDS) (Linux) – optional

 - Introduction to Amazon DynamoDB – optional

 - Programming Amazon SQS and Amazon SNS with .NET – Advanced only


[References]

 - https://aws.amazon.com/elasticloadbalancing/faqs/

 - https://aws.amazon.com/blogs/compute/fleet-management-made-easy-with-auto-scaling/

[AWS Certification + 서버관리 마스터] 목차


[Contents]

 - Lectures

 - Hands-On-Labs

 - Practice Questions

 - Qwiklabs

 - Readings

 - Final Project


[Course Outline]

 1. IAM & EC2

 2. EC2

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


[AWS Certification + 서버관리 마스터] IAM & EC2 Part 1


[Course Outline]

 1. IAM & EC2

 2. EC2 : Elastic Load Balancing(ELB) & Auto Scaling

 3. VPC

 4. Database

 5. Storage

 6. Application Services

 7. AWS Well-Architected Framework & DevOps

 8. Presentation & Review


[Preperation]

1. AWS Account

2. Billing alert


[Identity and Access Management : IAM]

 - Identity and Access Management

 - Groups

 - Users

 - Roles

 - Polices

 - KMS (Key Management Service)


[Elastic Compute Cloud : EC2]

 - AMI (Amazon Machine Image)

 - Instance Type

 - EC2 Options

 - IAM Role

 - T2/T3 Unlimited

 - User Data

 - Storage

 - Tag

 - Security Group

 - Key Pair

 - Metadata

 - Status Checks

 - Monitoring

 - Elastic IP


[Elastic Block Store : EBS]

 - Snapshot

 - Encryption

 - Existing unencrypted volumes cannot be encrypted directly


[Hands-On-Lab]

 - 


[Qwiklabs]

 - Working with Amazon Elastic Block Store (EBS)

 - Automating AWS Services with Scripting and the AWS CLI

 - Working with Elastic Load Balancing

 - Maintaining High Availability with Auto Scaling (for Linux)


[References]

 - https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html

 - https://aws.amazon.com/ebs/faqs/



[SQL Developer] 제31회 SQLD 시험 후기


 - 일시: 2018-12-01 (토요일) 13:00 ~ 14:30

 - 장소: 건국대학교 공학관


 > 이전 글 (1/2) [SQL Developer] 제31회 SQL 개발자 자격검정시험 후기 및 출제 문제 정리 (1)


 - 추가

 - 데이터베이스(DB) 전문가 포럼에 많은 분들께서 정리한 내용


문제 그대로를 복구하기에는 한계가 있어 기출 문제의 개념사항만을 작성했습니다.


빨간 글씨의 개념을 이해해야 풀 수 있었습니다.


많은 고민을 줬던 문제

SELECT

    '''A'''''

FROM dual; 의 결과값은?


과목2 SQL 기본 및 활용

제 1장 SQL 기본

제1절 관계형 데이터베이스 개요


제2절 DDL

1. 데이터 유형

1) CHAR 비교

- CHAR에서는 문자열을 비교할 때 공백(BLANK)을 채워서 비교하는 방법을 사용

- 공백 채우기 비교에서는 우선 짧은 쪽의 공백을 추가하여 2개의 데이터가 같은 길이가 되도록 한다.

- 앞에서부터 한 문자씩 비교, 그렇기 때문에 끝의 공백만 다른 문자열은 같다고 판단

2) VARCHAR 비교

- 맨 처음부터 한 문자씩 비교, 공백도 하나의 문자로 취급하므로 끝의 공백이 다르면 다른 문자로 판단


2. CREATE TABLE

1) CTAS(Create Table ~ As Select ~)

- 기존 테이블의 조건 중에 NOT NULL만 새로운 복제 테이블에 적용

- 기본키, 고유키, 외래키, Check등의 다른 제약 조건은 없어짐

- 제약 조건 추가 시 ALTER TABLE 기능 사용


3.ALTER TABLE

1) 컬럼 변경 시 몇 가지 고려사항

① 해당 컬럼의 크기를 늘릴 수는 있지만 줄이지 못함 (기존 데이터의 훼손)

② 해당 컬럼이 NULL 값만 가지고 있거나 테이블에 아무 행도 없으면 컬럼의 폭을 줄일 수 있다.

③ 해당 컬럼이 NULL 갑만을 가지고 있으면 데이터 유형을 변경할 수 있다.

④ 해당 컬럼의 Default 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.

⑤ 해당 컬럼의 NULL 값이 없을 경우에만 NOT NULL 제약조건을 추가할 수 있다.



제3절 DML

1. SELECT

SELECT [ALL/DISTINCT] 컬럼명 ...

FROM 해당 컬럼들이 있는 테이블명;

1) DISTINCT 옵션


제4절 TCL

1. 트랜잭션의 내용

1) 원자성: 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지않은 상태로 남아 있어야 한다.(All or Nothing)

2) 일관성: 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.

3) 고립성: 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안된다.

4) 지속성: 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.


제5절 WHERE 절

1. 비교연산자

1) 문자 유형 비교

① CHAR 유형타입

- 길이가 서로 다른 CHAR형 타입이면 작은쪽에 SPACE를 추가하여 길이를 같게 한 후에 비교

- 서로 다른 문자가 나올 때까지 비교

- 달라진 첫 번째 문자의 값에 따라 크기를 결정

- BLANK의 수만 다르다면 서로 같은 값으로 결정


② VARCHAR 

- 서로 다른 문자가 나올 때까지 비교

- 길이가 다르다면 짧은 것이 끝날 때까지만 비교 후에 길이가 긴 것이 크다고 판단

- 길이가 같고 다른 것이 없다면 같다고 판단

- VARCHAR는 NOT NULL까지 길이를 말한다.


③ 상수값

- 상수 쪽을 변수 타입과 동일하게 바꾸고 비교

- 변수 쪽이 CHAR 유형 타입이면 위의 CHAR 유형 타입의 경우를 적용

- 변수 쪽이 VACHAR 유형 타입이면 위의 VARCHAR 유형 타입의 경우를 적용

2) NULL

- NULL 값의 비교는 비교 연산자인 =, >, >=, <, <= 를 통해서 비교할 수 없다.

- 만일 비교 연산을 하게 되면 결과는 거짓(FALSE)을 리턴

- 수치 연산자(+, -, *, /)등을 통해서 NULL 값과 연산을 할 때 NULL 값을 리턴

- NULL 값의 비교 연산은 IS NULL, IS NOT NULL이라는 정해진 문구를 사용


2. ROWNUM

 - Oracle의 ROWNM은 컬럼과 비슷한 성경의 Pseudo Column으로 SQL 처리 결과 집합의 각 행에 대해 임시로 부여되는 일련번호

 - 테이블이나 집합에서 원하는 만큼의 행만 가져오고 싶을 때 WHERE 절에서 행의 개수를 제한하는 목적으로 사용


제6절 함수

1. 문자형 함수

문자형 함수 

함수 설명 

LOWER(문자열) 

문자열의 알파벳 문자를 소문자로 바꾸어 준다. 

UPPER(문자열)

문자열의 알파벳 문자를 대문자로 바꾸어 준다. 

ASCII(문자) 

문자나 숫자를 ASCII 코드 번호로 바꾸어 준다. 

CHR/CHAR(ASCII번호) 

ASCII 코드 번호를 문자나 숫자로 바꾸어 준다. 

CONCAT(문자열1, 문자열2) 

Oracle, MySQL에서 유효한 함수이며 문자열 1과 문자열 2를 연결한다.

합성연산자 '||'(Oracle)나 '+'(SQL Server)와 동일 

SUBSTR/SUBSTRING

(문자열, m[, n])

문자열 중 m위치에서 n개의 문자 길이에 해당하는 문자를 돌려준다.

n이 생략되면 마지막 문자까지 

LENGTH/LEN(문자열)

문자열의 개수를 숫자값으로 돌려준다.

LTRIM

(문자열 [, 지정문자])

문자열의 첫 문자부터 확인해서 지정 문자가 나타나면 해당 문자를 제거한다

(지정 문자가 생략되면 공백 값이 디폴트)

SQL Server 에서는 LTRIM 함수에 지정문자를 사용할 수 없다 즉, 공백만 제거할수 있다.

RTRIM

(문자열 [, 지정문자])

문자열의 마지막 문자부터 확인해서 지정 문자가 나타나는 동안 해당 문자를 제거한다.

(지정 문자가 생략되면 공백 값이 디폴트)

SQL Server에서는 LTRIM 함수에 지정문자를 사용할 수 없다.

즉, 공백만 제거할 수 있다.

 TRIM

([leading | trailing | both] 

지정문자 FROM 문자열)

문자열에서 머리말, 꼬리말, 또는 양쪽에 있는 지정 문자를 제거한다.

(leading | trailing | both가 생략되면 both가 디폴트)

SQL Server에서는 TRIM 함수에 지정문자를 사용할 수 없다.

즉, 공백만 제거할 수 있다. 


[제 31 회 SQLD 시험 문제 유형]


SELECT (   ) FROM dual;


결과 값 

"자격"


SUBSTR("SQLD자격증명", 5, 2)  숫자만 바꾸어서 객관식 문제


2. NULL관련 함수

1) NULL 포함 연산의 결과

연산 

연산의 결과 

NULL + 2

NULL 

 NULL - 2 

NULL 

 NULL * 2 

NULL 

NULL / 2

NULL 


2) 단일행 NULL 관련 함수의 종류

일반형 함수

함수 설명 

NVL(표현식1, 표현식2) /

ISNULL(표현식1, 표현식2) 

 표현식 1의 결과값이 NULL이면 표현식 2의 값을 출력한다.

단, 표현식1과 표현식2 의 결과 데이터 타입이 같아야 한다.

NULL 관련 가장 많이 사용되는 함수이므로 상당히 중요하다.

NULLIF(표현식1, 표현식 2)

 표현식1이 표현식 2와 같으연 NULL을 같지 않으면 표현식1을 리턴한다.

COALESCE(표현식1, 표현식 2 ...)

 임의의 개수 표현식에서 NULL 이 아닌 최초의 표현식을 나타낸다.
모든 표현식이 NULL이라면 NULL을 리턴한다.


[제 31 회 SQLD 시험 문제 유형]


NVL2(expr, expr1, expr2) 함수 알아야 맞출 수 있는 문제

 - expr의 값이 NULL이 아닐 경우에는 expr1의 값을 반환, NULL일경우 expr2의 값을 반환


 - if (expr == null ) {

return expr1;

   } else {

return expr2;

   } 



제7절 Group By, Having 절

1. 집계함수

집계 함수 

사용 목적 

COUNT(*) 

NULL값을 포함한 행의 수를 출력 

COUNT(표현식) 

표현식의 값이 NULL값인 것을 제외한 행의 수를 출력 

SUM([DlSTINCT I ALL] 표현식)

표현식의 NULL 값을 제외한 합계를 출력

AVG([DlSTINCT I ALL] 표현식)

표현식의 NULL 값을 제외한 평균을 출력

MAX([DlSTINCT I ALL]표현식)

표현식의 최대값을 출력

(문자, 날짜 데이터 타입도 사용가능)

MIN([DlSTINCT I ALL]표현식)

표현식의 최소값을 출력
(문자, 날짜 데이터 타입도 사용가능)

STDDEV([DlSTINCT I ALL] 표현식)

표현식의 표준 편차를 출력

V ARIAN([DlSTINCT I ALL] 표현식)

표현식의 분산을 출력

기타 통계 함수벤더별로 다양한 통계식을 제공


2. Group by 절과 HAVING 절의 특성

- Group by 절을 통해 소그룹별 기준을 정한 후, SELECT 절에 집계 함수를 사용

- 집계 함수의 통계 정보는 NULL값을 가진 행을 제외하고 수행한다.

- GROUP BY 절에서는 SELECT 절과는 달리 ALIAS 명을 사용할 수 없다.

- 집계 함수는 WHERE 절에는 올 수 없다.

 (집계 함수를 사용할 수 있는 GROUP BY 절보다 WHERE 절이 먼저 수행된다.)

- WHERE 절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시킨다.

- HAVING 절은 GROUP BY 절의 기준 항목이나 소그룹의 집계 함수를 이용한 조건을 표시할 수 있다.

- GROUP BY 절에 의한 소그룹별로 만들어진 집계 데이터 중, HAVING 절에서 제한 조건을 두어 조건을

 만족하는 내용만 출력

- HAVING 절은 일반적으로 GROUP BY 절 뒤에 위치


제8절 Order By 절

1. ORDER BY 정렬 방식


- 기본적인 정렬 순서는 오름차순(ASC)

- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우에 가장 작은 값부터 출력

- 날짜형 데이터 타입은 오름차순으로 정렬했을 경우 날짜 값이 가장 빠른 값이 먼저 출력

- Oracle에서는 NULL값을 가장 큰 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장 마지막에, 내림차순으로 정렬했을 경우에는 가장 먼저 위치한다.

- 반면, SQL Server에서는 NULL 값을 가장 작은 값으로 간주하여 오름차순으로 정렬했을 경우에는 가장먼저, 내림차순으로 정렬했을 경우에는 가장 마지막에 위치한다.


[제 31 회 SQLD 시험 문제 유형]


문자형, 숫자형, 날짜형 컬럼을 갖고 있는 테이블이 주어지고 결과 값을 출력


쿼리문에 ORDER BY 문자형 DESC, 숫자형 ASC, 날짜형 DESC 이었을 때의 결과를 선택하는 문제


2. ORDER BY  {column} DESC nulls last

- 처음보는 ORDER BY 옵션

- 반환되는 결과 값 중 NULL 값은 나중에 출력하게끔 하는 옵션

[제 31 회 SQLD 시험 문제 유형]


SELECT C1, C2 FROM t1 ORDER BY 1 DESC (     ); 

괄호 안에 들어갈 쿼리를 작성하시오.


결과 값

c1 

c2 

 

 

3

3

2

3

 


제9절 조인(Join)

1. EQUI JOIN

EQUI JOIN 형태

ANSI/ISO SQL  

SELECT 테이블1.칼럼명, 테이블2.칼럼명
FROM 테이블1, 테이블2

WHERE 테이블1.컬럼명 1 = 테이블2.칼렴명2;

SELECT 테이블1.컬럼명, 테이블2.컬럼명
FROM 테이블1 INNER JOIN 테이블2
ON 테이블1.컬럼명1 = 테이블2.컬럼명2;


[제 31 회 SQLD 시험 문제 유형]


해당 쿼리를 ANSI/ISO 조인 쿼리로 바꾸시오


제 2장 SQL 활용

제1절 표준 조인

1. 일반 집합 연산자

연산 

기능 

내용

UNION 

UNION 

합집합 (중복 O)

UNION ALL

합집합 (중복 X)

INTERSECTION

INTERSECT 

교집합 

DIFFERENCE

EXCEPT(Oracle MINUS) 

차집합 

PRODUCT

CROSS JOIN 

곱집합 


2. 순수 관계 연산자

연산

기능 

내용 

SELECT

WHERE 

조건절 기능

PROJECT

SELEC

컬럼 선택 기능 

(NATURAL) JOIN

JOIN(다양) 

NATURAL JOIN, INNER JOIN OUTER JOIN, 

USING 조건절, ON 조건절

DIVIDE

 


2. ANSI/ISO SQL에서 표시하는 FROM 절의 JOIN 형태

1) INNER JOIN

- 내부 JOIN

- 동일한 값이 있는 행만 반환

- USING 조건절, ON 조건절을 필수적으로 사용

- JOIN에 사용된 같은 이름의 컬럼이라도 별개의 컬럼으로 표시

2) NATURAL JOIN

- 두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 EQUI(=) JOIN을 수행

- USING, ON의 조건을 정의할 수 없음

- SELECT에 컬럼 순서를 지정하지 않으면 NATURAL JOIN 기준이 되는 컬럼들이 다른 컬럼보다 먼저 출력

- JOIN에 사용된 같은 이름의 컬럼을 하나로 처리


3) USING 조건절

4) ON 조건절

5) CROSS JOIN (PRODUCT)

6) OUTER JOIN

① LEFT OUTER JOIN

- 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 나중에 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어온다.

- TABLE A와 B가 있을때 A와 B를 비교해서 B의 JOIN 컬럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고,
 B의 JOIN 컬럼에서 같은 값이 없는 경우에는 B 테이블에서 가져오는 컬럼들은 NULL 값으로 채운다.

② RIGHT OUTER JOIN

- 조인 수행 시 LEFT JOIN과 반대로 우측 테이블이 기준이 되어 결과를 생성

- 즉, TABLE A와 B가 있을 때(TABLE 'B'가 기준)

- A와 B를 비교해서 A의 JOIN 컬럼에서 같은 값이 있을 때 그 해당 데이터를 가져오고, A의 JOIN 컬럼에서 같은 값이 없는 경우에는 A 테이블에서 가져오는 컬럼들은 NULL 값으로 채운다.

- 그리고 OUTER 키워드를 생략해서 RIGHT JOIN으로 사용할 수 있다.

③ FULL OUTER JOIN

- RIGHT OUTER JOIN과 LEFT OUTER JOIN결과를 합집합으로 처리한 결과와 동일

- UNION 기능과 같고 UNION ALL과는 다르다.

- FULL JOIN으로 OUTER 키워드를 생략이 가능


[제 31 회 SQLD 시험 문제 유형]


하나의 두 개의 테이블이 주어지고

RIGHT JOIN, LEFT JOIN 을 수행했을 경우

COUNT(*) 값이 몇개나 나오는 지 문제


제2절 집합 연산자

1. 집합 연산자의 종류

집합 연산자

연산자의 의미 

UNION 

여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복 된 행은 하나의 행으로 만든다. 

UNION ALL

여러 개의 SQL문의 결과에 대한 합집합으로, 중복된 행도 그대로 결과로 표시

즉, 단순히 결과만 합쳐놓은 것이다. 

일반적으로 여러 질의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다.

개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일 

(결과의 정렬 순서에는 차이가 있을 수 있음) 

INTERSECT 

여러 개의 SQL문의 결과에 대한 교집합. 중복된 행은 하나의 행으로 만듦 

EXCEPT

앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합

중복된 행은 하나의 행으로 만듦 (일부 데이터베이스는 MINUS) 



제3절 계층형질의와 셀프 조인

1. 계층형 질의 ** (제 31회 SQLD 3문제 정도 나옴)

1) Oracle 계층형 질의

SELECT ...

FROM 테이블

WHERE condition AND condition ...

START WITH condition

CONNECT BY [NOCYCLE] condition AND condition ...

[ORDER SIBLINGS BY column, column, ...]


키워드 

내용 

START WITH절

계층 구조 전개의 시작 위치를 지정하는 구문. 즉, 루트 데이터를 지정

CONNECT BY절 

전개될 자식 데이터를 지정하는 구문. 자식 데이터는 CONNECT BY절에 주어진 조건을 만족해야 함(조인) 

PRIOR

CONNECT BY 절에 사용되며, 현재 읽은 컬럼을 지정.

PRIOR 자식 = 부모 형태 사용 시 계층구조에서 부모 데이터에서 자식 데이터(부모 → 자식) 방향으로 전개

PRIOR 부모 = 자식 형태 사용 시 반대로 자식 데이터에서 부모 데이터 (자식 → 부모) 방향으로 전개

NOCYCLE

데이터를 전개하면서 이미 나타났던 동일한 데이터가 전개 중에 다시 나타난다면 이것을 가리켜 사이클(Cylcle)이 형성되었다라고 말한다.

사이클이 발생한 데이터는 런타임 오류가 발생한다.

그렇지만 NOCYCLE를 추가하면 사이클이 발생한 이후의 데이터는 전개하지 않는다.

ORDER SIBLINGS BY

형제 노드(동일 LEVEL) 사이에서 정렬을 수행

WHERE

모든 전개를 수행한 후에 지정된 조건을 만족하는 데이터만 추출 


제4절 서브쿼리

1. 서브쿼리 종류

1) 동작하는 방식에 따른 서브쿼리 분류

서브쿼리 종류

설명 

Un-Correlested(비연관) 서브쿼리

서브쿼리가 메인쿼리 컬럼을 가지고 있지 않는 형태의 서브쿼리

메인쿼리에 값(서브쿼리가 실행된 결과)을 제공하기 위한 목적으로 주로 사용

Correlated(연관)

서브쿼리

서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태의 서브쿼리 

일반적으로 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 

확인하고자 할때 주로 사용


2) 반환되는 데이터의 형태에 따른 서브쿼리 분류

서브쿼리 종류

설명 

Single Row 서브쿼리

(단일 행 서브쿼리)

서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리를 의미한다.

단일 행 서브쿼리는 단일 행 비교 연산자와 함께 사용

단일 행 비교 연산자에는 =, <, <=, >, >=, <>이 있다. 

Multi Row 서브쿼리

(다중 행 서브쿼리)

서브쿼리의 실행 결과가 여러 건인 서브쿼리를 의미

다중 행 서브쿼리는 다중 행 비교 연산자와 함께 사용

다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다.

Multi Column 서브쿼리

(다중 컬럼 서브쿼리)

서브쿼리의 실행 결과로 여러 컬럼을 반환

메인쿼리의 조건절에 여러 컬럼을 동시에 비교

서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다.


[제 31 회 SQLD 시험 문제 유형]


Subquery의 특징으로 부적절한 것


보기) 

 IN은 단일 행 서브쿼리이다 (X) 


제5절 그룹 함수 *** (문제가 많이 나옴)

1. 집계함수

1) Aggregate function

- Group Aggregate Function이라고 부르며 Group Function의 한 부분으로 분류할 수 있다.

- Count, Sum, Avg, Max, Min외 각종 집계 함수


2) Group Function *** (문제가 많이 나옴)

- Rollup: Group by의 확장된 형태로 사용하기가 쉬우며 병렬로 수행이 가능하기 때문에 매우 효과적일 뿐 아니라 시간 및 지역처럼 계층적 분류를 포함하고 있는 데이터의 집계에 적합하도록 되어 있다.


- Cube: 결합 가능한 모든 값에 대하여 다차원적인 집계를 생성하게 되므로 Rollup에 비해 다양한 데이터를 얻는 장점이 있는 반면에, 시스템에 부하를 많이 주는 단점이 있다.


- Grouping Sets: 원하는 부분의 소계만 손쉽게 추출할 수 있는 장점이 있다.


[제 31 회 SQLD 시험 문제 유형]


1. ROLLUP, CUBE 비교 문제


2. CUBE함수 사용의 결과 값을 보기로 주고 어떤 그룹 함수를 사용했는지


C1, C2 각각 소계가 존재

C1, C2 값O Null

C1, C2 Null 값O

C1, C2 전체 집계 O


3) Window Function

- 행과 행간의 관계를 쉽게 정의하기 위해 만든 함수

- 분석 함수(Analytic Function), 순위 함수(Rank Function)


① 그룹 내 순위(RANK) 관련 함수: RANK, DENSE_RANK, ROW_NUMBER함수

② 그룹 내 집계(AGGREGATE) 관련 함수: SUM, MAX, MIN, AVG, COUNT 함수

③ 그룹 내 행 순서 관련 함수: FIRST_VALUE, LAST_VALUE, LAG, LEAD 함수

④ 그룹 내 비율 관련 함수: CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT 함수

⑤ 선형 분석을 포함한 통계 분석 관련 함수



제6절 윈도우 함수


SELECT WINDOW_FUNCTION (ARGUMENTS) OVER ( [PARTITION BY 컬럼] [ORDER BY 절] [WINDOWING 절] )

FROM  테이블 명;


 - Partition By 절

  : 전체 집합을 기준에 의해 소그룹으로 나눌 수 있다.

 - WINDOWING 절

  : WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 강력하게 지정할 수 있다.

   ROWS는 물리적인 결과 행의 수를, RANGE는 논리적인 값에 의한 범위를 나타내는데, 둘 중의 하나를 선택해서 사용


BETWEEN 사용 타입

ROWS | RANGE BETWEEN

 UNBOUNDED PRECEDING | CURRENT ROW | VALUE_EXPR PRECEDING / FOLLOWING

AND

 UNBOUNDED FOLLOWING | CURRENT ROW | VALUE_EXPR PRECEDING / FOLLOWING


BETWEEN 미사용 타입

ROWS | RANGE

 UNBOUNCED PRECEDING | CURRENT ROW | VALUE_EXPR PRECEDING

1. 그룹 내 순위 함수

1) RANK

- RANK 함수는 ORDER BY를 포함한 QUERY문에서 특정 항목(컬럼)에 대한 순위를 구하는 함수

- 이때 특정 범위(PARTITION) 내에서 순위를 구할 수도 있고 전체 데이터에 대한 순위를 구할 수도 있다.

- 또한 동일한 값에 대해서는 동일한 순위를 부여하게 된다.


2) DENSE_RANK

- 동일한 순위를 하나의 건수로 취급


3) ROW_NUMBER 함수

- RANK, DENSE_RANK 함수가 동일한 값에 대해서는 동일한 순위를 부여

- 동일한 값이라도 고유한 순위를 부여


2. 그룹 내 행 순서 함수

1) FIRST_VALUE

- 파티션별 윈도우에서 가장 먼저 나온 값을 구한다.

- MIN 함수 활용하여 같은 결과를 얻을 수도 있다.

- RANGE UNBOUNDED PRECEDING: 현재 행을 기준으로 파티션 내의 첫 번째 행까지의 범위를 지정


SELECT DEPTNO, ENAME, SAL,

FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO 

ORDER BY SAL DESC 

ROWS UNBOUNDED PRECEDING) AS DEPT_RICH

FROM EMP;


2) LAST_VALUE

- 파티션별 윈도우에서 가장 나중에 나온 값을 구한다.

- MAX 함수를 활용하여 같은 결과를 얻을 수도 있다.

- ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING: 현재 행을 포함하여 파티션 내의 마지막 행까지의 범위를 지정

SELECT DEPTNO, ENAME, SAL,

LAST_VALUE(ENAME) OVER(PARTITION BY DEPTNO 

ORDER BY SAL DESC 

ROWS BETWEEN CURRENT ROW 

AND UNBOUNDED FOLLOWING) AS DEPT_POOR

FROM EMP;


3) LAG 함수

- 파티션별 윈도우에서 이전 몇 번째 행의 값을 가져올 수 있다.


SELECT ENAME, HIREDATE, SAL,

LAG(SAL) OVER(ORDER BY HIREDATE) AS PREV_SAL

FROM  EMP

WHERE JOB = 'SALESMAN';


- LAG 함수는 3개의 Arguments까지 사용할 수 있다.

- 두 번째 인자는 몇 번째 앞의 행을 가져올지 결정 (default, 1)

- 세 번째 인자는 첫 번째 행의 경우 가져올 데이터가 없어 NULL 값이 들어올 경우 다른 값으로 바꾼다.


SELECT ENAME, HIREDATE, SAL,

LAG(SAL, 2, 0) OVER(ORDER BY HIREDATE) AS PREV_SAL

FROM EMP

WHERE JOB = 'SALESMAN';


4) LEAD 함수

- 파티션별 윈도우에서 이후 몇 번째 행의 값을 가져올 수 있다.

- LEAD 함수는 3개의 Arguments 까지 사용할 수 있다.

- 두 번째 인자는 몇 번째 후의 행을 가져올 지 결정 (Default, 1)

- 세 번째 인자는 파티션의 마지막 행의 경우 가져올 데이터가 없어 NULL 값이 들어오는 경우 다른 값으로 바꾸어줌

SELECT ENAME, HIREDATE,

LEAD(HIREDATE, 1) OVER(ORDER BY HIREDATE) AS 'NEXTHIRED'

FROM EMP;


[제 31 회 SQLD 시험 문제 유형]


1. 

ROWS UNBOUNDED PRECEDING

RANGE UNBOUNDED PRECEDING

ROWS BETWEEN UNBOUNDED PRECEDING AND PRECEDING

RANGE BETWEEN UNBOUNDED PRECEDING AND PRECEDING

차이 구분 문제


2. 

쿼리 결과값 보기가 주어진 뒤에 LAG 함수를 맞추는 문제


제7절 DCL


제8절 절차형 SQL

1. PL(Procedural Language)/SQL

[제 31 회 SQLD 시험 문제 유형]

  [PL/SQL]

    <LABEL 1>

    DECLARE 

        v_lv = 1

     ....

          < LABEL 2 >

               DECLARE

                   v_lv = 2 

               DBMS_OUTPUT .... L1.v_lv ... L2.v_lv.... v_lv

결과값: 1, 2, 2

-> 레이블 지정 시, 다른 레이블의 변수 값을 출력하기 위해서는 레이블을 붙여줘야 함 그게 아니면 내부에 선언된 값이 출력


제 3장 SQL 최적화 기본 원리

제1절 옵티마이저와 실행계획

1. 규칙기반 옵티마이저


2. 비용기반 옵티마이저


제2절 인덱스 기본

1. 인덱스 종류

(B-트리, 클러스터형/IOT)

2. 전체 테이블 스캔과 인덱스 스캔

1) 전체 테이블 스캔

① SQL문에 조건이 존재하지 않는 경우

② SQL문의 주어진 조건에 사용 가능한 인덱스가 존재하지 않는 경우

③ 옵티마이저의 취사 선택

④ 그 밖의 경우(병렬처리 방식으로 처리, 전체 테이블 스캔 방식의 힌트 사용)

2) 인덱스 스캔

① 인덱스 유일 스캔(Index Unique Scan): 

- 유일 인덱스(Unique Index)를 사용하여 단 하나의 데이터를 추출하는 방식

- Unique 인덱스는 중복값이 없으므로 수직적 탐색만을 수행

② 인덱스 범위 스캔(Index Range Scan)

- 루트 블록에서 리프 블록까지 수직적으로 탐색 후 리프 블록을 범위 스캔

③ 인덱스 역순 범위 스캔: 

- Index Range Scan과 동일하지만 뒤에서 앞으로 스캔하므로 내림차순으로 정렬

④ 인덱스 전체 스캔(Index Full Scan): 

- 수직 탐색 없이 리프 블록을 처음부터 끝까지 탐색

⑤ 인덱스 고속 전체 스캔(Fast Full Index Scan): 

- 인덱스 트리 구조를 무시하고 인덱스 세그먼트 전체를 Multiblock Read 방식으로 스캔(결과 정렬 보장X)

⑥ 인덱스 스킵 스캔(Index Skip Scan):

- 조건절에 인덱스 절이 없어도 레코드를 포함할 "가능성이 있는" 하위 블록만 골라서 스캔


제3절 조인 수행 원리


[SQL Developer] 제31회 SQLD 시험 후기


 - 일시: 2018-12-01 (토요일) 13:00 ~ 14:30

 - 장소: 건국대학교 공학관


 > 다음 글 (2/2) [SQL Developer] 제31회 SQL 개발자 자격검정시험 후기 및 출제 문제 정리 (2)


2018년 12월 올해의 마지막 SQLD 시험을 보고왔다.


시험 보고 온 느낌은 "하.. 정리를 좀 해둘껄 헷갈리는 내용이 너무 많네.." 


역시 대충하면 생각이 잘 나지 않는다.


평소에 그래도 개발하면서 쿼리 작성을 웬만큼 했으니 그냥 보면 되겠지 싶었는데 


생각보다 꼼꼼하게 공부했어야 했던것 같다.



[건국대학교 SQLD 시험장]


 시험 장소가 조금 헷갈려서 많이들 헤메는 듯한 모습들이 보였다.


B동이라고 되어 있어서 들어갔더니 별관이라고 A4용지를 적어놔서 다들 헷갈려서 물어보면서 올라갔다.


시험시간이 다가와 OMR 카드 나눠주시면서 컴퓨터용사인펜이 필요한 사람들에게 나눠주셨다. (다행)


시험 시간은 총 90분(13:00 ~ 14:30), 시험 문제는총 50문제(객관식 42개, 주관식8개)


이후 내용은 시험에 나왔던 문제와 관련된 내용을 작성하였습니다.


문제 그대로를 외우긴 힘드니까요 ㅎㅎ..


빨간 글씨정답이거나 정답에 관련된 내용입니다. 해당 개념을 이해하고 외우시면 될 것 같습니다.




과목1 데이터 모델링의 이해

제 1장 데이터 모델링의 이해

제1절 데이터 모델의 이해

1. 데이터 모델링의 중요한 세 가지 개념

개념 

복수/집합개념

타입/클래스 

개별/단수개념

어커런스/인스턴스 

어떤 것

(Thing) 

엔터티 타입(Entity Type) 

엔터티(Entity) 

엔터티(Entity) 

인스턴스(Instance)

어커런스(Occurrence) 

어떤 것 간의 연관

(Association between Things)

관계(Relationship) 

페어링(Pairing) 

어떤 것의 성격

(Characteristic of a Thing)

속성(Attribute) 

속성값(Attribute Value) 


제2절 엔터티

제3절 속성


제4절 관계

1. 관계의 표기법

1) 관계명: 관계의 이름

2) 관계차수: 1:1, 1:M, M:N

3) 관계선택사양: 필수관계, 선택관계


제5절 식별자

1. 식별자의 분류체계

분류 

식별자 

설명 

대표성 여부 

주식별자 

엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며,

타 엔터티와 참조관계를 연결할 수 있는 식별자 

보조식별자 

엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나 

대표성을 가지지 못해 참조관계 연결을 못함 

스스로 생성 여부

내부 식별자 

엔터티 내부에서 스스로 만들어지는 식별자 

외부 식별자 

타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자 

속성의 수

단일 식별자 

하나의 속성으로 구별된 식별자 

복합 식별자 

둘 이상의 속성으로 구성된 식별자 

 대체 여

본질 식별자 

업무에 의해 만들어지는 식별자 

인조 식별자 

업무적으로 만들어지지는 않지만

원조식별자가 복잡한 구성을 가지고 있기 때문에 인위적으로 만든 식별자 


2. 식별자 관계로만 설정할 경우의 문제점

- 식별자 관계만으로 연결된 데이터 모델의 특징을 주식별자 속성이 지속적으로 증가할 수 밖에 없는 구조로서 새발자 복잡성과 오류가능성을 유발시킬 수 있는 요인이 될 수 있다.


3. 비식별자 관계로만 설정할 경우의 문제점

- 비식별자 관계로만 데이터 모델링을 전개하다보면 SQL구문에 많은 조인이 걸리게 되고 그에 따라 복잡성이 증가하고 성능이 저하되게 되는 것이다.


제 2장 데이터 모델과 성능

제1절 성능 데이터 모델링의 개요

1. 성능 데이터모델링 - 정독 한 번 하기

2. 성능 데이터모델링 수행 절차

제2절 정규화와 성능

1. 정규화 단계

(제 1정규화, 제 2정규화, 제 3정규화)

제3절 반정규화와 성능

1. 반정규화를 통한 성능향상 전략

- 데이터를 조회할 때 디스크I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 컬럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행

1) 반정규화 대상조사

① 범위처리빈도수 조사

② 대량의 범위 처리 조사

③ 통계성 프로세스 조사

④ 테이블 조인 개수

2) 다른 방법유도 검토

① 뷰(View) 테이블

② 클러스터링 적용

③ 인덱스의 조정

④ 응용 애플리케이션

3) 반정규화 적용

① 테이블 반정규화

② 속성의 반정규화

③ 관계의 반정규화


2. 반정규화의 기법
1) 테이블의 반정규화

기법분류 

기법 

내용 

테이블 병합 

1:1 관계 테이블병합 

1:1 관계를 통합하여 성능향상 

1:M 관계 테이블병합 

1:M 관계 통합하여 성능향상 

슈퍼/서브타입 테이블병합 

슈퍼/서브 관계를 통합하여 성능향상 

테이블 분할

직분할 

컬럼단위의 테이블을 디스크 I/O를 분산처리 하기 위해 테이블을 1:1로 분리하여 성능향상(트랜잭션의 처리되는 유형을 파악이 선행되어야 함)

수평분할 

로우 단위로 집중 발생되는 트랜잭션을 분석하여 디스크 I/O 및 데이터접근의 효율성을 높여 성능을 향상하기 위해 로우단위로 테이블을 쪼갬(관계가 없음)

테이블 추가

중복테이블 추가 

다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격조인을 제거하여 성능을 향상 

통계테이블 추가 

SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 시 성능을 향상 

이력테이블 추가

이력테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력테이블에 존재하는 방법은 반정규화의 유형 

부분테이블 추가 

하나의 테이블의 전체 컬럼 중 자주 이용하는데 자주 이용하는 집중화된 컬럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화된 테이블을 생성 


2) 컬럼 반정규화

반정규화 기법

내용 

중복컬럼 추가 

 조인에 의해 처리할 때 성능저하를 예방하기 위해 즉, 조인을 감소시키기 위해 중복

된 칼럼을 위치시킴 

파생컬럼 추가

 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능저하를 예방하기 위해 

미리 값을 계산하여 갈럼에 보관함. Derived Column이라고 함

이력테이블 컬럼 추가 

 대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수있는 

성능저하를 예방하기 위해 이력테이블에 기능성 칼럼

(최근값 여부. 시작과 종료일자 등)을 추가함

PK에 의한 컬럼 추가 

 복합의미를 갖는 PK를 단일 속성으로 구성하였을 정우 발생됨.

단일 PK안에서 특정값을 별도로 조회하는 경우 성능저하가 발생될 수 있음 

이 때 이미 PK안에 데이터가 존재하지만 성능향상을 위해 

일반속성으로 포함하는 방법이 PK의한 칼럼추가 반정규화임

응용시스템 오작동을 위한 컬럼 추가 

 업무적으로는 의미가 없지만 사용자가 데이터처리를 하다가 잘못 처리하여 

원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법.

컬럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만 이것을

이력데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있음


3) 관계 반정규화

반정규화 기법

내용 

중복관계 추가 

데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만 이 때 발생할 수 있는 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법이 관계의 반정규화임 


제4절 대량 데이터에 따른 성능

1. 대량 데이터 발생에 따른 테이블 분할 개요

1) 수평 분할: 컬럼단위로 분할하여 I/O경감

2) 수직 분할: 로우단위로 분할하여 I/O경감


제5절 데이터베이스 구조와 성능

1. 슈퍼/서브 타입 데이터 모델의 성능고려 방법

1) 슈퍼/서브타입 데이터 모델의 변환

① 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성 (One to One)

② 슈퍼타입 + 서브타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼타입 + 서브타입 테이블로 구성 (Plus)

③ 전체를 하나로 묶어 트랜잭션이 발생할 때는 하나의 테이블로 구성 (Single)


구분 

One To One Type 

Plus Type 

Single Type 

특징 

개별테이블 유지 

슈퍼 + 서브타입 테이블 

하나의 테이블 

확장성 

우수함 

보통 

나쁨 

조인성능 

나쁨 

나쁨 

우수함 

I/O량 성능 

좋음 

좋음 

나쁨 

관리용이성

좋지않음 

좋지않음 

좋음 

트랜잭션 유형에 따른 

선택 방법

개별 테이블로 접근이 

많은 경우 선택 

슈퍼 + 서브 형식으로 데이터를 처리하는 경우 선택 

전체를 일괄적으로 

처리하는 경우 선택 



제6절 분산 데이터베이스와 성능

1. 데이터베이스 분산 설계시 효과

- 성능이 중요한 사이트에 적용

- 공통코드, 기준정보, 마스터 데이터 등에 대해 분산환경을 구성

- 실시간 동기화가 요구되지 않을 떄, 실시간의 업무적인 특징을 가지고 있을 때 분산 환경 구성

- 특정 서버에 부하가 집중이 될 때 부하를 분산할 때

- 백업 사이트를 구성할 때 간단하게 분산기능을 적용하여 구성


+ Recent posts