[정보처리기사 필기] 기출문제 - 351 ~ 400. 오답노트

352. 집계함수

  • COUNT() : 튜플(행)이나 값들의 개수
  • SUM() : 값들의 합
  • AVG() : 값들의 평균값
  • MAX() : 값들의 최대값
  • MIN() : 값들의 최소값
  • STDDEV() : 값들의 표준 편차값
  • VARIANCE() : 값들의 분산값

353. BEETWEEN A AND B 

  • 특정 컬럼의 값이 A 이상 B 이하에 포함되는 데이터를 검색
  • 수치 데이터, 날짜 데이터에 대해 범위 검색을 하고자 할 때 사용

354. SQL 부분범위 처리

  • 조건을 만족하는 전체범위를 처리하는 것이 아니라 일단 운반단위까지만 처리하여 추출하는 처리 방식
  • SQL 부분범위 처리 목적
    • 스캔 범위를 나누어서 운반단위를 가능한 빨리 채워서 처리 속도를 향상
    • 일부분만 처리하고서도 Optimizer의 특성을 이용하여 정확한 결과를 도출
    • 처리 범위가 넓더라도 빠른 속도를 얻도록 하기 위함
  • SQL 부분범위 처리 적용 원칙
    • 부분범위처리의 자격
      • 논리적으로 일부분만 처리한 결과가 전체범위를 읽어 추가적인 가공을 하지 않고도 처리한 결과와 동일하다면 자격이 있음
    • 부분범위처리를 할 수 없는 경우
      • Order By가 사용된 경우
      • UNION, MINUS, INTERSECT 등 조회 후 추가 연산을 사용한 경우
    • 부분범위처리를 할 수 없는 경우의 대체
      • Order By : Index를 이용하여 Order by를 하지 않아도 되는 형태로 대체
      • MINUS, INTERSECT : EXISTS, NOT EXISTS, IN, NOT IN 등으로 대체
  • SQL 부분범위 처리 방안
    • SQL 구문에 Order By가 있는 경우 인덱스 등을 이용하여 Order By를 삭제하는 형태로 변환
    • 결과 컬럼을 얻어올 때 인덱스에서 모두 가져올 수 있는 항목인지를 살펴서 인덱스가 다시 테이블을 읽지 않아도 되는 형태로 사용
    • 보통 사용하는 MAX(seq) + 1 형태를 버리고 역순 인덱스를 이용하여 Next Seq (다음 시권스값)를 구하는 형태로 변경
    • 데이터의 존재 여부를 체크하는 등의 로직을 수행해야 할 때, count()를 수행하는 것보다는 EXISTS를 이용하여 존재여부를 파악
  • SQL 부분범위 처리 VS 전체범위 처리 비교
구분 전체범위처리 부분범위처리
특징 주어진 조건의 범위가 좁은 경우는 문제가 없으나 넓은 경우는 빠른 수행 속도를 기대하기 어려움 처리할 범위가 아무리 넓다고 하더라도 그 범위 중의 일부만 처리
스캔방법 드라이빙 조건을 만족하는 범위를 모두 스캔 드라이빙 조건을 만족하는 범위를 차례로 스캔함
체크조건 처리 방법 체크조건 검증 후 성공한 건에 대해 임시 저장공간에 저장 체크 조건을 검증하여 성공한 건을 바로 운반단위로 보냄
결과추출 방법 저장이 완료되면 필요한 2차 가공을 한 후 운반단위만큼 추출시키고 다음 요구가 있을 때까지 일단 멈춤 운반단위가 채워지면 수행을 멈추고 결과를 추출

357. DCL

  • 데이터 제어어
  • 데이터베이스의 규정이나 기법을 정의하고 제어하는 언어
  • 사용자의 권한 부여/취소, 트랜잭션 제어
  • 사용 명령어 : GRANT (권한 허가), REVOKE (권한 회수), COMMIT, ROLLBACK
  • 갱신 권한 부여 SQL 문 : GRANT 권한 [컬럼 리스트] ON 객체 TO {사용자 | 역할 | PUBLIC}
