본문 바로가기

공부/KITRI(한국정보기술연구원) 공공데이터 기반 JAVA Programming과정

KITRI 공공데이터 기반 JAVA Programming과정 1일차


용어정리


논리모델링        물리모델링

 엔터티타입        테이블

 속성              컬럼

 행(엔터티)        ROW/RECORD


----------------------------------

객체의 종류


- 테이블(실제 데이터가 저장됨)

- 뷰

- 시퀀스

- 인덱스

- 시노님


객체의 집합 : 스키마

스키마의 집합 : 사용자


오라클에서는 스키마가 따로 제공 안됨

즉, 사용자별로 스키마가 각각 제공됨


RDBMS 종류


- 오라클 (가장많이쓰임)

- MSSqlServer

- MySql

- DB2


테이블간의 관계

 부모엔터티(부모테이블) : 미리 만들어질 테이블

 자식엔터티(자식테이블) : 나중에 만들어질 테이블


기본키컬럼(Primary Key Col) : 다른 행과 구분해주는 식별자 역할을 하는 컬럼

 Employees 테이블의 employee_id 컬럼

 Jobs 테이블의 job_id 컬럼


주/비식별자 관계

 -주식별자관계(실선으로 표시) : 부모테이블의 PK를 자식 테이블의 PK로 사용

 -비식별자관계(점선으로 표시) : 부모테이블의 PK를 자식 테이블의 일반컬럼으로 사용


관계참여수(카디넬리티)

 - 1 : M

 - 1 : 1

 - M : N (물리모델링에서 테이블 설계 힘들기때문에 1 : M 로 풀어내야한다.)


선택/필수참여

 선택참여( o표시 )

 필수참여( 반드시 그래야 한다. )


오라클 설치시 비밀번호 : kitri



--------------------------------------------------------------실습내용

SELECT *

FROM employees


SELECT employee_id, first_name, last_name

FROM employees


--SELECT구조

SELECT   반드시필요

FROM     반드시필요

[

WHERE      선택가능

GROUP BY   선택가능

HAVING     선택가능

ORDER BY   선택가능

]


--처리순서

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

[ SELECTION                         ][ PROJECTION       ]


SELECTION : 조건에 만족하는 행을 선택

PROJECTION : 출력할 컬럼을 선택하여 정렬  


SELECT employee_id, first_name, last_name, salary

FROM employees                           


SELECT employee_id 사번, first_name AS "이름", last_name 성, salary "기본 급여"

FROM employees


SELECT employee_id 사번, first_name||'~'||last_name "성명", salary "기본 급여"

FROM employees


SELECT * 

FROM TAB;


DESC employees


SELECT employee_id, salary, commission_pct

FROM employees


SELECT employee_id, salary, salary+(salary * NVL(commission_pct, 0)) 총급여

FROM employees


--중복제거

SELECT distinct department_id

FROM employees


--WHERE


SELECT * 

FROM employees


--급여가 15000이상인 사원들을 출력하시오.

SELECT *

FROM employees

WHERE salary >= 15000


--입사일자가 90년도 이상인 사원들을 출력하시오.

SELECT *

FROM employees

WHERE hire_date >= '90/01/01'


--급여가 15000이상이고 입사일자가 90년도 이상인 사원들을 출력하시오.

SELECT *

FROM employees

WHERE salary >= 15000 AND hire_date >= '90/01/01'


--급여가 15000이상이거나 입사일자가 90년도 이상인 사원들을 출력하시오.

SELECT *

FROM employees

WHERE salary >= 15000 OR hire_date >= '90/01/01'


--1)AND 2)OR 연산자 우선순위를 갖는다.

--급여가 10000이상 15000이하이거나 입사일자가 88년이상 90년 이하인 사원들을 출력하시오.

SELECT *

FROM employees

WHERE (salary >= 10000 AND salary <= 15000) OR (hire_date <= '90/12/31' AND hire_date >= '88/01/01')


SELECT *

FROM employees

WHERE salary BETWEEN 10000 AND 15000 OR hire_date BETWEEN '88/01/01' AND '90/12/31'


--job_id가 SA_MAN이거나 IT_PROG이거나 MK_MAN인 사원들을 출력하시오.

SELECT employee_id, first_name, job_id

FROM employees

WHERE job_id = 'SA_MAN' OR job_id = 'IT_PROG' OR job_id = 'MK_MAN'


SELECT employee_id, first_name, job_id

FROM employees

WHERE job_id = 'SA_MAN' OR job_id = 'IT_PROG' OR job_id = 'MK_MAN'


--OR를 IN으로 대신

SELECT employee_id, first_name, job_id

FROM employees

WHERE job_id IN ('SA_MAN', 'IT_PROG', 'MK_MAN')


--job_id가 SA_MAN이거나 IT_PROG이거나 MK_MAN이 아닌 사원들을 출력하시오.

SELECT employee_id, first_name, job_id

FROM employees

WHERE job_id NOT IN ('SA_MAN', 'IT_PROG', 'MK_MAN')


--LIKE 연산

--'MAN'으로 끝나는 job_id를 갖는 사원들을 출력하시오.

