본문 바로가기
카테고리 없음

24. 08. 14 개발자교육 8주차 수요일 Oracle Database 정리 - 2

by 융기융 2024. 8. 14.
반응형

실제 DBeaver 사용할때 썼던 코드들을

쫙~~~ 정리해보았다.

천천히 읽어보면서 이해해보자!

/* 컬럼 값 산술 연산 */

 

/* 컬럼 값 : 행과 열이 교차되는 한 칸에 작성된 값

*

* - SELECT문 작성 시

* 컬럼명에 산술 연산을 작성하면

* 조회 결과(RESULT SET)에서

* 모든 행에 산술 연산이 적용된 결과 값이 조회된다!!

* */

 

-- EMPLOYEE 테이블에서

-- 모든 사원의 이름, 급여, 급여 + 100만 조회

SELECT EMP_NAME, SALARY + 1000000

FROM EMPLOYEE;

 

/* SYSDATE / CURRENT_DATE, SYSTIMESTAMP */

 

/* - DB는 날짜/시간관련 데이터를 다루기 굉장히 편하다!!!

*

* - SYSDATE : 시스템이 나타내고 있는 현재시간

* - CURRENT_DATE : 현재 세션(사용자 기반) 시간

*

* - SYSTIMESTAMP : 시스템이 나타내고 있는 현재시간

* ms 단위 + 지역포함

* - CURRENT_TIMESTAMP : 현재 세션(사용자 기반) 시간

* ms 단위 + 지역 포함

*/

 

SELECT SYSDATE, CURRENT_DATE,

SYSTIMESTAMP, CURRENT_TIMESTAMP

FROM DUAL;

 

/* DUAL (DUmmy tAbLe)

* - 가짜 테이블(임시 테이블)

* - 조회하려는 데이터가 실제 테이블에 존재하는 데이터가 아닌 경우에 사용

* */

 

/* 날짜 데이터 연산하기 ( + , - 만 가능!!!)*/

 

-- 날짜 + 1 == 1일 증가

-- 날짜 - 1 == 1일 감소

--> 정수 연산은 일 단위로 연산된다!!

 

-- 현재시간, 어제, 내일, 모레 조회

SELECT CURRENT_DATE,

CURRENT_DATE -1,

CURRENT_DATE +1,

CURRENT_DATE +2

 

FROM DUAL;

 

/* 알아두면 도움됨!! */

-- 현재시간, 한시간 후, 1분 후, 1초 후 조회

SELECT

CURRENT_DATE,

CURRENT_DATE +1/24,

CURRENT_DATE +1/24/60,

CURRENT_DATE +1/24/60/60 * 10

 

FROM DUAL;

 

/* 날짜끼리 연산하기 ( - 만 가능!!) */

--> 연산 결과는 일 단위 ( 1 == 1일)

 

-- TO_DATE('날짜문자열', '패턴');

-- -> '날짜문자열'을 '패턴' 형식으로 해석하여

-- DATE 타입으로 변환

 

SELECT '2024-08-15',

TO_DATE('2024-08-15', 'YYYY-MM-DD')

FROM DUAL;

 

-- CEIL(숫자) : 소수점 올림처리

 

-- EMPLOYEE 테이블에서

-- 모든사원의 사번, 이름, 입사일, 현재까지 근무일수 조회, N년차 조회

SELECT EMP_ID, EMP_NAME, HIRE_DATE,

CURRENT_DATE - HIRE_DATE,

CEIL((CURRENT_DATE - HIRE_DATE) / 365)

FROM EMPLOYEE;

 

-- EMPLOYEE 테이블에서

-- 모든 사원의 사번, 이름, 급여, 연봉(급여*12) 조회

-- 단, 컬럼명은 모두 별칭사용

SELECT EMP_ID AS 사번,

EMP_NAME 이름,

SALARY "급여(원)",

SALARY * 12 "연봉(급여*12)"

 

FROM EMPLOYEE;

 

/* 연결 연산자(||)

* - 두 컬럼을 이어서 하나의 컬럼으로 조회할 때 사용 */

 

