Transcript PPT - DKE
조인의 개념 ◦ 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한 번에 조회할 수 있는 기능 ◦ 관계형 데이터베이스 분야의 표준 ◦ 두개 이상의 테이블을 ‘결합’ 한다는 의미 조인의 필요성 ◦ 조인을 사용하지 않는 일반적인 예 학생 주소록을 출력하기 위해 학생들의 학번, 이름, 소속학과 이름 을 검색 학생에 대한 정보 검색하는 단계 필요 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을 검 색하는 단계 필요 -2- 8장. 조인(JOIN) 학번이 3인 학생의 지도교수 명을 얻고자 한다고 하자. 이 경우 단일 테이블 검색 기법 만을 사용할 경우 FROM 절에 검색 대상인 테이블들을 기술 WHERE절에 조인 조건을 서로 다른 테이블에 있는 동일한 칼럼 이름을 연결 할 경우 ◦ 테이블 명과 컬럼 이름 사이에 점(.)을 사용하여 해당 컬 럼이 어느 테이블에 속하는 지는 명시해 주어야 함 테이블 명이 길면, SQL 쓰기 어려움. 테이블명의 별명을 쓰자. ◦ FROM절에서 테이블 이름 다음에 공백을 두고 별명을 정의 하나의 SQL문 안에서 별명과 테이블명을 혼용해 서 사용하면 안 된다는 것 별명을 사용하면 SELF 조인을 할 수 있다. SELF JOIN ◦ 동일한 테이블 두 개를 이용하여 조인하는 연산 ◦ 학생테이블에서 학번이 1인 학생과 동일한 부모를 가진 학생들의 정보를 추출하고자 별명을 사용하여 하나의 테이블을 마치 두 개 있는 것 처럼 CROSS JOIN Theta JOIN equi-JOIN Natual JOIN Outer JOIN 카티산 곱의 다른 표현 ◦ 두 개 이상의 테이블에 대한 모든 가능한 튜플 쌍을 만드 는 연산 ◦ 단순히 FROM 절에 두 개 이상의 테이블을 기록하고 WH ERE 절에 조인 조건을 기록하지 않으면 그 결과를 얻을 수 있음. ◦ Oracle의 9i 이후 부터 FROM 절에 cross join 키워드를 이용하여 카티션 곱을 수행시킬 수도 있음 조인 조건 ◦ =, !=, <, > 등의 연산자 사용 Equi-JOIN ◦ 조인 대상 테이블에서 공통 칼럼을 ‘=‘(equal) 비교를 통 해 같은 값을 가지는 행을 연결하여 결과를 생성하는 조 인 방법 ◦ = 연산자가 조인에서 가장 많이 쓰임. 일반적으로 조인 이라 하면 자연조인을 말함. 자연 조인이란 equi-join의 특이한 형태 ◦ 조인 조건을 명시하지 안아도 자동으로 조인 대상인 두 테이블에서 공통인 컬럼들을 찾아서 equi-join을 수행하 도록 한다. ◦ 엄밀히 equi-join 과 natural join의 결과는 다르다. 학생 테이블과 학생정보 테이블에 공통으로 존재 하는 snum 컬럼을 이용하여 동등 조인을 수행 ◦ equi-join에서는 snum 컬럼이 두 번 나옴 ◦ 자연 조인에서는 snum 컬럼이 한번만 나옴. 자연 조인에서는 자동으로 중복되는 컬럼을 한번만 나오도록 만듬 학생 테이블과 학생 정보 테이블을 자연조인을 수 행해 보자. 앞의 자연 조인의 결과의 snum은 DBMS가 만든 컬럼임. ◦ 따라서, 자연 조인에서 두 테이블에 공통인 컬럼에 대하 여 테이블 별명을 사용하여 SELECT절에서 사용하면 오류 JOIN~ USING~ ◦ Equi Join의 조건 지정 없는 표현식 ◦ USING절에 조인 대상 칼럼을 지정 ◦ 칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의 되어 있어야함 ◦ JOIN~USING~절을 이용하여 교수와 학부모 테이블에서 동일한 급여(salary)를 받는 교수이름 및 학부모 이름을 출력해 보자 JOIN의 결과에는 WHERE절에 기술한 조인 조건을 만족 하는 튜플들의 정보만이 나타나게 됨. 즉, JOIN에 참여 못하는 튜플들은 질의결과에 나타나지 않음. OUTER 조인 ◦ 조인 조건에 참여하지 못하는 튜플들도 조인 결과에 나 타나게 하도록 하는 조인 방법 예비군 테이블 튜플 추가 학생테이블의 모든 정보가 나와 있지 않음. 모든 학생 이름과 와 예비군일 경우 그 학생의 이름을 같이 보고 싶 을 경우 (+)기호가 있는 쪽에 조인조건을 만족하지 않는 튜플이 나타남 ◦ 즉, NULL 값이 출력 될 부분 (+) 기호 LEFT OUT JOIN 모든 예비군 테이블을 이름을 출력하고 학생 테이 블에 동일한 학번의 학생이 있다면 해당 학생의 이 름을 출력하도록 하자. 조인에 참여하는 모든 테이블의 튜플 정보를 모두 보고 싶다 (+)는 사용할 수 없다. SELECT~구문 안에 또 다른 SELECT~ 문이 존재하 는 것을 중첩 질의문은 JOIN과 동일한 효과를 나타냄 테이블에서 민준기 교수와 동일한 직급의 교수명 과 직급을 검색하고자 한다 중첩질의문 일반조인 서브질의문의 결과수에 따라 분류 ◦ 단일행 중첩질의문 서브질의문의 결과 튜플 수가 1 ◦ 다중행 중첩질의문 서브질의문의 결과 튜플 수가 여러 개 일반적인 비교 연산자들인 =, <. >, != 등은 단일 행 연산자 임. ◦ 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불 가능 일반적인 비교 연산자들인 =, <. >, != 등은 단일 행 연산자 임. ◦ 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불 가능 IN, SOME, ANY, ALL, EXISTS IN 연산자 ◦ 단일행 연산자인 =과 유사한 성격을 ◦ 메인 질의 문의 검색 대상이 서브 질의 문의 결과 중 하나 라도 일치하면 그 조건인 참이 되는 연산자 ANY와 SOME의 동일한 연산자 ◦ 메인 질의문의 비교 조건에서 서브 질의문의 결과와 비교 하여 하나라고 조건을 만족하면 참이 되는 연산자 ◦ 단일행 연산자와 같이 사용 ◦ = ANY과 같은 경우 IN과 동일 ◦ 테이블에서 교수번호가 80 이상인 교수들 보다 봉급을 더 받는 교수들의 이름과 봉급을 검색해 보자. 인 질의문의 검색 대상이 서브 질의문의 결과와 모 두 만족할 경우에만 참이 되는 연산 서브 질의문의 결과가 하나라도 발생되면 참이 되 는 연산자이다 ◦ 봉급이 500 보다 큰 교수가 있다면 모든 교수의 이름과 봉급을 출력하는 질의문 최신 SQL 기능 질의 결과의 재사용 ◦ VIEW : 영구적 임시 데이블 생성 ◦ WITH Clause : 한시적 임시 테이블 생성 구문 WITH 테이블 이름 AS ( SELECT … FROM … WHERE ) WITH 절로 정의된 테이블은 일반 테이블과 동일한 기능을 제공한다. 질의문이 간결해지고 이해하기 쉬움. - 30 - 9장. 서브쿼리 김상진 교수보다 입사일이 늦거나 급여가 큰 교수 들을 이름을 검색하는 질의문 일반 조인 형태 중첩질의문 형태 중첩 질의문과 위의 조인 연산을 이용한 질의문으로 보게 되면 김상진 교수의 정보를 두번 찾는다는 것을 알 수 있다. WITH절을 이용하여 김상진 교수의 입사일과 봉급을 을 임 시 테이블로 생성하면 보다 간편하고 이해하기 쉬운 질의문 을 만들 수 있다