본문 바로가기
연구_고민/PHP & MySql

join

by DevG 2007. 8. 13.

INNER JOIN (교집합)

 

INNER JOIN(NORMAL JOIN)은 여러 테이블의 조건들이 모두 만족했을때만 데이타를 보여주게 되며 한쪽 테이블의 조건이라도 만족하지 않으면 데이타를
보여주지 않습니다.

 

LEFT OUTER JOIN (교집합)

 

LEFT OUTER JOIN(교집합)은 여러 테이블의 조건들이 모두 만족하지 않더라도 데이타를 보여줍니다.

 

※ 조건이 만족하지 않는 테이블의 데이타값은 "NULL" 값으로 출력된다.

 

간단한 조인 예제

 

개요


출석 테이블을 만든다 가정하면 normal join 으로는, 한번도 출석하지 않은 학생은 목록에도 보이지 않게 되지만, outer join 으로는 모두 볼 수 있게 됩니다.


예제


[테이블 생성]


drop table book;
create table book
(
code varchar(10),
name varchar(10)
);
insert into book values ('1111','사랑책');
insert into book values ('2222','이별책');
insert into book values ('3333','웃긴책');


drop table animal;

create table animal
(
code varchar(10),
name varchar(10)
);
insert into animal values ('1111','사자');
insert into animal values ('2222','호랑이');
insert into animal values ('3333','오리');


drop table buy;
create table buy
(
book_code varchar(10),
animal_code varchar(10)
);
insert into buy values ('1111','1111');
insert into buy values ('2222','2222');
insert into buy values ('3333','4444');


[LEFT OUTER JOIN 예제]


select
 b.name, c.name
from
 buy as a
 left outer join book as b on a.book_code = b.code
 left outer join animal as c on a.animal_code = c.code;


※ left outer join 시에는 최대한 중복건이 안나오도록 유일한 컬럼으로 비교해야 한다.

※ left outer join 시에 조건에 만족하지 않는 테이블의 컬럼값은 "NULL" 로 표기된다.


[INNER JOIN 방법1]


select
 b.name, c.name
from
 buy as a
 inner join book as b on a.book_code = b.code
 inner join animal as c on a.animal_code = c.code;


[INNER JOIN 방법2]


select
 b.name, c.name
from
 buy as a, book as b, animal as c
where
 a.book_code = b.code and a.animal_code = c.code where a.code = '1111';

select
 b.name, c.name
from
 buy as a, book as b, animal as c where a.book_code = '1111';


여러 테이블 컬럼의 모든 경우의 수를 출력한다.


select * from book, animal, buy;

select * from book a, animal b, buy c;


-- 3개테이블 컬럼의 경우의 수를 모두 출력한다.

-- 모든 경우의 수 = 각테이블의 로우스를 곱한값