온풀투데이

[오라클] OR, IN, =ANY / WHILD CARD / ESCAPE 문법 본문

DATABASE

[오라클] OR, IN, =ANY / WHILD CARD / ESCAPE 문법

온풀 2022. 3. 11. 00:40
20220221_01_scott.sql / 오라클 6일 차

OR, IN, =ANY

SELECT ENAME, JOB, SAL
FROM TBL_EMP
WHERE JOB = 'SALESMAN'
   OR JOB = 'CLERK';
--==>>
/*
SMITH    CLERK         800
ALLEN    SALESMAN    1600
WARD    SALESMAN    1250
MARTIN    SALESMAN    1250
TURNER    SALESMAN    1500
ADAMS    CLERK        1100
JAMES    CLERK         950
MILLER    CLERK       1300
호석이    SALESMAN    (null)
문정이    SALESMAN    (null)
*/

SELECT ENAME, JOB, SAL
FROM TBL_EMP
WHERE JOB IN('SALESMAN', 'CLERK'); -- 얘도 내부적으로는 위와 같이 실행됨
--==>>
/*
SMITH    CLERK         800
ALLEN    SALESMAN    1600
WARD    SALESMAN    1250
MARTIN    SALESMAN    1250
TURNER    SALESMAN    1500
ADAMS    CLERK        1100
JAMES    CLERK         950
MILLER    CLERK       1300
호석이    SALESMAN    (null)
문정이    SALESMAN    (null)
*/

SELECT ENAME, JOB, SAL
FROM TBL_EMP
WHERE JOB = ANY ('SALESMAN', 'CLERK'); -- 내부적으로는 OR논리연산 형태로 바뀌어 처리됨
--==>>
/*
SMITH    CLERK         800
ALLEN    SALESMAN    1600
WARD    SALESMAN    1250
MARTIN    SALESMAN    1250
TURNER    SALESMAN    1500
ADAMS    CLERK        1100
JAMES    CLERK         950
MILLER    CLERK       1300
호석이    SALESMAN    (null)
문정이    SALESMAN    (null)
*/

WHILD CARD(CHARACTER) → 『%』

--※ LIKE : 동사 → 좋아하다
--          부사 → ~와 같이, ~처럼    CHECK~!!!

--※ WHILD CARD(CHARACTER) → 『%』
--   『LIKE』와 함께 사용되는 『%』는 모든 글자를 의미하고
--   『LIKE』와 함께 사용되는 『_』는 아무 글자 한 개를 의미한다.

--○ TBL_SAWON 테이블에서 성씨가 『김』씨인 사원의
--   사원명, 주민번호, 급여 항목을 조회한다.

SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김__'; -- 언더바 쓰려면 꼭 라이크랑 같이 쓰기
--==>> 1001    김민성    9707251234567    2005-01-03    3000

SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '김%'; -- 퍼센트 쓰려면 꼭 라이크랑 같이 쓰기
--==>> 1001    김민성    9707251234567    2005-01-03    3000


--○ TBL_SAWON 테이블에서 성씨가 『이』씨인 사원의
--   사원명, 주민번호, 급여 항목을 조회한다.
SELECT *
FROM TBL_SAWON
WHERE SANAME LIKE '이__';
-- WHERE SANAME LIKE '이%';
--==>>
/*
1003    이지연    9905192234567    2006-08-10    3000
1004    이연주    9508162234567    2007-10-10    4000
1006    이현이    8005132234567    1999-10-10    1000
*/

--○ TBL_SAWON 테이블에서 이름의 마지막 글자가 『민』인 사원의
--   사원명, 주민번호, 급여 항목을 조회한다.
SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%민';
--==>>
/*
남궁민    0208073234567    2600
홍수민    0005044234567    5200
임소민    9711232234567    5500
*/

SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '__민';
--==>>
/*
남궁민    0208073234567    2600
홍수민    0005044234567    5200
임소민    9711232234567    5500
*/


--○ TBL_SAWON 테이블에서 사원의 이름에 『이』라는 글자가
--   하나라도 포함되어 있다면 그 사원의
--   사원번호, 사원명, 급여 항목을 조회한다.
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%'; -- 없는 것도 퍼센트 안에 포함되는군
--==>>
/*
1003    이지연    3000
1004    이연주    4000
1005    오이삭    4000
1006    이현이    1000
1007    박한이    1000
1016    이이경    1500
*/


--○ TBL_SAWON 테이블에서 사원의 이름에 『이』라는 글자가
--   연속으로 두 번 들어있는 사원의
--   사원번호, 사원명, 급여 항목을 조회한다.
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이이%';
--==>>1016    이이경    1500


--○ TBL_SAWON 테이블에서 사원의 이름에 『이』라는 글자가 두 번 들어있는 사원의
--   사원번호, 사원명, 급여 항목을 조회한다.
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '%이%이%';
--==>>
/*
1006    이현이    1000
1016    이이경    1500
*/


--○ TBL_SAWON 테이블에서 사원 이름의 두 번째 글자가 『이』인 사원의
--   사원번호, 사원명, 급여 항목을 조회한다.
SELECT SANO "사원번호", SANAME "사원명", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '_이%';
--==>>
/*
1005    오이삭    4000
1016    이이경    1500
*/


--○ TBL_SAWON 테이블에서 사원의 성씨가 『선』씨인 사원의
--   사원명, 주민번호, 급여 항목을 조회한다.
--   → 불가!!!!!!
SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '선%';

SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE SANAME LIKE '남%';
--==>> 성씨가 선우인지, 선인지 모르고 / 남궁인지 남인지 모름...

--※ 데이터베이스 설계 과정에서
--   성과 이름을 분리하여 처리해야 할 업무 계획이 있다면
--   (지금 당장은 아니더라도...)
--   테이블에서 성 컬럼과 이름 컬럼을 분리하여 구성해야 한다.


--○ TBL_SAWON 테이블에서 여직원들의
--   사원명, 주민번호, 급여 항목을 조회한다.
DESC TBL_SAWON;
--==>>
/*
이름       널? 유형           
-------- -- ------------ 
SANO        NUMBER(4)    
SANAME      VARCHAR2(30) 
JUBUN       CHAR(13)     
HIREDATE    DATE         
SAL         NUMBER(10)
*/

SELECT SANAME "사원명", JUBUN "주민번호", SAL "급여"
FROM TBL_SAWON
WHERE JUBUN LIKE '______2______' OR JUBUN LIKE '______4______';
--==>>
/*
서민지        9505152234567    4000
이지연        9905192234567    3000
이연주        9508162234567    4000
이현이         8005132234567    1000
선우용녀    6912232234567    1300
선우선         0303044234567    1600
홍수민        0005044234567    5200
임소민        9711232234567    5500
이이경        0603194234567    1500
*/

ESCAPE 문법

--○ TBL_WATCH 테이블의 BIGO(비고) 컬럼에
--   『99.99%』라는 글자가 포함된(들어있는) 행(레코드)의
--   데이터를 조회한다.

SELECT *
FROM TBL_WATCH
WHERE BIGO LIKE '%99.99\%%' ESCAPE '\';
-- WHERE BIGO LIKE '%99.99$%%' ESCAPE '$';
-- WHERE BIGO LIKE '%99.99@%%' ESCAPE '@';
--==>> 금시계    순금 99.99% 함유된 최고급 시계

--※ ESCAPE로 정한 문자의 다음 한 글자를 와일드카드에서 탈출시켜라...
--   일반적으로 사용 빈도가 낮은 특수문자(특수기호)를 사용한다.