기능 명령어 설명
무결성 COMMIT 수행된 결과를 실제 물리적 디스크로 저장
ROLLBACK 명령 수행 실패를 의미하며 수행된 결과를 원복시킴
SAVEPOINT (checkpoint) 저장점 지정, 지정된 저장점부터 현재까지 일부만 ROLLBACK 가능
데이터보안 GRANT 데이터베이스 사용자에게 사용 권한 부여
REVOKE 데이터베이스 사용자에게 부여된 사용 권한 취소

359. DDL

  • 객체를 생성, 변경, 제거하기 위해 사용하는 명령어
  • 명령 실행 후 기본적으로 Auto Commit (트랜잭션의 끝으로 간주) 됨
  • CASCADE 옵션 사용 : 참조하는 테이블도 함께 삭제 - 해당 테이블만 삭제하고자 할 때는 CASCADE 옵션을 빼고 사용
구분 명령어 설명
생명 CREATE 데이터베이스 객체 생성
변경 ALTER 데이터베이스 객체 변경
삭제 DROP 데이터베이스 객체 삭제
  TRUNCATE 데이터베이스 객체 내 튜플(행) 삭제

362. 트랜잭션의 특징 ACID

특성 설명 기법
Atomicity 원자성 • 분해할 수 없는 최소 단위
• 연산 전체가 성공 또는 실패
• 한 가지라도 실패할 경우 전체가 취소되어 무결성 보장 All or Nothing
Commit / Rollback
트랜잭션 관리자
Consistency 일관성 트랜잭션이 실행 성공 후 항상 모순 없이 일관성 있는 DB 상태 보존 참조 무결성 기법 (무결성 제어기)
Isolation 고립성 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 의미 • Serializable
• Repeatable Read
• Read Commit
• Read Uncommit (병행 제어 관리자)
Durability 영속성 성공이 완료된 트랜잭션의 결과는 영구(속)적으로 데이터베이스에 저장됨 회복 기법 ( 연관회복 관리자)

363. 트랜잭션 제어 언어 TCL 명령어

명령어 목적 설명 역할
COMMIT 거래내역 확인 하나의 논리적 단위에 대한 작업이 성공적으로 끝났고, 데이터베이스가 일관된 상태에 있을 때 트랜잭션이 수행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산 Atomicity 원자성 보장을 위한 명령어
ROLLBACK 거래내역 취소 하나의 트랜잭션 처리가 비정상 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 트랜잭션 일부가 정상 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 수행한 모든 연산을 취소시키는 연산
SAVEPOINT (checkpoint) 저장점 설정 ROLLBACK할 위치 지정  

364. 병행제어

  • 동시성 제어, 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
  • 병행제어의 목적
    • 트랜잭션의 직렬성을 보장하고 동시 수행 트랜잭션 처리량 최대화
    • 데이터베이스 시스템의 공유도 최대화
    • 응답 시간 최소화
    • 데이터의 무결성과 일관성을 보장
  • 병행제어를 하지 않으면 발생하는 문제점
    • 갱신내용 손실 Lost Update
    • 오류 데이터 읽기 (현황파악 오류) Dirty Read
    • 모순성 Inconsistency
    • 연쇄 복귀 Cascading Rollback
    • 회복 불능 Unrecoverability

365. 병행제어의 특성

  • 병행 제어의 수행 목적
    • 트랜잭션의 직렬성을 보장
    • 동시 수행 트랜잭션 처리량 최대화
    • 데이터베이스 시스템의 공유도 최대화
    • 응답 시간 최소화데이터의 무결성과 일관성을 보장하기 위해 수행

  • 트랜잭션 직렬성 충족 사례
    • 직렬 스케쥴 A는 각 트랜잭션 T1, T2의 연산들을 각 소속 트랜잭션별로 모두 연속적으로 실행 (직렬스케쥴)
    • 비직렬 스케쥴(B)는 각 트랜잭션 연산들을 병행으로 실행되지만 결과는 직렬스케쥴(A)와 동일 : 따라서 B는 병행 실행하더라도 결과가 직렬스케쥴과 동일한 직렬성을 보장

 

  • 다중의 트랜잭션이 동시에 수행되는 다중 트랜잭션 환경에서 직렬성을 위배할 경우, 데이터 무결성이 훼손되는 문제점이 발생, 이를 해결하기 위해 동시성 제어 기법 필요

