1. 아래가 에러가 나는 이유는?

SELECT deptno, ename, avg(sal) FROM emp GROUP BY deptno;

해당 에러(ORA-00979: not a GROUP BY expression) 여러 컬럼들을 그룹으로 묶어서 조회할 때 발생할 수 있는 에러 조회하는 컬럼과 그룹을 적용하는 컬럼의 차이로 인해서 해당 기준이 모호하므로 발생한다. 따라서, GROUP BY 문을 사용할 때는 반드시 그룹 함수 외에 조회하는 컬럼 모두를 표시해야 한다.

SELECT deptno, ename, avg(sal) FROM emp GROUP BY deptno, ename;

 

 

2. 그룹 함수의 종류는?

  • COUNT: 테이블에서 조건을 만족하는 행의 개수를 반환한다.
    -- 사원 테이블의 사원들 중에서 커미션(comm)을 받은 사원의 수를 구하는 쿼리문
    select count(comm) from emp;
      
    -- 중복 제거를 반영하여 담당업무의 개수를 구하는 쿼리문
    select count(distinct job) from emp;​
  • MAX / MIN: 지정한 컬럼에서 최대 값 혹은 최소 값을 반환한다.
    -- 가장 높은 급여와 가장 낮은 급여를 구하는 쿼리문
    select min(sal), max(sal) from emp;​
  • SUM: 지정한 컬럼의 합산 값을 반환한다.
    -- 총 급여를 구하는 쿼리문
    select sum(sal) from emp;​
  • AVG: 지정한 컬럼의 평균 값을 반환한다.
    -- 급여 평균을 구하는 쿼리문
    select trunc(avg(sal)) from emp;​
  • STDDEV: 지정한 컬럼의 표준편차 값을 반환한다.
    -- 급여의 표준편차를 구하는 쿼리문
    select stddev(sal) from emp;​
  • ROLLUP: 지정한 컬럼을 그룹화하여 소계(Sub Total) 및 총계(Grand Total)를 반환한다.
  • CUBE: 해당 그룹이 가지는 모든 경우의 수에 대한 소계 및 총계를 반환한다.
  • GROUPING SETS: 각 컬럼별 소계만 반환한다.

 

 

3. 오라클에서 형의 종류와 변환 함수에 대하여 설명하시오.

  • TO_CHAR: 숫자나 날짜 문자열로 변환한다.
    -- 각 지역별 통화 기호를 앞에 붙이고 천 단위마다 콤마를 붙여서 출력하는 쿼리문 (예: \1,230,000)
    select ename, sal, to_char(sal, 'L999,999') from emp;​
  • TO_NUMBER: 문자 숫자로 변환한다.
    select to_number('20,000', '99,999') - to_number('10,000', '99,999') from dual;​
  • TO_DATE: 문자 날짜를 변환한다.
    select ename, hiredate from emp where hiredate=to_date(19810220, 'YYYYMMDD');​

 

 

4. decode 함수에 대하여 설명하시오.

: 조건에 따라 서로 다른 처리를 하는 함수로 한정된 비교 연산자를 통한 조건이 일치한다는 경우하에 적용할 수 있다.

select deptno, decode(deptno, 10, 'A', 20, 'B', 'DEFAULT') 
from emp 
order by deptno;
select ename, deptno, 
	decode(deptno, 
           10, 'ACCOUNTING', 
           20, 'RESEARCH', 
           30, 'SALES', 
           40, 'OPERATIONS') 
	as DNAME 
from emp;

 

 

5. CASE 함수에 대하여 설명하시오.

: 조건에 따라 서로 다른 처리가 가능한 함수로 다양한 비교 연산자를 적용하여 조건 및 범위를 지정할 수 있다.

select ename, deptno,
    case when deptno=10 then 'ACCOUNTING'
         when deptno=20 then 'RESEARCH'
         when deptno=30 then 'SALES'
         when deptno=40 then 'OPERATIONS'
    end as DNAME from emp;

 

 

6. 아래를 프로그래밍 하시오.

자바 빈을 이용하여 객체 생성 하도록 할 것. 인풋박스(inputbox) 두 개 생성하여 가로, 세로의 형태로 할 것(HTML) 결과를 뿌리는 페이지 구현(JSP)

 

6-1-1. 소스 코드 (HTML)

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>사각형의 가로 세로 값을 입력하자!</title>
</head>
<body>
	<body>
		<form action="output_page.jsp" method="post">
			가로 : <input type = "text" name = "width"><br>
			세로 : <input type = "text" name = "height"><br>
			<input type="submit" value="계산">
		</form>
	</body>
</body>
</html>

 

6-1-2. 소스 코드 (자바 빈)

package edu.bit.ex;

public class Square {
	private int width;
	private int height;

	public Square() { }

	public int getWidth() {
		return width;
	}

	public void setWidth(int width) {
		this.width = width;
	}

	public int getHeight() {
		return height;
	}

	public void setHeight(int height) {
		this.height = height;
	}

	public int getArea(int width, int height) {
		return width * height;
	}
}

 

6-1-3. 소스 코드 (JSP)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<jsp:useBean id="sq" class="edu.bit.ex.Square"></jsp:useBean>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Output Page</title>
</head>
<body>
	<%
		String temp1 = request.getParameter("width");
		String temp2 = request.getParameter("height");
			
		int width = Integer.parseInt(temp1);
		int height = Integer.parseInt(temp2);
		
		out.println("입력한 값에 따라 사각형의 넓이는 ");
		out.println(sq.getArea(width, height) + " 입니다.");
	%>
</body>
</html>

 

6-2. 구현 화면

 

 

7.MVC 모델에 대하여 설명하시오.

7-1. MVC 모델의 개요

: MVC(Model-View-Controller) 모델 사용자(User) 시점에서 어플리케이션을 이용할 때 일어나는 소프트웨어 디자인 패턴 중 하나이다. 해당 모델의 장점 사용자 인터페이스와 비즈니스 로직을 분리하여 상호간의 충돌을 최소화함에 있다.

 

7-2. 모델(Model)

: 어플리케이션의 정보를 나타내는 파트 상태가 변경될 때 뷰와 컨트롤러에게 통보한다.

 

7-3. 뷰(View)

: 사용자에게 최종적으로 보여지는 파트 결과물을 생성하기 위해 모델로부터 통보받은 정보를 반영하여 결과를 최신화하는 특징이 있다.

 

7-4. 컨트롤러(Controller)

: 데이터와 비즈니스 로직 사이의 상호 동작을 관리하는 파트 모델에게 명령을 보내 상태를 변경할 수 있는 기능을 가지며 모델이 변화될 때 적용되는 명령을 첨삭할 수 있다. 또한 뷰에게도 명령을 보내 모델의 표시 방법을 바꿀 수 있다.