SELECT 구문
문자열 결합 ( | | )
리터럴 문자는 작은 따옴표로 감싼다 ( ' ' )
SQL> select last_name || '___' || job_id as "employees"
2* from employees
employees
--------------------------------------
Abel___SA_REP
Ande___SA_REP
Atkinson___ST_CLERK
DISTINCT 키워드
중복된 값을 제거 후 조회하며 NULL값도 하나의 값이기 때문에 조회 시 나옴
SQL> select distinct department_id
2 from employees;
DEPARTMENT_ID
-------------
100
30
90
문자열 비교
: 왼쪽부터 한글자씩 아스키코드 비교. 문자열 크기에 관계없이 첫번째 문자를 비교하여 결과 출력.
(오름차순/사전순의 비교)
아스키 값은 인코딩에 따라 다르고 문자열 비교는 사전의 우선 순위를 생각하면 된다. ( Aa...Ab...)
SQL> select last_name, salary from employees where ASCII(last_name) <= 67
2 order by last_name;
LAST_NAME SALARY
------------------------- ----------
Abel 11000
(...)
LAST_NAME SALARY
------------------------- ----------
Bloom 10000
Bull 4100
Cabrio 3000
Cambrault 11000
(...)
19 rows selected.
위의 WHERE절에서 <= 'C' 로 조회해도 된다.
BETWEEN키워드
예) C로 시작하는 이름의 사원
SQL> select last_name from employees where last_name between 'C' and 'D';
LAST_NAME
-------------------------
Cabrio
Cambrault
Cambrault
Chen
Chung
Colmenares
6 rows selected.
예) 고용일 04년도인 사원 검색
SQL> select last_name, hire_date
2 from employees
3 where hire_date between '01-JAN-04' AND '31-DEC-04';
LAST_NAME HIRE_DATE
------------------------- ---------
Weiss 18-JUL-04
Mallin 14-JUN-04
Russell 01-OCT-04
IN 키워드
SQL> select manager_id, last_name from employees where manager_id IN (100, 101, 201);
MANAGER_ID LAST_NAME
---------- -------------------------
100 Kochhar
100 De Haan
(...)
MANAGER_ID LAST_NAME
---------- -------------------------
(...)
101 Greenberg
101 Whalen
(...)
201 Fay
20 rows selected.
LIKE 키워드
패턴 연산자라고도 함
_ : 한자리의 임의문자
% : n자리의 임의문자 (0 포함)
예) 한자리 임의문자 뒤에 o가 들어가는 임의길이 문자열 조건으로 검색
SQL> select last_name from employees where last_name LIKE '_o%';
LAST_NAME
-------------------------
Colmenares
Doran
Fox
Johnson
(...)
12 rows selected.
예) 3번째 문자가 g인 임의길이 문자열 조건으로 검색
SQL> select last_name from employees where last_name LIKE '__g%';
LAST_NAME
-------------------------
Higgins
Rogers
예) 문자열 길이가 3이고 두번째 문자가 o인 문자열 조건으로 검색
SQL> select last_name from employees where last_name LIKE '_o_';
LAST_NAME
-------------------------
Fox
예) 10일날 입사한 사람 검색 (DATE : 일-월-년도)
SQL> select hire_date from employees where hire_date LIKE '15%';
HIRE_DATE
---------
15-NOV-06
15-MAR-06
15-OCT-07
15-DEC-05
예) 04년도 입사한 사람 검색
SQL> select last_name, hire_date
2 from employees
3 where hire_date LIKE '%04';
LAST_NAME HIRE_DATE
------------------------- ---------
Weiss 18-JUL-04
Mallin 14-JUN-04
Russell 01-OCT-04
(...)
10 rows selected.
예) 급여 두번째 자리가 7이면서 4자리의 급여를 갖는 사원 검색
데이터 타입과 상관없이 ' ' 로 검색가능 (이에 대한 내용은 함수파트에서 다룸)
SQL> select salary from employees where salary LIKE '_700';
SALARY
----------
7700
2700
2700
IS 키워드
예) 매니저 아이디에 값이 없는 컬럼을 조회 (사장=king)
SQL> select last_name, manager_id from employees where manager_id IS NULL;
LAST_NAME MANAGER_ID
------------------------- ----------
King
SQL> select last_name, manager_id from employees where manager_id = NULL;
no rows selected
위 결과를 보면 = 연산자로는 올바른 쿼리 결과를 볼 수 없음을 알 수 있다.
예) 커미션 안 받는 사원, salary 기준 내림차순 정렬
SQL> select last_name, salary, commission_pct
2 from employees
3 where commission_pct IS NULL
4 order by salary desc;
AND, OR 키워드
SQL> select employee_id, last_name, job_id, salary
2 from employees
3 where salary >= 10000 AND job_id like '%MAN%';
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
114 Raphaely PU_MAN 11000
145 Russell SA_MAN 14000
146 Partners SA_MAN 13500
147 Errazuriz SA_MAN 12000
148 Cambrault SA_MAN 11000
149 Zlotkey SA_MAN 10500
201 Hartstein MK_MAN 13000
7 rows selected.
SQL> select employee_id, last_name, job_id, salary
2 from employees
3 where salary >= 10000 OR job_id like '%MAN%';
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
100 King AD_PRES 24000
101 Kochhar AD_VP 17000
102 De Haan AD_VP 17000
108 Greenberg FI_MGR 12008
114 Raphaely PU_MAN 11000
SQL> select employee_id, last_name, job_id, salary
2 from employees
3 where job_id LIKE '%MAN%' OR job_id LIKE '%REP%' AND salary >= 10000;
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
114 Raphaely PU_MAN 11000
120 Weiss ST_MAN 8000
121 Fripp ST_MAN 8200
122 Kaufling ST_MAN 7900
123 Vollman ST_MAN 6500
124 Mourgos ST_MAN 5800
145 Russell SA_MAN 14000
146 Partners SA_MAN 13500
147 Errazuriz SA_MAN 12000
148 Cambrault SA_MAN 11000
149 Zlotkey SA_MAN 10500
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
150 Tucker SA_REP 10000
156 King SA_REP 10000
162 Vishney SA_REP 10500
168 Ozer SA_REP 11500
169 Bloom SA_REP 10000
174 Abel SA_REP 11000
201 Hartstein MK_MAN 13000
204 Baer PR_REP 10000
19 rows selected.
SQL> select employee_id, last_name, job_id, salary
2 from employees
3 where job_id LIKE '%MAN%' OR job_id LIKE '%REP%' AND salary >= 10000;
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
114 Raphaely PU_MAN 11000
120 Weiss ST_MAN 8000
121 Fripp ST_MAN 8200
122 Kaufling ST_MAN 7900
123 Vollman ST_MAN 6500
124 Mourgos ST_MAN 5800
145 Russell SA_MAN 14000
146 Partners SA_MAN 13500
147 Errazuriz SA_MAN 12000
148 Cambrault SA_MAN 11000
149 Zlotkey SA_MAN 10500
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
150 Tucker SA_REP 10000
156 King SA_REP 10000
162 Vishney SA_REP 10500
168 Ozer SA_REP 11500
169 Bloom SA_REP 10000
174 Abel SA_REP 11000
201 Hartstein MK_MAN 13000
204 Baer PR_REP 10000
19 rows selected.
연산자 우선 순위는 아래와 같다. 따라서 위에서 원하는 결과를 조회하기 위해선 괄호 ( ) 를 통해 우선순위를 변경가능
AND > OR
NOT 키워드
SQL> select last_name, job_id, salary, commission_pct from employees
2 where commission_pct IS NOT NULL;
LAST_NAME JOB_ID SALARY COMMISSION_PCT
------------------------- ---------- ---------- --------------
Russell SA_MAN 14000 .4
Partners SA_MAN 13500 .3
(...)
ORDER BY
기본 asc(오름차순)이고 내림차순은 desc
예) by 절 뒤에 컬럼명이 아닌 컬럼 인덱스로 지정하는 경우
SQL> select last_name, job_id, department_id, hire_date
2 from employees
3 order by 3;
LAST_NAME JOB_ID DEPARTMENT_ID HIRE_DATE
------------------------- ---------- ------------- ---------
Whalen AD_ASST 10 17-SEP-03
Hartstein MK_MAN 20 17-FEB-04
Fay MK_REP 20 17-AUG-05
Raphaely PU_MAN 30 07-DEC-02
(...)
위는 3번째 컬럼인 DEPARTMENT_ID를 기준으로 오름차순 정렬 조회된 결과
예 ) order by절에 두 개의 컬럼을 지정하는 경우
SQL> select last_name, department_id, salary
2 from employees
3 order by department_id, salary desc;
LAST_NAME DEPARTMENT_ID SALARY
------------------------- ------------- ----------
Whalen 10 4400
Hartstein 20 13000
Fay 20 6000
Raphaely 30 11000
Khoo 30 3100
Baida 30 2900
Tobias 30 2800
Himuro 30 2600
Colmenares 30 2500
Mavris 40 6500
Fripp 50 8200
(...)
부서id로 1차 정렬, 급여로 2차 정렬(내림차순) 정렬된 결과
'DB' 카테고리의 다른 글
[오라클 DB] 함수-숫자 (0) | 2021.03.10 |
---|---|
[오라클 DB] 함수-문자) (0) | 2021.02.26 |
[오라클 DB] 온라인에서 Oracle SQL 테스트하기 (0) | 2021.02.19 |
[오라클 DB] DQL (0) | 2021.02.03 |
MongoDB 기본 (0) | 2021.01.30 |