367. 동시성 제어를 수행하지 않은 경우 발생하는 문제점

  • 갱신분실 Lost Update
    • 먼저 실행된 트랜잭션 T1의 결과를 나중에 실행된 트랜잭션 T2이 덮어쓸 때 발생
    • T2 Write(x) 연산으로 T1의 Write(x) 갱신무효화 문제 발생
    • 정상적인 결과값은 x=400이어야 하나, T1의 Write(x) 연산의 손실로 x=200 오류값 발생
  • 현황파악 오류 Dirty Read
    • 트랜잭션 중간수행 결과를 다른 트랜잭션 T2이 참조 시 발생
    • 100, 100원의 잔고가 있는 x, y 계좌에 2% 이자를 가산하여 합을 구함
    • 트랜잭션 T1의 중간 수행 결과 (x=102, y-100)를 트랜잭션 T2가 참조하여 결과값 오류, 원래는 X=102, y=102를 참조해야 함
  • 모순성 Inconsistency
    • 복수 트랜잭션이 Data에 동시 접근 / 갱신으로 결과가 상호불일치, 모순 발생
    • T1은 x,y에 100을 더하는 연산 수행, 최종 기대 값 (x=200, y=200), T2는 x,y에 3을 곱하는 연산 실시, 최종 기대 값 (x=300, y=300) -> 그러나 실제 최종결과 값 (x=600, y=400)으로 T1, T2 기대값과 불일치 (모순) 발생
  • 연쇄복귀 Cascading Rollback
    • 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 관련된 다른 트랜잭션도 롤백을 해야 하나 불가능한 문제
    • T1 롤백수행 시 T2도 연쇄 복귀되어야 하나 트랜잭션을 종료했기 때문에 복귀 불가

368. 병행제어의 로킹단위

  • 로킹 : 데이터베이스 관리에서 하나의 트랜잭션에 사용되는 데이터를 다른 트랜잭션이 접근하지 못하게 하는 것
  • 트랜잭션들을 갱신할 때는 반드시 로킹 Lock → 실행 Execute   해제 Unlock의 규칙을 따라 실행
  • 로킹 단위
    •  
    • 병행 제어에서 한 번에 잠금할 수 있는 단위
    • 데이터베이스, 테이블, 레코드, 필드 등에 사용
    • 로킹 단위에 따른 관리성과 공유성
      • 로킹 단위가 큼 : 로킹 수가 작음, 관리성 용이, 공유성 수준이 낮아짐
      • 로킹 단위가 작음 : 로킹 수가 많음, 관리성 복잡, 공유성 수준이 높아짐
    • 병행 제어 기법
      • 2단계 잠금 기법 2 Phase Locking
        • 확장 단계 : 트랜잭션에서 잠금만 수행
        • 차단 단계 : 데이터 연산 SQL만 수행
        • 수축 단계 : 트랜잭션에서 해제만 수
      • 검증 기법 Validation
      • 타임스탬프 순서 Timestamp Ordering

369. 병행제어의 로킹단위

  • 로킹 : 데이터베이스 관리에서 하나의 트랜잭션에 사용되는 데이터를 다른 트랜잭션이 접근하지 못하게 하는 것
  • 트랜잭션들을 갱신할 때는 반드시 로킹 Lock → 실행 Execute   해제 Unlock의 규칙을 따라 실행
  • 로킹 단위
    •  
    • 병행 제어에서 한 번에 잠금할 수 있는 단위
    • 데이터베이스, 테이블, 레코드, 필드 등에 사용
    • 로킹 단위에 따른 관리성과 공유성
      • 로킹 단위가 큼 : 로킹 수가 작음, 관리성 용이, 공유성 수준이 낮아짐
      • 로킹 단위가 작음 : 로킹 수가 많음, 관리성 복잡, 공유성 수준이 높아짐
    • 병행 제어 기법
      • 2단계 잠금 기법 2 Phase Locking
        • 확장 단계 : 트랜잭션에서 잠금만 수행
        • 차단 단계 : 데이터 연산 SQL만 수행
        • 수축 단계 : 트랜잭션에서 해제만 수
      • 검증 기법 Validation
      • 타임스탬프 순서 Timestamp Ordering

