728x90
논리연산자
자바 : && ||
오라클 : AND OR
문자 그대로 AND, OR로 사용
※ 날짜를 기준으로 조건식을 쓴다면 ' '로 감싸줘야한다
기준일보다 작은게 빠른 것. 오늘보다 내일이 더 큰 숫자
-- EMPLOYEE 테이블에서 부서코드가 D6이고 급여를 3000000보다 많이 받는 직원의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' AND SALARY > 3000000;
-- EMPLOYEE 테이블에서 부섴드가 D6이거나 급여를 3000000보다 많이 받는 직원의 이름,부서코드, 급여조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR SALARY > 3000000;
OR AND 연산 우선순위
자바나 SQL이나 OR AND 연산순서는 AND가 우선순위로 먼저 연산
OR를 먼저 연산하고 싶다면 소괄호를 쳐줄 것
BETWEEN
~이상 ~이하
-- EMPLOYEE 테이블에서 급여를 3500000이상 6000000이하를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 6000000;
초과 미만은?
not between
-- 반대로 급여를 3500000미만 6000000초과를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
-- WHERE SALARY < 3500000 OR SALARY > 6000000;
WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
WHERE NOT SALARY BETWEEN 3500000 AND 6000000;
-- NOT 위치 둘 다 가능
LIKE
비교하려는 값이 특정 패턴을 만족시키는지 조회
ex) 이멜에 i가 들어가는 것을 조회, 이름이 김씨가 들어간 사람들 조회
--EMPLOYEE 테이블에서 이름이 '하'가 포함된 직원의 이름, 주민번호, 부서코드 조회
SELECT EMP_NAME, EMP_NO, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';
와일드카드 2종류 : _ %
_ : 1글자 % : 0글자 이상
ex) '' (한글자) '__' (두글자) ***'__***' (세글자)
- '글자%' : 글자로 시작하는 값
글자 뒤로 뭐가와도 ok
ex) 글자최고, 글자(공백), 글자왕, 글자
- '%글자' : 글자로 끝나는 값
글자 앞에 뭐가와도 ok
ex) 먹글자, 한글은 글자, (공백)글자
- '글%자' : 글로 시작해서 자로 끝나는 값
글과 자 사이 뭐가와도 ok
ex)글씨를 잘쓰자, 글자, 글과자, 글(공백)자
- '%글자%' : 글자가 포함되어있는 값
ex) 한글자값, 먹글자, 글자, 한두글자
-- 논리 연산자 AND OR
-- EMPLOYEE 테이블에서 부서코드가 D6이고 급여를 3000000보다 많이 받는 직원의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' AND SALARY > 3000000;
-- EMPLOYEE 테이블에서 부섴드가 D6이거나 급여를 3000000보다 많이 받는 직원의 이름,부서코드, 급여조회
SELECT EMP_NAME, DEPT_CODE,SALARY
FROM EMPLOYEE
WHERE DEPT_CODE = 'D6' OR SALARY > 3000000;
-- 1.EMPLOYEE 테이블에서 월급이 4000000이상이고 JOB_CODE가 J2인 사원의 전체 내용 조회
-- 2.EMPLOYEE 테이블에 DEPT_CODE가 D9이거나 D5인 사원 중에 고용일이 02년 1월 1일보다 빠른 사원의
-- 이름, 부서코드, 고용일 조회
SELECT *
FROM EMPLOYEE
WHERE SALARY >= 4000000 AND JOB_CODE ='J2';
SELECT EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9' OR HIRE_DATE < '02/01/01';
-- 이 코드는 틀린 코드
-- 기준일보다 작은게 빠른 것. 오늘보다 내일이 더 큰 숫자
-- 날짜를 기준으로 조건식을 쓴다면 ''로 감싸줘야한다
-- 자바나 SQL이나 OR AND는 AND가 우선순위로 먼저 연산
-- OR를 먼저 연산하고 싶다면 소괄호를 쳐줄 것
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-- BETWEEN AND
-- ~이상 ~이하
-- EMPLOYEE 테이블에서 급여를 3500000이상 6000000이하를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
WHERE SALARY >= 3500000 AND SALARY <= 6000000;
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000 AND 6000000;
-- 반대로 급여를 3500000미만 6000000초과를 받는 사원의 사번, 이름, 급여, 부서코드, 직급코드 조회
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_CODE, JOB_CODE
FROM EMPLOYEE
--WHERE SALARY < 3500000 OR SALARY > 6000000;
--WHERE SALARY NOT BETWEEN 3500000 AND 6000000;
WHERE NOT SALARY BETWEEN 3500000 AND 6000000;
-------실습문제-------
-- 1.EMPLOYEE 테이블에 고용일이 90/01/01 ~ 01/01/01인 사원의 전체 내용을 조회
-- 시간의축을 가로선상에 놓고 보면 시간과 연산자 사용계산이 쉬워짐
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01' AND '01/01/01';
-- WHERE HIRE_DATE >= '90/01/01' AND HIRE_DATE <= '01/01/01';
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
/*
-- LIKE
비교하려는 값이 특정 패턴을 만족시키는지 조회
ex) 이멜에 i가 들어가는 것을 조회, 이름이 김씨가 들어간 사람들 조회
와일드카드 2종류
_ : 1글자
% : 0글자 이상
ex)
'_' (한글자)
'__' (두글자)
'___' (세글자)
'글자%' : 글자로 시작하는 값
글자 뒤로 뭐가와도 ok
ex) 글자최고, 글자(공백), 글자왕, 글자
'%글자' : 글자로 끝나는 값
글자 앞에 뭐가와도 ok
ex) 먹글자, 한글은 글자, (공백)글자
'글%자' : 글로 시작해서 자로 끝나는 값
글과 자 사이 뭐가와도 ok
ex)글씨를 잘쓰자, 글자, 글과자, 글(공백)자
'%글자%' : 글자가 포함되어있는 값
ex) 한글자값, 먹글자, 글자, 한두글자
*/
--EMPLOYEE 테이블에서 성이 전씨인 사원의 사번, 이름, 고용일 조회
SELECT EMP_ID, EMP_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
-- WHERE EMP_NAME LIKE '전__';
-- 도 가능하나 이름이 세글자인 사람들만 가능해서 이름이 두글자나 네글자이상이면 정확도가 떨어짐
--EMPLOYEE 테이블에서 이름이 '하'가 포함된 직원의 이름, 주민번호, 부서코드 조회
SELECT EMP_NAME, EMP_NO, DEPT_CODE
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';
--EMPLOYEE 테이블에 전화번호 4번째 자리가 9로 시작하는 사원의 사번, 이름, 전화번호 조회
-- 전번 양식 : 01012345678
-- 01X 세자리 + 9로 시작하는 네번지째 자릿수
SELECT EMP_ID, EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';
--EMPLOYEE 테이블에서 이메일 중 _의 앞 글자가 3자리인 이메일 주소를 가진 사원의 사번의 사번, 이름, 이메일 주소 조회
SELECT EMP_ID, EMP_NAME, EMAIL
FROM EMPLOYEE
WHERE EMAIL LIKE '___ _%' ESCAPE ' ';
D
--WHERE EMAIL LIKE '___%'; -- 언더바_가 들어간 이메일 출력. 앞글자 2개도 4개 전부 출력
-- ESCAPE의 기준이 되는 코드는 ' '안에서 설정 가능? YES
-- ESCAPE의 ' '안에 어떤 코드이던 들어가서 설정 가능?
/*
LIKE를 쓸 때 패턴!
와일드카드 : _ %
각각 한글자,와 0글자 이상을 나타내는 와일드 카드
세글자 자릿수 언더바 3개 + 검색하고자 하는 데이터로의 언더바 1개 = 총4개의 언더바
검색하고자 하는 패턴의 문자와 와일드 카드가 일치할 경우에는 패턴과 와일드 카드를 구분하지 못하기 때문에
ESCAPE OPTION을 통해 구분해준다
- 패턴(데이터)으로 쓸 것 앞에 구분기호 사용
*/
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] ESCAPE 식별자, IS NULL, IN, 연결연산자 || (0) | 2022.03.12 |