정보처리기사 필기 정리 3. 데이터베이스 구축 - SQL 활용_고급 SQL 작성 with.메타코드(메타코드M)

서용준·2024년 12월 14일

뷰(View)

  • 실제 데이터를 저장하지 않고 쿼리 결과를 동적으로 생성하는 가상의 논리적 테이블

뷰의 특징

  • 데이터 접근제어를 통해 데이터의 논리적 독립성과 보안을 제공
  • 사용자의 요구에 맞게 데이터를 제공할 수 있어 사용자 데이터 관리 용이
  • 뷰 위에 또 다른 뷰를 정의할 수 있음 (복잡한 쿼리 대신에 쿼리 사용한 뷰를 만들어두면 뷰를 조회하는 것 만으로 사용자는 복잡한 쿼리 없이 복잡한 데이터를 쉽게 볼 수 있다.
  • 삽입(Insert), 갱신(Update), 삭제(Delete) 연산 및 인덱스 생성에 제약사항이 따름
  • 기본 테이블처럼 Create 문을 사용해 정의하고 Drop 문을 통해 제거 (뷰도 테이블 같은 데이터베이스 “객체” 라서)

인덱스(index)

  • 문헌의 색인, 사전과 같이 데이터를 쉽고 빠르게 찾을 수 있도록 만든 데이터 구조

인덱스의 특징

  • 데이터 검색 시 처리속도 향상에 도움
  • 테이블 삭제 시 인덱스도 같이 삭제
  • 기본 테이블처럼 Create 문을 사용해 정의하고 Drop문을 통해 제거

집합 연산

  • 두 개 이상의 쿼리 결과를 결합하거나 비교하는 연산
  • 집합 연산 수행 시에는 각 쿼리 결과의 열 개수와, 데이터 유형이 일치해야 함
  1. Union
    • 두 쿼리의 결과를 합치고, 중복을 제거한 후 반환
  2. Union All
    • 두 쿼리의 결과를 합치고, 중복을 유지하여 반환. 데이터 중복여부 판별가능
  3. Intersect
    • 두 쿼리의 교집합을 반환
  4. Minus
    • 두 쿼리의 차집합을 반환

이러한 집합연산들은 복잡한 데이터 분석이나 보고서 작성시 유용하게 사용가능

예시) 집합 연산의 결과

조인

  • 두 개 이상의 테이블을 연결하여 데이터를 결합하는 방법
  • 여러 테이블에 분리된 데이터를 함께 조회할 때 사용
  • 관계형 데이터베이스의 핵심 기능으로, 논리적 조인과 물리적 조인으로 나뉨


내부 조인(Inter Join)

  • 두 테이블 간에 공통된 값이 있는 행만 결합하여 반환
  • 일치하는 데이터만 조회되므로 양쪽 테이블 모두에 있는 값만 결과에 포함됨

외부 조인(Outer Join)

  • Left Outer Join : 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에서 일치하는 데이터를 함께 반환
  • Right Outer Join : 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에서 일치하는 데이터를 함께 반환
  • Full Outer Join : 두 테이블의 모든 데이터를 반환
  • 매칭되지 않는 행은 NULL이 반환됨

교차 조인(Cross Join)

  • 별도의 조인 조건 없이, 두 테이블의 모든 행을 다른 테이블의 모든 행과 결합

셀프 조인(Self Join)

  • 한 테이블을 스스로와 조인하는 방식으로, 같은 테이블 내에서 데이터를 조합할 때 사용

서브 쿼리

  • 쿼리 안에 또 다른 쿼리가 포함된 구조 (주로 복잡한 쿼리에서 사용됨)
  • 복잡한 쿼리에서 일부 데이터를 먼저 조회한 후, 그 데이터를 바탕으로 메인 쿼리를 실행할 때 사용

Where 절에 조건으로 활용되는 서브쿼리

SELECT column1, column2
FROM table_name
WHERE column_name IN | ALL | ANY | EXISTS (subquery);
  • IN : 서브쿼리 결과 목록에 특정 값이 있는지 확인
    SELECT name
    FROM customers
    WHERE customer_id IN (SELECT customer_id FROM orders WHERE order_date >2024-01-01);
  • ALL : 서브쿼리의 모든 결과에 대해 주어진 조건을 만족하는지 확인
    SELECT name
    FROM Products
    WHERE price > ALL (SELECT Price FROM Products WHERE category = ‘Electronics’);
  • ANY : 서브쿼리 결과 중 하나라도 조건을 만족하는지 확인
    SELECT name
    FROM Products
    WHERE price < ANY (SELECT Price FROM Products WHERE category = ‘Electronics’);
  • EXISTS : 서브쿼리 결과가 존재하는지 여부만 확인
    SELECT name
    FROM customers
    WHERE EXISTS IN (SELECT customer_id FROM orders WHERE orders.customer_id = customer_id);

From 절에 테이블로 활용되는 서브쿼리

  • 서브쿼리의 결과를 임시 테이블처럼 사용
    그러나 이 결과에는 문제가 있다. 인사 변경이력까지 포함하기 때문에 직원테이블의 행수를 세는 것 뿐, 실제 직원수를 세는 것이 아님.
    그래서 위와 같이 서브쿼리 활용해서 해결가능
    https://metacodes.co.kr/edu/read2.nx?M2_IDX=31635&EP_IDX=15203&EM_IDX=15027
profile
공부하는중입니다.

0개의 댓글