강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

:: 조인(Join)의 사용 예 ::
작성자 : 13 김영철
등록날짜 : 2009.01.24 23:08
2,342

이번 강좌에서는 바로 앞의 강좌에서 살펴본 JOIN이 실제 사용되는 예를 보도록 하겠습니다. 이 강좌에서 예시되는 대부분의 예제는 SQL 서버의 온라인 설명서에서 발취한 것임을 알려 드립니다.

1. INNER JOIN

[예제1]

USE pubs

SELECT *
FROM authors AS a INNER JOIN publishers AS p
ON a.city = p.city
ORDER BY a.au_lname DESC

o authors 테이블과 publishers 테이블을 조인 시킵니다.
o authors 테이블과 publishers 테이블에서 city 가 같은 행을 조인 시킵니다.
o "SELECT * " 에 의해 두 테이블에 있는 컬럼 전체가 표시됩니다.
o "ORDER BY a.au_lname DESC" 에 의해 표시되는 내용은 au_lname를 기준으로 내림차순으로 정렬됩니다.

[예제2]

USE pubs

SELECT p.pub_id, p.pub_name, a.*
FROM publishers p INNER JOIN authors a
ON p.city = a.city
ORDER BY a.au_lname ASC, a.au_fname ASC

o 앞의 [예제1]에서는 두 테이블 전체 컬럼이 표시 되었지만 [예제2] 에서는 publishers 테이블에서는 pub_id, pub_name, state 컬럼만 가지고 오며, authors 테이블에서는 모든 컬럼을 가져오고 있습니다.
o 표시되는 행의 수는 [예제1]과 동일합니다.
o 하지만 정렬 순서는 바뀐 것을 알 수 있습니다.

[예제3]

USE pubs

SELECT p.pub_name, p.state, a.au_lname, a.au_fname, a.state
FROM publishers p INNER JOIN authors a
ON a.state > p.state
WHERE p.pub_name = 'New Moon Books'
ORDER BY au_lname ASC, au_fname ASC

o 빨간색 부분을 보시면 지금까지 알았던것과 달리 JOIN 절에 부등호가 사용되고 있습니다.
o publishers 테이블의 state 컬럼과 authors 테이블의 state 컬럼을 비교해서 authors 테이블의 state가 크면 JOIN의 결과에 포함이 됩니다.

[예제4]

USE pubs

SELECT DISTINCT t1.type, t1.price
FROM titles t1 INNER JOIN titles t2
ON t1.type = t2.type
AND t1.price <> t2.price
WHERE t1.price < $15 AND t2.price < $15

o 등호와 부등호가 같이 사용될 수 있음을 보여 줍니다.

2. OUTER JOIN

[예제5]

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a LEFT OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

o LEFT OUTER JOIN 이므로 왼쪽의 authors 테이블이 기준이 됩니다.
o publishers 테이블에는 없더라도 authors 테이블에 있는 행은 표시됩니다.

[예제6]

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors AS a RIGHT OUTER JOIN publishers AS p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

o 위 [예제5]와는 반대로 publishers 테이블을 기준으로 하고 있습니다.
o authors 테이블에는 없더라도 publishers 테이블에 있는 행은 표시됩니다.

3. FULL JOIN

[예제7]

USE pubs

SELECT a.au_fname, a.au_lname, p.pub_name
FROM authors a FULL OUTER JOIN publishers p
ON a.city = p.city
ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

o FULL OUTER JOIN 이므로 authors 테이블에만 존재하는 행도 표시되며, publishers 테이블에만 존재하는 행도 표시됩니다.
o 결국 [예제5]와 [예제6]의 합집합이 됩니다.

4. CROSS JOIN

[예제8]

USE pubs

SELECT au_fname, au_lname, pub_name
FROM authors CROSS JOIN publishers
ORDER BY au_lname DESC

o CROSS JOIN이므로 authors 테이블과 publishers 테이블이 서로 CROSS 된 결과가 표시됩니다.

5. SELF JOIN

[예제9]

USE pubs

SELECT au1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname
FROM authors au1 INNER JOIN authors au2
ON au1.zip = au2.zip
WHERE au1.city = 'Oakland'
ORDER BY au1.au_fname ASC, au1.au_lname ASC

o 테이블 자기 자신과 JOIN이 이루어지는 경우가 있습니다.
o city 가 Oakland 이면서 zip 이 같은 행을 찾게 됩니다.

[결과]

au_fname au_lname au_fname au_lname
------------------- ------------------- ------------------- -------------------
Dean
Dean
Dean
Dirk
Dirk
Dirk
Livia
Livia
Livia

