본문 바로가기
Self Study/SQLD

[SQLD] 연산자와 내장함수(Stored Function)

by Lynnet 2022. 11. 1.
728x90

<연산자> 

연산자는 주로 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

728x90
반응형