SELECT EMP_ID, EMP_NAME, -- 200, 선동일

EMP_ID || EMP_NAME -- 200선동일

FROM EMPLOYEE;

 

 

/* DISTINCT(별개의, 전혀다른)

*

* - 조회결과 집합(RESULT SET)에

* DISTINCT가 지정된 컬럼 중 중복되는 값이 존재할 경우

* 중복을 제거하고 한번만 표시할 때 사용하는 구문(연산자)

* */

 

-- EMPLOYEE 테이블에서

-- 모든 사원의 부서코드 조회

SELECT DEPT_CODE

FROM EMPLOYEE e ; -- 23행 조회

 

/******************/

/**** WHERE 절 ****/

/******************/

 

-- 테이블에서 조건을 충족하는 행을 조회할 때 사용

-- WHERE절에는 조건식(true/false)만 작성

 

-- 비교 연산자 : >, <, >=, <=, = (같다), !=, <> (같지 않다)

-- 논리 연산자 : AND, OR, NOT

 

/* [SELECT 작성법 - 2]

*

* 3) SELECT 컬럼명, ...

* 1) FROM 테이블명

* 2) WHERE 조건식;

*

* 1>> 특정 테이블에서

* 2>> 조건식을 만족하는 행을 추려놓고

* 3>> 추려진 결과 행에서 원하는 컬럼만 조회

* */

 

-- EMPLOYEE 테이블에서

-- 급여가 400만원을 초과하는 사원의

-- 사번, 이름, 급여 조회

 

 

 

SELECT EMP_ID, EMP_NAME, SALARY

FROM EMPLOYEE

WHERE SALARY > 4000000; -- 8행 조회

 

-- EMPLOYEE 테이블에서

-- 급여가 500만원 이하인 사원의

-- 사번, 이름, 급여 조회

위 결과 값

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

/* NULL 비교 연산 */

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

/* 컬럼명 = NULL , 컬럼명 != NULL (X)

*

* -> = , != 비교 연산은

* 컬럼에 저장된 값을 비교하는 연산이다!!!

*

* -> ORACLE DB에서 NULL은 값이 아니라

* 값이 존재하지 않는다는(빈칸) 의미

* == 저장된 값이 없다

*

* ****************************************

* 컬럼명 IS NULL / 컬럼명 IS NOT NULL (O)

* -> 지정된 컬럼에 값이 존재하지 않는 경우 / 존재하는 경우

* (값의 유무를 따짐)

* ****************************************

*

* */

 

-- EMPLOYEE 테이블에서 DEPT_CODE가 없는 사원 조회

SELECT EMP_NAME, DEPT_CODE

FROM EMPLOYEE

--WHERE DEPT_CODE != NULL; -- 결과없음(잘못된 연산)

WHERE DEPT_CODE IN NULL; -- 하동운, 이오리 2행 조회

 

-- EMPLOYEE 테이블에서

-- BONUS 컬럼에 값이 있는 사원 조회

SELECT EMP_NAME, BONUS

FROM EMPLOYEE e

WHERE BONUS IS NOT NULL; --9행

 

위 결과 값

 

/* 논리 연산자(AND/OR) */

 

-- AND(그리고) : 두 조건식의 결과가 TRUE인 경우만 TRUE

--> 두 조건을 모두 만족하는 행만 조회 결과에 포함

 

-- OR(또는) : 두 조건 중 하나라도 TRUE인 경우에 TRUE

--> 두 조건을 하나라도 만족하는 행만 조회 결과에 포함

 

-- EMPLOYEE 테이블에서

-- 부서코드가 'D6'인 사원중

-- 급여가 400만을 초과하는 사원의

-- 이름, 부서코드, 급여조회

 

SELECT EMP_NAME , DEPT_CODE ,SALARY

FROM EMPLOYEE e

WHERE

DEPT_CODE = 'D6'

AND SALARY > 4000000; -- 유재식, 정중하

 

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

/* 컬럼명 BETWENN (A)AND(B) */

-- 컬럼값이 "A 이상", "B 이하"인 경우 TRUE(조회 하겠다)

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

 

