조컴퓨터

200916 SQL활용 04 - SQL View와 Join Ⅰ 본문

자바 웹개발자 과정/Database

200916 SQL활용 04 - SQL View와 Join Ⅰ

챠오위 2020. 9. 17. 12:33

200915 SQL활용 03 - SQL연습문제 emp 테이블

 

 

사원 테이블 전체 레코드 갯수

 

select count(*) from emp;

 

결과값

 

 

 

 

문제1) 전체 행의 갯수를 조회하시오.

 

select count(*) from emp;

 

결과값

 

 

 

 

문제2) 테이블의 칼럼(필드) 목록을 확인하시오.

 

select empno, ename, job, mgr, hiredate, sal, deptno from emp;

 

결과값

 

 

 

 

문제3) 사원 이름순(오름차순) 정렬하시오.

 

select * from emp order by ename asc;

 

결과값

 

 

※ 개나리, 김연아, 김혜수, 라일락, 무궁화, 박지성, 손흥민, 송강호, 정우성, 진달래, 홍길동

 

 

 

문제4) 사원 이름순(내림차순) 정렬하시오.

 

select * from emp order by ename desc;

 

결과값

 

 

※ 홍길동, 진달래, 정우성, 송강호, 손흥민, 박지성, 무궁화, 라일락, 김혜수, 김연아, 개나리

 

 

 

문제5) 급여 내림차순으로 사원이름(ename), 급여(sal), 부서코드(deptno)를 조회하시오.

 

select ename, sal, deptno
from emp order by sal desc;

 

결과값

 

 

 

 

문제6) 부서코드 오름차순, 급여 내림차순으로

         사원이름(ename), 급여(sal), 부서코드(deptno)를 조회하시오.

 

select ename, sal, deptno
from emp order by deptno asc, sal desc;

 

결과값

 

 

 

 

문제7) 이름(ename)/입사일자(hiredate)/부서코드(deptno)를

         부서코드 오름차순, 입사일자(hiredate) 오름차순으로 조회하시오.

 

select ename, hiredate, deptno
from emp order by deptno asc, hiredate asc;

 

결과값

 

 

※ deptno로 묶고, deptno와 hiredate로 오름차순

 

 

 

문제8) 직급(job) 칼럼의 중복데이터를 하나씩만 조회하시오.

 

내 답안) 

 

select job from emp group by job;

 

결과값

 

 

선생님 답안)

 

select distinct(job) from emp;

 

결과값

 

 

 

 

문제9) emp 테이블의 job 오름차순, sal 내림차순으로 정렬해서

         ename 이름, job 직급, sal 급여 칼럼명으로 별칭을 바꿔서 조회하시오.

 

select ename as 이름, job as 직급, sal as 급여
from emp order by job, sal desc;

 

결과값

 

 

 

 

문제10) 급여가 100보다 많고 400보다 적은 직원을 조회하시오(급여 내림차순)

 

select ename, sal
from emp
where sal>100 and sal<400
order by sal desc;

 

결과값

 

 

cf) 

 

select ename, sal
from emp
where sal between 100 and 400
order by sal desc;

 

결과값

 

 

 

 

문제11) 급여가 100 이하 또는 400 이상의 직원을 조회하시오. (급여 내림차순)

 

select ename, sal
from emp
where sal<=100 or sal>=400
order by sal desc;

 

결과값

 

 

 

 

문제12) 직급(job)이 과장 또는 부장인 직원들을 이름순으로 조회하시오.

 

① where 조건절

 

select ename, job
from emp
where job='과장' or job='부장'
order by ename;

 

결과값

 

 

② in

 

select ename, job
from emp
where job in ('과장', '부장')
order by ename;

 

결과값

 

 

 

 

문제13) 부서코드(deptno)가 30인 직원을 조회하시오.

 

select ename, deptno from emp where deptno=30;

 

결과값

 

 

 

 

문제14) 중복된 부서코드를 한 개씩만 조회하시오.

 

① distinct

 

select distinct(deptno) from emp;

 

결과값

 

 

② group by

 

select deptno from emp group by deptno;

 

결과값

 

 

 

 

문제15) 부서코드가 10 또는 20 또는 30인 직원을 조회하시오.

           (단, or, in 연산자 각각 활용해서 조회)

 

① or

 

select ename, deptno
from emp
where deptno=10 or deptno=20 or deptno=30;

 

