본문 바로가기
반응형

Develops/SQL16

[ORACLE] 특정 행 추출하기 (FETCH, ROWNUM, OFFSET, PERCENT, LIMIT, TOP) 업무를 하며 쿼리를 작성하다 보면 페이징 처리를 하거나 제한해서 데이터를 추출해야 하는 상황에 주로 ROWNUM을 활용했었는데, 이번에 FETCH 구문을 활용하는 방법을 알게 되었다.보통 ROWNUM을 활용하여 데이터를 추출하려면 정렬한 쿼리를 서브쿼리로 감싸야 하는데, FETCH 구문을 활용하면 좀 더 간결하게 쿼리를 작성할 수 있어 종종 활용하게 될 것 같고, 사실 ROWNUM과 FETCH 구문 외에도 TOP, LIMIT 등 데이터를 추출하는 방법이 많은데, 다 숙지해뒀다가 다양한 상황 및 조건에 맞춰 유연하게 쿼리를 작성할 수 있는 사람이 되어아겠다. * FETCH 구문의 경우 ORACLE 12c 버전부터 사용 가능 FETCH 구문SELECT [컬럼명] FROM [테이블명] ORDER BY [컬럼.. 2024. 11. 2.
[ORACLE] NVL, NVL2, NULLIF, COALESCE 함수 (NULL 값 처리, 치환 등) 쿼리를 작성하다 보면 NULL 값을 그대로 사용할 수 없는 경우 NULL 값에 대한 처리를 많이 하는 편이다.NULL 값을 체크하거나 치환하는 등의 처리를 위해서는 알아두면 좋을 것 같아 정리해본다.   NVL 구문 예시NVL(대상 컬럼, 대상 컬럼이 NULL 때의 값)NVL(COLUMN, 'COLUMN IS NULL') NVL2 구문 예시NVL2(대상 컬럼, 대상 컬럼이 NULL이 아닌 경우의 값, 대상 컬럼이 NULL일 경우의 값)NVL2(COLUMN, 'COLUMN IS NOT NULL', 'COLUMN IS NULL') NULLIF 구문 예시NULLIF(대상 컬럼, 비교할 컬럼)NULLIF(COLUMN1, COLUMN2) > COLUMN1와 COLUMN2의 값이 같다면 NULL 반환 > COLUM.. 2024. 8. 3.
[ORCALE] DECODE 함수 (SQL로 IF ELSE 구문 사용하기) 쿼리를 작성하다 보면 생각보다 많이 사용하게 되는 함수가 DECODE 함수이다.복잡한 로직을 짜게 된다면 가독성을 고려하여 CASE WHEN 구문을 추천하지만,간단한 IF ELSE 로직을 처리하기 위함이라면  DECODE 함수를 활용한다면 간결하게 쿼리를 작성할 수 있다. 구문 예시DECODE(컬럼, 조건1, 결과1, 조건2, 결과2, 조건3, 결과3, ... , 조건에 해당하지 않았을 때의 값) 구문 예시-- COL1 값이 'A' 인 경우에만 'Y' 반환하고, 그 외에는 'N' 반환하기SELECT DECODE(COL1, 'A', 'Y', 'N') AS RESULT FROM TBL1-- COL1 값이 'A'이면서, COL2 값이 '9' 인 경우에 'Y' 반환하고, 그 외에는 'N' 반환하기SELECT .. 2024. 8. 3.
[MySQL] 위도, 경도로 거리를 계산하기(하버사인 공식, SIN, COS, ACOS, RADIANS) 쿼리 설명하버사인 공식(Haversine formula)을 이용한 방법 지구를 구와 비슷한 모양으로 가정하고, 지구의 반지름을 이용하여 두 지점 사이의 거리를 계산하는 공식Latitude(lat) : 위도  36~38Longitude(lng) : 경도 126~128거리 작성 시 1 = 1km / 0.1 = 100m`쿼리 예시slLat, slLng : 첫번째 지점의 위도/경도 좌표가 되는 값lat좌표값, lng좌표값 : 첫번째 지점으로부터 거리를 비교할 지점의 위도/경도 좌표가 되는 값SELECT 가져올컬럼 , (6371 * ACOS(COS(RADIANS(lat좌표값)) * COS(RADIANS(slLat)) * COS(RADIANS(slLng) - RADIANS(lng좌표.. 2024. 7. 21.
[PostgreSQL] GENERATE_SERIES 사용 예시 (범위 안의 일련의 값 생성) GENERATE_SERIES이란?일련의 값을 지정된 간격으로 생성해주는 함수입니다.값 사이의 간격과 단계는 사용자가 정의할 수 있습니다.  구문start : tinyint, smallint, int, bigint, 10진 또는 숫자 형식의 변수, 리터럴 또는 스칼라 식으로 지정stop : tinyint, smallint, int, bigint, 10진 또는 숫자 형식의 변수, 리터럴 또는 스칼라 식으로 지정step : tinyint, smallint, int, bigint, 10진 또는 숫자 유형. step은 음수 또는 양수일 수 있지만 0(0)일 수는 없음GENERATE_SERIES ( start , stop [ , step ] )   사용 예시1부터 10 사이의 정수 값 반환-- ex 1SELECT .. 2024. 7. 21.
[Tibero] AGGR_CONCAT 함수 (여러 행을 하나의 값으로 합치기) AGGR_CONCAT 함수AGGR_CONCAT는 그룹 내의 모든 로우에 대해 문자열과 구분자를 접합하여 하나의 문자열로 만들어 반환하는 함수이다. NULL 값을 반환하는 파라미터는 결과로부터 제외된다. AGGR_CONCAT의 세부 내용은 다음과 같다.  사용 예시SELECT MENU_ID , MENU_NM , MENU_CTG_CD , MENU_DEPTH , MENU_ODRG , ODRG , CNCT_BUTT_NO , CNCT_MENU_ID , BEF_MENU_ID , (CASE WHEN MENU_SBST IS NULL OR MENU_SBST = '' THEN 'N' ELSE 'Y' END) AS MENU_SBST FROM SCENA_MEN.. 2024. 7. 14.
[Mybatis] Mybatis 파라미터 ${}(Literal)과 #{}(bind)의 차이점 Mybatis 환경에서 XML 파일에 SQL문을 작성할 때, 변수를 처리하는 방식에는 Literal 방식과 Bind 방식이 있다. 보통은 SQL Injection 이슈로 인해 Binding 방식인 #{}을 권장하지만 필요한 경우 Literal 방식인 ${}이 필요한 경우도 있는데, 보안 측면에서 권장하는 방식이 아니므로 이 부분을 고려하여 사용해야 한다. ${parameter} 파라미터 바로 출력 해당 컬럼의 자료형에 맞추어 파라미터 자료형이 변경 SQL 인젝션 공격을 예방할 수 없어 보안 측면에서 권장하지 않음 (사용자 입력 파라미터 전달 시 사용 X) 테이블이나 컬럼명을 파라미터로 전달 시 사용하거나 파라미터를 문자열로 List로 가공한 후 전달 시 사용 하드 파싱이라고 하며 DB는 바뀌는 파라메터에.. 2024. 3. 30.
[ORACLE] RANK, DENSE_RANK, ROW_NUMBER 함수 (중복여부, 생략여부) RANK(), DENSE_RANK(), ROW_NUMBER() 모두 윈도우 함수 내에 있는 순위 함수이다. 기본적으로 세 함수 모두 순위를 구하는 함수이지만, 약간의 특징적 차이가 있으므로 알아보자. 간단 요약 함수명 설 명 RANK() 여러 행의 값이 같은 경우라면 같은 순위를 부여 공동 순위를 부여하고 그 다음 나오는 행에는 같은 순위가 나왔던 숫자만큼 건너 뛰고 순위를 부여 DENSE_RANK() 여러 행의 값이 같은 경우라면 같은 순위를 부여 공동 순위를 부여하고 그 다음 나오는 행에는 순위를 건너뛰지 않고 이어서 순위를 부여 ROW_NUMBER() 각 행에 순위를 부여할 때 동점인 경우가 있어도 이를 무시하고 연속적인 순위를 부여 RANK() 순위 함수 중에서도 일반적으로 가장 많이 사용하는 함.. 2024. 3. 30.
[ORACLE] PIVOT, UNPIVOT 함수 (행을 열로, 열을 행으로 변환) 데이터를 조작하다 보면 행을 열로 변환해야 하는 일이 발생합니다. 이때 PIVOT과 DECODE 두가지 방법이 존재한다. PIVOT/UNPIVOT 함수는 ORACLE 11g부터 제공되며, 이전 버전에서는 DECODE 함수로 작업을 해야 한다. 이번에는 PIVOT에 대하여 알아보자. PVOT : 행을 열로 변환 UNPIVOT : 열을 행으로 변환 PIVOT / UNPIVOT 개념 PIVOT의 사전적 의미는 회전축이라는 뜻을 가지고 있다. 즉 회전축을 기준으로 데이터를 돌려 행을 열로 열을 행으로 바꾸는 것입니다. ORACLE에서의 PIVOT 엑셀에서의 PIVOT 기능과 동일하다. 아래 그림은 테이블을 피봇했을 때의 예시이며, DEPTNO를 기준으로 JOB의 행이 열로 변경되고 SAL의 평균이 집계된걸 확인.. 2024. 3. 26.
[ORACLE] 계층형 쿼리( START WITH ... CONNECT BY / LEVEL 활용 ) 한 테이블에 담겨 있는 여러 레코드들이 서로 상하 관계(부모, 자식) 관계를 이루며 존재할 때, 이 관계에 따라 레코드를 hierarchical(상하위) 한 구조로 가져올 때 사용되는 SQL을 의미한다. ※ Oracle10g 이상부터 CONNECT BY 절에서 제공한다. 구문 및 설명 구문 설명 LEVEL - 현재 테이블에는 존재하지 않는 컬럼 - 오라클의 모든 SQL에서 사용할수 있는 것으로 해당 데이터가 몇 번째 단계이냐를 의미함 START WITH - 어디부터 시작할 것인지를 정함 ( 최상위 레코드 ) CONNECT BY PRIOR - 계층 구조에서 각 행의 연결 관계를 설정 - EMP 테이블에서 EMPNO, MGR 같은 PRIOR - 어디부터 시작할 것인지를 정해 준다. START WITH 계층 .. 2024. 3. 26.
[ORACLE] SIGN 함수 (양수,음수 구분하기) 설명 SIGN 함수는 양수인지 음수인지, 아니면 0인지를 구분하여 NUMBER의 부호를 반환합니다. 임의의 숫자 데이터 유형 또는 NUMBER로 암묵적으로 변환될 수 있는 임의의 숫자 데이터 유형을 인수로 사용하고 NUMBER를 반환합니다. 문법 SIGN(NUMBER) 특징 Number Type Return Value 양수 1 0 0 음수 -1 예시 SELECT SIGN(-15) "Sign" FROM DUAL; Sign ---------- -1 2024. 3. 26.
[ORACLE] GREATEST, LEAST 함수 (하나의 행에서 최대값, 최소값 구하기) 흔히들 알고 있는 MAX, MIN 함수는 하나의 컬럼의 값(열 단위, COLUMN) 중에서 최대값, 최솟값을 구하는 함수이다.마찬가지로 이번에 알아볼 GREATEST, LEAST 라는 함수도 최대값, 최소값을 구하는 함수이다.다만, 하나의 행(열거 리스트)에서 여러 컬럼의 값(행 단위, ROW)을 비교한다는 점에서 차이가 있다. MAX(COLUMN) : 대상 컬럼에서의 최대값 (열 단위, COLUMN)MIN(COLUMN) : 대상 컬럼에서의 최소값 (열 단위, COLUMN)GREATEST(expr1, expr2, ... ) : 대상 행(열거 리스트)에서의 최대값 (행 단위, ROW)LEAST(expr1, expr2, ... ) : 대상 행(열거 리스트)에서의 최소값 (행 단위, ROW)GREATEST/L.. 2024. 3. 26.
반응형