1 / 33

9. 조인

9. 조인. 조인 (Join). 조인의 개념 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능 관계형 데이터베이스 분야의 표준 두개 이상의 테이블을 ‘ 결합 ’ 한다는 의미 조인의 필요성 조인을 사용하지 않는 일반적인 예 학생 주소록을 출력하기 위해 학생들의 학번 , 이름 , 소속학과 이름을 검색 학생에 대한 정보 검색하는 단계 필요 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을 검색하는 단계 필요. 조인의 필요성.

Download Presentation

9. 조인

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 9. 조인

  2. 조인(Join) • 조인의 개념 • 하나의 SQL 명령문에 의해 여러 테이블에 저장된 데이터를 한번에 조회할 수 있는 기능 • 관계형 데이터베이스 분야의 표준 • 두개 이상의 테이블을 ‘결합’ 한다는 의미 • 조인의 필요성 • 조인을 사용하지 않는 일반적인 예 • 학생 주소록을 출력하기 위해 학생들의 학번, 이름, 소속학과 이름을 검색 • 학생에 대한 정보 검색하는 단계 필요 • 학생 정보에서 소속학과번호 정보를 추출하여 소속학과 이름을 검색하는 단계 필요 8장. 조인(JOIN)

  3. 조인의 필요성 • 학번이 3인 학생의 지도교수 명을 얻고자 한다고 하자. 이 경우 단일 테이블 검색 기법 만을 사용할 경우

  4. 간단한 조인 • FROM 절에 검색 대상인 테이블들을 기술 • WHERE절에 조인 조건을

  5. 열이름의 모순성 • 서로 다른 테이블에 있는 동일한 칼럼 이름을 연결할 경우 • 테이블 명과 컬럼 이름 사이에 점(.)을 사용하여 해당 컬럼이 어느 테이블에 속하는 지는 명시해 주어야 함

  6. 테이블의 별명 • 테이블 명이 길면, SQL 쓰기 어려움. • 테이블명의 별명을 쓰자. • FROM절에서 테이블 이름 다음에 공백을 두고 별명을 정의

  7. 별명 사용의 주의점 • 하나의 SQL문 안에서 별명과 테이블명을 혼용해서 사용하면 안 된다는 것

  8. SELF 조인 • 별명을 사용하면 SELF 조인을 할 수 있다. • SELF JOIN • 동일한 테이블 두 개를 이용하여 조인하는 연산 • 학생테이블에서 학번이 1인 학생과 동일한 부모를 가진 학생들의 정보를 추출하고자 • 별명을 사용하여 하나의 테이블을 마치 두 개 있는 것 처럼

  9. 조인의 종류 • CROSS JOIN • Theta JOIN • equi-JOIN • Natual JOIN • Outer JOIN

  10. CROSS JOIN • 카티산 곱의 다른 표현 • 두 개 이상의 테이블에 대한 모든 가능한 튜플 쌍을 만드는 연산 • 단순히 FROM 절에 두 개 이상의 테이블을 기록하고 WHERE 절에 조인 조건을 기록하지 않으면 그 결과를 얻을 수 있음. • Oracle의 9i 이후 부터 FROM 절에 cross join 키워드를 이용하여 카티션 곱을 수행시킬 수도 있음

  11. Theta-JOIN, equi-JOIN • 조인 조건 • =, !=, <, > 등의 연산자 사용 • Equi-JOIN • 조인 대상 테이블에서 공통 칼럼을 ‘=‘(equal) 비교를 통해 같은 값을 가지는 행을 연결하여 결과를 생성하는 조인 방법 • = 연산자가 조인에서 가장 많이 쓰임.

  12. 자연조인(Natural JOIN) • 일반적으로 조인 이라 하면 자연조인을 말함. • 자연 조인이란equi-join의 특이한 형태 • 조인 조건을 명시하지 안아도 자동으로 조인 대상인 두 테이블에서 공통인 컬럼들을 찾아서equi-join을 수행하도록 한다. • 엄밀히 equi-join 과 natural join의 결과는 다르다.

  13. 학생 테이블과 학생정보 테이블에 공통으로 존재하는snum컬럼을 이용하여 동등 조인을 수행 • equi-join에서는snum컬럼이 두 번 나옴 • 자연 조인에서는snum컬럼이 한번만 나옴. • 자연 조인에서는 자동으로 중복되는 컬럼을 한번만 나오도록 만듬

  14. 학생 테이블과 학생 정보 테이블을 자연조인을 수행해 보자.

  15. 앞의 자연 조인의 결과의 snum은 DBMS가 만든 컬럼임. • 따라서, 자연 조인에서 두 테이블에 공통인 컬럼에 대하여 테이블 별명을 사용하여 SELECT절에서 사용하면 오류

  16. JOIN~ USING • JOIN~ USING~ • Equi Join의 조건 지정 없는 표현식 • USING절에 조인 대상 칼럼을 지정 • 칼럼 이름은 조인 대상 테이블에서 동일한 이름으로 정의되어 있어야함 • JOIN~USING~절을 이용하여 교수와 학부모 테이블에서 동일한 급여(salary)를 받는 교수이름 및 학부모 이름을 출력해 보자

  17. OUTER JOIN • JOIN의 결과에는 WHERE절에 기술한 조인 조건을 만족하는 튜플들의 정보만이 나타나게 됨. • 즉, JOIN에 참여 못하는 튜플들은 질의결과에 나타나지 않음. • OUTER 조인 • 조인 조건에 참여하지 못하는 튜플들도 조인 결과에 나타나게 하도록 하는 조인 방법

  18. 실습을 위한 테이블만들기 • 예비군 테이블 튜플 추가

  19. Equi-join의 결과 • 학생테이블의 모든 정보가 나와 있지 않음.

  20. LEFT Outer Join • 모든 학생 이름과 와 예비군일 경우 그 학생의 이름을 같이 보고 싶을 경우 • (+)기호가 있는 쪽에 조인조건을 만족하지 않는 튜플이 나타남 • 즉, NULL값이 출력 될 부분 • (+) 기호 LEFT OUT JOIN

  21. RIGHT OUTER JOIN • 모든 예비군 테이블을 이름을 출력하고 학생 테이블에 동일한 학번의 학생이 있다면 해당 학생의 이름을 출력하도록 하자.

  22. FULL OUTER JOIN • 조인에 참여하는 모든 테이블의 튜플 정보를 모두 보고 싶다 • (+)는 사용할 수 없다.

  23. 중첩질의문 • SELECT~구문 안에 또 다른 SELECT~ 문이 존재하는 것을 • 중첩 질의문은 JOIN과 동일한 효과를 나타냄 • 테이블에서 민준기 교수와 동일한 직급의 교수명과 직급을 검색하고자 한다 중첩질의문 일반조인

  24. 중첩질의문의 분류 • 서브질의문의 결과수에 따라 분류 • 단일행중첩질의문 • 서브질의문의 결과 튜플 수가 1 • 다중행중첩질의문 • 서브질의문의 결과 튜플 수가 여러 개 • 일반적인 비교 연산자들인 =, <. >, != 등은단일행연산자 임. • 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불가능

  25. 단일행 비교 연산자 • 일반적인 비교 연산자들인 =, <. >, != 등은단일행 연산자 임. • 이러한 연산자들은 다중행 중첩질의 문에서는 사용이 불가능

  26. 다중행 비교 연산자. • IN, SOME, ANY, ALL, EXISTS • IN 연산자 • 단일행 연산자인 =과 유사한 성격을 • 메인 질의 문의 검색 대상이 서브 질의 문의 결과 중 하나라도 일치하면 그 조건인 참이 되는 연산자

  27. ANY와 SOME • ANY와 SOME의 동일한 연산자 • 메인 질의문의 비교 조건에서 서브 질의문의 결과와 비교하여 하나라고 조건을 만족하면 참이 되는 연산자 • 단일행연산자와 같이 사용 • = ANY과 같은 경우 IN과 동일 • 테이블에서 교수번호가 80 이상인 교수들 보다 봉급을 더 받는 교수들의 이름과 봉급을 검색해 보자.

  28. ALL • 인 질의문의 검색 대상이 서브 질의문의 결과와 모두 만족할 경우에만 참이 되는 연산

  29. EXISTS • 서브 질의문의 결과가 하나라도 발생되면 참이 되는 연산자이다 • 봉급이 500 보다 큰 교수가 있다면 모든 교수의 이름과 봉급을 출력하는 질의문

  30. WITH Clause • 최신 SQL 기능 • 질의 결과의 재사용 • VIEW : 영구적 임시 데이블 생성 • WITH Clause : 한시적 임시 테이블 생성 • 구문 WITH 테이블 이름 AS ( SELECT … FROM … WHERE ) • WITH 절로 정의된 테이블은 일반 테이블과 동일한 기능을 제공한다. • 질의문이 간결해지고 이해하기 쉬움. 9장. 서브쿼리

  31. 김상진 교수보다 입사일이 늦거나 급여가 큰 교수들을 이름을 검색하는 질의문 • 일반 조인 형태

  32. 중첩질의문 형태 • 중첩 질의문과 위의 조인 연산을 이용한 질의문으로 보게 되면 김상진 교수의 정보를 두번 찾는다는 것을 알 수 있다.

  33. WITH절을 이용하여 김상진 교수의 입사일과 봉급을 을 임시 테이블로 생성하면 보다 간편하고 이해하기 쉬운 질의문을 만들 수 있다

More Related