결과값

 

 

② in

 

select ename, deptno
from emp
where deptno in 10 or deptno in 20 or deptno in 30;

 

결과값

 

 

 

 

문제16) 급여가 300 ~ 500인 직원을 급여순으로 조회하시오.

           (단, and, between 연산자 각각 활용해서 조회)

 

① and 

 

select ename, sal
from emp
where sal>=300 and sal<=500
order by sal desc;

 

결과값

 

 

② between

 

select ename, sal
from emp
where sal between 300 and 500
order by sal desc;

 

결과값

 

 

 

 

문제17) 이름이 '무궁화' 조회하시오.

 

select * from emp
where ename='무궁화';

 

결과값

 

 

 

 

문제18) 김씨 성을 조회하시오.

 

select * from emp
where ename like '김%';

 

결과값

 

 

 

 

문제19) 이름에 '화'가 포함된 줄을 조회하시오.

 

select * from emp
where ename like '%화%';

 

결과값

 

 

 

 

문제19-1) 이름에 '성'이 포함된 줄을 조회하시오.

 

select * from emp
where ename like '%성%';

 

결과값

 

 

 

 

문제20) 부서코드가 20인 레코드에 대하여

           급여의 1%를 커미션으로 책정하시오.

 

① comm 

 

select comm from emp;

 

결과값

 

 

② count(comm) -- null값은 카운트하지 않음

 

select count(comm) from emp;

 

결과값

 

 

③ update ~ set

 

update emp
set comm=sal*0.01
where deptno=20;

 

④ select 결과

 

select deptno, comm from emp;

 

결과값

 

 

※ deptno=20에서만 comm 발생

 

 

 

문제21) 연봉을 아래와 같이 구한 후 이름, 급여, 커미션, 연봉을 조회하시오.

           연봉 구하는 식 : 급여(sal) * 12개월 + 보너스(comm)

 

select ename, sal, comm, sal*12+comm as 연봉
from emp;

 

결과값

 

 

 

 

문제22) 커미션이 null이면 0으로 바꾼 후 연봉을 다시 계산해서

          이름, 급여, 커미션, 연봉을 조회하시오.

 

① count(*) where comm is null;

 

select count(*) from emp where comm is null;

 

결과값

 

 

② comm 칼럼에 null값을 0으로 바꾸기

 

select ename, nvl(comm,0) from emp;

 

결과값

 

 

③ 문제21) 연봉 구하는 식 활용

 

select ename, sal, comm, sal*12+nvl(comm,0) as 연봉
from emp;

 

결과값

 

 

④ 연봉을 반올림해서 소수점 없이 조회

 

select ename, sal, comm
       , round(sal*12+nvl(comm,0),0) as 연봉
from emp;

 

결과값

 

 

 

 

문제23) 각 사람의 급여를 검색해서 '누구누구의 급여는 얼마입니다.'로 조회하시오.

           (단, || 는 결합연산자)

 

select ename || '의 급여는 ' || sal || '만 원입니다'
from emp;

 

결과값

 

 

 

 

문제24) 다음의 SQL문을 분석하시오.

 

select empno, sal
from emp
where not(sal>200 and sal<300) --not(201 ~ 299)
order by sal;

 

 

급여가 200만 원보다 많거나 300만 원보다 적은 직원들을 제외한 나머지 직원들의 직원번호와 그 직원의 급여를 오름차순으로 정렬해 놓은 것

 

 

 

 

문제25) 다음의 SQL문을 분석하시오.

 

select empno, sal
from emp
where not sal>200 and sal<300 --not(201~) and ~300
order by sal;

 

급여가 200만 원보다 적거나 같으면서 300만 원보다는 적은 직원들의 직원번호와 그 직원의 급여를 오름차순으로 정렬해 놓은 것

 

 

 

 

연산자 우선순위

( ) 괄호 : 연산자 우선순위보다 우선함

 

1순위 : 비교연산자, SQL 연산자, 산술 연산자

2순위 : not

3순위 : and

4순위 : or

5순위 : 결합연산자

 

 

 

문제26) emp 테이블에서 입사일(hiredate)이 2005년 1월 1일 이전인 사원에 대하여

          사원의 이름(ename), 입사일, 부서번호(deptno)를 입사일순으로 조회하시오.

 

select ename, hiredate, deptno
from emp
where hiredate<'2005-01-01' --날짜 데이터 문자열 형태
order by hiredate;

 

