Skip to content

SQL 데이터

  • SELECT 문 내부에서 독립적으로 실행 가능한 또 다른 SELECT 문이 내포되어 있는 질의 일반적으로 내부 질의의 처리결과를 외부 질의에서 재사용하여 처리하는 과정

  • 중첩 질의의 종류

    • FROM 절에서의 중첩 질의 활용 : FROM 절에서의 결과 집합을 SELECT 문에서 재검색
    • WHERE 절에서의 중첩 질의 활용 WHERE 절에서의 결과 집합을 활용하여 외부 질의에서 레코드의 출력 여부를 결정
      IN, NOT IN, EXISTS, NOT EXISTS 사용
-- FROM 절에서의 중첩 질의
SELECT 컬럼1, 컬럼2, ..., 컬럼n
FROM (SELECT 컬럼1, 컬럼2, ..., 컬럼m
FROM 테이블
WHERE 조건)
WHERE 조건
-- WHERE 절에서의 중첩 질의
SELECT 컬럼1, 컬럼2, ..., 컬럼n
FROM 테이블1
WHERE 컬럼i 연산자 (SELECT 컬럼j
FROM 테이블2
WHERE 조건)
  • 테이블 간의 관련성을 이용하여 두 개 이상의 테이블에서 데이터를 검색하는 질의 기법
  • ER 모델링 및 정규화 기법으로 여러 테이블로 분리된 정보를 일시적으로 하나의 레코드로 통합
  • 조인 질의의 종류 크로스/내부/외부조인
  • 조인 조건 없이 두 테이블 간의 조합 가능한 모든 레코드를 결합하는 기법
  • 관계대수의 카티션 프로덕트 연산에 해당
SELECT 컬럼1, 컬럼2, ..., 컬럼m
FROM 테이블1 CROSS JOIN 테이블2
[WHERE 조건]
  • 두 개 이상의 테이블에서 조인 조건을 만족하는 레코드만 결합하여 출력 결과에 포함시키는 연산
  • 조인 조건은 WHERE 절이 아닌 ON 절에 기록
  • ANSI SQL 표준과 사실상의 표준인 Oracle사가 제안한 조인 형식이 사용
SELECT 컬럼1, 컬럼2, ..., 컬럼m
FROM 테이블1 INNER JOIN 테이블2
ON 조인조건1
[WHERE 조건]
SELECT 과목.과목코드, COUNT(수강.학생번호)
FROM 교수 INNER JOIN 과목
ON 교수.교수번호 = 과목.교수번호
INNER JOIN 수강
ON 과목.과목코드 = 수강.과목코드
WHERE 교수.소속학과 = '컴퓨터과학과'
GROUP BY 과목.과목코드
  • 두개 이상의 테이블을 하나의 테이블로 결합하는 내부 조인과 매우 유사한 기능
  • 두 테이블에 동일한 이름의 컬럼에 대해 값이 같은 레코드를 결합하는 내부 조인
SELECT 컬럼1, 컬럼2, ..., 컬럼m
FROM 테이블1 NATURAL JOIN 테이블2
[WHERE 조건]
  • 내부 조인(inner join)은 조인조건에 일치하는 레코드만 결합하여 결과를 생성 조인 결과에 정보의 손실이 발생
  • 외부 조인은 조인조건에 맞지 않는 레코드도 질의의 결과에 포함시키는 질의
  • 외부 조인의 종류
    • 왼쪽 외부 조인(left outer join)
    • 오른쪽 외부 조인(right outer join)
    • 완전 외부 조인(full outer join)
SELECT 별칭1.컬럼1, 별칭1.컬럼2, ..., 별칭1.컬럼m,
별칭2.컬럼1, 별칭2.컬럼2, ..., 별칭2.컬럼n
FROM 테이블1 AS 별칭1
LEFT | RIGHT | FULL [OUTER] JOIN
테이블2 AS 별칭2
ON 별칭1.컬럼i = 별칭2.컬럼j
[WHERE 절]
  • 한 테이블이 자기 자신과 조인되는 질의
  • 동일한 테이블에 대한 조인이므로 반드시 테이블 이름에 대한 별칭이 의무적으로 사용
SELECT 별칭1.컬럼1, 별칭1.컬럼2, ..., 별칭1.컬럼m,
별칭2.컬럼1, 별칭2.컬럼2, ..., 별칭2.컬럼n
FROM 테이블1 AS 별칭1
INNER | OUTER JOIN 테이블2 AS 별칭2
ON 조인조건
[WHERE 절]

데이터를 저장하고 있는 하나 이상의 테이블을 유도하여 생성하는 가상의 테이블(virtual table)

  • 데이터 독립성: 원본 테이블의 구조가 바뀌어도 뷰의 정의만 변경하여 응용 프로그램에 영향이 없음
  • 데이터 보안: 사용자에게 원본 테이블의 일부 컬럼에 대한 접근을 허용하여 보안 효과를 향상
  • 다양한 구조의 테이블 사용: 사용자의 요구사항에 맞는 테이블의 구조를 제공
  • 작업의 단순화: 복합한 질의문을 뷰로 단순화
  • 데이터 무결성: WITH CHECK OPTION을 이용하여 뷰 생성에 위배되는 수정작업을 거부

생성되는 뷰의 구조는 SELECT 문의 결과로 결정

CREATE VIEW 뷰이름 AS
( SELECT 컬럼1, 컬럼2, ..., 컬럼n
FROM 테이블
[WHERE 조건] )
[WITH CHECK OPTION]

뷰의 수정은 생성과 동일하게 새로운 SELECT 문의 결과로 변경

ALTER VIEW 뷰이름(컬럼1, 컬럼2, ..., 컬럼n) AS
( SELECT 컬럼1, 컬럼2, ..., 컬럼n
FROM 테이블
[WHERE 조건] )

뷰의 삭제는 일반적인 데이터베이스 객체 삭제와 동일

DROP VIEW 뷰이름