DB28 [SQL] COALESCE() 함수 NULL 변환 COALESCE 함수사용하여 NULL값 변환하기 COALESCE()를 사용하여 N개 컬럼의 NULL체크를 하여 변환할 수 있다. 얼핏 보면 NVL()과 동일해 보이지만, NVL()은 인자가 2개만 가능하고 COALESCE()는 인자가 N개까지 가능하다 ! 예제를 보면 이해가 빠를 것이다.SELECT COALESCE(컬럼1, 컬럼2, … ,컬럼N) FROM TEST_TABLE컬럼1부터 NULL값을 체크하여 처음으로 NULL 아닌 값을 리턴한다. 예를 들어 컬럼1과, 컬럼2는 null인데 컬럼3이 null이 아닌 값을 갖고 있으면 처음으로 null이 아닌 컬럼3의 값을 리턴해준다. 플러스로 N번째 컬럼까지 모두 null이면 NULL을 리턴한다. COALESCE()의 내부 구현을 들여다보면, CASE WHEN.. DB/SQL 2023. 4. 1. [Oralce] ORA-01476: divisor is equal to zero - 제수가 0입니다. 쿼리를 짜다가 ORA-01476: divisor is equal to zero 에러가 발생했다. 에러가 발생한 이유는 제수가 0이기 때문이다. 즉, 분모가 0이여서 발생하는 에러이다. 분모에는 0이 올 수 없다. 운영 DB로 넘어가기 전 개발 DB에서 클렌징을 하고 다시 TEST를 진행하면서 분모가 0인 경우가 발생하여 위 에러를 마주했다.. 데이터가 많이 항상 분모는 0이 아닐 거라 생각하고 쿼리를 짜서 그랬던 것 같다. 본론으로 돌아가서, ORA-01476:divisor is equal to zero 에러 해결법은 분모 값이 0이 온다면 CASE ~ WHEN ~ THEN문 및 NVL(), COALESCE() 이용하여 해결할 수 있다. * CASE ~ WHEN ~ THEN문 및 NVL() 사용 SELE.. DB/Oracle 2023. 3. 29. [SQL] NULL값과 ‘’(공백) 비교 DB에서의 NULL을 알아보자 !!Oracle, Tibero, MSSQL에서 NULL은 없는값이 아니라 모르는값이다.그래서 AAA = NULL이 아니고 AAA IS NULL인 것이다.그렇기 때문에 없다면 ‘ ’(스페이스)를 넣어야 된다 ! 처음에는 왜 스페이스를 넣는가 했는데 이유가 있었다..!!! Oracle과 Tibero에서는 컬럼에 ‘’과 NULL은 같습니다. (‘' : 스페이스 없는 따옴표 열고닫고 ) SELECT CASE WHEN ‘’ IS NULL THEN ‘NULL’ ELSE ‘NOT NULL’ END FROM dual; : 위 쿼리의 결과는 NULL이다. 가끔 NOT IN이나 NOT LIKE를 사용하여 해당되지 않은 값은 빼고 조회할 때, NULL과 ‘’인값은 안 나오니 주의.하.. DB/SQL 2023. 3. 22. [Oracle] PIVOT 함수 사용법 (행을 열로 변환) 오라클 PIVOT(피벗) 함수 사용법 _ 행을 열로 변환하기 개발을 하다보면 세로로 조회된 데이터를 가로로 변환해야하는 상황이 발생한다.이때 보통 DECODE나 CASE문을 사용하여 변환을 하였을 것이다.하지만, 오라클 11g 버전에서부터 보다 간단하게 변환을 도와주는 PIVOT 함수 기능을 제공한다. PIVOT 함수 : 행을 열로 변환하도록 도와주는 기능.: 간편한 함수사용으로 DECODE 사용할 때 보다는 행열변환이 쉽지만, 함수 사용전에 PIVOT할 컬럼명을 정해놓아야 한다는 주의점이 존재한다 !! //PIVOT 함수 사용법SELECT 컬럼 FROM (조회할 데이터 SELECT문) OR 테이블 PIVOT (집계함수(표현식) FOR 피벗대상컬럼 IN (행으로 올릴 열));PIVOT함.. DB/Oracle 2021. 3. 12. [Oracle] CASE문 - CASE WHEN 표현식 사용법 오라클 CASE문 사용법 - CASE WHEN THEN ELSE END 표현식 사용 방법 오라클에서 if문을 사용할 때 대게 DECODE 함수를 떠올릴 것이다. 하지만 DECODE 함수는 오라클 SQL에서만 사용할 수 있는 비표준함수이고 조건이 많아지면 복잡해지고 가독성이 떨어지는 단점을 갖고 있다 ㅠ_ㅠ ,,, 오라클에서 DECODE 함수 대신하여 쓸 수 있는 것이 CASE 표현식이다 !CASE 문은 DECODE 함수보다 좀 더 확장적이며 가독성이 뛰어나다. 복잡한 조건을 따질 때는 CASE 표현식을 사용하는 것을 권장한다. CASE문 사용 방법을 알아보자 !! :D ▷ CASE문 사용 방법CASE문은 값이나 조건에 따라 다르게 결과값을 받아올 수 있다. 조건을 값으로 주냐 조건식으로.. DB/Oracle 2021. 2. 19. [Oracle] 순위 매기는 함수 RANK(), DENSE_RANK(), ROW_NUMBER() 비교 오라클 값에 따른 순위 매기기 (RANK함수/ DENSE_RANK함수/ ROW_NUMBER함수 사용법, 비교) 값에 따라 순위를 매겨 뿌릴 때 쿼리에서 뽑아올 수 있는 함수가 있어서 소개한당 ! 순위를 매기는 함수로는 RANK() , DENSE_RANK() , ROW_NUMBER() 이렇게 세 가지의 함수가 있는데, 각 함수마다 조금씩 특징이 다르다. 세가지 함수를 비교해보자 ! RANK() 함수 : 동일한 값에 대해 같은 순위를 부여하고 다음 순위는 누적 순위로 매긴다. DENSE_RANK() 함수 : 동일한 값에 대해 같은 순위를 부여하고 다음 순위는 누적시키지 않고 다음 순차로 순위를 매긴다. ROW_NUMBER() 함수 : 동일한 값에 대해 상관없이 순차적으로 순위를 부여한다. RANK 함수 DE.. DB/Oracle 2021. 2. 18. [Oracle] WITH절 사용법 [Oracle] 오라클 WITH절 사용법 & 장점 / 이름이 부여된 서브 쿼리 - WITH절 WITH 절이란 오라클 WITH 절은 이름이 부여된 서브 쿼리라고 생각하면 된다 ! WITH 절은 오라클 9 이후 버전부터 사용 가능하며 테이블을 임시로 만드는 점은 VIEW와 쓰임이 비슷하다. 하지만 VIEW는 한번 만들면 DROP 하기 전까지는 없어지지 않지만 WITH 절은 한번 실행할 쿼리문 내에서 정의되어 있을 경우 그 쿼리 문안에서만 실행된다 !! WITH절 사용하는 이유 오라클에서 WITH 절은 오라클 공유 메모리에 임시 테이블을 생성하여 반복 재사용이 가능하도록 해준다. WITH 절을 사용하면 동일 테이블 접근을 최소화하여 메모리에 생성된 임시 테이블에서 필요한 데이터를 메모리로 접근하기 때문에 디스.. DB/Oracle 2021. 2. 18. [Oracle] TO_CHAR 숫자 포맷(Format) 형식 _ FM표기법 오라클 TO_CHAR 숫자 포맷 형식 사용하기 / FM표기법 Oracle에서 숫자를 문자로 변환할 때 첫 번째 자리에 0이 있을 때 0이 생략되어 표출되는 경우가 있다. 예를 들어, '0.123'을 TO_CHAR로 변환했지만 0이 생략되어 '. 123'으로 표출될 것이다.이때 0이 생략되지 않고 그대로 출력시켜주는 Format 형식이 있다. FM 표기법TO_CHAR('숫자열', 'FM999.00')FM(Fill Mode) 표기법을 사용하면 숫자의 좌우 공백을 제거할 수 있습니다. 또한, 숫자의 형식을 지정할 때 다음과 같은 문자를 사용할 수 있습니다. - 9 : 가변적인 값으로 0이거나 숫자가 없을 시 값을 버린다. - 0 : 고정적인 값으로 변환된 숫자의 길이를 맞추고 싶으면 원하는 길이만큼 0.. DB/Oracle 2021. 2. 16. [Oracle] TRIM, LTRIM, RTRIM 함수 사용방법 오라클 TRIM, LTRIM, RTRIM 함수 사용방법 TRIM 함수는 문자열의 양쪽 공백을 제거하는 기본적인 함수 !LTRIM과 RTRIM 함수 역시 왼쪽과 오른쪽의 공백을 제거할 때 사용하는 함수이다.여기서 LTRIM과 RTRIM은 추가적으로 옵션을 줘서 반복적인 문자나 특정 문자를 제거할 수 있당 !! 사용방법을 확인해보자 ! :D ~ TRIM 함수: 문자열의 양쪽 공백을 제거하는 함수이다.SELECT TRIM("문자열") FROM TEST_TABLE LTRIM 함수: 문자열의 왼쪽 공백을 제거하고, 왼쪽의 반복적인 문자나 특정 문자를 제거할 수 있다.SELECT LTRIM("문자열", 옵션) FROM TEST_TABLE RTRIM 함수: 문자열의 오른쪽 공백을 제거하고, 오른쪽의 .. DB/Oracle 2021. 2. 15. [Oracle] SQL 중복제거 DISTINCT 사용법 sql 데이터 중복제거 DISTINCT 사용방법 SQL 에서 SELECT 조회를 할 때 중복제거를 하여 조회하는 방법을 알아보자 !방법은 간단하다. SELECT 뒤에 DISTINCT를 사용하여 키워드를 넣어주고 사용하면입력한 키워드의 중복제거를 한 결과가 조회된당 !! [ DISTINCT 사용방법 ]SELECT TEST_NM, TEST_ID FROM TEST_INFOTEST_NMTEST_IDABCTEST1BBBTEST2DDDTEST3ZZZTEST2YYYTEST1 SELECT 바로 뒤에 DISTINCT(키워드)를 넣어주면 키워드의 중복제거가 되어 조회된다.여기서 유의할 점은 DISTINCT의 위치가 반드시 SELECT문 바로 뒤에 와야된당 !!! SELECT DISTINCT(TEST_ID).. DB/Oracle 2021. 2. 8. [Oracle] EXISTS와 IN 함수 차이 비교 오라클 EXISTS함수와 IN함수 차이 비교 (NOT EXISTS, NOT IN) 쿼리문을 작성할 때 WHERE절에서 사용되는 조건 EXISTS함수와 IN함수의 차이를 비교해보자 !어떤 점이 다르고 언제 EXISTS함수를 써야할지 IN함수를 써야할지 정리해본당 ( * _ *) 'EXISTS'함수와 'IN'함수는 WHERE절에서 서브쿼리를 사용하여 조건을 걸 때 자주 사용됩니다.두 함수는 비슷한 목적을 가지고 있지만, 사용 방식과 성능 면에서 차이가 있습니다.이 두 함수를 비교하여 언제 어떤 함수를 사용하는 것이 좋은지 알아보겠습니다. EXISTS 함수EXISTS는 서브쿼리가 하나 이상의 행을 반환하는지 여부를 확인하는 데 사용됩니다. 서브쿼리가 행을 반환하면 'TRUE', 그렇지 않으면 'FAL.. DB/Oracle 2021. 2. 4. [Oracle] 오라클 날짜 타입(TYPE)별 비교 - TO_CHAR,TO_DATE OracleDB 날짜 타입(TYPE)별 비교 방법 TO_CHAR, TO_DATE ORA-01861 리터럴이 형식 문자열과 일치하지 않음 오류 해결방법 쿼리를 짜고 실행했을 때 'ORA-01861 리터럴이 형식 문자열과 일치하지 않음' 오류가 발생할 경우가 있다. 주로 날짜를 비교할 때 String형과 Date형을 함께 비교했을 때거나 String에다가 Date를 넣는다던지 형타입을 맞춰주지 않고 값을 넣을때 발생한다. 이 때 TO_CHAR나 TO_DATE를 사용해서 형변환을 통해 날짜 타입(TYPE)을 맞춰주면 해결된다 !!! TO_CHAR(): String형 날짜 비교 Date -> String 으로 형변환TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')//결과//2.. DB/Oracle 2020. 11. 27. 이전 1 2 3 다음 728x90