RadarURL

조회 수 6185 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Introduction

12장에서 내부 조인만 다루었다. 13장에서 자체 조인(Self JOIN), 자연 조인(Natural JOIN), 외부 조인(Outer JOIN) 을 다룬다. 여러 조인을 다루는 이유는 서로 다른 테이블을 조합하여, 결과를 찾기 위해서다. 이렇게 여러 테이블을 다루다 보면, 이름을 쓰는게 헷갈리거나, 어렵거나, 귀찮을 수 있는데, 이럴때 별칭을 사용 하면 된다.

Content

1. 왜 별명(alias)을 사용하고, 어떻게 별명(alias)을 사용 하는가?

별명은 테이블 이름이 길거나, 이름 이해가 어렵거나, 특수문자를 사용 할 수 없는 환경에서 보다 쉽게 사용하기 위해서 사용 한다. 별명은 계산 필드, 칼럼(열), 테이블 이름에 붙일 수 있다.

사용 방법은 바꾸고자 하는 이름 뒤에 AS 를 붙이고, 별명을 기입하면 된다.(오라클에선 AS 없이 그냥 한칸 띄우고 별명을 지어 주면 된다.) 즉, 다음 예와 같다.

1
2
3
4
5
6
SELECT
    vend_id AS vi,
    vend_name AS vn,   
    vend_address AS va
FROM
    Vendors AS ven


관련 링크

  1. http://www.w3schools.com/SQl/sql_alias.asp
  2. http://sql.1keydata.com/kr/sql-alias.php

별명이 끝났으니, 이제 각각의 조인들에 대해서 알아 보자.

2. 자체 조인 - Self JOIN

2-1 무엇을 "자체 조인 - Self JOIN"이라고 하는가?

테이블 A 가 있다고 치면, 테이블 A가 테이블 A를 참조 하는, 즉, 자기 자신을 참조 하는 조인을 Self JOIN 라고 한다. 보통 테이블에 한 컴럼이 자신에게 있는 다른 레코드를 참조할 경우 쓰인다.

2-2 어떻게 "자체 조인 - Self JOIN"을 사용 하는가?

1
2
3
4
5
6
7
SELECT
    c1.cust_id, c1.cust_name, c1.cust_contact
FROM
    Customers AS c1, Customers AS c2
WHERE
    c1.cust_name = c2.cust_name
    AND c2.cust_contact = 'Jim Jones';


해석

출력


 

본능적으로 알 수 있으니, 별도의 설명이 필요 없다.

관련 링크

  1. http://radiocom.kunsan.ac.kr/lecture/oracle/statement_join/self_join.html
  2. http://www.sqltutorial.org/sqlselfjoin.aspx
  3. http://www.koug.net/xe/?document_srl=3282
  4. http://blog.naver.com/mavis5/10078360034
  5. http://kbckbc.com/tatter/kbckbc/entry/ProgOracle24

3. 자연 조인 - Natural JOIN

3-1. 무엇을 "자연 조인 - Natural JOIN" 이라고 하는가?

테이블 조인 유형 중 한가지 이다. 테이블 간 중복된 열이 있다면, 한개만 표시하는 JOIN 을 뜻한다. 그렇다고 Natural JOIN 이 스스로 걸러낸다는 것을 의미하지는 않는다. 이것은 질의를 만드는 사람의 손으로 걸러내야 한다는 의미이다. (실제로 PostgreSQL 에서 해 보니, 중복된 열이라 할지라도, 지정해 주면 출력이 되더라. 결국 사람의 손을 거쳐야 하는 것.)

곰곰히 생각해 보면, "자연 조인 - Natural JOIN" 을 따로 구분 짓지는 않을 것 같다. 왜냐하면, 인간이 가진 손으로 기입하는 것이기 때문이다. 이 의미는 "내부 조인 - INNER JOIN" 에 중복된 열을 제거 한 것뿐 이다. "자연 조인 - Natural JOIN"을 구분 한다 해도, 얻게 되는 이점이 무엇인가? 전혀 없다. 나는 이렇게 본다.

3-2. 어떻게 "자연 조인 - Natural JOIN" 을 사용 하는가?

1
2
3
4
5
6
7
8
9
SELECT   
    C.*, O.order_num, O.order_date, OI.prod_id,
    OI.quantity, OI.item_price
FROM
    Customers AS C, Orders AS O, OrderItems AS OI
WHERE
    C.cust_id = O.cust_id
    AND OI.order_num = O.order_num
    AND prod_id = 'RGAN01';


 

해석

출력


 

관련 링크

  1. http://jongrak.textcube.com/70


 

4. 외부 조인 - OUTER JOIN

4-1. 무엇을 "외부 조인 - OUTER JOIN" 이라고 하는가?

여러 JOIN 중 한 조인 형태이며, 크게 내부 조인과 외부 조인으로 나뉜다. 내부 조인은 엮을 대상이 있을 때만, 엮여 지지만, 외부 조인은 엮일 대상이 없다고 해도 엮인다. 이것이 차이다. 이러한 차이점 때문에 외부 조인은 기준이 될 테이블을 정해 주어야 한다. 기준이 된 테이블을 정해 준다는 것은 엮이는게 없더라도, 기본적으로 보여질 테이블을 정해 준다는 것을 의미한다.

그러므로 왼쪽을 기준으로 정한 외부 조인을 LEFT OUTER JOIN 이라고 하며, 오른쪽을 기준으로 정한 외부 조인을 RIGHT OUTER JOIN 이라고 한다. 이때 왼쪽과 오른쪽을 결정하는 기준은 JOIN 절 이다. JOIN 을 기준으로 왼쪽 과 오른쪽으로 나뉜다.

