RadarURL

조회 수 6204 추천 수 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 930309
2503 유닉스/리눅스 리눅스 서버 설치 중 에러 "Failed to find a suitable stage1 device" JaeSoo 2025.10.03 11
2502 유닉스/리눅스 Linux 11 . Linux 설치 시 lvm 수동설정 JaeSoo 2025.10.03 14
2501 유닉스/리눅스 [Rocky Linux] 누구나 쉽게 따라하는 Rocky Linux 9.0 OS 다운로드 및 설치 방법~!! JaeSoo 2025.10.03 13
2500 유닉스/리눅스 Linux/Rocky Linux Rocky Linux : Composer 설치 JaeSoo 2025.09.29 29
2499 유닉스/리눅스 [Rocky Linux] 록키 리눅스 최신 업데이트 적용 방법 JaeSoo 2025.09.29 26
2498 유닉스/리눅스 rocky linux 커널 업데이트 JaeSoo 2025.09.29 23
2497 웹서버,WAS [Windows] OWASP ZAP 사용법 JaeSoo 2025.09.29 31
2496 웹서버,WAS [웹 취약점] 웹서버 디렉토리 리스팅 방지 JaeSoo 2025.09.29 29
2495 유닉스/리눅스 Clonezilla(클론질라) 백업파일 하드디스크로 복구 방법 JaeSoo 2025.09.28 34
2494 유닉스/리눅스 클론질라 사용 방법 - OS 이미지 백업 CloneZilla JaeSoo 2025.09.28 33
2493 유닉스/리눅스 [Linux / Rocky] FTP 접속 관련 설정 실습 예제 JaeSoo 2025.09.23 47
2492 유닉스/리눅스 Could not reliably determine the server's fully qualified domain name JaeSoo 2025.09.23 43
2491 유닉스/리눅스 [아파치] 아파치 웹서버에 .htaccess 파일 설정하는 방법 JaeSoo 2025.09.23 50
2490 유닉스/리눅스 [Linux] Apache web server의 rewrite module 사용하기 [출처] [Linux] Apache web server의 rewrite module 사용하기|작성자 g00dmoney JaeSoo 2025.09.23 45
2489 유닉스/리눅스 록키 리눅스 9.1에서 apache, mysql, PHP 설치 JaeSoo 2025.09.23 47
2488 유닉스/리눅스 [권한문제] 라이믹스 Fatal error: Uncaught Rhymix\Framework\Exception: Cannot write template cache file JaeSoo 2025.09.23 37
2487 유닉스/리눅스 라이믹스 php 에러 표시 JaeSoo 2025.09.23 36
2486 유닉스/리눅스 Rocky Linux - 라이믹스(Rhymix) 설치하기 JaeSoo 2025.09.23 33
2485 유닉스/리눅스 라이믹스(Rhymix) 매뉴얼 JaeSoo 2025.09.23 25
2484 유닉스/리눅스 [ Apache ] 아파치 start/stop/restart 명령어 JaeSoo 2025.09.23 21
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 126 Next
/ 126


즐겨찾기 (가족)

JAESOO's HOMEPAGE


YOUNGAE's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

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

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

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

JServer.kr

제이서버 메타블로그

재수 티스토리


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

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너