CREATE table stdTbl
(stdName varchar(10) not null primary key,
addr char(4) not null
);
create table clubTbl(
clubName VARCHAR(10) not null PRIMARY key,
roomNo char(4) not null
);
create TABLE stdclubTbl(
num int AUTO_INCREMENT not null PRIMARY key,
stdName VARCHAR(10) not null,
clubName VARCHAR(10) not null,
FOREIGN KEY(stdName) REFERENCES stdTbl(stdName),
FOREIGN KEY(clubName) REFERENCES clubTbl(clubName)
);
insert into stdTbl VALUES('bumsoo','kn'),('sungsiky','su'),('joyong','kgi'),('unjiwon','kb'),('babikim','su');
insert into clubTbl VALUES('swim','101'),('badok','102'),('scor','103'),('bongsa','104');
insert into stdclubTbl VALUES (null,'bumsoo' ,'badok') ,(null,'bumsoo' ,'scor'),(null,'joyong' ,'scor'),(null,'unjiwon' ,'scor'),
(null,'unjiwon' ,'bongsa'),(null,'babikim' ,'bongsa');
commit;
-- 학생테이블, 동아리 테이블, 학생 - 동아리 테이블을 이용해서 학생을 기준으로 학생 이름, /지역/가입한 동아리 / 동아리 이름을 출력하자
select s.stdName, s.addr, c.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;
-- 동아리를 기준으로 가입한 학생의 목록을 출력하자
select c.clubName, c.roomNo,s.stdName, s.addr
from stdTbl s
inner join stdclubTbl sc
on sc.stdName=s.stdName
inner join clubTbl c
on sc.clubName =c.clubName
order by c.clubName;
-- 동아리에 가입하지 않은 학생 성시경은 출력이 안됐다.
-- 아웃터 조인으로 동아리에 가입하지 않은 학생도 출력되도록 수정해보자
select s.stdName, s.addr, c.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;
-- 이제는 동아리를 기준으로 가입한 학생을 출력하되, 가입학생이 하나도 없는 동아리도 출력되게 해보자
-- 클럽을 기준으로 조인을 해야 하므로 두 번재 조인은 라이트 아우터 조인으로 처리 해서 clubTbl이 조인의 기준이 되도록 설정하면 된다.
select c.clubName, c.roomNo,s.stdName, s.addr
from stdTbl s
left join stdclubTbl sc
on s.stdName= sc.stdName
right join clubTbl c
on sc.clubName =c.clubName
order by c.clubName;
-- 동아리에 가입하지 않은 학생도 출력되고 학생이 한명도 없는 동아리도 출력되게 하자
select s.stdName, s.addr, c.clubName, c.roomNo
from stdTbl s
left join stdclubTbl sc
on s.stdName= sc.stdName
left join clubTbl c
on sc.clubName =c.clubName
union
select s.stdName, s.addr,c.clubName, c.roomNo
from stdTbl s
left join stdclubTbl sc
on s.stdName= sc.stdName
right join clubTbl c
on sc.clubName =c.clubName
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | CREATE table stdTbl (stdName varchar(10) not null primary key, addr char(4) not null ); create table clubTbl( clubName VARCHAR(10) not null PRIMARY key, roomNo char(4) not null ); create TABLE stdclubTbl( num int AUTO_INCREMENT not null PRIMARY key, stdName VARCHAR(10) not null, clubName VARCHAR(10) not null, FOREIGN KEY(stdName) REFERENCES stdTbl(stdName), FOREIGN KEY(clubName) REFERENCES clubTbl(clubName) ); insert into stdTbl VALUES('bumsoo','kn'),('sungsiky','su'),('joyong','kgi'),('unjiwon','kb'),('babikim','su'); insert into clubTbl VALUES('swim','101'),('badok','102'),('scor','103'),('bongsa','104'); insert into stdclubTbl VALUES (null,'bumsoo' ,'badok') ,(null,'bumsoo' ,'scor'),(null,'joyong' ,'scor'),(null,'unjiwon' ,'scor'), (null,'unjiwon' ,'bongsa'),(null,'babikim' ,'bongsa'); commit; -- 학생테이블, 동아리 테이블, 학생 - 동아리 테이블을 이용해서 학생을 기준으로 학생 이름, /지역/가입한 동아리 / 동아리 이름을 출력하자 select s.stdName, s.addr, c.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; -- 동아리를 기준으로 가입한 학생의 목록을 출력하자 select c.clubName, c.roomNo,s.stdName, s.addr from stdTbl s inner join stdclubTbl sc on sc.stdName=s.stdName inner join clubTbl c on sc.clubName =c.clubName order by c.clubName; -- 동아리에 가입하지 않은 학생 성시경은 출력이 안됐다. -- 아웃터 조인으로 동아리에 가입하지 않은 학생도 출력되도록 수정해보자 select s.stdName, s.addr, c.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; -- 이제는 동아리를 기준으로 가입한 학생을 출력하되, 가입학생이 하나도 없는 동아리도 출력되게 해보자 -- 클럽을 기준으로 조인을 해야 하므로 두 번재 조인은 라이트 아우터 조인으로 처리 해서 clubTbl이 조인의 기준이 되도록 설정하면 된다. select c.clubName, c.roomNo,s.stdName, s.addr from stdTbl s left join stdclubTbl sc on s.stdName= sc.stdName right join clubTbl c on sc.clubName =c.clubName order by c.clubName; -- 동아리에 가입하지 않은 학생도 출력되고 학생이 한명도 없는 동아리도 출력되게 하자 select s.stdName, s.addr, c.clubName, c.roomNo from stdTbl s left join stdclubTbl sc on s.stdName= sc.stdName left join clubTbl c on sc.clubName =c.clubName union select s.stdName, s.addr,c.clubName, c.roomNo from stdTbl s left join stdclubTbl sc on s.stdName= sc.stdName right join clubTbl c on sc.clubName =c.clubName | cs |
'데이터 베이스 > MySQL' 카테고리의 다른 글
MYSQL procedure&프로시저 예제&문제 13 (2) | 2016.12.16 |
---|---|
MYSQL IF ELSE &CASE&동적sql 예제&문제 12 (4) | 2016.12.15 |
MYSQL join 예제&문제 10 (4) | 2016.12.14 |
MYSQL 부속질의어 예제&문제 9 (3) | 2016.12.13 |
MYSQL select 명령문의 조합 &union 예제&문제 8 (2) | 2016.12.12 |
댓글