374. 데이터베이스 회복 요법

  • 지연 갱신 Deferred Update
    • 트랜잭션이 성공적으로 종료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 기법
  • 즉시 갱신 Immediate Update
    • 트랜잭션이 데이터를 변경하면 트랜잭션이 부분 완료되기 전이라도 즉시 실제 데이터베이스에 반영하는 기법
  • 그림자 페이지 Shadow Paging
    • 갱신 이전의 데이터베이스를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사
    • 본인 그림자 페이지로 별도 보관해 두고, 실제 페이지를 대상으로 트랜잭션에 대한 변경 작업을 수행하는 기법
  • 검사점 Check Point
    • 체크포인트 Checkpoing 회복 기법
    • 회복 기법
      • Undo 수행 : 검사점 이후 장애발생 이전에 완료된 경우 
      • Redo 수행 : 검사점 이후 장애발생 시점까지 완료하지 못한 경우
  • 미디어 회복 Medaia Recovery
    • 디스크 장애가 발생하면 가장 최근의 덤프 내용을 디스크에 적재하고 로그를 이용하여 가장 최근 덤프 이후 완료된 트랜잭션들에 대해 Redo 작업을 수행하여 회복하는 기법
    • 데이터베이스 로그를 이용한 회복 기법 
      • [Trans - ID, start] 로그 레코드, [Trans - ID, commit] 로그 레코드가 모두 존재하는 트랜잭션들 : 재수행
      • [Trans - ID, start] 로그 레코드는 로그에 존재하지만, [Trans - ID, commit] 로그 레코드가 존재하지 않는 트랜잭션들 : 취소하여 회복 

376. REDO / UNDO

  • 데이터 무결성을 보장하는 트랜잭션의 특징 중 Durability 영속성을 위해 필요한 중요한 요소
  • REDO (Forward Recovery)
    • 데이터베이스 내용 자체가 손상이 될 경우 가장 최근의 복제본을 적재 후 이후 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터베이스 회복 기법의 구성요소
    • Archive 사본 + Log 활용
    • 파일 복사본과 로그를 이용한 전방향 회복 조치
    • 완료된 트랜잭션의 장애에 대한 회복 조치로 트랜잭션의 영속성을 제공
  • UNDO (Backward Recovery)
    • 데이터베이스 내용 자체는 손상되지 않았지만 변경 중이거나 변경된 내용에 대한 신뢰성을 잃어버린 경우 모든 변경 내용을 취소하여 데이터베이스 회복 기법의 구성요소
    • Log + Backward 취소 연산 수행
    • 미완료 트랜잭션의 장애에 대한 회복 조치로 트랜잭션의 원자성 제공

378. 뷰 VIEW

  • 하나 또는 복수의 테이블을 대체하는 가상 테이블로서 조작은 기본 테이블과 거의 동일하지만 삽입, 갱신, 삭제 연산에는 제약이 따름
  • 테이블 A를 대체하기 위해 생성한 뷰 A는 신규 뷰 B를 생성 시 정의가 가능
    • 뷰A 생성 : CREATE VIEW 뷰A AS select * from 테이블A;
    • 뷰B 생성 : CREATE VIEW 뷰B AS select * from 테이블A a, 테이블B b where a.컬럼1 = b.컬럼1;
  • 뷰가 정의된 기본 테이블이 삭제되면 뷰도 자동적으로 삭제
  • 뷰는 물리적으로 구현되는 테이블이 아닌, 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 테이블로부터 유도된 이름을 가지는 가상 테이블
  • 뷰의 특징
    • 저장 장치 내 물리적으로 존재하지 않는 가상 테이블
    • 데이터 보정 등 임시적인 작업을 위한 용도로 사용
    • 기본 테이블과 같은 형태의 구조로 조작이 거의 비슷
    • 삽입, 내용, 갱신에 제약
    • 논리적 독립성 제공
    • 독자적인 인덱스를 가질 수 없음
    • Create를 이용하여 뷰를 생성
    • 필요한 데이터만 골라 뷰를 이용하여 처리

