<연산자>
연산자는 주로 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 서버에서는 지원하지 않음 |
'Self Study > SQLD' 카테고리의 다른 글
[SQLD] 트랜잭션(Transaction) (0) | 2022.11.01 |
---|---|
[SQLD] SQL문 중요 간단 정리! :) (0) | 2022.11.01 |
[SQLD] DCL(데이터 제어어 : Data Control Language) 과 TCL(트랜젝션 제어어 : Transaction Control Language) (0) | 2022.11.01 |
[SQLD] DML( 데이터 조작어 : Data Manipulation Language) (2) | 2022.11.01 |
[SQLD] DDL( 데이터 정의어 : Data Definition Language) (0) | 2022.10.28 |