Marjorie
Stearns
Straight
Straight
Straight
Stringer
Stringer
Stringer
Karsen
Karsen
Karsen
Green
MacFeather
Dean
Dirk
Livia
Dean
Dirk
Livia
Dean
Dirk
Livia
Marjorie
Stearns

Straight
Stringer
Karsen
Straight
Stringer
Karsen
Straight
Stringer
Karsen

Green
MacFeather
(11개 행 적용됨)      

o 같은 zip을 갖는 사람을 찾고자 [예제9]와 같이 SELF JOIN을 사용했더니 위 [결과] 처럼 같은 행 또는 앞뒤 사람만 바뀐(결국은 같은) 내용이 표시가 되고 있습니다.
o 다음과 같이 수정하면 이 문제를 해결 할 수 있습니다.

[예제10]

USE pubs

SELECT au1.au_fname, au1.au_lname, au2.au_fname, au2.au_lname
FROM authors au1 INNER JOIN authors au2
ON au1.zip = au2.zip
WHERE au1.city = 'Oakland' AND au1.au_id < au2.au_id
ORDER BY au1.au_fname ASC, au1.au_lname ASC

[결과]

au_fname au_lname au_fname au_lname
------------------- ------------------- ------------------- -------------------
Dean
Dean
Dirk
Straight
Straight
Stringer
Dirk
Livia
Livia
Stringer
Karsen
Karsen
(3개 행 적용됨)      

6. 정리

JOIN의 예를 간단히 살펴 보았습니다. 직접 위 쿼리문들을 수행하고 결과를 보면서 그 의미를 정확히 파악하시면 JOIN을 사용하시는데 아무 문제가 없을거라 생각합니다. JOIN은 2개 이상의 테이블에 대해서도 사용이 가능합니다. 방법은 두개의 테이블을 사용하는 경우과 같습니다. 대신 JOIN 문이 반복됩니다.

좀더 자세한 사항은 온라인 설명서를 참고하여 주시기 바랍니다.

----------------------------------------------------------------------------------------

출처 : http://www.sqlworld.pe.kr

 

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2715 MySQL 에서 사용되는 sql문 정리 M 최고의하루 12.19 2743
2714 [ MySQL ] MySQL 기본적으로 익혀야할 과제 M 최고의하루 12.18 2501
2713 [ MySQL ] MySql4.x / PHP4.x / Apache 한글깨짐 M 최고의하루 12.18 3257
2712 [ MySQL ] MySQL 5 한글 UTF8 한글 깨짐 분석 (Windows 용) M 최고의하루 12.04 5730
2711 MySQL 명령어 정리 M 최고의하루 12.04 2388
2710 MSSQL 페이징 13 김영철 01.24 2487
2709 mssql 암호화 13 김영철 01.24 2486
2708 mysql과 mssql의 변환시 유의사항 13 김영철 01.24 2672
2707 mssql 백업방법 13 김영철 01.24 2773
2706 데이터 정보 확인방법 13 김영철 01.24 2354
2705 MS-SQL JDBC "ResultSet Can Not Re-Read Row Data" 예외 처리 방법 13 김영철 01.24 3283
2704 IDENTITY 속성 13 김영철 01.24 2160
2703 Jsp + Mssql Long타입 데이타 사용시 문제점 13 김영철 01.24 2764
2702 PWDENCRYPT와 PWDCOMPARE를 통해 암호화 기능 13 김영철 01.24 3471
2701 MSSQL 기본값 13 김영철 01.24 3037
2700 :: 데이터베이스의 종류 :: 13 김영철 01.24 2350
2699 :: 데이터베이스의 객체 :: 13 김영철 01.24 2635
2698 :: Transact-SQL 이란 :: 13 김영철 01.24 2886
2697 :: 단순 SELECT 문 :: 13 김영철 01.24 2368
2696 :: WHERE 절 :: 13 김영철 01.24 2803
2695 :: ORDER BY, GROUP BY :: 13 김영철 01.24 2479
2694 :: 조인(Join) 이란? :: 13 김영철 01.24 2182
열람중 :: 조인(Join)의 사용 예 :: 13 김영철 01.24 2343
2692 :: SELECT INTO 와 INSERT INTO :: 13 김영철 01.24 2575
2691 :: 데이터베이스의 구조 :: 13 김영철 01.24 2306
2690 :: 데이터베이스 생성 :: 13 김영철 01.24 2112
2689 :: 데이터 무결성 :: [출처] :: 데이터 무결성 :: (쇼핑몰 대박못내는 진짜이유!) |작성자 프런티어 13 김영철 01.24 3177
2688 :: 인덱스(Index) :: 13 김영철 01.24 2090
2687 :: 뷰(View) :: 13 김영철 01.24 2817
2686 :: 저장프로시저 (Stored Procedure) :: 13 김영철 01.24 2784
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취