379. 뷰에 대한 쿼리문

  • CREATE VIEW 뷰A AS select * from 테이블A; : 테이블A의 모든 컬럼에 대해 뷰로 생성하는 SQL 명령어
  • DROP VIEW 뷰A; : 뷰를 삭제 시에는 DELETE 명령어가 아닌 DROP 명령어를 사용하여 아래와 같이 삭제
  • SELECT * FROM 뷰A; : 뷰A로 생성된 모든 컬럼에 대해 조회하는 SQL 구문
  • CREATE VIEW 뷰A AS select * from 테이블A a, 테이블B b where a, 컬럼1=b, 컬럼1; : 테이블A, 테이블B를 조인 시 'where a.컬럼1=b.컬럼1' 조건을 만족하는 데이터만 뷰A로 생성하는 SQL 명령어

380. 인덱스

  • 데이터를 빠르게 찾을 수 있는 수단
  • 테이블에 대한 조회 속도를 높여주는 자료 구조로서 자동으로 생성은 되지 않으며 데이터 정의어 DDL의 명령어를 이용하여 생성, 변경, 삭제를 실행
  • 데이터베이스의 성능향상을 위한 DB튜닝 기법으로 가장 많이 사용, 과다한 인덱스 사용은 DML의 성능이 떨어지며 불필요한 인덱스가 많아지면 DB에 차지되는 공간이 커짐
  • PK(Primary Key) 컬럼은 PK를 생성할 때 자동으로 PK 인덱스가 생성됨, 인덱스가 생성되어 있다면 테이블의 일부분을 검색하여 데이터를 빠르게 출력
  • 조건절에 '='로 비교되는 컬럼을 대상으로 인덱스를 생성하면 검색 대상 줄어들어 검색 속도를 높일 수 있으며, 경우의 수가 적은 일련번호, 주민등록번호 등 자주 빈번히 사용하는 컬럼을 대상으로 생성 시 검색 성능이 우수

382. 인덱스

  • 인덱스 생성 구문 : CREATE [UNIQUE] INDEX <index_name> ON <table_name> (<column(s)>);
  • 인덱스 설계서의 테이블명, 인덱스명, 컬럼명을 이용하여 인덱스 구문에 맞게 생성이 가능
  • 인덱스 생성 시 데이터 타입은 고려되지 않음
  • SQL의 유형
구분 설명 명령어
데이터 질의어 DQL 데이터베이스에 저장된 데이터를 검색하는데 사용하는 질의어 SELECT
데이터 조작어 DML 데이터베이스에 저장된 데이터를 수정, 삭제, 추가하는 명령어 INSERT, UPDATE, DELETE
데이터 정의어 DDL 데이터베이스 객체를 생성하고 수정, 삭제하는 명령어 / 데이터베이스의 스키마를 정의, 스키마에 대한 명세는 시스템 카탈로그에 저장 CREATE, ALTER, DROP
데이터 제어어 DCL 데이터베이스의 규정이나 기법을 정의하고 제어하는 언어 / 사용자 권한 부여, 취소, 트랜잭션 제어 GRANT, REVOKE, COMMIT, ROLLBACK

383. 해시함수

  • 해싱 : 데이터의 신속한 검색을 위해 키 Key 값에 해시 함수를 적용하여 주소 값을 빠르게 계산하고 레코드가 저장된 위치를 직접 접근하는 방법
  • 해시함수 관련 용어
    • 버킷 Bucket : 동일한 해시 주소를 갖는 레코드(키와 주소쌍)들이 저장될 메모리 블록을 의미, 버킷의 크기에 따라 같은 해시 주소에 저장될 수 있는 레코드의 수가 결정
    • 슬롯 Slot : 1개의 해시 레코드를 저장할 수 있는 공간을 의미, n개의 슬롯이 모여 하나의 버킷을 이룸
    • 충돌 Collision : 해시 레코드를 삽입할 때 서로 다른 2개 이상의 데이터가 같은 해시 주소를 갖는 현상
    • 동거자 Synonyms : 해시 함수가 같은 주소로 변환시키는 모든 레코드를 동거자라고 하며 충돌이 일어난 레코드들의 집합
    • 오버플로우 Overflow : 계산된 해시 주소의 버킷 내에 저장할 공간이 없는 상태