결과값

 

 

 

 

문제27) emp 테이블에서 부서번호가 20번이나 30번인 부서에 속하는

          사원들에 대하여 이름, 직업코드(job), 부서번호를 이름순으로 조회하시오.

          (단, or, in 연산자를 각각 활용해서 조회)

 

① or

 

select ename, job, deptno
from emp
where deptno=20 or deptno=30
order by ename;

 

② in

 

select ename, job, deptno
from emp
where deptno in (20, 30)
order by ename;

 

결과값

 

 

 

 

문제28) 사번, 이름, 부서를 조회하시오.

          (단, 부서코드가 10이면 관리부

                             , 20이면 영업부

                             , 30이면 교육부로 바꿔서 출력)

 

select empno as 사번, ename as 이름, deptno, case when deptno=10 then '관리부'
                                                 when deptno=20 then '영업부'
                                                 when deptno=30 then '교육부'
                                   end as 부서
from emp;

 

결과값

 

 

 

 

 

emp 테이블 관련 연습문제

 

 

문제1) 부서코드별 급여 합계를 구하시오.

 

select deptno, sum(sal)
from emp
group by deptno
order by deptno;

 

결과값

 

 

 

 

문제2) 부서코드별 급여 합계를 구해서 그 합계값이 1500 이상만 조회하시오.

 

select deptno, sum(sal) as hap
from emp
group by deptno
having sum(sal)>=1500
order by sum(sal);

 

결과값

 

 

※ 실행순서

 

select deptno, sum(sal) as hap --실행순서 4)
from emp                       --실행순서 1)
group by deptno                --실행순서 2)
having sum(sal)>=1500          --실행순서 3)
order by sum(sal);             --실행순서 5)
--order by hap; --가능

 

 

 

문제3) 부서별 급여 평균이 300 이상을 조회하시오.

 

select deptno, round(avg(sal),0) as 급여평균
from emp
group by deptno
having avg(sal)>=300;

 

결과값

 

 

 

 

문제3-1) 각 행들의 급여가 300 이상인 행을 대상으로

            부서코드별 급여 평균이 300 이상을 조회하시오.

 

select deptno, round(avg(sal),0) as 급여평균
from emp
where sal>=300
group by deptno
having avg(sal)>=300
order by deptno;

 

결과값

 

 

 

 

문제4) 급여가 300 이상 데이터 중에서 부서코드별 급여 평균을 구해서

         급여 평균 순으로 조회하시오.

 

select deptno, round(avg(sal),0) as 급여평균
from emp
where sal>=300
group by deptno
order by avg(sal);

 

결과값

 

 

 

 

문제5) 급여가 300 이상 데이터 중에서 부서코드별 급여 평균이 400 이상을

         급여 순으로 조회하시오.

 

select deptno, round(avg(sal),0) as 급여평균
from emp
where sal>=300
group by deptno
having avg(sal)>=400
order by avg(sal) desc;

 

결과값

 

 

※ 실행순서

 

select deptno, round(avg(sal),0) as 급여평균  --실행순서 5)
from emp                                      --실행순서 1)
where sal>=300                                --실행순서 2)
group by deptno                               --실행순서 3)
having avg(sal)>=400                          --실행순서 4)
order by avg(sal) desc;                       --실행순서 6)

 

급여 300 이상의 데이터 중 부서 단위로 묶은 후 400이 넘는 급여의 평균을 계산해 해당 금액을 내림차순으로 정렬한다.

 

 

문제6) hiredate 칼럼을 사용하여 월별로 입사한 인원수를 구하시오.

 

① select hiredate

 

select hiredate from emp order by hiredate desc;

 

결과값

 

 

 

 

②-1) month값을 문자열로 반환

 

select to_char(hiredate, 'mm') from emp;

 

결과값

 

 

②-2) 또는 조금 더 구체적으로

select to_char(hiredate, 'mm') || '월' from emp;

 

결과값

 

 

 

③-1) 월별로 입사한 인원수 count(*)

 

select to_char(hiredate, 'mm') as 월, count(*) as 갯수
from emp
group by to_char(hiredate, 'mm')
order by to_char(hiredate, 'mm') desc;

 

결과값

 

 

③-2) 또는 조금 더 시각적으로 

