728x90
ESCAPE 식별자
escape 식별자로 like 연산자를 사용하여 '%' 및 '_' 가 포함된 문자 패턴을 검색할 수 있다.
컬럼명 != '김%' 과 컬럼명 LIKE ‘김%’의 차이
= 혹은 != '김%'으로 검색하면 '김%' 데이터자체를 검색
LIKE '김%' 뒤에 어떤게 오든 상관없다. LIKE와 사용하는 % _ 는 와일드카드 적용받는다
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';
-- WHERE NOT PHONE LIKE '010%';
IS NULL
컬럼값이 NULL이냐
WHERE BONUS IS NULL;
IS NOT NULL
컬럼값이 NULL이 아니냐
- NOT의 위치는 컬럼명 앞도 가능
WHERE BONUS IS NOT NULL;
IN
목록에 일치하는 값이 있으면 TRUE가 되어 값 반환
장점 : 코드가 상당히 짧아진다
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
-- WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D9';
WHERE DEPT_CODE IN ('D6','D9');
연결 연산자 : ||
문장으로 연결해서 쓰고 싶을 경우 필요
-- EMPLOYEE테이블에서 ' "사원명"의 월급은 "급여"원입니다' 형식으로 조회
SELECT EMP_NAME ||'의 월급은'|| SALARY||'원입니다'
FROM EMPLOYEE;
-- ESCAPE 식별자
-- EMPLOYEE테이블에서 김씨 성이 아닌 직원의 사번, 이름, 고용일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
--WHERE EMP_NAME NOT LIKE '김%';
WHERE NOT EMP_NAME LIKE '김%';
--WHERE NOT EMP_NAME LIKE '김%';
-- NOT 순서 : 해당 컬럼명 앞뒤 둘 다 가능
/*
WHERE EMP_NAME != '김%';
= 혹은 != '김%'으로 검색하면 '김%' 데이터자체를 검색
LIKE '김%' 뒤에 어떤게 오든 상관없다
LIKE와 사용하는 % _ 는 와일드카드 적용받는다
LIKE는 문자에 대한 패턴 검색하는 것
!= '김%'에서는 이름이 김%인 사람을 찾는 것(리터럴 김% 데이터를 찾는 것)
여기서 %는 와일드카드로 적용이 되지 않고 그냥 순수 기호 %인 것
*/
-----------실습문제-----------
--1.EMPLOYEE 테이블에서 이름 끝이 '연'으로 끝나는 사원 이름 조회
--2.EMPLOYEE 테이블에서 전화번호 처음 세자리가 010이 아닌 사원의 이름, 전화번호 조회
--3.EMPLOYEE 테이블에서 메일주소 _의 앞이 4자이면서 DEPT_CODE가 D9 또는 D6이고
-- 고용일이 90/01/01 ~ 00/12/01이고, 급여가 2700000만 이상인 사원의 전체 정보 조회
SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%연';
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE NOT LIKE '010%';
SELECT *
FROM EMPLOYEE
WHERE EMAIL LIKE '____!_%' ESCAPE '!'
AND (DEPT_CODE = 'D9' OR DEPT_CODE = 'D6')
-- AND (HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '00/12/01')
AND HIRE_DATE BETWEEN '90/01/01' AND '00/12/01'
AND SALARY >= 2700000;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- IS NULL
-- IS NOT NULL
-- 컬럼값이 NULL이냐
-- 컬럼값이 NULL이 아니냐
--EMPLOYEE 테이블에서 보너스를 받지 않는 사원의 사번, 이름, 급여, 보너스 조회
SELECT EMP_ID, EMP_NAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS IS NULL;
--WHERE BONUS = NULL; 값 안나옴
--WHERE BONUS = (null); 값 안나옴
--EMPLOYEE 테이블에서 보너스를 받는 사원의 사번, 이름, 급여, 보너스 조회
SELECT EMP_ID, EMP_NAME,SALARY,BONUS
FROM EMPLOYEE
WHERE BONUS IS NOT NULL;
WHERE NOT BONUS IS NULL;
-- WHERE NOT BONUS IS NULL;
-- NOT은 컬렴명 앞에 붙어도 가능
--WHERE BONUS NOT LIKE '%(null)%';
-- EMPLOYEE 테이블에서 관리자도 없고 부서 배치도 받지 않은 직원의 이름, 관리자, 부서코드 조회
-- EMPLOYEE 테이블에서 부서 배치를 받지 않았지만 보너스를 지급받는 직원의 이름, 보너스, 부서코드 조회
SELECT EMP_NAME, MANAGER_ID, DEPT_CODE
FROM EMPLOYEE
WHERE MANAGER_ID IS NULL AND DEPT_CODE IS NULL;
SELECT EMP_NAME, BONUS, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL AND BONUS IS NOT NULL;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
--IN
-- 목록에 일치하는 값이 있으면 TRUE가 되어 값 반환
-- 목록에 일치하는 값이 있으면 TRUE를 반환
-- D6부서와 D9부서원들의 이름, 부서코드, 급여 조회
-- 직급코드가 J1, J2, J3, J4인 사람들의 이름, 직급코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR DEPT_CODE = 'D9';
SELECT EMP_NAME, JOB_CODE, SALARY
FROM EMPLOYEE
--WHERE JOB_CODE = 'J1' OR JOB_CODE = 'J2' OR JOB_CODE = 'J3' OR JOB_CODE = 'J4';
WHERE JOB_CODE IN ('J1','J2','J3','J4');
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- 연결 연산자 ||
-- 자바에서의 or논리연산자의 기호가 SQL에서는 연결연산자
-- EMPLOYEE테이블에서 사번, 이름, 급여를 연결해서 조회 (EX. 200선동일8000000)
SELECT EMP_ID || EMP_NAME || SALARY
FROM EMPLOYEE;
SELECT EMP_ID || EMP_NAME || SALARY 전체결과
FROM EMPLOYEE;
-- EMPLOYEE테이블에서 ' "사원명"의 월급은 "급여"원입니다' 형식으로 조회
SELECT EMP_NAME ||'의 월급은'|| SALARY||'원입니다'
FROM EMPLOYEE;
728x90
반응형
'SQL > Oracle' 카테고리의 다른 글
[SQL][Oracle] JOIN에 AND조건과 JOIN+WHERE절에 AND조건 어떻게 다를까? (1) | 2022.10.05 |
---|---|
[SQL][Oracle] 계층형 질의(계층형 쿼리, Hierarchical Query) 동작순서 with 예시 (0) | 2022.08.26 |
[SQL][Oracle] 계층형 질의(계층형 쿼리, Hierarchical Query) (1) | 2022.08.25 |
[SQL][Oracle] SELECT, DISTINCT, 별칭, 리터럴, 비교연산자 (0) | 2022.03.12 |
[SQL][Oracle] 논리연산자, BETWEEN, LIKE , 와일드카드 (0) | 2022.03.12 |