'SQL 첫걸음' 공부 -Day 11

윤현묵·2021년 12월 23일
0

MySQL

목록 보기
12/12
post-thumbnail

[학습 DAY - 11]

30강 뷰 작성과 삭제


  • -. 테이블과 같은 부류의 데이터베이스 객체 중 하나
    -. 데이터베이스 객체로 등록할 수 없는 SELECT 명령을 객체로서 이름을 붙여 관리할 수 있도록 하는 것
    -. SELECT 명령을 기록하는 데이터베이스 객체
    -. 뷰를 작성하는 것으로 복잡한 SELECT 명령을 간략하게 표현 가능
    -. 뷰는 테이블처럼 취급할 수 있지만 실체가 존재하지 않는다는 의미로 가상테이블이라 불리기도 함

    SELECT * FROM (SELECT * FROM sample54) sq;의 서브쿼리 부분을 뷰 객체로 만들면 SELECT * FROM sample_view_67;로 간략화 됨

  • 뷰 작성과 삭제
    -. 데이터베이스 객체이기 때문에 DDL로 작성하거나 삭제
    -. 작성: CREATE VIEW 뷰명(열명1, 열명2, ...) AS SELECT 명령 삭제: DROP VIEW 뷰명

  • 뷰의 특징 및 약점
    -. 데이터베이스 객체로서 저장장치에 저장, 하지만 테이블과 달리 대량의 저장공간 필요 X
    -. 데이터베이스에 저장되는 것은 SELECT 명령뿐이기 때문, 다만 저장공간을 소비하지 않는 대신 CPU 자원을 사용
    -. 뷰의 근원이 되는 테이블에 보관하는 데이터양이 많은 경우, 집계처리를 할 때도 뷰가 사용된다면 처리속도가 떨어짐. + 뷰를 중펍해서 사용하는 경우에도 처리 속도가 떨어질 수 있음

※ 머터리얼라이즈드 뷰

  • 일반적으로 뷰는 데이터를 일시적으로 저장했다가 쿼리가 실행 종료될 때 함께 삭제됨, 그에 반해 머터리얼라이즈드 뷰는 데이터를 일시적으로 저장해 사용하는 것이 아니라 테이블처럼 저장장치에 저장해두고 사용
  • 따라서 일반적인 뷰처럼 매번 SELECT 명령을 실행할 필요가 없음. 다만 뷰에 지정된 테이블의 데이터가 변경된 경우에는 SELECT 명령을 재실행하여 데이터를 다시 저장
  • 이처럼 변경 유무를 확인하여 재실행하는 것은 RDBMS가 자동으로 실행.
  • 뷰에 지정된 테이블의 데이터가 자주 변경되지 않는 경우라면 이를 사용하여 뷰의 약점 보완 가능
  • MySQL에서는 사용 불가(Oracle과 DB2에서만 사용)

※ 함수 테이블

  • 뷰를 구성하는 SELECT 명령은 단독으로도 실행할 수 있어야 함
  • 부모 쿼리와 어떤 식으로든 연관된 서브쿼리의 경우 뷰의 SELECT 명령으로 사용 불가
  • 함수 테이블은 테이블을 결과값으로 반환해주는 사용자정의 함수
  • 함수에는 인수를 지정할 수 있기 때문에 인수의 값에 따라 WHERE 조건을 붙여 결과값을 바꿀 수 있음. 그에 따라 상관 서브쿼리처럼 동작 가능

31강 집합 연산

  • UNION으로 합집합 구하기
    -. 합집합: 집합을 서로 더한 것(겹치는 것은 중복되지 않음)
    -. UNION: A U B = A UNION B (합집합을 의미)
    -. SELECT 명령의 열의 내용이 서로 일치해야 함, 열 구성이 다른 테이블은 묶을 수 없음
    -. 명령 나열 순서가 합집합 결과에 영향을 주진 않지만 결과값의 나열 순서는 달라질 수 있음
    -. ORDER BY를 지정할 경우 마지막 SELECT 명령에만 가능하며 ORDER BY 구에 지정하는 열은 별명을 붙여 이름을 일치시킨다
    -. 두 집합의 중복된 값을 제거하지 않고 합치고 싶은 경우 UNION ALL을 사용

    • SELECT FROM sample71_a UNION SELECT FROM sample71_b;
  • 교집합과 차집합
    -. MySQL에서는 지원되지 않음
    -. 교집합(두 개의 집합이 겹치는 부분) - INTERSECT,
    -. 차집합(집합에서 다른 쪽의 집합을 제거하고 남은 부분) - EXCEPT(Oracle의 경우 MINUS)를 사용

profile
진정성 있는 개발자를 꿈꾼다

0개의 댓글