select count(case when to_char(hiredate, 'MM')='01' then count(*) end) as "1월"
       , count(case when to_char(hiredate, 'MM')='02' then count(*) end) as "2월"
       , count(case when to_char(hiredate, 'MM')='03' then count(*) end) as "3월"
       , count(case when to_char(hiredate, 'MM')='04' then count(*) end) as "4월"
       , count(case when to_char(hiredate, 'MM')='05' then count(*) end) as "5월"
       , count(case when to_char(hiredate, 'MM')='06' then count(*) end) as "6월"
       , count(case when to_char(hiredate, 'MM')='07' then count(*) end) as "7월"
       , count(case when to_char(hiredate, 'MM')='08' then count(*) end) as "8월"
       , count(case when to_char(hiredate, 'MM')='09' then count(*) end) as "9월"
       , count(case when to_char(hiredate, 'MM')='10' then count(*) end) as "10월"
       , count(case when to_char(hiredate, 'MM')='11' then count(*) end) as "11월"
       , count(case when to_char(hiredate, 'MM')='12' then count(*) end) as "12월"
from emp
group by hiredate
having to_char(hiredate, 'MM')>='01' and to_char(hiredate, 'MM')<='12';

 

결과값

 

 

 

 

문제7) 매니저별 담당인원수를 조회하시오.

 

① select 매니저 order by 매니저

 

select mgr, count(*)
from emp
group by mgr
order by count(*) desc;

 

결과값

 

 

② count(*) 매니저

 

select mgr, count(*)
from emp
group by mgr
order by count(*) desc;

 

결과값

 

 

또는

 

① select distinct(매니저)

 

select distinct(mgr) from emp;

 

결과값

 

 

select count(case when 매니저=번호 then 1 end) as "번호", ~

 

select count(case when mgr=7839 then 1 end) as "7839"
       , count(case when mgr=7698 then 1 end) as "7698"
       , count(case when mgr=7902 then 1 end) as "7902"
       , count(case when mgr=7566 then 1 end) as "7566"
from emp
order by mgr desc;

 

결과값

 

 

 

 

문제8) 사원번호 7654의 급여보다 작은 행을 조회하시오.

 

① 사원번호 7654의 급여

 

select sal from emp where empno=7654;

 

결과값

 

 

② 사원번호 7654의 급여보다 작은 행 비교

 

select empno, ename, job, sal
from emp
where sal<(select sal from emp where empno=7654);

 

결과값

 

 

 

 

문제9) 부서별로 급여+커미션을 구했을 때 최대값, 최소값, 평균값(반올림)을

         부서순으로 조회하시오.

 

① select comm

 

select comm from emp;

 

결과값

 

 

② select 부서번호, 급여+커미션

 

select deptno, sal+comm from emp;

 

결과값

 

 

※ 이때 null값이 출력되기 때문에 급여+커미션 값을 구하기 위해서는 nvl( ) 함수 사용이 필요하다. 

 

③ select 부서번호, 급여, 커미션, 급여+커미션( nvl( ) )

 

select deptno, sal, comm, sal+nvl(comm,0)
from emp order by deptno;

 

결과값

 


④ select 사원명, 급여+커미션( nvl( ) ) tot, 부서번호

 

select ename, sal+nvl(comm,0) as tot, deptno
from emp
order by deptno desc, tot desc;

 

결과값

 

 

⑤ group by

 

select max(sal+nvl(comm,0)) as 최대값
       , min(sal+nvl(comm,0)) as 최소값
       , round(avg(sal+nvl(comm,0)),1) as 평균값
from emp
group by deptno
order by deptno;

 

결과값

 

 

 

commit;

 

※ commit은 필수이다.

 

 

 

 

훈련생이 출제한 문제들

 

문제1) hiredate 칼럼을 사용하여 월별로 입사한 인원수를 아래와 같은 표 형태로 출력하시오.

 

 

① count(case when ~ then 1 end)

select count(case when to_char(hiredate, 'mm')='01' then 1 end) as "1월"
       , count(case when to_char(hiredate, 'mm')='02' then 1 end) as "2월"
       , count(case when to_char(hiredate, 'mm')='03' then 1 end) as "3월"
       , count(case when to_char(hiredate, 'mm')='04' then 1 end) as "4월"
       , count(case when to_char(hiredate, 'mm')='05' then 1 end) as "5월"
       , count(case when to_char(hiredate, 'mm')='06' then 1 end) as "6월"
       , count(case when to_char(hiredate, 'mm')='07' then 1 end) as "7월"
       , count(case when to_char(hiredate, 'mm')='08' then 1 end) as "8월"
       , count(case when to_char(hiredate, 'mm')='09' then 1 end) as "9월"
       , count(case when to_char(hiredate, 'mm')='10' then 1 end) as "10월"
       , count(case when to_char(hiredate, 'mm')='11' then 1 end) as "11월"
       , count(case when to_char(hiredate, 'mm')='12' then 1 end) as "12월"
