몰입하며 나아가는 개발이란

Language/SQL

Oracle SQL DML : SELECT 01(basic)

류하을 2019. 12. 12. 13:16

DML : Data Manipulation Language(데이터 조작 언어)

테이블에 데이터 검색, 삽입, 수정, 삭제하는 명령어

SELECT, INSERT, UPDATE, DELETE 을 말한다.

SELECT Query 문의 기본형

/*
SELECT
	(값, 문자, COLUMN, 함수, SUB, QUERY)
FROM
	(TABLE NAME, SUB QUERY)
*/

Scott / Tiger 계정 또는 hr/ hr 계정으로 진행.

현재 계정의 테이블을 모두 선택.

SELECT
    *
FROM TAB;

emp 테이블에서 원하는 COLUMN의 값만을 선택

SELECT empno, ename, sal
FROM emp;

SELECT ename, sal, sal + 300 -- column sal 전체에 300을 더하는 연산 가능.
FROM emp;

SELECT ename, sal, sal*12 -- 곱연산도 가능하다.
FROM emp;

SELECT Query 문에서 자주 사용하는 예약어

AS : Alias

추가시 항목명 설정가능하며, 항목명 설정과 동시에 변수명으로도 사용이 가능함.

SUBQUERY에서 값을 빼낼때 유용하게 사용가능하다.

""만으로도 생략가능, ""이 없이도 사용가능(띄워쓰기 불가능) 

SELECT empno AS "사원번호", sal"월급", sal*12+comm연봉
FROM emp;

SELECT empno, ename, sal * 12 AS annsal
FROM emp
ORDER BY annsal ASC;

CONCAT, || :

column항목을 더하거나 문자열 추가 가능.

SELECT ename || 'has $' || sal"월급"
FROM emp;

SELECT first_name || ' ' || last_name
FROM employees;

SELECT concat(first_name, last_name)
FROM employees;

DISTINCT :

중복된 값을 제외한 선택, 두가지 이상 선택시, UK 기준으로 중복제외 선택.

SELECT DISTINCT deptno
FROM emp;

SELECT DISTINCT department_id, employee_id
FROM employees
ORDER BY department_id ASC;

ASC, DESC, NULLS FIRST, NULLS LAST : 정렬

SELECT
    *
FROM emp
ORDER BY comm NULLS FIRST;

SELECT
    *
FROM emp
ORDER BY comm NULLS LAST;

SELECT employee_id, job_id, salary
FROM employees
ORDER BY job_id ASC, salary DESC;

NVL, NVL2 : NULL 처리

 

NVL(대상이 되는 컬럼, 0)       NUMBER
대상이 되는 컬럼 != NULL --> 대상이 되는 컬럼
대상이 되는 컬럼 == NULL --> 0

NVL(대상이 되는 컬럼, '없음')   VARCHAR2 
대상이 되는 컬럼 != NULL --> 대상이 되는 컬럼
대상이 되는 컬럼 == NULL --> '없음'

NVL2(대상이 되는 컬럼, 1, 0)
대상이 되는 컬럼 != NULL --> 1
대상이 되는 컬럼 == NULL --> 0

SELECT first_name, NVL(commission_pct, 0)
FROM employees;

SELECT first_name, NVL2(commission_pct, '있음', '없음')
FROM employees;

SELECT department_id, SUM(salary), MAX(salary), trunc(AVG(salary))
FROM employees
GROUP BY department_id
ORDER BY department_id ASC;

MONTHS_BETWEEN,  ADD_MONTHS: 

두날짜의 월간격, 특정 날짜 월에 정수를 더한 다음 해당 날짜

SELECT MONTHS_BETWEEN('2020-05-04','2019-12-13')
FROM dual;

SELECT ADD_MONTHS('2019-12-13', 3)
FROM dual;

날짜관련 추가 예약어 관찰.

-- 날짜 정보에서 특정한 연도, 월, 일, 시, 분, 초
SELECT EXTRACT(year from to_date('191001', 'YYMMDD')) as 연도,
       EXTRACT(month from to_date('19/10/01')) as 월,
       EXTRACT(day from sysdate) as 일
FROM dual;

-- 시, 분, 초
SELECT EXTRACT(hour FROM CAST(sysdate AS TIMESTAMP)) as 시,
    EXTRACT(minute FROM CAST(sysdate AS TIMESTAMP)) as 분,
    EXTRACT(second FROM CAST(sysdate AS TIMESTAMP)) as 초
FROM dual;