수업/└Oracle
[CH05]WHERE, 연산자
onlyun
2022. 1. 7. 11:55
실행은 [ctrl] + [enter]
*SELECT, FROM, WHERE은 한 번씩만 써줌.
| WHERE
조건식 대입해 결과가 참인 데이터만 출력
SELECT 조회할 열1, 2, 3, ...
FROM 조회할 테이블 이름
WHERE 조회할 행을 선별하기 위한 조건식;
└SELECT : 조회할 열 이름이자 출력할 열을 나열
ex) 부서 번호가 30인 데이터만 출력
SELECT DEPTNO
FROM EMP
WHERE DEPTNO = 30;
(1) AND, OR 연산자
-여러 개 조건식 사용하는 연산자 AND, OR
--부서번호 30이고 직책이 SALESMAN인 것 출력
SELECT *
FROM EMP
WHERE DEPTNO = 30
AND JOB = 'SALESMAN';
--부서번호가 30이거나 직책이 CLERK인 것 출력
SELECT *
FROM EMP
WHERE DEPTNO = 30
OR JOB = 'CLERK';
**오라클은 대소문자 구분하지 않는데 데이터는 대소문자 구분.
(2) 산술 연산자
--산술 연산자 : +, -, *, /, MOD(나머지)
--연봉이 3600인 데이터(급여에서 *12 = 3600)
SELECT *
FROM EMP
WHERE SAL*12 = 3600;
SELECT *와 SAL * 2는 다름.
(3) 비교 연산자
--비교 연산자 : 문자, 문자열 여러 개 비교 가능. >, >=, <, <=
--숫자 비교
SELECT *
FROM EMP
WHERE SAL >= 3600;
--문자 비교
SELECT *
FROM EMP
WHERE ENAME >= 'F'
ORDER BY ENAME;
--문자열 비교
SELECT *
FROM EMP
WHERE ENAME <= 'FORZ';
(4) 등가 비교 연산자
--A = B : A값과 B값이 같으면 TRUE, 다르면 FALSE 반환
--A != B, A <> B, A ^= B : A값과 B값이 다르면 TRUE, 같으면 FALSE 반환
SELECT *
FROM EMP
WHERE SAL != 3000;
--WHERE SAL <> 3000;
--WHERE SAL ^= 3000;
(4) 논리 부정 연산자 NOT
--연봉이 3000이 아닌 것 출력
SELECT *
FROM EMP
WHERE NOT SAL = 3000;
(5) IN 연산자
--직책이 MANAGER이거나 SALESMAN이거나 CLERK인 것 출력
--OR 연산자
SELECT *
FROM EMP
WHERE JOB = 'MANAGER'
OR JOB = 'SALESMAN'
OR JOB = 'CLERK';
--IN 연산자
SELECT *
FROM EMP
WHERE JOB IN('MANAGER', 'SALESMAN', 'CLERK');
--직책이 MANAGER 아니고 SALESMAN 아니고 CLERK 아닌 것 출력
--AND 연산자
SELECT *
FROM EMP
WHERE JOB != 'MANAGER'
AND JOB <> 'SALESMAN'
AND JOB ^= 'CLERK';
-NOT IN
SELECT *
FROM EMP
WHERE JOB NOT IN('MANAGER', 'SALESMAN', 'CLERK');
(6) BETWEEN A AND B 연산자
SELECT 조회할 열1, 2, 3, ...
FROM 조회할 테이블 이름
WHERE 열 이름 BETWEEN 최소값 AND 최대값;
--연봉이 2000보다 크거나 같으면서 3000보다 작거나 같은 것 출력
--AND
SELECT *
FROM EMP
WHERE SAL >= 2000
AND SAL <= 3000;
--BETWEEN A AND B
SELECT *
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;
--NOT BETWEEN A AND B
SELECT *
FROM EMP
WHERE NOT BETWEEN 2000 AND 3000;
(7) LIKE 연산자
자료 검색할 때
-- %(와일드카드) : 길이와 상관없이 모든 문자 데이터 의미
--사원 이름 S로 시작하는 것 출력
SELECT *
FROM EMP
WEHERE ENAME = 'S%';
--사원 이름의 2번째가 L인 것 출력
SELECT *
FROM EMP
WHERE ENAME LIKE = '_L';
--사원 이름에 AM이 들어가는 것 출력
SELECT *
FROM EMP
WHERE ENAME LIKE = '%AN%'
--사원 이름에 AM이 들어가지 않은 것 출력
SELECT *
FROM EMP
WHERE ENAME NOT LIKE = '%AM%';
--_(언더바)
(8) IS NULL 연산자
※ NULL
값 자체가 존재하지 않음. 해당 사항 없음. 노출할 수 없는 값. 확정되지 않은 값.
ex) 통장을 개설한 적 없는 은행 고개의 계좌번호, 미혼인 고객의 결혼기념일 등등
일반 연산자 사용의 무의미 ex) NULL + 100 = NULL !!NULL과 0은 다름!!
--추가 수당없는 것 출력
--출력 안 되는 문장
SELECT *
FROM EMP
WHERE COMM = NULL;
--바른 방법
SELECT *
FROM EMP
WHERE COMM IS NULL;
--추가 수당이 있는 것 출력
SELECT *
FROM EMP
WHERE COMM IS NOT NULL;
(9) 집합 연산자
UNION, UNIONALL, MINUS(차집합), INTERSECT(교집합)
--UNION : 중복 제외하고 출력
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 30
UNITON
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 20;
--UNION ALL : 중복 포함 출력
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10
UNION ALL
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
--MINUS : 차집합
--부서번호가 10인 것을 제외한 것의 사원번호, 이름, 연봉, 부서번호 출력
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
MINUS
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;
--INTERSECT : 교집합
--부서번호가 10인 것의 사원번호, 이름, 연봉, 부서번호 출력
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
INTERSECT
SELCTE EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10;