분류 전체보기

    STRING_AGG와 STUFF~FOR XML PATH

    위와 같이 같은 값에 따라 그룹화를 시킬수 있는 STRING_AGG에 대해 알아봅시다. NAME컬럼의 값들은 모두 TOP, JG, SUP 이 세가지로 그룹화할 수 있습니다. SELECT {그룹화할 컬럼}, STRING_AGG( {병합할 컬럼}, ',' ) AS {별칭} FROM TABLE WHERE {그룹화할 컬럼} IN ( {그룹화할 값}, {그룹화할 값}, ... ) GROUP BY {그룹화할 컬럼} 위 테이블에 해당 문법을 사용하여 변환한 예제입니다. SELECT POSITION ,STRING_AGG(NAME, ',') AS NAME FROM CHAMPION WHERE POSITION IN ('TOP', 'JG', 'SUP') GROUP BY POSITION-- 탑, 정글, 서폿 포지션 별로 챔피언..

    EXISTS

    특정 조건에 해당하는 컬럼들을 검색하고 싶을 때 우리는 WHERE절을 사용합니다. 그렇다면 검색한 결과를 검색 조건에 반영하고 싶을 때는 어떻게 할까요? 바로 EXISTS를 사용하면 됩니다. 해당 문법은 WHERE절에만 사용이 가능합니다. -- EXISTS SELECT * FROM A WHERE EXISTS ( SELECT 1 FROM B WHERE {A.컬럼ID} = {B.컬럼ID} ) -- NOT EXISTS SELECT * FROM A WHERE NOT EXISTS ( SELECT 1 FROM B WHERE {A.컬럼ID} = {B.컬럼ID} ) 서브쿼리 때문에 복잡해보이지만 실상은 그렇지 않습니다. 서브쿼리의 결과는 무엇이 나오던지 상관이 없으므로 관습적으로 1을 사용합니다. 그리고 조건절에는 서..

    CASE WHEN과 IIF

    DB 중심 아키텍쳐 환경에서 조건에 따라 분기를 주기 위해선 CASE WHEN 사용이 필수적입니다. 사실 DB 중심 아키텍쳐하면 할 말이 많습니다만...이번 주제가 아니니 넘어가기로 하고 쿼리문에서 조건에 따른 분기문을 어떻게 주는지 살펴봅시다. 문법은 다음과 같습니다. -- SELECT절 SELECT CASE WHEN {조건문} THEN {리턴값} WHEN {조건문} THEN {리턴값} ... ELSE {리턴값} END AS {별칭} FROM TABLE -- ORDER BY절 SELECT * FROM TABLE ORDER BY CASE WHEN {조건문} THEN {순서값} WHEN {조건문} THEN {순서값} ... ELSE {순서값} END ORDER BY절도 적었지만 오름차순과 내림차순을 설정할..

    ISNULL

    SQL은 자주 사용하는터라 안 까먹겠지 생각했습니다 그러나 막상 자주 사용하지 않는 상황이 오니 기억이 나질 않는겁니다...그래서 하나씩 천천히 블로그에 정리하고자 합니다. 첫번째는 ISNULL입니다. 사용법은 아주 간단합니다. -- SELECT절 SELECT ISNULL( {컬럼}, {대체할 값} ) FROM TABLE -- WHERE절 SELECT * FROM TABLE WHERE {컬럼} IS NULL SELECT * FROM TABLE WHERE {컬럼} IS NOT NULL NULL값이 허용된 컬럼과 NULL값을 대체할 값을 적으면 됩니다. "이때 컬럼과 대체될 값의 타입은 서로 일치"해야만 합니다. 특히 WHERE 절 사용시엔 IS와 NULL을 붙이지 않는다는 점 주의하셔야 합니다. 실사용 예..

    MapStruct 참고 자료와 관련 이슈

    메이븐 저장소 MapStruct https://mvnrepository.com/artifact/org.mapstruct/mapstruct MapStruct와 Lombok에 대한 이슈 (MapStuct 의존성 추가 설정들이 Lombok보다 먼저 선언되야함) https://mapstruct.org/faq/ MapStruct @Builder 지원 https://mapstruct.org/news/2018-07-15-mapstruct-1_3_0_Beta1-is-out-with-builder-support MapStruct의 Lombok 사용에 관한 공식 홈페이지 예시 코드 https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-lombok Ma..

    @Entity와 @Builder

    참 골 때리는 어노테이션이기에 정리할 필요성이 있어 포스팅을 한다. 먼저 @Builder는 빌더 패턴을 사용하여 객체 생성을 할수 있게 도와주는 어노테이션이다. 문제는 해당 어노테이션이 클래스의 생성자 유무에 따라 동작을 다르게 하는데 있다. 위 내용은 Lombok의 공식문서의 @Builder의 생성자에 관한 내용이다. Finally, applying @Builder to a class is as if you added @AllArgsConstructor(access = AccessLevel.PACKAGE) to the class and applied the @Builder annotation to this all-args-constructor. This only works if you haven't w..