실제 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 아님!!!!!!!!!!!!!!!!!!!!!!!! */