댄스댄스 2008. 6. 18. 15:39

create table tb_sawon(
sabun  varchar(10) primary key,  --사원번호
saname varchar(20),       --사원이름
sajik  varchar(20),       --직위
saboss varchar(10),       --관리자
sadate smalldatetime default getdate(),--입사일
sapay  int,           --연봉
sapart  tinyint          --부서
)
insert tb_sawon values('1001','노무현','회장',null,'2000-2-2',50000,10)
insert tb_sawon values('1002','이명박','사장','1001','2001-2-2',40000,10)
insert tb_sawon values('1003','정동영','사장','1001','2001-3-2',40000,10)
insert tb_sawon values('1004','박근혜','전무','1002','2002-3-2',40000,20)
insert tb_sawon values('1005','홍길동','부장','1004','2005-2-2',30000,20)
insert tb_sawon values('1006','손학규','전무','1003','2003-1-2',25000,10)
insert tb_sawon values('1007','봉선화','부장','1006','2004-2-2',30000,30)
insert tb_sawon values('1008','진달래','대리','1005','2002-5-2',25000,30)
insert tb_sawon values('1009','백장미','대리','1005','2002-4-2',10000,10)
insert tb_sawon values('1010','민들레','대리','1007','2002-7-2',10000,10)

문1)사원번호1007번보다 급여가 많은 모든 사원들의 이름출력
select saname
from tb_sawon
where sapay>(select sapay from tb_sawon where sabun='1007')


문2)사원번호1002번과 같은 직책의 모든 사원들의 이름,직책출력
select saname,sajik
from tb_sawon
where sajik=(select sajik from tb_sawon where sabun='1002')

문3)직책이 1005번과 같고 급여가 1004번 사원보다 많은 사원의
      이름과 직책 출력
select saname,sajik from tb_sawon
where sajik=(select sajik from tb_sawon where sabun='1005')
and sapay>(select sapay from tb_sawon where sapay='1004')


문4)모든 사원중 최소급여를 받는 사원의 이름과 급여 출력
select saname,sapay from tb_sawon
where sapay=(select min(sapay) from tb_sawon)

문5)사번1009번과 같은 부서의 이름과 부서 출력
select saname,sapart from tb_sawon
where sapart=(select sapart from tb_sawon where sabun='1009')

문6)각부서의 번호와 부서별 최소급여
select sapart,min(sapay) from tb_sawon group by sapart

문7)각부서별로 몇명의 사원이 있는지?
select sapart,count(*) from tb_sawon group by sapart


문8)각부서에서 최소급여를 받는 사원들의 급여,부서번호출력
select AA.sapart,min(AA.sapay)
from (
  select saname,sapay,sapart from tb_sawon
  where sapay in
      (select min(sapay) from tb_sawon group by sapart)

) as AA
group by AA.sapart


문9)부서번호20의 최소급여보다 최소급여가 큰 부서의 부서번호
select sapart,min(sapay)
from tb_sawon
group by sapart
having min(sapay)>
    (select min(sapay) from tb_sawon where sapart='20')

 

 

 

 


[조인]
-inner join 내부조인. 기본. 생략가능 90%
-self join(재귀적관계) 자기자신을 조인 5%
-outer join : left join,right join, full join 5%
-cross join 잘사용안함.

[ANSI문]
select * from 고객 inner join 구매
on 고객.아이디=구매.아이디

select * from 고객 left outer join 구매
on 고객.아이디=구매.아이디

select * from 고객 right outer join 구매
on 고객.아이디=구매.아이디

select * from 고객 full outer join 구매
on 고객.아이디=구매.아이디 --완전하게 다 보여줌

[MS-SQL문법]
select * from 고객,구매 where 고객.아이디=구매.아이디

select * from 고객,구매 where 고객.아이디*=구매.아이디

select * from 고객,구매 where 고객.아이디=*구매.아이디

select * from 고객,구매 where 고객.아이디*=*구매.아이디
--에러