-
SAP HANA SQL - 4.5 Operators / 4.6 ExpressionsSAP 2026. 5. 29. 19:06sap_hana_sql_45_46.html0.02MB
SAP HANA SQL - 4.5 Operators / 4.6 Expressions 정리 SAP HANA SQL Reference — Operators & Expressions
📖 SAP HANA SQL Reference Guide for SAP HANA Platform | 4.5 Operators (p.51~55) / 4.6 Expressions (p.56~61)
4.5 Operators
Operator는 산술 계산, 값 비교, 값 할당 등을 수행하는 연산 기호입니다.
1. Unary & Binary Operators
구분 설명 형식 종류 Unary 단항 피연산자 1개에 적용 operator operand+(양수),-(부호 반전),NOT(논리 부정)Binary 이항 피연산자 2개에 적용 operand1 operator operand2*/+-|=!=<><=>=|ANDOR2. Operator Precedence (연산자 우선순위)
괄호
()를 사용하면 우선순위를 변경할 수 있으며, 같은 우선순위의 연산자는 좌 → 우 순서로 평가됩니다.우선순위 연산자 설명 ① 최고 ()괄호 ② +,-단항 양수 / 음수 ③ *,/곱셈, 나눗셈 ④ +,-덧셈, 뺄셈 ⑤ ||문자열 연결 ⑥ =!=<><=>=IS NULLLIKEBETWEEN비교 ⑦ NOT논리 부정 ⑧ AND논리 AND ⑨ 최저 OR논리 OR 3. Arithmetic Operators (산술 연산자)
연산자 설명 NULL 처리 -<expr>부호 반전 (Negation) 결과 NULL expr + expr덧셈 결과 NULL expr - expr뺄셈 결과 NULL expr * expr곱셈 결과 NULL expr / expr나눗셈 NULL이거나 제수 = 0 → 에러 DECIMAL(p, s) 결과 정밀도 규칙
e1 = DECIMAL(p1, s1), e2 = DECIMAL(p2, s2) 일 때:
연산 Result Precision Result Scale e1 + e2max(s1,s2) + max(p1-s1, p2-s2) + 1 max(s1, s2) e1 - e2max(s1,s2) + max(p1-s1, p2-s2) + 1 max(s1, s2) e1 * e2p1 + p2 s1 + s2 e1 / e2p1 - s1 + s2 + max(6, s1+p2+1) max(6, s1+p2+1) ⚠️ 결과 precision이 38을 초과하면 자동으로 DECIMAL(부동소수점) 타입으로 변환됩니다.4. String Operators (문자열 연산자)
연산자 설명 expr || expr문자열 연결 (두 개의 수직바). 어느 한쪽이 NULL이면 결과도 NULL 💡 길이 제한
· NVARCHAR 포함 시 결과 타입 = NVARCHAR, 최대 64MB
· VARCHAR 연결은 최대 5,000자
· 앞뒤 공백(leading / trailing spaces)은 유지됨5. Comparison Operators (비교 연산자)
문법:
<expression1> <comparison_operator> <expression2>연산자 설명 예시 =같음 WHERE id = 25>초과 WHERE id > 25<미만 WHERE id < 25>=이상 WHERE id >= 25<=이하 WHERE id <= 25!=또는<>같지 않음 WHERE id != 256. Logical Operators (논리 연산자)
연산자 문법 설명 ANDWHERE cond1 AND cond2모두 TRUE → TRUE / 하나라도 FALSE → FALSE / 나머지 → UNKNOWN ORWHERE cond1 OR cond2하나라도 TRUE → TRUE / 모두 FALSE → FALSE / 나머지 → UNKNOWN NOTWHERE NOT conditionTRUE ↔ FALSE 반전. UNKNOWN은 그대로 UNKNOWN 7. Set Operators (집합 연산자)
여러 쿼리 결과를 하나의 결과 집합으로 합칠 때 사용합니다.
연산자 설명 UNION두 쿼리 결과 합산 (중복 제거) UNION ALL두 쿼리 결과 합산 (중복 포함) INTERSECT두 쿼리의 공통 행만 반환 EXCEPT/MINUS첫 번째 쿼리에서 두 번째 쿼리 결과를 제거 ( MINUS는EXCEPT의 동의어)💡 AMDP SQLScript에서도 동일하게 적용됩니다. 중복 제거가 필요 없다면UNION대신UNION ALL을 사용하는 것이 성능상 유리합니다.
4.6 Expressions
Expression이란 값을 반환하도록 평가될 수 있는 절(clause)입니다.
1. Expression 기본 문법
<expression> ::= <case_expression> | <function_expression> | <aggregate_expression> | ( <expression> ) | ( <subquery> ) | - <expression> | <expression> <operator> <expression> | <variable_name> | <constant> | [<correlation_name>.]<column_name>2. Case Expressions
SQL 문 안에서 IF-THEN-ELSE 로직을 SQLScript 없이 구현합니다.
① Simple CASE — 동등 비교
CASE <expression> WHEN <expression> THEN <expression> [WHEN <expression> THEN <expression>] ... [ELSE <expression>] END② Searched CASE — 조건식 비교
CASE WHEN <condition> THEN <expression> [WHEN <condition> THEN <expression>] ... [ELSE <expression>] END⚠️ 평가 순서 비결정성 (중요!)
HANA Optimizer는 WHEN/THEN 절의 평가 순서를 보장하지 않습니다.
· 모든 expression이 에러 없이 실행 → 결과는 결정적(deterministic)
· 어떤 expression이 에러를 throw → 결과는 비결정적 (에러 발생 or 값 반환 모두 가능)
Simple CASE / Searched CASE 모두 동일하게 적용됩니다.예시 — 평가 순서에 따른 결과 차이
-- p1은 항상 TRUE, e2는 항상 예외 발생하는 상황 CASE WHEN p1 THEN e1 WHEN p2 THEN e2 ELSE e3 END -- 순서 ① p1→e1→p2→e2→e3 -- p1=TRUE → e1 반환, p2/e2/e3 평가 안 함 → 정상 반환 -- 순서 ② e1→e2→e3→p1→p2 -- e2 예외 발생 → 전체 예외 throw -- SAP HANA에서 두 경우 모두 가능!3. Function Expressions
SQL 내장 함수를 Expression으로 사용합니다.
<function_name> ( <expression> [, <expression>] ... )4. Aggregate Expressions
여러 행의 값을 집계하여 단일 값을 반환합니다.
문법
COUNT(*) | COUNT( DISTINCT <expression_list> ) | <agg_name> ( [ALL | DISTINCT] <expression> ) | STRING_AGG( <expression> [, <delimiter>] [ORDER BY <expression> [ASC|DESC] [NULLS FIRST|NULLS LAST]] ) -- agg_name 목록: -- CORR | CORR_SPEARMAN | COUNT | MIN | MEDIAN | MAX | SUM | AVG -- STDDEV | VAR | STDDEV_POP | VAR_POP | STDDEV_SAMP | VAR_SAMP집계 함수 목록
함수명 설명 COUNT(*)전체 행 수 (NULL · 중복 포함) COUNT(expr)Non-NULL 값의 행 수 COUNT(DISTINCT ...)고유값 조합 수 (all-NULL 튜플 제외) MIN최솟값 MAX최댓값 SUM합계 AVG산술 평균 MEDIAN중앙값 (숫자 타입 컬럼) STDDEV표준편차 (VAR의 제곱근) STDDEV_POP모집단 표준편차 STDDEV_SAMP표본 표준편차 VAR분산 VAR_POP모집단 분산 VAR_SAMP표본 분산 (행 수 = 1이면 NULL 반환) CORRPearson 상관계수 CORR_SPEARMANSpearman 순위 상관계수 STRING_AGG문자열 연결 집계 ⚠️DISTINCT와 함께 사용 불가:STDDEV_POP,STDDEV_SAMP,VAR_POP,VAR_SAMP숫자 타입별 결과 타입
함수 TINYINT SMALLINT INTEGER BIGINT DECIMAL(p,s) REAL DOUBLE COUNTBIGINT BIGINT MIN / MAXTINYINT SMALLINT INTEGER BIGINT DECIMAL(p,s) REAL DOUBLE SUMINTEGER INTEGER INTEGER BIGINT DECIMAL(p',s)* REAL DOUBLE AVG / STDDEV / VARDECIMAL(9,6) DECIMAL(11,6) DECIMAL(16,6) DECIMAL(25,6) DECIMAL(p,s) REAL DOUBLE 💡SUM의 p' 결정 규칙: p ≤ 18 → p'=18 / p ≤ 28 → p'=28 / p ≤ 38 → p'=38COUNT(DISTINCT) 예시 — all-NULL 튜플 제외
CREATE ROW TABLE T (A INT, B INT); INSERT INTO T VALUES (NULL, NULL); -- all-NULL → 제외 INSERT INTO T VALUES (1, NULL); INSERT INTO T VALUES (1, NULL); -- 중복 → 1개 처리 INSERT INTO T VALUES (NULL, 1); INSERT INTO T VALUES (1, 1); INSERT INTO T VALUES (1, 1); -- 중복 → 1개 처리 SELECT COUNT(DISTINCT A, B) AS DISTINCT_A_B FROM T; -- 결과: 3 -- (A=1, B=NULL) / (A=NULL, B=1) / (A=1, B=1)5. JSON Object Expressions
JSON 컬렉션 테이블과 함께 사용하며, JSON 객체를 직접 생성합니다.
문법
-- 기본 JSON 오브젝트 {"<key>": <json_value_expression>} -- value 타입: string / numeric / boolean / NULL / path / 중첩 object / array -- array: [ value1, value2, ... ]구분 설명 key 문자열 리터럴과 유사, 반드시 이중 따옴표로 감쌈 value 문자열, 숫자, 불린, NULL, 중첩 JSON 객체, 배열 모두 가능 사용 가능 구문 SELECT,UPDATE,INSERT INTO+ 산술 연산자(+ - * /)예시
-- 단순 JSON 객체 { "firstname":'John', "lastname":'Smith', "age":45 } -- 중첩 JSON 객체 { "firstname":'John', "lastname":'Smith', "age":45, "address": { 'street':'Dietmar-Hopp-Allee', 'city':'Heidelberg' } }6. Subqueries in Expressions
괄호로 감싼
SELECT문을 Expression으로 사용합니다.<scalar_subquery_expression> ::= ( <subquery> )규칙 내용 SELECT 항목 수 1개만 허용 반환값 0개 또는 1개(스칼라) 사용 가능 위치 SELECT리스트,UPDATE의SET절사용 불가 위치 GROUP BY절 내부 ⚠️예시 — 부서별 직원 수 + 전체 직원 수 함께 조회
SELECT DepartmentName, COUNT(*), 'out of', (SELECT COUNT(*) FROM Employees) -- 스칼라 서브쿼리 FROM Departments AS D , Employees AS E WHERE D.DepartmentID = E.DepartmentID GROUP BY DepartmentName;'SAP' 카테고리의 다른 글
SAP HANA SQLScript - 8장 명령형 로직 (8.1~8.3) (0) 2026.05.30 SAP HANA SQL — 4.12 Error Codes (0) 2026.05.29 AMDP 없이 CDS 데이터 구성하기 | SAP ABAP (0) 2026.05.29 Oracle Hierarchy → SAP HANA SQLScript 변환 가이드 (0) 2026.05.26 ABAP RAP + AMDP 정리 (0) 2026.05.25