연산자
연산자, 피연산자 자리에 어떤 타입의 값이 오는지,
연산자가 어떻게 동작하는지,
연산의 결과가 어떤 타입의 값인지 아는 것이 중요하다.
연산자에는 5가지 종류가 있다.
1. 연결 연산자
2. 산술 연산자
3. 관계 연산자
4. SQL 연산자
5. 논리 연산자
📁 1. 연결 연산자 ( || )
A || B : A 와 B 를 연결해준다.
숫자, 날짜, 문자 타입이 피연산자로 올 수 있으며
앞에 있는 값과 뒤에 있는 값을 연결한다.
연결의 결과는 문자타입이다.
(1) 정수 || 정수
SELECT 10 || 20 AS RES
FROM DUAL; -- 정수 연결 정수 -> 문자
※ 특정 실행 결과를 보고 싶을 때엔 "DUAL" 을 작성하여 확인한다 (오라클에서 지원하는 기능)
(정수) || (정수) 의 결과값은 문자타입으로 나타난다.
(2) 문자 || 문자
-- 문자
-- 항상 작은 따옴표
-- 중간에 공백은 들어가지 않는다.
SELECT '츄파츕스' || '요거트 스트로베리'
FROM DUAL; -- 문자 연결 문자 -> 문자
SELECT FIRST_NAME || LAST_NAME AS 풀네임
FROM EMPLOYEES;
문자와 문자 연결 사이에 공백이 들어가지 않기 때문에
공백을 추가하고자 한다면 아래와 같이 작성해야한다.
FIRST_NAME || ' ' || LAST_NAME AS "이름"
(3) 날짜 타입 연결
뒤에 연결하는 것이 문자든 숫자든 간에 문자타입으로 결과값이 나타난다.
-- 날짜 타입 연결 문자든 숫자 -> 문자
SELECT HIRE_DATE || '에 취업'
FROM EMPLOYEES;
결과값이 ABC(문자타입) 으로 바뀐 것을 볼 수 있다.
📁 2. 산술 연산자 ( +, -, *, / )
기본적으로 숫자 타입의 사칙 연산을 지원한다.
날짜 +, - 정수 -> 정수 1.
1일로 연산이 가능하다.
연산의 결과는 날짜이다.
날짜 - 날짜 -> 흐른 일수가 결과로 나온다.
연산의 결과는 숫자이다.
-- 날짜타입의 연산
-- 날짜와 정수의 연산에서 정수는 DAY 이다.
-- 날짜와 숫자
SELECT HIRE_DATE,
HIRE_DATE + 30 / 60 / 24, -- 30분
HIRE_DATE - 10
FROM EMPLOYEES;
순서대로 30분이 늘어난 결과,
10일이 줄어든 결과를 확인할 수 있다.
📌 현재 날짜 정보
-- 날짜와 날짜
-- SYSDATE
-- 현재 날짜와 시간 정보를 가지고 있으며
-- 오라클에서 제공해준다.
SELECT SYSDATE
FROM DUAL;
날짜와 날짜의 연산은 뺄셈만 지원한다. (시간은 예외)
+ 덧셈은 지원하지 않으니 이 점 주의해야한다.
-- 날짜와 날짜의 연산은 뺄셈만 지원.
SELECT HIRE_DATE,
SYSDATE,
SYSDATE - HIRE_DATE
-- SYSDATE + HIRE_DATE -- '+'는 에러남
FROM EMPLOYEES;
📌 시간 작성 총정리/요약
-- 시간 작성법 총정리/요약
SELECT SYSDATE,
SYSDATE + 0.5, -- 12시간
SYSDATE - 12 / 24, -- 12시간
SYSDATE - 10 / 60 / 24, -- 10분
SYSDATE - 1 / 60 / 60 / 24 -- 1초
FROM DUAL;
📁 3. 관계 연산자 ( >, <, >=, <= )
= : 같으면 참
<> : 다르면 참 (sql 표준, != 도 연산은 가능하다)
📁 WHERE 절
원하는 행을 조회하거나 연산 처리한다.
아래와 같은 문법으로 작성한다.
SELECT 컬럼명
FROM 테이블명
WHERE 조건;
관계 연산자와 WHERE 절을 함께 알아보는 예시이다.
-- 직원의 이름, 성, 봉급을 조회한다.
-- 단, 봉급이 10,000 이상인 직원 정보만 조회.
SELECT * --(3)
FROM EMPLOYEES --(1)
WHERE SALARY >= 10000; --(2)
-- 해당 조건이 TRUE인 행만 가지고 온다.
-- 정렬도 추가!
SELECT FIRST_NAME, LAST_NAME, SALARY
FROM EMPLOYEES
WHERE SALARY >= 10000
ORDER BY SALARY;
관계 연산자와 WHERE 절을 사용한 예시를 보면
(1) FROM EMPLOYEES 가 가장 먼저 실행되고,
(2) WHERE SALARY >= 10000; 구문을 두번째로 실행시킨다.
그리고 마지막으로
(3) SELECT * 을 실행시킨다.
SQL 실행 순서에 대해서 조금 더 살펴보자면
SELECT FIRST_NAME 이름, -- 3 원하는 컬럼을 조회
LAST_NAME 성, -- 각 컬럼에 별칭을 부여
SALARY 봉급
FROM EMPLOYEES -- 1 EMPLOYEES 테이블에서!
WHERE SALARY >= 10000 -- 2 봉급이 10000 이상인 데이터만 가져와라
ORDER BY 봉급; -- 4 봉급 기준으로 오름차순 정렬
-- SELECT 절에서 별칭이 부여가 되어있는 상황이기에 오류가 나지 않는다
위와 같이 실행된다.
(1) FROM EMPLOYEES 가 먼저 실행되고
(2) WHERE SALARY >= 10000 이 실행되면서 SALARY 가 10000 이상인 데이터를 가져온 뒤
(3) SELE FROM EMPLOYEES CT FIRST_NAME 이름,
LAST_NAME 성,
SALARY 봉급 이 실행되면서 컬럼을 조회&별칭 부여한다.
결국 3번이 실행되기 전까지는 "봉급" 이라는 별칭이 부여되고 있지 않은 것이다.
(4) 마지막으로
ORDER BY 봉급; 봉급 기준으로 오름차순 정렬을 하면 SQL 작성문이 끝난다.
이미 "봉급" 이라는 별칭이 부여되었기 때문에 ORDER BY 에서는 오류가 나지 않는다.
📁 4. SQL 연산자
SQL 안에서만 있는 연산자이다.
WHERE 뒤에 조건과 함께 작성해주면 된다.
- BETWEEN a AND b
a 이상 b 이하인 조건 - IN(a, b, c, ...)
a 혹은 b 혹은 c 혹은 ... 일 조건 - LIKE
문자열 패턴을 검색하는 데에 사용하는 연산자
%(아무거나), _(자릿수) - IS NULL / IS NOT NULL
NULL : 데이터가 없음을 나타내는 값이다.
(1) BETWEEN a AND b
-- 직원 테이블에서
-- 봉급이 10,000 이상, 12,000 이하인 직원의
-- 이름, 성, 봉급을 봉급 오름차순으로 조회
SELECT FIRST_NAME 이름,
LAST_NAME 성,
SALARY 봉급
FROM EMPLOYEES
WHERE SALARY BETWEEN 10000 AND 12000
ORDER BY SALARY;
(2) IN(a, b, c, ...)
-- 직원 테이블에서
-- 봉급이 11,000 이상, 12,000 이하인 직원의
-- 이름, 성, 봉급을 봉급 오름차순으로 조회
SELECT FIRST_NAME 이름,
LAST_NAME 성,
SALARY 봉급
FROM EMPLOYEES
WHERE SALARY IN(10000, 11000, 12000)
ORDER BY SALARY;
(3) LIKE
-- LIKE
-- % : ~아무거나
SELECT FIRST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%e';
-- _ : 자릿수
SELECT FIRST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '____e';
-- '%e%' -> 그냥 e가 있으면 true
SELECT FIRST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE '%e%';
-- '%en%' -> en 이 있으면 true
-- '%e%n%' -> e 와 n을 포함하면 true (순서대로!)
-- '%e_n%' -> e 와 n 사이에 무조건 한 글자가 더 있으면 true
(4) IS NULL / IS NOT NULL
아래와 같은 방법으로 NULL 데이터를 조회하려고 하면 조회가 되지 않는다.
(NULL 값 자체가 false 값을 가지고 있다고 한다. 사실 무슨 의미인지는 이해하지 못했지만)
SELECT FIRST_NAME, LAST_NAME, COMMISSION_PCT
FROM EMPLOYEES
WHERE COMMISSION_PCT = NULL;
-- NULL 의 연산의 결과는 NULL 이기 때문에 우리가 원하는 대로 실행되지 않는다.
-- 따라서 IS NULL / IS NOT NULL <- 라고 표기해야한다.
따라서 IS NULL 또는 IS NOT NULL 을 사용해야 한다.
SELECT FIRST_NAME, LAST_NAME, COMMISSION_PCT
FROM EMPLOYEES
WHERE COMMISSION_PCT IS NULL;
📁 5. 논리 연산자 (AND, OR, NOT)
&& || 을 AND, OR, NOT 으로 별도로 작성하는 것이다.
(1) AND 를 사용하여 SQL 작성
1-1) 부서가 영업부서일 때 (DEPARTMENT_ID = 80)
-- 직원 테이블에서
-- 부서가 영업부서이면서, 봉급이 10000 이상인 직원들의
-- 이름, 성, 봉급, 부서ID를
-- 봉급 오름차순으로 조회하기
SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE (DEPARTMENT_ID = 80) AND (SALARY >= 10000)
ORDER BY SALARY;
1-2) 부서가 영업부서가 아닐 때 (DEPARTMENT_ID <> 80)
-- 직원 테이블에서
-- 부서가 영업부서가 아니면서, 봉급이 10000 이상인 직원들의
-- 이름, 성, 봉급, 부서ID를
-- 봉급 오름차순으로 조회하기
SELECT FIRST_NAME, LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMPLOYEES
WHERE (DEPARTMENT_ID <> 80) AND (SALARY >= 10000)
ORDER BY SALARY;
'📁 Language > 🛢️ SQL' 카테고리의 다른 글
[SQL] 제약 조건 (PK, FK, UK, NOT NULL, CHECK) (0) | 2024.03.21 |
---|---|
[SQL] DDL (CREATE, ALTER, DROP, TRUNCATE) (0) | 2024.03.20 |
[SQL] DML (SELECT, INSERT, UPDATE, DELETE) (0) | 2024.03.20 |
[SQL] SQL의 종류 - SQL명령어의 성격에 따라 분류한 것들 (0) | 2024.03.20 |
[SQL] SQL의 특징 및 문법 정리1 (0) | 2024.03.18 |