SQL15 [SQL 쿼리 속도] JOIN 조건 추가보다 UNION ALL이 빠를 수 있다 *MSSQL 기준 공부배경 새로 유지보수를 맡게 된 메뉴의 프로시저를 분석하는데 프로시저가 너무 길고 읽기 복잡했다. 일단 처음부터 끝까지 분석해 프로시저의 전반적인 내용은 다 파악했다. 그 다음으로 사수에게 반영을 제안할만한 리팩토링 방법을 찾아보기로 했다. 프로시저에 INNER JOIN 조건만 다른 쿼리 두 개가 UNION ALL 되어 있는 부분이 있었다. 쿼리 한 개에 조인 조건을 몰아넣어 주고 UNION ALL을 없애 코드 길이를 줄여봤다. 1. UNION ALL을 쓴 쿼리 - 쿼리 길이 51줄 / 실행속도 평균 약 0.58초 SELECT CASE WHEN B.AA IS NULL OR B.AA = 'aa' THEN '1' ELSE '2' END AS TYPE , A.BB , A.CC , A.DD .. 2021. 7. 14. [분석해 보세요] 결과값이 뭘까? 회사에서 접한 쿼리를 이용한 SQL 문제풀이. 문제1 SELECT * FROM ( SELECT '1' AS A FROM DUAL UNION ALL SELECT '2' AS A FROM DUAL UNION ALL SELECT '3' AS A FROM DUAL ) M WHERE NOT EXISTS ( SELECT 1 FROM ( SELECT '1' AS A FROM DUAL UNION ALL SELECT '2' AS A FROM DUAL UNION ALL SELECT '3' AS A FROM DUAL ) X WHERE X.A < M.A ) not exists의 개념을 이해하고 있어야 풀 수 있다. 정답 : 더보기 1 문제2 SELECT * FROM ( SELECT '1' AS A FROM DUAL UNION.. 2021. 5. 18. [Oracle/Tibero] 특정연도부터 올해까지의 목록 출력 DB 테이블 없이 콤보에 연도목록을 출력해야 할 때 쓰는 쿼리. 아래 쿼리는 2010년부터 올해까지의 연도목록을 출력한다. SELECT TO_CHAR(TO_CHAR(SYSDATE,'YYYY')-LEVEL + 1) AS YEAR FROM DUAL CONNECT BY LEVEL ((TO_CHAR(SYSDATE,'YYYY')+ 1)-2010); 만약 올해+1년을 얻고 싶다면 "LEVEL + 1" 부분을 "LEVEL + 2"로 바꿔주어 응용할 수 있다. 2020. 7. 23. [Oracle/Tibero] 콤보에 '전체' 추가해서 기본값으로 세팅하기 ※콤보가 검색조건일 경우를 기준으로 함 1. select문에서 목록에 '전체'값을 함께 불러온다. '전체' 가 맨 위로 와야 하기 때문에 code값은 모든 코드 중 가장 작아야 한다. 콤보가 검색조건이므로 검색 select문에서 전체값을 제하는 것도 잊지 말자. xml 파일 SELECT '00' AS FRUIT_CD , '전체' AS FRUIT_NM FROM DUAL UNION ALL SELECT FRUIT_CD , FRUIT_NM FROM FRUIT 2. 기본값으로 세팅해준다. ※해당 글에서는 넥사크로를 사용하고 있다. jsp나 js를 사용하면 더 쉽다. 화면 load 시 '전체'값과 모든 Fruit 값이 조회되었을 것이므로, set_index()를 이용해 전체 값을 기본값으로 세팅한다. this.di.. 2020. 7. 23. [MSSQL] ISNULL의 기초 이해 문제상황 목록 검색 쿼리를 짜야 한다. 검색조건에는 TYPE 컬럼과 NAME 컬럼이 있다. 사용자가 TYPE을 선택하면 해당 TYPE이 검색되게 하고, 추가로 TYPE 컬럼이 비어있는(NULL 또는 '') 행도 같이 검색되도록 하고 싶었다. 풀이 1. ISNULL 사용 먼저 빈 값이 검색되는 조건을 짜보자. ISNULL은 이렇게 생겼다. ISNULL(컬럼명, 바꿀 내용) 컬럼명은 NULL 여부를 확인할 컬럼이고, 컬럼이 NULL일 경우 바꿀 내용으로 내용이 바뀐다. NULL이면 무조건 REPLACE 해준다고 보면 됨. 여기에 비교를 걸어준다. ISNULL(컬럼명, 바꿀 내용) = 비교대상 위의 쿼리는 해당 컬럼의 NULL값을 바꿀 내용으로 바꿔서 결과값을 만든 후 그 결과로 나온 행들을 우항의 비교대상과.. 2020. 6. 26. [MSSQL] 검색 조건에 LIKE와 컬럼명을 이용하는 쿼리문 FROM절에서 뽑아낸 컬럼명을 검색 시 LIKE 조건에 넣어 SELECT를 하고 싶었다. 플러스(+) 기호로는 아무리 해도 안 됐는데 정답은 || 이었다. 코드 WHERE 컬럼명 LIKE 조건컬럼명||'%' 예제 SELECT ( SELECT LISTAGG(CU.USER_NAME, ', ') WITHIN GROUP (ORDER BY CPT.CHAT_STUD_ID) AS USER_NAME FROM EMPLOYEE WHERE YEAR = '2020' AND EMP_NAME LIKE A.EMP_NAME||'%' ) AS 2020_EMP_NAMES FROM ( SELECT EMP_NAME FROM EMPLOYEE WHERE DEP_ID = '0001' ) A 2020. 4. 17. 이전 1 2 3 다음