[oracle] 연산자

재현·2024년 6월 5일
post-thumbnail

🔍 산술 연산자

✍ 산술 연산자는 더하기(+), 빼기(-), 나누기(/), 곱하기(*)와 같은 연산자를 말한다.

🔍 비교 연산자

✍ 숫자 뿐 아니라 문자열 비교에도 사용할 수 있다.

연산자설명
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';

🔍 BETWEEN A AND B 연산자

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;

🔍 IN 연산자

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연산자와 와일드 카드를 사용하는 방법에 따라 속도 차이가 날 수 있다. 따라서 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를 포함한

🔍 IS NULL 연산자

✍ 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 BBETWEEN 연산자
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; 

📖 reference

https://earth-95.tistory.com/148
인프런 오라클 SQL 데이터베이스

profile
운동과 코딩

0개의 댓글