Programming/SQL

[Oracle] SELECT문 기본문법(3) - 논리연산자(AND, OR) / BETWEEN AND / LIKE

Jayna. 2024. 1. 17. 15:22
728x90

 

 

[Oracle] SELECT (2) - DISTINCT / WHERE절 / 비교연산자

2024.01.17 - [Programming/SQL] - [Oracle] SELECT문 (1) - 산술연산 / 별칭(AS) / 컬럼값을 통한 산술 연산 / SYSDATE 오늘날짜 / 리터럴 DISTINCT 조회하고자 하는 컬럼의 중복된 값을 딱 한번씩만 조회할 때, 해당 컬

jaynarecord.tistory.com

 

 

논리 연산자 

여러 개의 조건을 엮을 때 사용

AND (그리고, ~이면서)

OR (또는, ~이거나)

-- 부서코드가 'D9'이면서 급여가 500만원 이상인 사원들의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
  FROM EMPLOYEE
 WHERE DEPT_CODE = 'D9' AND SALARY >= 5000000;
 
-- 부서코드가 'D6'이거나 급여가 300만원 이상인 사원들의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
  FROM EMPLOYEE 
 WHERE DEPT_CODE = 'D6' OR SALARY >= 3000000;
 
-- 급여가 350만원 이상이고, 600만원 이하인 사람들의 이름, 사번, 급여, 직급코드 조회
SELECT EMP_NAME, EMP_ID, SALARY, JOB_CODE
  FROM EMPLOYEE
 WHERE 3500000 <= SALARY AND SALARY <= 6000000;

BETWEEN AND

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

비교대상 컬럼명 BETWEEN 하한값 AND 상한값
-- 급여가 350만원 이상이고, 600만원 이하인 사람들의 이름, 사번, 급여, 직급코드 조회
SELECT EMP_NAME, EMP_ID, SALARY, JOB_CODE
  FROM EMPLOYEE
-- WHERE 3500000 <= SALARY AND SALARY <= 6000000
 WHERE SALARY BETWEEN 3500000 AND 6000000;
 
-- 급여가 350만원 미만이고, 600만원 초과인 사람들의 이름, 사번, 급여, 직급코드 조회
SELECT EMP_NAME, EMP_ID, SALARY, JOB_CODE
  FROM EMPLOYEE
 WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
  --> 오라클에서의 NOT은 자바의 논리 부정연산자인 !와 동일한 의미
728x90

 

BETWEEN AND 연산자는 DATE 형식간에서도 사용 가능

-- 입사일이 '90/01/01 ~ 03/01/01'인 사원들의 모든 컬럼 조회
SELECT * 
  FROM EMPLOYEE
 WHERE HIRE_DATE BETWEEN '90/01/01' AND '03/01/01';
 
 -- 입사일이 '90/01/01 ~ 03/01/01'이 아닌 사원들의 모든 컬럼 조회
SELECT * 
  FROM EMPLOYEE
-- WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '03/01/01';
-- WHERE HIRE_DATE NOT BETWEEN '90/01/01' AND '03/01/01';
 WHERE NOT HIRE_DATE BETWEEN '90/01/01' AND '03/01/01';

 

LIKE

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

 

 비교대상컬럼명 LIKE '특정 패턴'
- 특정 패턴에 와일드 카드인 '%' , '_' 를 가지고 제시할 수 있음
 '%' : 0글자 이상
      비교대상컬럼명 LIKE '문자%' => 컬럼값 중에 '문자'로 시작되는 것을 조회
      비교대상컬럼명 LIKE '%문자' => 컬럼값 중에 '문자'로 끝나는 것을 조회
      비교대상컬럼명 LIKE '%문자%' => 컬럼값 중에 '문자'가 포함되는 것을 조회           
'_'  : 1글자
     비교대상컬럼명 LIKE '_문자' => 해당 컬럼값 중에 '문자' 앞에 무조건 1글자가 있을 경우 조회
     비교대상컬럼명 LIKE '__문자' => 해당 컬럼값 중에 '문자' 앞에 무조건 2글자가 있을 경우 조회

-- 성이 전씨인 사원들의 이름, 급여, 입사일 조회
SELECT EMP_NAME, SALARY, HIRE_DATE
  FROM EMPLOYEE
 WHERE EMP_NAME LIKE '전%';
 
-- 이름 중에 '하'가 포함된 사원들의 이름, 주민번호 조회
SELECT EMP_NAME, EMP_NO
  FROM EMPLOYEE
 WHERE EMP_NAME LIKE '%하%';
 
-- 전화번호 4번째 자리가 9로 시작하는 사원들의 사번, 사원명, 전화번호 조회
SELECT EMP_ID, EMP_NAME, PHONE
  FROM EMPLOYEE
 WHERE PHONE LIKE '___9%';
 
-- 이름 가운데 글자가 '지'인 사원들의 모든 컬럼
 SELECT * 
  FROM EMPLOYEE
 WHERE EMP_NAME LIKE '_지_';
 
-- 이름 가운데 글자가 '지'가 아닌 사원들의 모든 컬럼
 SELECT * 
  FROM EMPLOYEE
 WHERE EMP_NAME NOT LIKE '_지_';
 
-- 데이터값으로 인식시킬 값 앞에 아만의 와일드 카드를 제시할 수 있음
SELECT EMP_ID, EMP_NAME, EMAIL
  FROM EMPLOYEE
 WHERE EMAIL LIKE '___$_%' ESCAPE '$';

 

 

 

[Oracle] SELECT문 (4) - IS NULL / IN / 연결연산자( || ) / ORDER BY절 / 연산자 우선순위

[Oracle] SELECT문 (3) - 논리연산자(AND, OR) / BETWEEN AND / LIKE [Oracle] SELECT (2) - DISTINCT / WHERE절 / 비교연산자 2024.01.17 - [Programming/SQL] - [Oracle] SELECT문 (1) - 산술연산 / 별칭(AS) / 컬럼값을 통한 산술 연산 / SYS

jaynarecord.tistory.com

 

728x90