이렇게 왼쪽과 오른쪽을 나눈것 외에 둘 다 포함하는 조인이 있는데, 이를 FULL OUTER JOIN 이라고 한다. 이는 엮일 데이터가 있건 없건 모든 테이블을 보겠다는 의미이다. FULL JOIN 은 각 DBMS 마다 지원 여부를 확인해 봐야 한다. (PostgreSQL 은 된다.)

4-2. 어떻게 "외부 조인 - OUTER JOIN" 을 사용 하는가?

모든 예를 다 찍기 어려우므로 사진과 링크로 대체 한다.

LEFT OUTER JOIN 해석

LEFT OUTER JOIN 출력


 

RIGHT OUTER JOIN 해석

RIGHT OUTER JOIN 출력


 

FULL OUTER JOIN 해석

FULL OUTER JOIN 출력


 

관련링크

  1. http://zend1003.springnote.com/pages/946880
  2. http://infogoal.com/sql/sql-outer-join.htm
  3. http://databaser.net/moniwiki/wiki.php/OuterJoin
  4. http://www.oracleclub.com/lecture/1021
  5. http://bearcho.tistory.com/38
  6. http://bearcho.tistory.com/40

조인을 할 때 주의해야 할 사항

  1. 엮일 조건(WHERE a = b)(ON a = b)을 결정하지 않으면, 곱집합이 반한 된다.
  2. 여러 조인을 한 SQL 절에 사용 할 순 있으나, 복잡하므로, 충분히 테스트 하고 적용 시키도록 해야 한다.( .. 복잡한건 어딜 가나 문제다.)

Digression

조인은 내부 조인과 외부 조인만 구분 지으면 되지, 내부 조인엔 무엇이 있고 외부조인엔 무엇 있다고 상세히 구분 할 필요가 없다고 생각한다. 그러므로 내부 조인과 외부 조인만 설명하면 더 쉽게 접할 수 있을 것 같다. 그렇다고 이 의미가 책에서 내용 자체를 빼라는 것을 의미하지 않는다. 설명을 할 때, "이런 것도 있더라." 쯤으로 여기고 넘어가는게 좋다는 의미이다.

 

출처 : http://ikpil.com/1103

?

공부 게시판

공부에 도움되는 글을 올려주세요.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 [공지] 공부 게시판 입니다. 처누 2003.08.18 927899
1586 카메라 GF2/GF3/GH2 핵펌 하는 방법 file JaeSoo 2012.05.03 11902
1585 카메라 영화화면비율 2.35:1, 16:9, 사진촬영비율 3:2, 4:3, 1:1, 세로사진비율 정리 file JaeSoo 2012.05.03 8888
1584 웹 프로그래밍 윈도우용 PHP, Exif 익스텐션(모듈;Extension) 설치/인식 방법 JaeSoo 2012.05.05 3979
1583 웹 프로그래밍 [PHP] ffmpeg 윈도우서버에서 모듈 로드~ file JaeSoo 2012.05.05 7306
1582 웹 프로그래밍 ffmpeg 설치 후 php 업로드 간단 테스트 JaeSoo 2012.05.05 5131
1581 웹 프로그래밍 동영상을 올렸을 경우 이미지 추출(ffmpeg, ffmpeg-php 등 설치되어 있다고 가정) JaeSoo 2012.05.05 8259
1580 경제 주택담보대출 이자…"`은행간 年 343만원 차이" file JaeSoo 2012.05.07 3754
1579 경제 담보대출(주택,아파트,상가,전세보증금):한국주택금융공사, 은행, 2금융권대출 비교 file JaeSoo 2012.05.07 4754
1578 보안 암호화 알고리즘 종류와 관련 용어 file JaeSoo 2012.05.08 6402
1577 기타 비둘기 집의 원리 (Pigeonhole principle) file JaeSoo 2012.05.08 4854
1576 데이터베이스 쿼리의 결합 : UNION 으로 쿼리 결합하기 file JaeSoo 2012.05.09 4340
» 데이터베이스 고급 조인 만들기 : SELF JOIN, NATURAL JOIN, OUTER JOIN JaeSoo 2012.05.09 6185
1574 웹 프로그래밍 XpressEngine XE 1.5 캐시 사용으로 성능 극대화 JaeSoo 2012.05.09 3722
1573 웹 프로그래밍 JW Player 기본 태그 JaeSoo 2012.05.12 5901
1572 카메라 CPL 필터 사용법에 대한 초보자들을 위한 글~ JaeSoo 2012.05.13 7123
1571 하드웨어 [전문가리뷰] 인텔 차세대 아톰 플랫폼 Cedar Trail, 무엇이 바뀌었나? JaeSoo 2012.05.17 4809
1570 하드웨어 PassMark - CPU Mark : Low Mid Range CPUs - Updated 16th of May 2012 JaeSoo 2012.05.17 7514
1569 윈도우즈 Windows XP에서 성능 옵션을 설정하는 방법 JaeSoo 2012.05.17 4875
1568 윈도우즈 윈도우 7 vs 비스타 vs XP 성능 차이는? JaeSoo 2012.05.18 3593
1567 하드웨어 인텔 셀러론 G530, MSI H61M-P20 G3 조합 성능 벤치마크. (Intel Celeron G530 CPU, Gen 3 motherboard) JaeSoo 2012.05.19 3867
Board Pagination Prev 1 ... 40 41 42 43 44 45 46 47 48 49 ... 124 Next
/ 124


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너