국비/Oracle

[01-1] Oracle DML (SELECT) 기본 문법

박머루 2022. 4. 29. 20:17
주석
-- 한줄주석


/*

여러 줄 주석

*/
ResultSet !!중요!!
SELECT 구문을 통해 조회된 데이터의 결과물,
조회된 행들의 집합
SELECT
데이터를 조회하거나 검색할 때 사용하는 명령어

[표현법]
SELECT 조회하고자 하는 컬럼, 컬럼 , ...
FROM 테이블명;

[예시]
SELECT * FROM EMPLOYEE;
-- EMPLOYEE 테이블의 전체 사원들의 모든 컬럼 조회

SELECT ID, NAME, SALARY FROM EMPLOYEE;
-- EMPLOYEE 테이블의 전체 사원들의 사번, 이름, 급여컬럼 조회
컬럼 값을 통한 산술연산
조회하고자 하는 컬럼들을 나열하는 SELECT 절에 산술 연산을 기술해서 결과를 조회할 수 있다.

산술 연산 : +, -, *, / 

[예시]
SELECT NAME, SALARY, SALARY*12
FROM EMPLOYEE;
-- EMPLOYEE 테이블로부터 직원명, 월급, 연봉

* 산술연산 하는 과정에 NULL 값이 존재할 경우 결과도 NULL이 된다.

* DATE 타입끼리 연산 가능

[예시]
SELECT NAME, HIRE_DATE, STSDATE - HIRE_DATE
FROM EMPLOYEE
-- EMPLOYEE 테이블로부터 직원명, 입사일, 근무일수(오늘날짜 - 입사일) 조회
-- 오늘 날짜 : SYSDATE
-- 결과 값은 일 수 단위로 출력

컬럼명에 별칭 지정하기
[표현법]
1) 컬럼명 AS 별칭
2) 컬럼명 AS "별칭"
3) 컬럼명 별칭

-- AS를 붙이든 안붙이든 상관X
-- 별칭에 특수문자, 띄어쓰기 공백이 포함될 경우 반드시 "" 묶어서 표기

[예시]
SELECT NAME "이  름", SALARY AS "급  여", BONUS 보너스
FROM EMPLOYEE;
리터럴
임의로 지정한 문자열(' ')을 SELECT절에 기술하면 실제 그 테이블에 존재하는 데이터처럼 조회가 가능하다

[예시]
SELECT ID, NAME, SALARY, '원' 단위       -- 단위는 별칭 지정한 것
FROM EMPLOYEE;
DISTINCT
조회하고자 하는 컬럼의 중복된 값을 딱 한 번 씩만 조회할 때 해당 컬럼명 앞에 기술

[표현법]
DISTINCT 컬럼명

* SELECT 절에 DISTINCT 구문은 단 한 개만 가능하다!!

[예시]
SELECT DISTINCT DEPT_CODE 사번 FROM EMPLOYEE;
-- 사번의 중복값을 한 번 씩만 조회

WHERE !!중요!!
조회하고자 하는 테이블에 특정 조건 제시
조건에 만족하는 데이터만을 조회하고자 할 때 기술

[표현법]
SELECT 컬럼, 컬럼, ...
FROM 테이블명
WHERE 조건식;
-- 조건식에 다양한 연산자 사용 가능

[예시]
SELECT *
FROM EMPLOYEE
WHERE SALARY >= 4000000;
* 비교연산자
<, >, <= ,>=
= 일치하는가? : 자바에서는 ==
!=, ^=, <> 일치하지 않는가?
논리연산자
여러 개의 조건을 엮을 때 사용
AND( 그리고, ~이면서)
OR ( 또는, ~이거나)

[예시]
SELECT NAME, ID, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE 3500000<= SALARY AND SALARY <= 6000000;

BETWEEN AND
몇 이상 몇 이하인 범위에 대한 조건을 제시할 때 사용

[표현법]
비교대상컬럼명 BETWEEM 하한값 AND 상한값;

[예시]
SELECT NAME, ID, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 600000;
-- 급여 350 이상 600 이하

SELECT NAME, ID, SALARY, JOB_CODE
FROM EMPLOYEE
WHERE SALARY NOT BETWEEN 3500000 AND 600000;
-- 급여 350미만, 600만원 초과

* 오라클에서의 NOT은 자바의 논리부정연산자 (!)와 동일한 의미
* DATE 형식간에도 사용 가능

LIKE '특정패턴'
비교하려는 컬럼값이 내가 지정한 특정 패턴에 만족될 경우 조회

[표현법]
비교대상컬럼명 LIKE '특정패턴'

* 특정 패턴에 와일드카드인 %와 _를 가지고 제시할 수 있음

     % : 0글자 이상
    비교대상컬럼명 LIKE '문자%' => 컬럼값 중에 '문자'로 시작되는 것
    비교대상컬럼명 LIKE '%문자' => 컬럼값 중에 '문자'로 끝나는 것
    비교대상컬럼명 LIKE '%문자%' => 컬럼값 중에 '문자'가 포함되는 것을 조회
    '_' : 1글자
    비교대상컬럼명 LIKE '_문자' => 해당 컬럼갑 중에 '문자' 앞에 무조건 1글자가 있을 경우 조회
    비교대상컬럼명 LIKE '__문자' => 해당 컬럼값 중에 '문자' 앞에 무조건 2글자가 있을 경우 조회
IS NULL
[표현법]
비교대상컬럼 IS NULL : 컬럼값이 NULL일 경우
비교대상컬럼 IS NOT NULL : 컬럼값이 NULL이 아닌 경우

IN
비교대상 컬럼 값에 내가 제시한 목록들 중에 일치하는 값이 있는지

[표현법]
비교대상컬럼 IN (값, 값, 값, ...)

[예시]
-- 부서코드가 D6이거나 D8이거나 또는 D5인 사원들의 이름, 부서코드, 급여
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D6', 'D8', 'D5');

-- 그 외의 사원들
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE NOT IN ('D6', 'D8', 'D5');
연결연산자 ( || )
여러 컬럼값들을 마치 하나의 컬럼인 것처럼 연결시켜주는 연산자
컬럼과 리터럴(임의의 문자열)을 연결할 수 있다
ORDER BY
SELECT문 가장 마지막에 기입하는 구문
실행순서 또한 가장 마지막!

[실행순서]
SELECT --3
FROM --1
WHERE --2
ORDER BY --4

[표현법}
   SELECT 조회할 컬럼, 컬럼, AS "별명", 컬럼...
    FROM 조회할 테이블 이름
    WHERE 조건식(생략가넝)
    ORDER 
          BY [정렬할 컬럼/ 별칭/ 컬럼순번] [ASC/DESC]
          [NULLS FIRST/NULLS LAST](생략가능)

    - ASC 오름차순정렬 (생략시 기본값)
    - DESC : 내림차순 정렬

    NULLS FIRST : NULL이 포함되어 있을 경우 앞으로 배치
    (내림차순 시 기본값)
    NULL LAST : NULL이 포함되어 있을 경우 뒤로 배치
    (오름차순 시 기본값)


- ASC 또는 DESC 생략 시 기본값이 ASC(오름차순)
- ASC는 기본적으로 NULLS LAST
- DESC는 기본적으로 NULLS FIRST