Java & Oracle

오라클, SELECT, 이클립스 오라클 연결

AlreadyNo 2014. 4. 15. 11:59

윈도우

실행-services.msc 로 서비스로 가서 OracleXETNSListener 아 OracleServiceXE 를 시작해줌.

명령프롬프트를 띄어 sqlplus scott으로 로그인. 비번치고 들어가줌.

show user;  으로 현재 사용 중인 유저확인.

select * from tab; 으로 가능한 테이블 확인.

DESC emp     emp테이블에 대하여 describe해줘.

select empno,enmae,job

from emp

where sal >=200;   

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

oracle sqlgate를 띄우고.  OracleRoom 폴더를 만들어주고 현재 날짜로 저장.

/*SELECT empno, ename, mgr, hiredate

FROM emp*/


/*SELECT empno, ename, mgr, hiredate

FROM emp

WHERE comm IS NOT NULL;*/


--SELECT의 기능

--1. selection : 조건검색, row 에 대한 필터링 --> WHERE

--2. projection : column에 대한 필터링 --> SELECT

--3. join : 여러 테이블에 대한 검색


/*

SELECT Syntax


  SELECT [ALL | DISTINCT] {*, column1, column2} [AS alias]

  --중복허용orX/ 모든열or 선택열/줄임말(emp,dep)

  FROM table_name

  WHERE condition

  ORDER BY column [ASC | DESC]

  --오름차순|내림차선

  GROUP BY

  --안쓰면 크게 하나의 그룹, 쓰면 세부그룹

  HAVING

*/


--SELECT 문장 작성법

--1. SQL은 대소문자를 구별하지 않는다.

--2. SQL은 여러 라인에 걸쳐 입력될 수 있다.

--3. 절은 보통 읽고 편집하기 쉽게 여러 줄로 나눠서 입력하는 것을 권장한다.

--4. 탭과 인덴트(들여쓰기)를 적절하게 사용하자.

--5. 일반적으로 키워드는 대문자로, 나머지는 소문자로 기술한다.


--1.모든 열 선택

--SELECT *


--2. 특정 열(column) 선택

--1) 각 열의 구분은 ","로 한다. SELECT empno, enmae, job


--3. column의 출력형태

--1) 문자(열)형과 날짜형은 왼쪽 정렬

  --2) 모든 숫자형은 오른쪽 정렬


--4. 산술연산자

-- +,-,*,/

--SELECT empno, ename,sal,(sal*12+comm)

--FROM emp;


--5. NULL 처리

--1) NULL ?

  -- 특정행, 특정열에 대한 값이 정해져 있지 않거나, 모르거나, 값이 없는 것을 의미

    -- 이용할 수 없거나, 적용할 수 없는 값

    -- 0또는 공백(space)과 다르다.

    -- 연산에 대상에 포함되지 않는다.


--6. NVL 함수

--1) NULL 값을 특정 값으로 치환할 때 사용

  --2) 치환할 수 있는 특정 값의 형태는 숫자형, 문자형, 날짜형 모두 가능

  --3) 치환된 값은 컬럼에 지정되어 있는 데이터 형과 일치해야 함.

  --4) Syntax

  -- NVL(exp1,exp2)  exp1 --> NULL, exp2 --> 치환값

    -- NVL(comm, 0)

-- NVL(hiredate,'12/04/01')

    -- NVL(job, "업무 없음")


--SELECT empno, comm, NVL(comm,0)

--SELECT empno, ename,sal,(sal*12 + NVL(comm,0))

--FROM emp;


--7. 별칭(alias)

--1) column header 에 대한 별칭을 부여할 수 있다.

  --2) 연산에 도움이 된다.

  --3) 열 이름 바로 뒤에 기술한다. 혹은 열 이름과 열 별칭 사이에 AS를 사용할 수 있다.

  --4) 별칭에 공백이나 특수문자나 한글이나 대소문자를 구별해야 할 때 ""로 기술한다.

  --SELECT empno "Employee Number", sal AS "Salary"

  --FROM emp;

  --SELECT empno, sal, (sal*12+NVL(comm,0)) AS "연봉"

  --FROM emp;


--8. 문자열 literal 처리

--1) 문자열 literal 처리할 때에는 '||' 를 사용한다. cf)Java --> '+'

--SELECT ename || ' is a ' || job AS "Employee"

--FROM emp;

--ename 과 job 사이에 is a를 붙인다. 자바에서의 '+'기능


--9. 중복 행 제거하기

--1) 일반 Query는 ALL 을 사용하기 때문에 중복된 행이 출력된다.

  --2) DISTINCT 를 사용하면 중복된 행을 제거할 수 있다.

  --3) DISTINCT 는 SELECT 바로 뒤에 기술한다.

  --4) DISTINCT 다음에 나타나는 컬럼은 모두 DITINCT 된다.

  --SELECT ALL job FROM emp;

  --SELECT DISTINCT job FROM emp;

  --SELECT DISTINCT deptno,job FROM emp;