SELECT employee_id, first_name, job_id

FROM employees

WHERE job_id LIKE '%MAN'


--NULL연산자 NULL과 비교할경우 IS NULL 과 IS NOT NULL을 사용한다.

수당을 받지않는 사원들을 출력하시오.

SELECT employee_id, first_name, commission_pct

FROM employees

WHERE commission_pct IS NULL


수당을 받는 사원들을 출력하시오.

SELECT employee_id, first_name, commission_pct

FROM employees

WHERE commission_pct IS NOT NULL

(WHERE NOT commission_pct IS NULL)


--입사일자가 빠른 사원부터 출력하시오. 단 입사일자가 같은경우 이름내림차순출력하시오.

SELECT employee_id, first_name, salary, hire_date

FROM employees

ORDER BY hire_date ASC, first_name DESC


--hire_date 이 몇번째인지, 별칭사용 가능

SELECT employee_id, first_name, salary, hire_date

FROM employees

ORDER BY 4 ASC, 이름 DESC


--SELECT절에서 사용하지 않은 컬럼을 ORDER BY절에서 사용가능

SELECT employee_id, first_name, salary, hire_date

FROM employees

ORDER BY last_name ASC


--WHERE절에서 SELECT절의 별칭을 사용할 수 있을까?(위에나온 처리순서때문)

SELECT first_name 이름

FROM employees

WHERE 이름 LIKE '%e%'


--홀수사번을 갖는 사원들을 출력하시오.

SELECT employee_id, first_name

FROM employees

WHERE MOD(employee_id, 2) = '1'


--사원의 총급여를 출력하시오. 총급여는 급여+급여*수당입니다.

SELECT employee_id, first_name, salary + (salary * NVL(commission_pct, 0)) 총급여

FROM employees


--사원의 월급여를 출력하시오. 총급여는 급여+급여*수당입니다. 단 월급여는 소숫점이하 3자리에서 버림

SELECT employee_id, first_name, TRUNC(((salary + (salary * NVL(commission_pct, 0))) / 12), 2) 월급여

FROM employees


--자바에서 String.toUpperCase( ) 대문자변환

--자바에서 String.toLowerCase( ) 소문자변환

--자바에서 String.length( ) 문자개수

--자바에서 String.substring(시작위치, 끝위치)

"Welcome to Oracle".substring(4, 6); //index4부터 index6-1까지 -> om 출력

--자바에서 String.indexOf( )

"WELCOME to Oracle".indexOf("O"); // 4 출력


--날짜

SELECT SYSDATE 

FROM dual


날짜 + 숫자 ==> 날짜

SELECT SYSDATE+1 

FROM dual

날짜 - 숫자 ==> 날짜

SELECT SYSDATE-1

FROM dual

날짜 - 날짜 ==> 숫자

SELECT SYSDATE-hire_date

FROM employees


--문자형값을 날짜형으로 변환

SELECT '15/01/01'    <- 날짜가 아니라 문자값으로 인식한다.

FROM dual


SELECT TO_DATE('15/01/01') 

FROM dual


SELECT SYSDATE-TO_DATE('2015-01-01', 'YYYY-MM-DD')

FROM dual


--개월더하기

SELECT ADD_MONTHS(SYSDATE,6)

FROM dual

SELECT ADD_MONTHS(SYSDATE,-5)

FROM dual


--두날짜사이의 개월수구하기

SELECT MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, -5))

FROM dual


--해당요일의 가장 가까운 날짜를 반환

SELECT NEXT_DAY(SYSDATE, '월') 

FROM dual


--해당월의 마지막 일자를 반환

SELECT LAST_DAY(SYSDATE)

FROM dual





==============================문제풀기 메일에 내용써서 보내기 내일까지=================================



1번

SELECT *

FROM employees

WHERE salary < 10000 AND department_id <> 30


2번

SELECT *

FROM employees

WHERE (department_id BETWEEN 30 AND 60) AND (salary BETWEEN 10000 AND 15000)


3번

SELECT employee_id, first_name

FROM employees

WHERE department_id IS NULL


4번

SELECT employee_id, first_name, job_id

FROM employees

WHERE job_id LIKE '%CLERK' 

ORDER BY job_id ASC


5번

SELECT *

FROM employees

WHERE first_name LIKE '__an%'


SELECT first_name, INSTR(first_name, 'an', 3)

FROM employees

WHERE INSTR(first_name, 'an', 3) = 3


SELECT *

FROM employees

WHERE SUBSTR(first_name, 3, 2) = 'an'


6번

SELECT employee_id "사번", SYSDATE - hire_date "근무일수"

FROM employees


7번

SELECT employee_id "사번", FLOOR(MONTHS_BETWEEN(SYSDATE, hire_date) / 12) "근무년수"

FROM employees


8번

SELECT LAST_DAY(SYSDATE - 4830) "2002년2월의마지막일자"

FROM DUAL


9번

SELECT LAST_DAY(SYSDATE - 30) "전달의마지막일자"

FROM DUAL


10번

SELECT TO_CHAR(TO_DATE('2013-01-01'), 'DAY') "2013년1월1일의요일"

FROM DUAL