<연산자>
연산자는 주로 WHERE 절에 사용되며 연산자의 종류에 따라 우선순위가 발생한다.
-산술 연산자 (+, -, * , /) : 0으로 나눌 수 없으며 '정수/정수 = 실수' 이다.
- 비교 연산자
연산자 |
= |
<> |
> |
< |
>= |
<= |
의미 |
같다 |
같지 않다 |
크다 |
작다 |
크거나 같다 |
작거나 같다 |
- 논리 연산자 : NOT, AND, OR
- LIKE 연산자 : 유사 문자열 검색
연산자 |
% |
_ |
# |
의미 |
길이를 알 수 없는 문자 |
문자 한개 |
숫자 한개 |
<예시>
LIKE 'A%' -> A로 시작하는 모든 문자열
LIKE '%A' ->A로 끝나는 모든 문자열
LIKE'%A%' ->A가 포함된 모든 문자열
LIKE '___A%' -> 3번째 글자가 A인 모든 문자열 ->결과 : BLAKE, CLARK, ADAMS
LIKE '__O__' -> 총 5글자이며 그 중 3번째 글자가 O인 문자열 ->결과 : SCOTT
- 연산자 우선순위
종류 |
연산자 |
우선순위 |
산술 연산자 |
* , / ,+ , - |
*부터 우선 -이 제일 마지막 |
관계 연산자 |
= , <>, > ,< ,>= ,<= |
모두 같음 |
논리 연산자 |
NOT, AND, OR |
NOT이 우선 OR 이 마지막 |
* 산술 > 관계 > 논리 연산자 순으로 연산자 우선순위가 정해짐
+ 플러스 !
-IN : 포함된 데이터를 가지고 올때
WHERE DEPTNO = 10 OR DEPTNO =20 OR DEPTNO =30;
아래와 위의 값은 같다.
WHERE DEPTNO IN (10, 20, 30)
OR 가 여러개일때 IN 을 사용하면 유용하다.
- BETWEEN ~ AND : 범위, 기간
SELECT * FROM EMP WHERE EMPNO BETWEEN 7000 AND 8000;
사원 번호(EMPNO가 7000에서 8000사이에 있는 직원들의 정보를 전부 조회
상기 두개의 연산자는 'NOT'과도 같이 쓰인다.
- Null의 연산
Null값을 가진 필드의 연산은 무조건 Null 값이 된다.
예) SELECT CAL1 + CAL2 FROM TABLE1;
CAL1 |
CAL2 |
30 |
20 |
null |
40 |
50 |
null |
이라면은 값은 50, null, null 이 된다. 첫번째 행은 숫자끼리의 연산이기에 그대로 더하기를 해주면 되지만, 나머지 행의 경우 Null값이 포함되어있기에 결과값은 null이다.
다만, SUM()같은 집계함수에서는 Null은 값이 없는 것으로 처리되어서 영향을 주지 않는다.
내장함수(Stored Function) 란?
* SQL 함수라고도 한다.
장함수란 DBMS에서 제공하는 함수로 특정 값이나 열의 값을 입력 받아서 계산하여 결과값을 보여준다.
- 단일 행 함수(Single Row Function): 문자형, 숫자형, 날짜형, 변환형
- 다중 행 함수(Multi Row Function): 그룹 함수
- 사용될 수 있는 위치 : SELECT 절, WHERE 절, START WITH 절, HAVING 절, INSERT문의 INTO절, UPDATE문의 SET 절
- 1:M 의 조인이라 하더라도 M쪽에서 출력된 행이 하나의 단일행 함수의 입력값으로 사용 가능
- 다중행 함수도 단일행 함수와 동일하게 단일 값만 반환함
*여러 함수를 겹쳐서 사용 가능
종류 |
내용 |
함수의 예 |
문자형 함수 |
문자를 입력하면 문자나 숫자 값을 반환한다. |
LOWER, UPPER, SUBSTR, LENGTH, LTRIM,RTRIM,TRIM,ASCII |
숫자형 함수 |
숫자를 입력하면 숫자값을 반환한다. |
ABS, MOD, ROUND, TRUNC, SIGN, CHR, CEIL, FLOOR, EXP, LOG, LN, POWER, SIN, COS, TAN |
날짜형 함수 |
DATE 타입의 값을 연산한다. |
SYSDATE, EXTRACT, TO_NUMBER(TO_CHAR(d,"YYYY"|"MM"|"DD") |
변환형 함수 |
문자, 숫자, 날짜형 값의 데이터 타임을 변환한다. |
TO_NUMBER, TO_CHAR, TO_DATE |
Null관련 함수 |
Null을 처리하기 위한 함수 |
NVL, NULLIF, COALESCE |
<그룹함수(GROUP FUNCTION)>
하나 이상의 행을 그룹으로 묶어 연산하여 총합, 평균 등 하나의 결과로 나타낸다.
NULL을 제외하고 계산한다.
종류 |
설명 |
예시 |
SUM |
해당 컬럼 값들에 대한 총합을 구한다. |
SELECT SUM (칼럼명) FROM 테이블명; |
AVG |
해당 컬럼 값들에 대한 평균을 구한다. |
SELECT AVG (칼럼명) FROM 테이블명; |
MAX / MIN |
MAX 는 해당 컬럼 값들에 대한 최대값 MIN 은 최솟값을 구한다. |
SELECT MAX (칼럼명), MIN (칼럼명) FROM 테이블명 ; |
COUNT |
테이블에서 조건을 만족하는 행(ROW)의 개수를 반환한다. |
SELECT COUNT(*), COUNT(컬럼명) FROM 테이블명; ->* 은 해당 테이블의 모든 행의 수를 반환 -> 칼럼명을 넣으면 칼럼에 값이 있는 행의 수를 반환
SELECT COUNT(DISTINCT 칼럼명) FROM 테이블명; -> 해당 칼럼에서 중복을 제거한 갯수를 구한다. |
GROUP BY |
어떤 컬럼 값을 기준으로 그룹 함수를 적용한다. |
GROUP BY (칼럼명) -> 해당 칼럼에 해당하는 값에 따라 그룹화 된다. |
HAVING |
SELECT 문에서 조건을 구할때 WHERE절을 사용하는데 그룹 함수를 이용할때의 조건문으로 HAVING 을 사용한다. *그룹함수에 대한 조건이므로 GROUP BY 와 함께 사용한다. |
HAVING 조건절 |
GROUP BY 예시!
SELECT DEPTNO(부서번호), MAX(SAL), MIN(SAL)
FROM EMP(테이블명)
GROUP BY DEPTNO;
->부서별 최대/최소 월급을 구하기 위해서는 위와 같이 GROUP BY 를 통해 그룹별로 묶어서 사용 할 수 있다.
HAVING 예시!
SELECT DEPTNO(부서번호), MAX(SAL), MIN(SAL)
FROM EMP(테이블명)
GROUP BY DEPTNO;
HAVING MAX(SAL) > 2000;
->부서별 월급의 최소값과 최대값을 구하는데 최대 월급이 2000보다 클 경우에만 표시한다.
<윈도우함수(WINDOW FUNCTION)>
분석함수 또는 순위 함수로도 알려져있으며 GROUP BY 절을 사용하지 않고 속성의 값을 집계할 수 있는 함수를 말한다.
다른 함수들 처럼 중첩해 사용할 수 없지만 서브쿼리에서 사용이 가능하다.
구분 |
함수 |
비고 |
순위 함수 |
RANK, DENSE_RANK, ROW_NUMBER |
|
일반 집계 함수 |
SUM, MAX, MIN, AVG, COUNT |
SQL서버에서는 OVER 절 내에서 ORDER BY 지원하지 않음 |
그룹 내 행 순서 함수 |
FIRST_VALUE, LAST_VALUE, LAG, LEAD |
SQL서버에서는 지원하지 않음 |
그룹 내 비율 함수 |
RATIO_TO_REPROT, PERCENT_RANK, CUME_DIST, NTILE |
NTLIE 제외 SQL 서버에서는 지원하지 않음 |
출처 : https://for-my-wealthy-life.tistory.com/48