--10. 특정행 검색

--1) WHERE 절을 이용한다.

  --2) FROM 다음에 기술한다.

  --3) 조건은 아래와 같다.

  -- column 이름, 표현식, 상수, 문자

    -- 비교연산자, SQL연산자, 논리연산자


--11. 비교 연산자

-- =,!=,<>,^=,<,>,<=,>=,NOT

  /*SELECT empno,ename,sal

  FROM emp

  WHERE sal>=2000;*/

  /*SELECT ename, hiredate AS "입사 날짜"

  FROM emp;

  WHERE hiredate > '1987-01-01';  --오류발생 NLS포멧을 확인해서 맞게 써줘야함*/

  /*SELECT empno AS "사원번호", ename AS "사원이름", job AS "업무"

  FROM emp

  WHERE job = 'MANAGER';*/

--NLS_DATE_FORMAT 변경하기

/*

SELECT VALUE

FROM NLS_SESSION_PARAMETERS

WHERE parameter = 'NLS_DATE_FORMAT';

--하면 출력은 DD-MON-RR 로 나온다. 이것이 포멧 보는 방법*/

/*ALTER SESSION

SET NLS_DATE_FORMAT = 'YYYY-MM-DD';

--하면 포멧 바꾸는 것. 현재 세션만 적용이됨*/

/*SELECT empno,ename,hiredate

FROM emp

WHERE hiredate >'1987-01-01';*/


--12. 논리연산자  --> AND, OR, NOT

--사원테이블에서 급여가 1000불이상이고, 부서번호가 30번인 사원의 사번, 이름, 담당업무, 급여, 부서번호를

--출력하시오.

--SELECT empno, ename, job, sal, deptno

--FROM emp

--WHERE sal >= 1000 AND deptno = 30;


--사원테이블에서 급여가 2000불이상이거나, 담당업무가 매니저인 사원의 사번, 이름, 급여, 업무 출력

--SELECT empno, ename, sal, job

--FROM emp

--WHERE  sal >= 2000    OR   job = 'MANAGER';


--13. SQL 연산자

-- BETWEEN A AND B, IN, LIKE, IS NULL, NOT

--사원테이블에서 월급이 1300불에서 1500불까지의 사원정보 중 사원이름, 담당업무, 월급 출력하시오.

--SELECT ename, job, sal

--FROM emp

--WHERE sal >= 1300 AND sal <= 1500;

--WHERE sal BETWEEN 1300 AND 1500;

--주의할 점

--1) 항상 작은쪽을 먼저 기술해야 한다.

--2) 초과, 미만이 아닌 이상과 이하를 지정하는 것.


--사원테이블에서 업무가 회사원, 매니저, 분석가인 사원의 이름 및 업무를 출력하시오.

--SELECT ename, job

--FROM emp

--WHERE job = 'CLERK' OR job = 'MANAGER' OR job = 'ANALYST';

--WHERE job IN ('CLERK', 'MANAGER', 'ANALYST');

--IN은 ()안에 있는 애중에 하나를 뜻한다.


--관리자의 사원번호가 7902, 7566, 7788인 모든 사원의 사번, 이름, 급여 및 관리자 사번을 출력

--SELECT empno, ename, job, mgr

--FROM emp

--WHERE mgr IN (7902, 7566, 7788);


--Pattern Matching --> Wild card : %(0개 문자 이상의 대용), _ (1개 문자이상의 대용)

--부서의 이름이 A로 시작하는 부서의 이름은?

--SELECT dname

--FROM dept

--WHERE dname LIKE 'A%';


--1987년에 입사한 사원의 이름, 입사날짜

--SELECT ename, hiredate

--FROM emp

--WHERE hiredate BETWEEN '1987-01-01' AND '1987-12-31';

--WHERE hiredate LIKE '1987%';


--14. 연산자의 우선순위

--- ()

--- 산술연산자(+, -, *, /)

--- 비교연산자

--- SQL 연산자

--- 논리연산자(AND, OR, NOT)


--업무가 SALESMAN 이거나 업무가 MANAGER 이고, 급여가 1300불이상인 사원의 사번, 이름,

--업무, 급여를 출력하시오.

--SELECT empno, ename, job, sal

--FROM emp

--WHERE (job LIKE 'S%' OR job LIKE 'M%') AND sal >= 1300;


--15. ORDER BY

   ---1)기본적으로 Oracle 은 데이터를 정렬하지 않는다.

   ---2)같은 쿼리를 수행할 때마다 결과가 다를 수도 있습니다.

   ---3)별칭을 사용할 수 있다.

   ---4)기본적으로 오름차순 정렬한다.

       ---- 숫자형 : 1 --> 999

       ---- 날짜형 : 옛날 --> 최근

       ---- 문자형 : 알파벳순, 유니코드순

   ---5) NULL은 오름차순일 경우에는 제일 마지막에, 내림차순일 경우에는 제일 처음 출력


