728x90

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

+ Recent posts