✍ 산술 연산자는 더하기(+), 빼기(-), 나누기(/), 곱하기(*)와 같은 연산자를 말한다.
✍ 숫자 뿐 아니라 문자열 비교에도 사용할 수 있다.
| 연산자 | 설명 |
|---|---|
| A > B | A값이 B를 초과할 경우 참 |
| A < B | A값이 B미만일 때 참 |
| A >= B | A값이 B이상일 때 참 |
| A <= B | A값이 B이하일 때 참 |
| A = B | A값이 B값과 같을 때 참 |
| A != B, A <> B, A ^= B | A값이 B값과 다를 때 참 |
-- 비교연산자
-- 문자는 특수문자 < 숫자 , 영문 대문자 < 영문 소문자 < 한글
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE SALARY >= 15000;
SELECT FIRST_NAME, SALARY, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE = '04/01/30';
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE FIRST_NAME = 'Steven';
SELECT FIRST_NAME, SALARY, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE > '04/01/30';
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE FIRST_NAME > 'Steven';
SELECT DISTINCT [조회하고자 하는 column 이름1], [조회하고자 하는 column 이름2] ...
FROM [조회하고자 하는 table 이름]
WHERE 열 이름 BETWEEN 최솟값 AND 최댓값;
-- BETWEEN A AND B 연산자(A와 B 사이의 값)
SELECT FIRST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY BETWEEN 10000 AND 12000;
SELECT DISTINCT [조회하고자 하는 column 이름1], [조회하고자 하는 column 이름2] ...
FROM [조회하고자 하는 table 이름]
WHERE 열 이름 IN (데이터1, 데이터2, ...);
-- IN 연산자
SELECT EMPLOYEE_ID, FIRST_NAME, SALARY, MANAGER_ID
FROM EMPLOYEES
WHERE MANAGER_ID IN (101, 102, 103);
SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE JOB_ID IN ('IT_PROG', 'FI_MGR', 'AD_VP');
✍ LIKE 연산자는 일부 문자열이 포함된 데이터를 조회할 때 사용한다. LIKE 연산자는 주로 와일드 카드를 포함하여 조회 조건을 설정한다.
✍ 많은 레코드가 존재하는 테이블을 여러 개 조합하여 조회하는 경우 LIKE연산자와 와일드 카드를 사용하는 방법에 따라 속도 차이가 날 수 있다. 따라서 LIKE연산자와 와일드 카드를 사용할 때 조회 성능에 영향이 없는지 고려해야 한다.
| 종류 | 의미 | 사용 예시 |
|---|---|---|
| _(underscore) | 어떤 값이든 상관없이 한 개의 문자 데이터 의미 | LIKE '_A%' : A앞에 문자가 하나 붙은 모든 문자열 |
| % | 길이와 상관없이(문자 0개인 경우 포함) | LIKE 'A%' : A로 시작하는 모든 문자열 |
-- LIKE 연산자
SELECT FIRST_NAME, LAST_NAME, JOB_ID, DEPARTMENT_ID
FROM EMPLOYEES
WHERE JOB_ID LIKE 'IT%'; -- IT로 시작하는
SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE LIKE '%03%'; -- 03을 포함하는
SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE HIRE_DATE LIKE '%03'; -- 03으로 끝나는
SELECT FIRST_NAME, EMAIL
FROM EMPLOYEES
WHERE EMAIL LIKE '_A%'; -- 두번째 글자가 A인
✍ 만약 찾고자 하는 문자열의 _ , %가 포함되어 있으면 이것을 와일드 카드가 아닌 데이터로써 볼 수 있다.
SELECT [조회하고자 하는 column 이름1], [조회하고자 하는 column 이름2] ...
FROM [조회하고자 하는 table 이름]
WHERE 열 이름 LIKE 'A\_A%' ESCAPE '\';
-- ESCAPE (underscore(_), %)
SELECT FIRST_NAME, JOB_ID
FROM EMPLOYEES
WHERE JOB_ID LIKE 'SA\_M%' ESCAPE '\'; -- underscore를 포함한
✍ NULL은 데이터 값이 완전히 비어 있는 상태를 의미, 값 자체가 존재하지 않은 상태로 0과는 다른 의미를 가진다.
✍ NULL은 존재하지 않는 값이기 때문에 산술 연산자, 비교 연산자의 출력 대상이 아니다.
✍ NULL을 포함한 산술 연산은 그대로 NULL값이 된다.
✍ 만약 특정 컬럼의 값이 NULL인지 확인하고 싶다면 IS NULL, IS NOT NULL을 사용해야 한다.
-- IS NULL 연산자 (IS NULL, IS NOT NULL)
SELECT FIRST_NAME, MANAGER_ID
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL;
SELECT FIRST_NAME, JOB_ID, COMMISSION_PCT
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NOT NULL;
✍ AND는 양쪽의 조건이 참이어야 TRUE를 리턴
✍ OR는 한쪽의 조건이 참이면 TRUE를 리턴
✍ NOT 연산자는 뒤의 조건에 반대되는 결과를 리턴
-- 논리 연산자 (비교연산자 > NOT > AND > OR)
SELECT FIRST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'IT_PROG' AND SALARY >= 5000;
SELECT FIRST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'IT_PROG' OR SALARY >= 5000;
-- JOB_ID가 FI_MGR이고 SALARY가 6000이상인 사람과 JOB_ID가 IT_PROG인 사람
SELECT FIRST_NAME, JOB_ID, SALARY
FROM EMPLOYEES
WHERE JOB_ID = 'IT_PROG' OR JOB_ID = 'FI_MGR' AND SALARY >= 6000;
-- JOB_ID가 IT_PROG 이거나 FI_MGR인 사람 중에 SALARY가 6000이상인 사람
SELECT FIRST_NAME, JOB_ID, SALARY가
FROM EMPLOYEES
WHERE (JOB_ID = 'IT_PROG' OR JOB_ID = 'FI_MGR') AND SALARY >= 6000;
| 연산자 | 설명 |
|---|---|
| *,/ | 산술 연산자 곱하기, 나누기 |
| +,- | 산술 연산자 더하기, 빼기 |
| =, !=, ^=, <>, >, <, >=, <= | 대소 비교 연산자 |
| IS (NOT) NULL, (NOT) LIKE, (NOT) IN | (그 외) 비교 연산자 |
| BETWEEN A AND B | BETWEEN 연산자 |
| NOT | 논리 부정 연산자 NOT |
| AND | 논리 연산자 AND |
| OR | 논리 연산자 OR |
✍ 우선순위는 산술 연산자가 가장 높고, 논리 연산자가 가장 낮다
✍ 다음과 같은 우선순위 표보다 우선순위가 높으려면 소괄호()로 묶어주면 가장 먼저 연산식을 수행한다.
✍ SELECT 문을 통해 조회한 결과를 집합으로 다룰 수 있는 연산자이다.
| 연산자 | 설명 |
|---|---|
| UNION | 연결된 결과 값을 합집합으로 처리하여 데이터 출력(중복 제거) |
| UNION ALL | 연결된 결과 값을 합집합으로 처리하여 데이터 출력(중복 포함) |
| INTERSECT | 연결된 결과 값을 교집합 처리하여 먼저 작성한 SELECT문에서 나중에 작성한 SELECT문에 존재하지 않는 값만 출력. |
| MINUS | 연결된 결과 값을 차집합으로 처리하여 데이터 출력 |
-- 합집합(두 SELECT 간의 열의 수, 데이터 타입은 일치하여야 함)
-- UNION(중복 제거)
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE HIRE_DATE LIKE '04%'
UNION
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE DEPARTMENT_ID = 20;
-- UNION ALL(중복 포함)
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE HIRE_DATE LIKE '04%'
UNION ALL
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE DEPARTMENT_ID = 20;
-- INTERSECT (교집합)
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE HIRE_DATE LIKE '04%'
INTERSECT
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE DEPARTMENT_ID = 20;
-- MINUS(차집합)
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE HIRE_DATE LIKE '04%'
MINUS
SELECT EMPLOYEE_ID, FIRST_NAME FROM EMPLOYEES
WHERE DEPARTMENT_ID = 20;
https://earth-95.tistory.com/148
인프런 오라클 SQL 데이터베이스