--입사일자 순으로 정렬하여 사번, 이름, 입사일자를 출력하시오.

--SELECT empno, ename, hiredate

--FROM emp

--ORDER BY   hiredate DESC;


--SELECT ename, sal, NVL(comm, 0), sal * 12 + NVL(comm, 0) AS Annual

--FROM EMP

--ORDER BY Annual DESC;


--부서번호로 정렬한 후, 부서번호가 같을 경우 급여가 많은 순으로 출력하되, 사번, 이름, 업무, 부서번호,

-- 급여를 출력하시오.

SELECT empno, ename, job, deptno, sal

FROM  emp

ORDER BY deptno ASC, sal ASC ;


---------------------------------실습

--1. 10번부서의 모든 사람들에게 급여의 13%를 보너스로 지급하기로 했다. 이름, 급여, 보너스 금액, 부서번호를 출력하시오.

/*SELECT ename, sal, sal*0.13 AS "보너스", deptno

FROM emp

WHERE deptno=10;*/


--2. 30번 부서의 연봉을 계산하여 이름, 부서번호, 급여, 연봉을 출력하라. 단, 연말에 급여의 150%를 보너스로 지급한다.

/*SELECT ename, deptno, sal, sal*12 + sal*1.5 AS total

FROM emp

WHERE deptno=30;*/


--3. 부서번호가 20인 부서의 시간당 임금을 계산하여 출력하되, 1달의 근무일수는 12일이고, 1일 근무시간은 5시간이다.

-- 출력양식은 이름, 급여, 시간당 임금을 출력하라.

/*SELECT ename, sal, sal/(12*5) AS "시간당임금"

FROM emp

WHERE deptno =20;*/


--4. 모든 사원의 실수령액을 계산하여 출력하라. 단, 이름, 급여, 실수령액을 출력하되, 실수령액은 금여에 대해 10%의 세금을 뺀 금이다.

/*SELECT ename, sal, sal-(sal*0.1)

FROM emp*/


--5. 급여가 3000불이 넘는 업무는 무엇인가?

/*SELECT job

FROM emp

WHERE sal>=3000;*/


--6. 입사일이 84년부터 87년까지인 사원의 사번, 이름, 입사년월일을 출력하시오.

/*SELECT empno, ename, hiredate

FROM emp

WHERE hiredate >='1984-01-01' AND hiredate <='1987-12-31'*/


--7. PRESIDENT 를 제외한 사원들의 이름과 직종(업무)를 출력하시오.

/*SELECT ename, job

FROM emp

WHERE job <> 'PRESIDENT'   --SQL은 대소문자를 구별하지 않지만, DATA는 대소문자를 구별한다.*/


--8. emp 테이블과 dept 테이블을 이용해서 NEW YORK 지역에 근무하는 부서의 번호와 사원들의 이름을 출력하시오.

/*SELECT deptno, ename

FROM emp

WHERE deptno = 10   --뉴욕은 10번 */


--9. 업무가 'CLERK'인 사원의 이름과 업무 및 부서번호를 출력하시오.

--SELECT ename, job, deptno

--FROM emp

--WHERE job = 'CLERK'


--10. 사원번호가 7934인 사원의 사번, 이름, 업무를 출력하시오.

--SELECT empno, ename, job

--FROM emp

--WHERE empno = 7934;

--데이타타입이 문자형과 날짜형만 싱글따옴표를 사용하고, 나머지는 사용하지 않는다.


--SELECT *

--FROM NLS_SESSION_PARAMETERS;


--11. 급여가 보너스 이하인 사원의 이름, 급여 및 보너스를 출력하시오.

--SELECT ename, sal, NVL(comm,0)

--FROM emp

--WHERE sal <= NVL(comm, 0);

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

=======================================================
이클립스에서 오라클 연결
이클립스 connection에서 new connection profie 에서 add/edit driver선택.
Oracle Thin Driver 선택  edit. extra class path에서 Add JARs 선택.
C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib  에서 ojdbc6.jar 선택 확인후
List Drivers 에서 oracle.jdbc.driver.OracleDriver 선택.
Example URL 은 jdbc:oracle:thin:@localhost:1521:XE 해주고 ok ok.
Name : Oracle Express Edition 
Driver : Oracle Thin Driver
Auto Logon , Auto Commit 체크
user : soctt, password : tiger 써주고 ok.
select * from emp
where sal between 1000 and 2000; 써서 되나 확인.
--------------다른방법
에디트플러스로 
SELECT empno, ename, job, sal
FROM emp
WHERE (job = 'SALESMAN' OR job = 'MANAGER') AND sal >= 1300  
작성해서 저장후 0415-1.sql로 저장했다면
Run SQL을 실행해서 connect scott/tiger 엔터.
@ D:/OracleRoom/0415-1.sql;  하면 결과 값이 나옴.(경로값임)