클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

[데이터베이스 구축] SQL 활용 2 - 고급 SQL 작성 본문

자격증 공부/정보처리기사 필기

[데이터베이스 구축] SQL 활용 2 - 고급 SQL 작성

huenuri 2024. 7. 31. 13:30

이제 2단원의 두번째 학습을 시작해본다. 이론 학습이 정말 많아서 시간이 꽤 많이 걸릴 것 같다. 그래도 차근차근 공부하면 분명히 예정된 시간 안에 잘 마칠 수 있을 것이다.
이번에는 고급 SQL 작성이다. 필기 공부를 열심해 두어야 실기에서도 좋은 성적을 받을 수 있을 것이다.

실기는 정말 어렵다고 하는데 과연 한번에 합격할 수 있을지 걱정이 되기도 한다. 우선은 필기 시험에만 집중해보자!

 

학습 내용

  1. 고급 SQL 작성 학습하기
  2. 다시 한번 읽고 학습하기
  3. 기출문제 풀기
  4. 이론 및 문제 풀이 강의
  5. 자주 틀리는 문제 유형 정리

 

학습 시간

새벽 5시 ~ 7시 15분 <2시간 15분 소요>


 

 

1. 뷰(View)

 

개념

  • 논리테이블로서 사용자의 관점에서 본 테이블과 동일
  • '테이블 A'와 '테이블 B'는 물리 테이블을 의미하고 '뷰 C'는 두 개의 테이블을 이용하여 생성한 뷰를 의미
  • 뷰는 테이블 A와 같은 하나의 물리 테이블로부터 생성 가능. 다수의 테이블 또는 다른 뷰를 이용해 만들 수 있음

  • 뷰와 같은 결과를 만들기 위해 조인 기능을 활용할 수 있으나, 뷰가 만들어져 있다면 사용자는 조인 없이 하나의 테이블을 대상으로 하는 단순한 질의어를 사용할 수 있음

 

 

장단점

 

 

 

뷰 명령어

1. 뷰 생성

  • CREATE VIEW에서 SELECT 문에는 UNION이나 ORDER BY 절을 사용할 수 없음
  • 컬럼명을 기술하지 않으면 SELECT 문의 컬럼명이 자동으로 사용됨

 

 

2. 뷰 삭제/ 변경

  • 정의 자체를 변경하는 것은 불가능
  • 이름이나 쿼리문을 변경하는 수단은 제공되지 않음
  • 삭제와 재생성을 통해 뷰에 대한 정의 변경이 가능

1) DROP VIEW 문법

2) DROP VIEW 명령어 옵션


 

 

 

2. 인덱스

 

개념

  • 데이터를 빠르게 찾을 수 있는 수단. 테이블에 대한 조회 속도를 높여주는 자료 구조
  • 테이블의 특정 레코드 위치를 알려주는 용도로 사용

  • 기본 키(PK; Primary Key) 컬럼은 자동으로 인덱스가 생성됨
  • 연월일이나 이름을 기준으로 하는 인덱스른 자동으로 생성되지 않음

 

 

 

조작

 

1. 인덱스 생성

  • DBMS는 인덱스를 사용하여 빠른 검색을 수행
  • DB 사용자는 DBMS가 인덱스를 사용할 수 있게 준비해 주어야 함

UNIQUE에서 [ ]는 넣어도 되고 안 넣어도 된다는 뜻. 실제 문법에 [ ]를 쓰면 안됨

 

 

 

2. 인덱스 삭제

  • 인덱스명은 생성된 인덱스명을 의미
  • 인덱스를 테이블의 종속 구조로 간주, 삭제시 테이블 변경 명령어가 사용됨
  • ALTER TABLE 명령 뒤에 DROP INDEX 명령이 추가되는 형태로 사용됨

 

 

3. 인덱스 변경

  • 일부 제품은 인덱스에 대한 변경 SQL문이 없음
  • 기존 인덱스를 삭제하고 신규 인덱스를 생성하는 방식으로 사용이 권고

 

 

 

 

3. 집합 연산자

개념

  • 두 개 이상의 테이블에서 여러 개의 질의의 결과를 연결하여 하나로 결합하는 연산자
  • 여러 질의 결과를 연결하여 하나로 결합하는 방식을 사용(2개 이상의 질의 결과를 하나의 결과로 만들어줌)

 

유형

 

