오라클, SELECT, 이클립스 오라클 연결
윈도우
실행-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);
-----------------------------------------