조인(Join)

  • 두개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것
  • INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN 등이 있음.

 

INNER JOIN(내부 조인)

  • 조인 중에서 가장 많이 사용됨.
  • 일반적으로 join이라고 얘기하면 inner join을 말함.
  • inner를 생략하고 join이라고만 쓰면 Inner Join으로 인식함.
SELECT 열1, 열2, ...
FROM 테이블1
INNER JOIN 테이블2
ON 조인될 조건
WHERE 검색조건 ;
Q1. 전체 회원들이 구매한 목록 중 아이디, 이름, 구매물품, 주소, 연락처를 아이디 순서대로 출력하라.
select B.userID, U.name, B.prodName, U.addr, concat(U.mobile1 + U.mobile2) phonenumber
	from buytbl B
    inner join usertbl U
    on B.userID = U.userID
    order by U.userID;


Q2. 회원 테이블을 기준으로 아이디가 JYP인 회원이 구매한 물건의 목록을 출력하라.

select B.userID, U.name, B.prodName, U.addr, concat(U.mobile1 + U.mobile2) phonenumber
	from buytbl B
    inner join usertbl U
    on B.userID = U.userID
    where B.userID = 'JYP';


Q3. 쇼핑몰에서 한 번이라도 구매한 기록이 있는 회원의 아이디, 이름, 주소를 출력하라.

select distinct U.userID, U.name, U.addr
	from usertbl U
    inner join buytbl B
    on B.userID = U.userID
    order by U.userID;​

Q4. 학생 정보, 동아리 정보, 학생들의 동아리 정보가 각각 담긴 3개의 테이블을 이용해서 학생이름, 지역, 가입한 동아리, 동아리방을 출력하라. 단, 학생이름 사전 순으로 정렬하라.
select S.stdName, S.addr, SC.clubName, C.roomNo
	from stdtbl S
    inner join stdclubtbl SC
		on S.stdName = SC.stdName
	inner join clubtbl C
		on SC.clubName = C.clubName
	order by S.stdname;​

 

OUTER JOIN(외부 조인)

  • 조인의 조건에 만족되지 않는 행까지도 포함시키는 것
  • LEFT OUTER JOIN
    • 왼쪽 테이블을 기준으로 오른쪽 테이블에서 추가할 내용이 있으면 함께 출력
  • RIGHT OUTER JOIN
    • 오른쪽 테이블을 기준으로 왼쪽 테이블에서 추가할 내용이 있으면 함께 출력
  • OUTER는 생략 가능
  • JOIN 후 기준이 되는 테이블의 행이 늘어날 수는 있지만 기준 테이블의 데이터가 누락되는 일은 없음
SELECT 열1, 열2, ...
FROM 테이블1
LEFT/RIGHT (OUTER) JOIN 테이블2
ON 조인될 조건
WHERE 검색조건 ;
Q1. 회원 테이블과 구매 테이블이 주어졌을 때, 회원 아이디, 회원 이름, 구매 품목 이름, 회원 주소, 회원 연락처를 출력하라. 단, 회원 아이디 순서대로 출력하라.
select U.userID, U.name, B.prodName, U.addr, concat(U.mobile1, U.mobile2) phonenumber
	from usertbl U
	left join buytbl B
        on U.userID = B.userID
	order by U.userID;


Q2. 회원 테이블에는 있지만 구매 내역이 없는 회원들을 찾아라.

select U.userID, U.name, B.prodName, U.addr, concat(U.mobile1, U.mobile2) phonenumber
	from usertbl U
	left join buytbl B
        on U.userID = B.userID
	where B.prodName is null
	order by U.userID;


Q3. 앞의 학생, 동아리, 학생이 가입한 동아리 정보를 담은 3개의 테이블에서 동아리에 가입하지 않은 학생의 정보도 출력하라.

select S.stdName, S.addr, SC.ClubName, C.roomNo
	from stdtbl S 
    left join stdclubtbl SC
		on S.stdName = SC.stdName
    left join clubtbl C
		on SC.clubName = C.clubName
    order by S.stdName;

 

Q3. 동아리를 기준으로 가입된 학생들을 출력하라. 단, 가입 학생이 하나도 없는 동아리의 정보도 출력하라.하라.
select C.clubName, C.roomNo, S.stdName, S.addr
	from clubtbl C
    left join stdclubtbl SC
		on C.clubName = SC.clubName
	left join stdtbl S
		on SC.stdName = S.stdName
	order by C.clubName;​

 

CROSS JOIN(상호 조인)

  • 한 쪽 테이블의 모든 행들과 다른 쪽 테이블의 모든 행을 조인시키는 기능
  • M행의 테이블과 N행의 테이블을 CROSS JOIN 하면 M*N개의 행이 생성됨 
  • 테스트로 사용할 많은 용량의 데이터를 생성할 때 주로 사용
  • ON  구문을 사용할 수 없음
  • 대량의 데이터를 생성하면 시스템이 다운되거나 디스크 용량이 모두 찰 수 있으므로 COUNT(*) 함수로 개수만 카운트
- 방법1
SELECT 열1, 열2, ...
FROM 테이블1
CROSS JOIN `테이블2`
WHERE 출력조건 ;

- 방법2

SELECT 열1, 열2
FROM 테이블1, 테이블2
WHERE 출력조건 ;
Q. 회원 정보와 빌려간 영화의 정보가 담긴 테이블이 있을 때, 두 테이블에서 얻을 수 있는 모든 조합을 출력하라.
select * from movies cross join members;​
select * from movies, members;

 


Reference : 이것이 MySQL이다

+ Recent posts