1. UNION

  • 합집합을 의미
  • 두개의 데이터 집합의 결과에 대해 중복을 제거하고 모두 포함한 경과를 반환

 

 

2. UNION ALL

  • UNION과 유사하나 중복된 항목을 포함하여 결과를 반환

 

 

3. INTERSECT

  • 합집합이 아닌 교집합을 추출

 

 

4. MINUS

  • 차집합을 의미
  • 데이터 집합을 기준으로 다른 데이터 집합과 공통 항목을 제외한 결과만 추출


 

 

 

4. 조인

개념

  • 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법
  • 두 릴레이션으로부터 관련된 튜플들을 결합하여 하나의 튜플로 만드는 가장 대표적인 데이터 연결 방법

유형

  • 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능
  • 논리적 조인과 물리적 조인으로 구분

 

 

논리적 조인

  • 내부 조인의 세부 요인은 조인의 조건에 따라 세분화
  • 내부 조인에서 조인의 대상이 되는 컬럼을 명시적으로 선언하기 위해 USING 조건절이나 ON 조건절이 사용됨

 

 

논리적 조인 문법

1. 내부 조인

1) 내부 조인

 

 

 

 

 

 

 

 

 

 

 

물리적 조인

1. 중첩 반복 조인(Nested-Loop Join)

  • 2개 이상의 테이블에서 하나의 집합을 기준으로 순자적으로 상대방 Row를결합하여 원하는 결과를 조합하는 조인 방식
  • 먼저 선행 테이블의 처리 범위를 하나씩 액세스하면서 추출된 값으로 연결할 테이블을 조인

 

 

 

 

2. 정렬 합병 조인(Sort-Merge Join)

  • 조인의 대상 범위가 넓을 경우 발생하는 임의 접근(Random Access)을 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방식
  • 양쪽 테이블의 정렬한 결과를 차례로 검색하면서 연결고리 형태로 합병하는 방식

 

 

 

 

3. 해시 조인(Hash Join)

  • 해싱함수를 활용하여 테이블 간 조인을 수행하는 방식
  • 해싱 함수는 작접적인 연결을 담당하는 것이 아니라 연결될 대상을 특정 지역(Partition)에 모아두는 역할만을 담당


 

 

 

5. 서브쿼리(Sub-Query) 🎀🎀🎀

 

개념

  • SQL 문 안에 포함된 또 다른 SQL문
  • 서브쿼리 용도는 알려지지 않은 기준을 위한 검색을 위해 사용

 

 

유형

  • 동작하는 방식이나 반환되는 데이터의 형태에 따라 분류

 

 

 

 

 


 

 

 

 

자주 틀리는 기출문제 유형

 

1. 뷰에 대한 설명으로 맞는 것?

뷰는 물리적이 아닌 논리적으로 구성되어 있고, 논리적 독립성을 제공한다.

 

물리적인줄 알고 계속 이렇게 풀어서 4문제나 틀렸다. 이 부분을 꼭 숙지하자!

 

 

 

2. SQL 문의 결과는?

 

테이블의 결과를 맞추는 문제는 4문제 출제되었는데 그중 한 문제를 틀렸다. 하나는 다 골라놓고 문제를 잘못 써서 그냥 맞았다고 표시했다. 시험볼 때 이러한 실수를 하지 않도록 주의하자!

이런 문제는 벡엔드 개발자로서 절대로 틀려서는 안되는 유형이다. DB를 공부하는 사람으로서 자존심이 있지 다음에는 틀리지 않도록 밑줄만 그을 것이 아니라 글로 써보자. 대부분 아는 건데 틀리는 경우가 많았다.


 

 

 

학습을 마치고

분량이 정말 많았지만 그래도 2시간 반 안에 마칠 수 있어서 기뻤다. 이번주에 DB 공부를 한 게 정처기 3과목 학습에 많은 도움이 되고 있다. 새벽 시간에 정처기 공부를 마치고 오전과 오후에는 DB 공부를 할 생각이다.

2과목부터는 기출문제를 올리지 않았는데 그렇기 하니 어떤 문제를 자주 틀리는지 유형을 분석할 수가 없었다. 분명 내가 자주 틀리는 유형이 있었고 그 부분은 아직 이해를 못했다는 의미이다.
다음에는 논리적 데이터베이스에 대한 새로운 단원 학습에 들어가볼 것이다.