용어정리
논리모델링 물리모델링
엔터티타입 테이블
속성 컬럼
행(엔터티) 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
'공부 > KITRI(한국정보기술연구원) 공공데이터 기반 JAVA Programming과정' 카테고리의 다른 글
KITRI 공공데이터 기반 JAVA Programming과정 6일차 (0) | 2015.05.09 |
---|---|
KITRI 공공데이터 기반 JAVA Programming과정 5일차 (0) | 2015.05.09 |
KITRI 공공데이터 기반 JAVA Programming과정 4일차 (0) | 2015.05.09 |
KITRI 공공데이터 기반 JAVA Programming과정 3일차 (0) | 2015.05.09 |
KITRI 공공데이터 기반 JAVA Programming과정 2일차 (0) | 2015.05.08 |