from emp;

 

② select sum(case when ~ then 1 else 0 end)

 

select 
sum(case when to_char(hiredate, 'mm')='01' then 1 else 0 end) as "1월"
, sum(case when to_char(hiredate, 'mm')='02' then 1 else 0 end) as "2월"
, sum(case when to_char(hiredate, 'mm')='03' then 1 else 0 end) as "3월"
, sum(case when to_char(hiredate, 'mm')='04' then 1 else 0 end) as "4월"
, sum(case when to_char(hiredate, 'mm')='05' then 1 else 0 end) as "5월"
, sum(case when to_char(hiredate, 'mm')='06' then 1 else 0 end) as "6월"
, sum(case when to_char(hiredate, 'mm')='07' then 1 else 0 end) as "7월"
, sum(case when to_char(hiredate, 'mm')='08' then 1 else 0 end) as "8월"
, sum(case when to_char(hiredate, 'mm')='09' then 1 else 0 end) as "9월"
, sum(case when to_char(hiredate, 'mm')='10' then 1 else 0 end) as "10월"
, sum(case when to_char(hiredate, 'mm')='11' then 1 else 0 end) as "11월"
, sum(case when to_char(hiredate, 'mm')='12' then 1 else 0 end) as "12월"
from emp;

 

결과값

 

 

--using sum like than that says works fine. i think that you forget the "else" in the "case when" clause.

 

 

 

문제2) 매니저별 담당인원수와 매니저 이름을 매니저번호(mgr)와 사원번호(empno)에 매치하여 이름이 있으면 함께 조회하시오.

 

① 매니저번호 출력

 

select mgr from emp group by mgr;

 

② 매니저번호, 담당인원수 출력

 

select mgr, count(*) from emp group by mgr;

 

③-1) 매니저번호, 사원번호 매칭 case when exists

 

select mgr, count(*)
       , case when exists(select ename from emp where empno=(select mgr from emp group by mgr)) then ename else 'null'
from emp 
group by mgr, ename;

 

③-2) 매니저번호, 사원번호 매칭 where exists   * 이거 안됨 / 차후 수정 *

 

--7839, 7698, 7902, 7566
select mgr, count(*), ename
from emp 
group by mgr, ename
where exists (select ename
              from emp
              where empno = (select mgr from emp group by mgr));

select AA.mgr, emp.ename, count(*)
from (
        select mgr, count(*)
        from emp
        group by mgr
     ) AA join emp 
group by AA.mgr, emp.ename;



select mgr from emp group by mgr;
select mgr, empno from emp;
select distinct(mgr) from emp;

select mgr, empno
from emp
where mgr=empno;

from (
        select mgr as 매니저번호, ename as 매니저이름
        from emp
        group by mgr, ename, empno
        having empno = (select mgr from emp group by mgr);

 

결과값

 

 

 

 

 

문제3) 회사 직책이 사원 중에서 12월에 입사한 직원들을 조회하시오.

 

① 사원의 입사일 조회

 

select job, hiredate from emp where job='사원';

 

② 12월에 입사한 사원 조회

select count(case when to_char(hiredate, 'mm')='12' then 1 end) as "12월"
from emp
where job='사원';

 

결과값

 

 

 

 

 

문제4) 입사한지 만 10년 이상된 사람에 한해 현재 연봉에서 10% 인상시켰을 때

         사번, 이름, 입사일, 현재 연봉, 인상 후 연봉, 인상된 금액으로

         고액 연봉 순으로 조회하시오.

 

 

 

결과값

 

 

 

 

 

문제5) 자신의 급여가 평균 급여보다 많고 이름에 '지'가 들어가는 사원과

         동일한 부서에 근무하는 모든 사원의 사원번호, 이름 및 급여를 출력하시오.

 

select empno, ename, sal, deptno
from emp
group by empno, ename, sal, deptno
having empno in (select empno from emp where sal>avg(sal) and ename like '%지%' group by deptno, empno, sal);

 

