devnoong.log
article thumbnail
[DB] MYSQL WITH RECURSIVE 예제
DB/MySql 2023. 6. 7. 16:53

MYSQL에서 WITH 구문절에 RECURSIVE 키워드를 이용해 재귀 CTE를 구성할 수 있습니다. 기본 재귀 코드 이러한 재귀 CTE는 보통 연속된 값들을 구현하기 위해서 사용합니다. WITH RECURSIVE CTE1 AS ( SELECT 0 RNUM FROM DUAL UNION ALL SELECT RNUM+1 FROM CTE1 WHERE RNUM < 20 ) SELECT * FROM CTE1 위의 쿼리를 수행하게 되면 0부터 20까지의 연속된 숫자를 가지고 있는 데이터를 생성 할 수 있습니다. 타 컬럼 추가 재귀 코드 추가적으로 연속된 값 말고도, 다른 컬럼을 생성할 수 있습니다. 대신에 타 컬럼을 추가할때는 크기 값을 주의 해서 사용해야됩니다!! WITH RECURSIVE CTE1 AS ( SE..

[DB] MYSQL WITH 구문 내부에 ORDER BY (정렬) 적용하기
DB/MySql 2023. 6. 7. 16:19

Mysql에서는 WITH 구문 내부안에서 ORDER BY절을 이용하여 정렬을 할 수가 없습니다. 하지만, 임시테이블 내에서 정렬된 순서라든지 값이 필요한 경우가 존재하기때문에 ROW_NUMBER() 함수를 이용해 정렬에 사용합니다. 기본적으로 테이블 데이터들은 PK값이나 인덱스 값을 기준으로 오름차순 정렬되어 있는 경우가 많습니다. 그로인해 정렬을 지정안하고 WITH 구문절에서 데이터를 가지고 와도 오름차순 정렬되어 있는 경우가 존재하지만, 내림차순 정렬을 지정할 경우에는 아래와 같이 ROW_NUMBER 함수를 이용합니다. ROW_NUMBER 이용하기 WITH TEMP_TABLE ( SELECT COL1 , COL2 , ROWNUMBER() OVER(ORDER BY COL2) AS ROW_NUM -- 순..

[DB] Oracle WITH(CTE) 구문절 VS Mysql WITH(CTE) 구문절 차이점
DB 2023. 6. 7. 14:20

CTE란? Common Table Expression 의 약어로, 일반적으로 공통 테이블 표현식이라고 번역됩니다. sql 쿼리내에서 임시로 정의된 이름이 지정된 집합으로 간주되는 가상의 테이블로 복잡한 쿼리를 간결하게 작성하고, 재사용 가능한 부분을 정의하며 가독성을 향상시킬 수 있습니다. 이러한 CTE를 Oracle과 Mysql8.0 이상에서는 WITH 구문절로 제공하고 있습니다. WITH(CTE) 구문절 사용법 WITH TABLE_NAME AS ( SELEECT COL1,COL2 FROM TABLE WHERE CONDITION ) SELECT * FROM TABLE_NAME WHERE COL1 = VALUE; 위의 형식으로 ' WITH 테이블명 AS (SELECT ~) ' 의 형식으로 Oracle과 ..

[Java] String vs StringBuilder vs StringBuffer 비교하기
JAVA 2023. 5. 8. 16:14

String vs StringBuilder vs StringBuffer 위의 세 클래스는 모두 문자열을 관리하고 저장하는 클래스입니다. 다만, 약간의 차이와 성능적인 면에서 다른 점을 보입니다. String String 클래스는 불변(immutable)객체라는 큰 특징이 존재합니다. String 클래스는 문자열을 저장하기 위해서 내부적으로 'char' 배열을 사용하여 저장하는데, 저장하는 char [] 를 보면 final 로 선언되어 있는 점을 확인 할 수 있습니다. 즉, String 객체는 불변객체이므로 문자열 연산이 수행될때마다 새로운 'String' 객체가 생성되며 객체의 해시코드 값이 계산됩니다. 이러한 해시코드 값은 최초 한번만 계산되어 캐싱 되어 메모리에 저장하고 있습니다. 단, 새로운 Str..