384. 해싱함수의 종류

  • 계수 분석 : 키 값을 구성하는 숫자의 분포를 파악하여 분포가 비교적 고른 자리부터 필요한 자리만큼 선택하여 레코드 주소를 결정하는 방법
  • 제산법 : 키를 임의의 양의 정수로 나눈 나머지를 그 키의 레코드를 저장하는 주소로 결정하는 방법
  • 중간 제곱법 : 키 값을 제곱한 값의 중간 부분 값을 선택하여 레코드 주소로 결정하는 방법
  • 폴딩법 (중첩법)
    • 키를 여러 부분으로 나누고, 나누어진 각 부분의 값을 모두 더하거나 보수를 취해 더하여 레코드 주소를 결정하는 방법
    • 길이를 동일하게 여러 부분으로 나누고, 더하거나 XOR하여 주소 이동
  • 기수 변환 : 주어진 키 값을 어떤 특정한 진법의 수로 간주하여 다른 진법으로 변환한 후 레코드 주소를 구하는 방법
  • 숫자 분석 : 각 숫자의 분포를 이용해서 균등한 분포의 숫자를 선택해서 사용 방법
  • 무작위 방법 : 난수를 발생, 탐색을 위한 해시의 경우 충돌이 발생하면 다음 난수를 이용하는 방법

385. 오버플로우

  • 해싱에서 충돌이 일어난 자리는 계산된 해시 주소의 버킷 내에 저장할 공간이 없는 상태인 오버플로우가 발생했다는 의미
  • 오버플로우의 해결방법
    • 선형 개방 주소법
      • 충돌이 발생한 다음 위치에서 차례로 검색하여 첫번째 빈공간에 저장
      • 레코드 전체 개수를 미리 예측 가능할 경우 적용 가능한 방법
    • 체인법
      • 오버플로가 발생한 레코드를 별도의 버킷으로 연결하여 저장
      • 링크를 위한 오버헤드 발생, 레코드 개수 예측하기 어려울 경우 적용 
    • 다중 해싱법 (확장 해싱)
      • 키 Key의 처음 비트를 이용하여 디렉토리를 통해 버킷에 접근할 수 있음
      • 버킷에 오버플로가 발생할 경우 새로운 버킷을 생성하고 디렉토리의 포인터를 변경하거나 디렉토리를 확장 

386. 집합 연산자

  • 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식
  • 여러 질의 결과를 연결하여 하나로 결합하는 방식을 사용
  • 집합 연산자의 유형
    • UNION : 여러 SQL문의 결과에 대한 합집합, 중복행 제거
    • UNION ALL : 여러 SQL문의 결과에 대한 합집합, 중복행 제거하지 않음
    • INTERSECTION : 여러 SQL문의 결과에 대한 교집합, 중복행 제거
    • EXCEPT(MINUS) : 앞의 SQL문의 결과와 뒤의 SQL문의 결과 사이의 차집합, 중복행 제거, 일부 제품의 경우 MINUS 사용
  • 집합 연산을 적용하려면 두 테이블이 합집합 호환성을 가져야 하며 참여하는 두 테이블의 컬럼의 개수와 데이터 타입이 일치해야 함
  • 조인 : 두 개 이상의 테이블로부터 연관된 데이터를 결합해서 검색하는 방법
  • 서브 쿼리는 다른 SQL문 안에 포함되어 사용된 또다른 SQL문

387. 조인

  • 두 개 이상의 테이블로부터 연관된 데이터를 결합해서 검색하는 방법
  • 두 테이블 사이에 속하는 컬럼 값들을 비교 연산자로 연결한 형태
  • 조인 조건을 생략한 경우, 조인 조건을 잘못 작성하게 되면 카티션 프로덕트 연산이 수행되어 원하지 않은 결과를 얻게 됨
  • 조인의 종류
    • 논리적 조인
      • 사용자의 SQL문에 표현되는 테이블 결합 방식
      • 논리적 조인의 유형
        • 내부조인 INNER JOIN
          • 동등조인 EQUI JOIN : 특정 컬럼을 비교하여 같은 값을 추출 자연 조인 NATURAL JOIN
          • 자연조인 NATURAL JOIN : 두 테이블의 모든 컬럼을 비교하여 같은 컬럼명을 가진 모든 컬럼값이 같은 경우를 추출
          • 교차조인 CROSS JOIN : 조인 조건의 없는 모든 데이터의 조합을 추출
        • 외부조인 OUTER JOIN
          • 왼쪽 외부 조인 LEFT OUTER JOIN : 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터 추출
          • 오른쪽 외부 조인 RIGHT OUTER JOIN : 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터를 추출
          • 완전 외부 조인 FULL OUTER JOIN : 양쪽의 모든 데이터 추출
        • 셀프조인 SELF JOIN : 한 테이블 내에서 조인 연산을 수행
    • 물리적 조인
      • 데이터베이스 옵티마이저에 의해 내부적으로 발생하는 테이블 결합 방식
      • Nested Loop Join, Merge Join, Hash Join