결과값

 

 

 

 

 

문제6) 입사연도가 짝수인 사람들의 월급의 평균을 job별로 출력하시오.

 

select job, avg(sal) as avg from emp 
where mod((substr(hiredate,0,2)),2)=0 
group by job;

 

결과값

 

 

 

 

 

 

학사관리

 

1) 테이블 생성

 

----------------------------- 학생 테이블
create table tb_student(
   hakno    char(5)     not null        --학번
  ,uname    varchar(10) not null        --이름
  ,email    varchar(20) unique          --이메일
  ,address  varchar(20) not null        --주소
  ,phone    varchar(20)                 --전화번호
  ,regdt    date        default sysdate --등록일
  ,primary key(hakno)                   --기본키
);

----------------------------- 과목 테이블
create table tb_gwamok(
   gcode    char(4)      not null        --과목코드
  ,gname    varchar(10)  not null        --과목명
  ,ghakjum  number(2)    default 1       --학점
  ,regdt    date         default sysdate --등록일
  ,primary key(gcode)                    --기본키
);

----------------------------- 수강 테이블
create table tb_sugang(
   sno    number(3)  not null       --일련번호
  ,hakno  char(5)    not null       --학번
  ,gcode  char(4)    not null       --과목코드
  ,primary key(sno)                 --기본키
);

 

 

2) 수강 테이블 시퀀스 생성

 

create sequence sugang_seq;

 

 

3) 행 추가

 

----------------------------- tb_student테이블에 레코드 추가하기
insert into tb_student(hakno,uname,address,phone,email)
values('g1001','홍길동','서울','111-5558','11@naver.com');

insert into tb_student(hakno,uname,address,phone,email)
values('g1002','홍길동','제주','787-8877','33@daum.net');

insert into tb_student(hakno,uname,address,phone,email)
values('g1003','개나리','서울','554-9632','77@naver.com');

insert into tb_student(hakno,uname,address,phone,email)
values('g1004','홍길동','부산','555-8844','88@daum.net');

insert into tb_student(hakno,uname,address,phone,email)
values('g1005','진달래','서울','544-6996','33@nate.com');

insert into tb_student(hakno,uname,address,phone,email)
values('g1006','개나리','제주','777-1000','66@naver.com');


----------------------------- tb_gwamok 테이블에 레코드 추가하기
insert into tb_gwamok(gcode,gname,ghakjum)
values('p001','OOP',3);

insert into tb_gwamok(gcode,gname,ghakjum)
values('p002','Oracle',3);

insert into tb_gwamok(gcode,gname,ghakjum)
values('p003','JSP',2);

insert into tb_gwamok(gcode,gname,ghakjum)
values('d001','웹표준',1);

insert into tb_gwamok(gcode,gname,ghakjum)
values('d002','포토샵',5);

insert into tb_gwamok(gcode,gname,ghakjum)
values('d003','플래시',3);

insert into tb_gwamok(gcode,gname,ghakjum)
values('p004','MVC',3);


------------------------------- tb_sugang 행 추가하기
insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1001','p001');

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1002','p002');

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1002','p001');

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1001','p003');

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1005','d001');

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1005','d002');

insert into tb_sugang(sno,hakno,gcode)
values(sugang_seq.nextval,'g1001','d001');

 

 

4) 테이블 전체 레코드 갯수 조회하기

 

--tb_student 테이블 전체 레코드 갯수
select count(*) from tb_student;

--tb_gwamok 테이블 전체 레코드 갯수
select count(*) from tb_gwamok;

--tb_sugang 테이블 전체 레코드 갯수
select count(*) from tb_sugang;

 

 

5) commit은 필수이다.

 

commit;

 

 

 

 

다음은 잘못 설계된 테이블의 예시이다.

 

 

위의 학생 테이블은 홍길동의 수강 신청 과목이 추가될수록 칼럼이 계속 추가되는 현상을 보이고 있다.

즉, NULL값이 많이 발생하고 있다.

 

※ 테이블 설계가 잘못된 이유 : 서로 다른 주제가 같이 있음

 

 

 

 

 

2단계 제2정규화

 

 

테이블들을 정리해 놓은 후, 보면서 작성하는 것이 편하다.

 

 

 

 

제1정규화 : 분해할 수 없는 하나의 값(원자값)을 가져야 한다.