-- 1. 주민번호
select
goname
, rpad(substr(gojumin,1,7),14,'*') 주민번호1
, lpad(substr(gojumin,-8,8),14,'*') 주민번호2
from
gogek;
-- 2. 보너스 출력
select
saname
, deptno
, sapay
, case when deptno = 10 then sapay*0.10
when deptno = 20 then sapay*0.15
when deptno = 30 then sapay*0.20
else 0
end as BONUS
from
sawon;
-- 3. 고객명, 전화번호, 성별(주민번호 기준)을 출력하라.
select
goname
, gotel
, decode(substr(gojumin,8,1), '1', '남자','2','여자') 성별
from
gogek
order by
3
;
-- 4. [2009년 1월 14일 수요일]형태로 출력
select
to_char(sysdate,'yyyy"년" mm"월" dd"일" day') 요일출력
from
dual
;
-- 5. 사원명, 입사일, 근무기간을 출력하되 근무기간은 [xx년 xx개월] 형태로 출력하라.
select
saname
, sahire
, to_char(trunc(months_between(sysdate,sahire)/12,0),'99')||'년'|| to_char(trunc(mod(months_between(sysdate,sahire),12)),'99')||'개월' as 근무기간
from
sawon
;
-- 6. 과장과 대리의 급여합계, 인원수, 평균 급여를 출력하라.
select
sajob 직책
, count(sabun) 인원수
, sum(sapay) 급여합계
, avg(sapay) 평균급여
from
sawon
group by
sajob
having sajob='과장' or sajob='대리';
-- 7. 직책별로 급여합계와 인원수를 출력하되, 인원수가 3명 이하인 직책만 출력하라
select
sajob 직책
, count(sabun) 인원수
, sum(sapay) 급여합계
, avg(sapay) 평균급여
from
sawon
group by
sajob
having
count(sabun) <= 3
;
-- 8. 성별, 직책별로 그룹화하여 인원수, 급여합계, 평균급여를 출력하되 10번 부서를 제외하고 인원수가 2명 이하인 것만 출력하라.
select
sasex 성별
, sajob 직책
, count(sabun) 인원수
, sum(sapay) 급여합계
, avg(sapay) 평균급여
from
sawon
where
deptno <> 10
group by
sasex
, sajob
having
count(sabun) <= 2
;
-- 9. 5명씩 그룹화하여 급여합계와 인원수를 출력하라.(rownum 이용)
select
ceil(rownum/5) 그룹번호
, count(*) 인원
, sum(sapay) 급여합계
from
sawon
group by
ceil(rownum/5)
;
-- 10. 입사년도별로 평균 급여와 인원수를 출력하라.
select
to_char(sahire,'yyyy') "입사년도"
, avg(sapay)"평균급여"
, count(sabun)"인원수"
from
sawon
group by
to_char(sahire,'yyyy')
order by
"입사년도"
;
과제를 위한 SQL 데이터를 보시려면….
--<Dept> Table 만들기
create Table Dept (
Deptno Number(3) ,
Dname Varchar2(10) ,
Loc Varchar2(10),
constraint dept_deptno_pk primary key(deptno),
constraint dept_dname_uq unique(dname)
);
Insert Into Dept Values(10, '총무부','서울');
Insert Into Dept Values(20, '영업부','대전');
Insert Into Dept Values(30, '전산부','부산');
Insert Into Dept Values(40, '관리부', '광주');
--<Sawon> Table 만들기
create table sawon (
sabun number(3),
saname varchar2(10) not null,
deptno number(3),
sajob varchar2(10),
sapay number(10),
sahire date default sysdate,
sasex varchar2(4),
saMgr number(3),
constraint sawon_sabun_PK primary key(sabun),
constraint sawon_deptno_FK foreign key(deptno) references dept(deptno) ON delete cascade,
constraint sawon_sasex_ck check(sasex in ('남자','여자')),
constraint sawon_saMgr_FK foreign key(samgr) references sawon(sabun)
);
Insert Into sawon Values(1,'홍길동',10,'회장',5000,'1980/01/01','남자',null);
Insert Into sawon Values(2,'한국남',20,'부장',3000,'1988/11/01', '남자',1);
Insert Into sawon Values(3,'이순신',20,'과장',3500,'1985/03/01','남자', 2);
Insert Into sawon Values(5,'이순라',20,'사원',1200,'1990/05/01','여자', 3);
Insert Into sawon Values(7,'놀기만',20,'과장',2300,'1996/06/01','여자', 2);
Insert Into sawon Values(11,'류별나',20,'과장',1600,'1989/12/01','여자', 2);
Insert Into sawon Values(14,'채시라',20,'사원',3400,'1993/10/01','여자', 3);
Insert Into sawon Values(17,'이성계',30,'부장',2803,'1984/05/01','남자', 1);
Insert Into sawon Values(13,'무궁화',10,'부장',3000,'1996/11/01','여자', 1);
Insert Into sawon Values(19,'임꺽정',20,'사원',2200,'1988/04/01','남자', 7);
Insert Into sawon Values(20,'깨똥이',10,'과장',4500,'1990/05/01','남자', 13);
Insert Into sawon Values(6,'공부만',30,'과장',4003,'1995/05/01','남자', 17);
Insert Into sawon Values(8,'채송화',30,'대리',1703,'1992/06/01','여자', 17);
Insert Into sawon Values(12,'류명한',10,'대리',1800,'1990/10/01','남자', 20);
Insert Into sawon Values(9,'무궁화',10,'사원',1100,'1984/08/01','여자', 12);
Insert Into sawon Values(4,'이미라',30,'대리',2503,'1983/04/01','여자', 17);
Insert Into sawon Values(10,'공부해',30,'사원',1303,'1988/11/01','남자', 4);
Insert Into sawon Values(15,'최진실',10,'사원',2000,'1991/04/01','여자', 12);
Insert Into sawon Values(16,'김유신',30,'사원',400,'1981/04/01','남자', 4);
Insert Into sawon Values(18,'강감찬',30,'사원',1003,'1986/07/01','남자', 4);
--<Gogek> Table 만들기
create table gogek(
gobun number(3),
goname varchar2(10),
gotel varchar2(20),
gojumin varchar2(14),
godam number(3)
);
ALTER TABLE GOGEK ADD constraint gogek_gobun_PK primary key(gobun);
ALTER TABLE GOGEK ADD constraint gogek_gojumin_UQ unique(gojumin);
ALTER TABLE GOGEK ADD constraint gogek_godam_FK foreign key(godam) references sawon(sabun);
insert into gogek values(1,'류민', '123-1234', '700113-1537915',3);
insert into gogek values(2,'강민', '343-1454', '690216-1627914',2);
insert into gogek values(3,'영희', '144-1655', '750320-2636215',null);
insert into gogek values(4,'철이', '673-1674', '770430-1234567',4);
insert into gogek values(5,'류완', '123-1674', '720521-1123675',3);
insert into gogek values(6,'캔디', '673-1764', '650725-2534566',null);
insert into gogek values(7,'똘이', '176-7677', '630608-1648614',7);
insert into gogek values(8,'쇠돌', '673-6774', '800804-1346574',9);
insert into gogek values(9,'홍이', '767-1234', '731225-1234689',13);
insert into gogek values(10,'안나','767-1677', '751015-2432168',4);
commit;