[교재] 데이터베이스 첫걸음 6장 - SQL문 기본 3. VIEW, 서브쿼리, JOIN

hwwwa·2023년 1월 17일
1
post-custom-banner

6장. SQL문 기본 - SELECT 문의 이해 (3)

VIEW

  • 뷰는 SQL 시점에서 테이블과 동일하지만, 테이블처럼 데이터를 갖는 것이 아닌 테이블에 대한 SELECT를 가짐
    • 실행 시점에 질의를 재적성하여 수행
  • 데이터 저장 없이(기억장치의 용량 사용 없이) 실현 가능
  • 독립성: 기존 테이블의 구조가 변경되면 뷰도 함께 변경되므로 따로 업데이트 필요 없음
    • 갱신 시에 뷰 정의에 따른 갱신으로 한정 가능
  • 편리성: 복잡한 SELECT 문을 매번 기술할 필요 없음
  • 보안성: 원하는 정보만 드러낼 수 있음. 숨길 수 있음
  • 뷰를 제거해도 참조 테이블은 영향을 받지 않음
  • 실제 데이터를 저장하는 뷰를 생성하는 기능을 지원하는 DBMS도 있음

CREATE VIEW

CREATE VIEW 뷰 명 (컬럼명1[, 컬럼명2, ...]) AS SELECT ~ ;

VIEW 입력, 갱신 제한

  • 어떤 행이 대응하는지 모르거나 어떤 값을 넣으면 좋을지 모르는 경우에는 갱신 불가
    • GROUP BY를 통한 집약 수치, DISTINCT로 얻은 값, 2개 이상의 테이블을 조합한 뷰 등
    • 뷰에서 원래 테이블의 일부 컬럼만 선택되었고, 이외의 컬럼에 DEFAULT 값이 없고 NOT NULL인 경우

서브쿼리

  • 서브쿼리를 이용하여 SELECT문의 결과를 데이터처럼 다루거나 수치처럼 취급하여 조건문에 이용 가능
SELECT    -- Scalar 서브쿼리 사용 가능
FROM      -- Inline View. 메인 쿼리의 컬럼 사용 가능
WHERE     -- 중첩 서브쿼리. 거의 모든 서브쿼리 사용 가능
GROUP BY  -- 서브쿼리 사용 불가
HAVING    -- 중첩 서브쿼리. 거의 모든 서브쿼리 사용 가능
ORDER BY  -- Scalar 서브쿼리 사용 가능
  • Scalar 서브쿼리: 한 행, 한 컬럼만 반환하는 서브쿼리
  • Inline View: SQL 문이 실행될 때만 임시적으로 생성되는 동적 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않음
  • 다중 컬럼 서브 쿼리: 결과로 여러 컬럼이 반환되어 비교하고자하는 메인쿼리에서 컬럼 수와 위치가 동일해야 함. SQL Server는 미지원
  • 연관 서브쿼리: 서브쿼리가 메인 쿼리 컬럼을 포함
  • 비연관 서브쿼리: 주로 메인쿼리에 값을 제공하기 위한 목적으로 사용
  • 메인 쿼리 데이터마다 하나하나 서브쿼리 전체를 수행
  • 단일행 서브쿼리 비교 연산자: =, <, <=, >, >=, <>
  • 다중행 서브쿼리 비교 연산자: IN, ALL, ANY, SOME, EXIST
    • exist: 모든 문자 사용 가능. 존재한다면 True. 존재하지 않으면(0 rows) False

JOIN

  • JOIN을 사용하여 2개 이상의 테이블을 결합하여 쿼리 적용 가능
  • ON 을 통해 두 테이블의 행을 결합시키기 위해 결합 조건 지정 필요

INNER JOIN

  • ON 으로 지정한 결합 조건에 일치하는 행만을 두 테이블로부터 가져와 결합
SELECT 선택할 열 리스트 FROM 테이블1 INNER JOIN 테이블2 ON 결합조건;

OUTER JOIN

  • 한 쪽 테이블을 기준으로 전체 행을 표시하고 다른 테이블에서는 조건에 일치하는 행만을 가져와 결합
SELECT 선택할 열 리스트 FROM 테이블1 LEFT OUTER JOIN 테이블2 ON 결합조건;
SELECT 선택할 열 리스트 FROM 테이블1 RIGHT OUTER JOIN 테이블2 ON 결합조건;
  • 특별한 이유가 없는 한 LEFT OUTER JOIN 사용
    • 쿼리의 자동 생성으로 첫 번째 테이블, 두 번째 테이블의 순서를 변경할 수 없는 경우 등
post-custom-banner

0개의 댓글