390. SELECT 절

  • SELECT 절에 그룹함수가 사용되면 그룹함수를 제외한 컬럼은 GROUP BY 절에 기술되어야 함
  • SELECT count(*) FROM users; : USERS 테이블의 (NULL)값이 포함된 모든 행들의 총 개수를 반환하는 SQL 문장
  • SELECT count(no), name FROM users group by name; : USERS 테이블의 NAME 컬럼을 그룹화하고 NO 컬럼 중 널 (NULL)값이 아닌 튜플(행)들의 개수를 반환하는 SQL 문장
  • SELECT count(*) FROM users group by name; : USERS 테이블의 NAME 컬럼을 그룹화하고 널(NULL)값이 포함된 모든 튜플(행)들의 총 개수를 반환하는 SQL 문장
  • SELECT count(no), name FROM users; : USER 테이블의 NAME 컬럼을 그룹화하기 위한 GROUP BY 절이 생략된 잘못된 SQL 문장

392. SQL 명령어

  • HAVING
    • 그룹제한조건 명령어
    • 부서번호 DNO 컬럼값에 따른 그룹을 분류하고 집계함수 결과 값을 계산 후 Having 조건에 충족 여부를 검사 후 평균급여 2,500,000 이상인 부서를 출력
  • WHERE : 특정 조건을 만족하는 튜플(행)을 검색하고자 할 때 사용
  • ORDER BY
    • 정렬 기준이 되는 컬럼과 정렬방법 명시
    • 정렬방법의 종류
      • ASC : 오름차순 정렬을 원할 경우 (기본값, 생략 가능)
      • DESC : 내림차순 정렬을 원할 경우
  • CUBE 그룹 함수
    • 결합 가능한 모든 값에 대해 다차원 집계를 생성하는 함수
    • 내부적으로 대상 컬럼의 순서를 변경하여 또 한번의 쿼리를 수행하고 총계는 양쪽 쿼리에서 모두 수행 후 한쪽에서 제거
  • ROLLUP 그룹 함수
    • 소계 등 중간 짐계값을 산출하기 위해 사용하며 컬럼의 수보다 하나 더 큰 레벨 만큼의 중간 집계값을 생성할 때 사용

396. 절차형 SQL의 기본 구성 요소

  • SQL문의 연속적인 실행이나 조건에 따른 분기, 반복 등의 제어를 활용하여 다양한 기능을 수행하는 데이터베이스 저장 모듈로서 반복 또는 자주 수행하는 DB 작업을 효율적으로 수행할 수 있으며, 잘 정의된 절차형 SQL은 소프트웨어 개발 생산성이 향상
  • 절차형 SQL 종류 (프로시저, 사용자 정의함수, 트리거)와 DBMS 벤더 (Oracle PL/SQL, SQL Sever T-SQL 등)마다 약간의 차이가 있음
  • 절차형 SQL의 기본 구성요소
    • DECLARE : 대상이 되는 프로시저, 사용자 정의함수 등을 정의
    • BEGIN : 프로시저, 사용자 정의함수가 실행되는 시작점
    • END : 프로시저, 사용자 정의함수가 실행되는 종료점

397. Oracle PL/SQL 문법

  • 파라미터를 정의할 때, 괄호로 묶어주며, 파라미터 정의 후 RETURN 문장과 RETURN 값은 데이터 타입을 정의하고 FUNCTION BODY는 BEGIN~END 문장으로 묶어줌

398. 사용자 정의함수의 문법

  • BEGIN, END : FUNCTION BODY에 사용
  • RETURN : 결과값 리턴을 위해 사용
  • GOTO : 절차형 SQL 제어문의 순차제어에서 사용하며, 제어가 건너 뛰는 곳을 지정하는 레이블과 함께 쓰임

400. Oracle PL/SQL 문법

  • 프로시저 실행 시 EXEC 또는 EXECUTE 모두 사용이 가능