-- EMPLOYEE 테이블에서

-- 급여가 400만 이상 600만 이하인 사원의

-- 이름, 급여 조회

 

-- 1) AND 버전

SELECT EMP_NAME, SALARY

FROM EMPLOYEE e

WHERE SALARY >= 4000000

AND SALARY <= 6000000;

 

-- 2) BETWEEN 버전

SELECT EMP_NAME, SALARY

FROM EMPLOYEE e

WHERE SALARY BETWEEN 4000000 AND 6000000; -- 6행

 

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

/* 컬럼명 NOT BETWENN (A)AND(B) */

-- 컬럼값이 "A 이상", "B 이하"가 아닌 경우 TRUE(조회 하겠다)

-- == A 미만, B초과

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

SELECT EMP_NAME, SALARY

FROM EMPLOYEE e

WHERE SALARY NOT BETWEEN 4000000 AND 6000000; -- 17행

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

/* 컬럼명 NOT BETWENN (A)AND(B) */

-- 컬럼값이 "A 이상", "B 이하"가 아닌 경우 TRUE(조회 하겠다)

-- == A 미만, B초과

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

SELECT EMP_NAME, SALARY

FROM EMPLOYEE e

WHERE SALARY NOT BETWEEN 4000000 AND 6000000; -- 17행

 

/* 날짜도 범위비교 가능!!! */

-- EMPLOYEE 테이블에서

-- 2010년대(10.1.1 ~ 19.12.31) 입시한 사원의

-- 사번, 이름, 입사일 조회

 

SELECT EMP_ID, EMP_NAME, HIRE_DATE

FROM EMPLOYEE e

WHERE HIRE_DATE >= TO_DATE('2010-01-01', 'YYYY-MM-DD')

AND HIRE_DATE <= TO_DATE('2019-12-31', 'YYYY-MM-DD');

-- 10행 조회

 

-- BETWEEN 사용

SELECT EMP_ID, EMP_NAME, HIRE_DATE

FROM EMPLOYEE e

WHERE HIRE_DATE

BETWEEN

TO_DATE('2010-01-01', 'YYYY-MM-DD')

AND

TO_DATE('2019-12-31', 'YYYY-MM-DD');

/* 일치하는 값만 조회 */

 

-- EMPLOYEE 테이블에서

-- 부서코드가 'D5', 'D6', 'D9'인 사원의

-- 사번, 이름, 부서코드 조회

SELECT EMP_ID, EMP_NAME, DEPT_CODE

FROM EMPLOYEE e

WHERE DEPT_CODE = 'D5'

OR DEPT_CODE = 'D6'

OR DEPT_CODE = 'D9'; -- 12행 조회

 

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

/* 컬럼명 IN (값1, 값2, 값3, ...) */

-- 컬럼값이 IN() 내에 존재하면 TRUE --> 조회 결과에 포함

-- == 연속으로 OR 연산을 작성한 것과 같은효과

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

SELECT EMP_ID, EMP_NAME, DEPT_CODE

FROM EMPLOYEE e

WHERE DEPT_CODE IN('D5', 'D6', 'D9'); -- 12행

 

 

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

/* 컬럼명 NOT IN (값1, 값2, 값3, ...) */

-- 컬럼 값이 IN () 내에 존재하지 "않으면" TRUE --> 조회 결과에 포함

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

 

-- 부서코드가 'D5', 'D6', 'D9'이 아닌 사원조회(NULL 미포함)

SELECT EMP_ID, EMP_NAME, DEPT_CODE

FROM EMPLOYEE e

WHERE DEPT_CODE NOT IN('D5', 'D6', 'D9'); -- 9행

 

-- 부서코드가 'D5', 'D6', 'D9'이 아닌 사원조회(NULL 포함)

SELECT EMP_ID, EMP_NAME, DEPT_CODE

FROM EMPLOYEE e

WHERE DEPT_CODE NOT IN('D5', 'D6', 'D9')

OR DEPT_CODE IS NULL; -- 11행 조회

 

/* 절대 = NULL 아님!!!!!!!!!!!!!!!!!!!!!!!! */

 

반응형