SQL 데이터
중첩질의의 이해
Section titled “중첩질의의 이해”중첩질의의 개념
Section titled “중첩질의의 개념”-
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 조건)조인 질의의 이해
Section titled “조인 질의의 이해”- 테이블 간의 관련성을 이용하여 두 개 이상의 테이블에서 데이터를 검색하는 질의 기법
- ER 모델링 및 정규화 기법으로 여러 테이블로 분리된 정보를 일시적으로 하나의 레코드로 통합
- 조인 질의의 종류 크로스/내부/외부조인
크로스 조인
Section titled “크로스 조인”- 조인 조건 없이 두 테이블 간의 조합 가능한 모든 레코드를 결합하는 기법
- 관계대수의 카티션 프로덕트 연산에 해당
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 뷰이름