본문 바로가기
ORACLE/SQL

[ORACLE] WHERE 명령어 기본 사용 :: 마이자몽

by 🌻♚ 2019. 9. 8.

ORACLE WHERE 명령어 기본 사용

SELECT문은 데이터를 읽는데 사용했다면 WHERE 명령어는 SELECT한 데이터를 원하는 조건으로 데이터를 불러오기 위해 사용된다.  WHERE절을 잘 사용하면 많은 데이터 중 딱 필요한 데이터만 검색하여 확인이 가능하다.

해당글에서는 Oracle 11g 버전을 사용하고 HR 계정의 기본 테이블을 사용하여 실습했습니다.


기본 WHERE 명령 텍스트 조건

특정 텍스트형태의 필드에 원하는 값의 데이터를 찾고자할때 사용하면된다.
조건은 연산자를 사용하여 숫자, 문자, 날짜 등을 비교할 수 있다. 참고로 별칭을 사용할때는 큰따옴표를 사용했지만, 값을 나타낼때는 작은 따옴표를 사용해줘야 한다.
명령 : SELECT [필드1], [필드2] ... FROM [테이블] WHERE [조건];

QUERY

EMPLOYEES 테이블에서 EMPLOYEE_ID, LAST_NAME, FIRST_NAME 필드의 데이터를 LAST_NAME 이 'King'인 조건으로 읽어온다.
1
SELECT EMPLOYEE_ID, LAST_NAME, FIRST_NAME FROM EMPLOYEES WHERE LAST_NAME = 'King';
cs


RESULT




NULL 조건 처리

데이터 중 NULL인 값, NULL이 아닌값 읽어오는 방법이다. NULL인 경우 '=' 혹은 '<>'로 조건을 작성하면 아무데이터도 나오지 않을것이다.

명령 : SELECT [필드1], [필드2] ... FROM [테이블] WHERE [필드] IS NULL/NOT NULL;


QUERY

EMPLOYEES 테이블에서 COMMISSION_PCT 가 NULL인/NULL이 아닌 데이터를 읽어온다.
1
2
SELECT FIRST_NAME, LAST_NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NULL;
SELECT FIRST_NAME, LAST_NAME, COMMISSION_PCT FROM EMPLOYEES WHERE COMMISSION_PCT IS NOT NULL;
cs


RESULT




AND 조건

AND조건을 사용하여 여러개의 조건의 교집합되는 부분의 데이터를 읽는다.

명령 : SELECT [필드1], [필드2] ... FROM [테이블] WHERE [조건1] AND [조건2] AND ...;


QUERY

EMPLOYEES 테이블에서 SALARY가 10000을 초과하고 HIRE_DATE가 08/01/01 이후인 데이터를 읽어온다.
1
SELECT * FROM EMPLOYEES WHERE SALARY > 10000 AND HIRE_DATE >= '08/01/01';
cs


RESULT




OR 조건

OR조건을 사용하여 여러개의 조건의 합집합되는 부분의 데이터를 읽는다.

명령 : SELECT [필드1], [필드2] ... FROM [테이블] WHERE [조건1] OR [조건2] OR ...;


QUERY

EMPLOYEES 테이블에서 DEPARTMENT_ID가 100 이거나 MANAGER_ID가 90인 데이터를 읽는다.
1
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID = 100 OR MANAGER_ID = 90;
cs


RESULT




<> 연산자 & NOT 함수 사용

NULL값은 IS NOT 명령어를 사용하여 아닌값을 조회했고, 그외 텍스트, 숫자 날짜 등의 타입 데이터는 '<>' 연산자 혹은 NOT 함수를 이용해서 아닌값을 조회할 수 있다.

명령1 : SELECT [필드1], [필드2] ... FROM [테이블] WHERE [필드] <> [값];

명령2 : SELECT [필드1], [필드2] ... FROM [테이블] WHERE NOT([조건]);

QUERY

명령1(<>) :  EMPLOYEES 테이블에서 DEPARTMENT_ID가 100이 아니거나 90이 아닌 값을 중복제거하여 출력
명령2(NOT()) :  EMPLOYEES 테이블에서 DEPARTMENT_ID가 100, 110 이 아닌 값을 중복제거하여 출력
1
2
3
4
5
--<>
SELECT DISTINCT DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID <> 100 OR DEPARTMENT_ID <> 90;
 
--NOT
SELECT DISTINCT DEPARTMENT_ID FROM EMPLOYEES WHERE NOT(DEPARTMENT_ID = 100 OR DEPARTMENT_ID = 110);
cs


RESULT

명령1 과 명령2의 결과를 보면 처음에는 이상하다는 생각을 할수 있지만, 조건을 잘 보면 이해될것이다.
명령1의 경우 DEPARTMENT_ID가 100이 아니거나 DEPARTMENT_ID가 90이 아닌 조건이다.
즉, 100이 아닌경우에서 90을 포함한 데이터와 90이 아닌경우에서 100을 포함한 데이터가 있기때문에 모든 데이터가 출력이 될것이다.

반면 명령2의 경우 NOT 함수는 DEPARTMENT_ID 값이 100이 아니거나 110이 아닌 조건을 하나의 조건으로 판단하여 100과 110이 제외된 데이터를 읽어온다.

두가지 조건의 차이점을 잘 알고 사용해야한다.
[##_1N|cfile28.uf@99F53D3A5D74F668215980.png|width="364" height="318" filename="SELECTWHERE

댓글0