본문 바로가기

DB/SQL

(17)
[SQL] MYSQL 주별 데이터 조회 MYSQL 주별(월요일 기준) 데이터 조회시 필요한 항목 조회 SELECT DATE_FORMAT(SYSDATE(), '%x') AS 연도 , DATE_FORMAT(SYSDATE(), '%v') AS 주차 , QUARTER(SYSDATE()) AS 분기 , DATE_FORMAT(ADDDATE(SYSDATE(), - WEEKDAY(SYSDATE())), '%Y%m%d') AS 이번주시작일 , DATE_FORMAT(DATE_ADD(ADDDATE(SYSDATE(), - WEEKDAY(SYSDATE())), INTERVAL 6 DAY), '%Y%m%d') AS 이번주종료일 주별시작일, 주별종료일 확인도 가능 확인 필요한 일자를 SYSDATE() 대신 대입하여 확인 ※ 주별 데이터 확인시 주별 시작일을 월요일로 지..
[SQL] 계층형구조 쿼리 계층형구조 쿼리 START WITH: 시작 항목 설정 CONNECT BY PRIOR: 계층 우선 항목 (부모 = 자식) ORDER SIBLINGS BY: 계층형 순서 (사용시 prior 첫번째 인자 기준으로 정렬) ​ 예제 SELECT * FROM MENU_INFO START WITH MENU_LEV = 0 --MENU_LEV가 0인 항목을 시작으로 CONNECT BY PRIOR MENU_ID = HRNK_MENU_ID --MENU_ID 기준으로 하위메뉴를 설정 ORDER SIBLINGS BY HRNK_MENU_ID ASC, SORT_SNO ASC --MENU_ID 기준으로 HRNK_MENU_ID, SORT_SNO 오름차순 정렬
[SQL] 속도 개선 TIP 쿼리 작성 및 DB처리 속도 개선을 위한 Tip 1. 인덱스 사용 필수 2. EXIST sub쿼리 사용시에도 인덱스 생성하여 속도개선 3. WHERE문의 정확한 설정 필요 (설정이 어려울 경우 hint사용-비권장) 4. 날짜컬럼은 vchar로 설계권장(TO_NUMBER 사용시 지연상황 발생) 5. ROWNUM, ROW_NUMBER(), ORDER BY 사용시 대량의 파일이 연산되므로 조건을 줄여 사용권장 6. LIKE문 사용시 컬럼 앞뒤로 %사용할 경우 인덱스 수행불가 ('찾는단어' || '%' 또는 '%' || '찾는단어'와 같이 하나만 사용시에는 인덱스 수행)
[SQL] 소계, 합계구하기 (ROLLUP, GROUPING_ID) 소계,합계: GROUP BY ROLLUP(컬럼1, 컬럼2) 합계: GROUP BY ROLLUP(컬럼1, 컬럼2) HAVING GROUPING_ID(컬럼1, 컬럼2) 참고 예제: http://gent.tistory.com/57 [Oracle|오라클] ROLLUP 합계, 소계 구하기 (GROUP BY) 오라클 GROUP BY 쿼리에서 ROLLUP 함수를 사용하여 손쉽게 합계와 소계를 구할 수 있다. 1. GROUP BY 컬럼이 하나인 경우 : GROUP BY 절에 ROLLUP 함수를 추가한 후 그룹핑 컴럼을 인자로 넣는다. -- 가상 테이블.. gent.tistory.com
[SQL] MERGE (Insert, update를 설정) 단일 테이블 ORACLE MERGE INTO 타겟테이블 // 결과가 완료되는 테이블 USING DUAL ON (필드1= 비교할 대상) // 조건 WHEN MATCHED THEN // 존재하면 UPDATE UPDATE SET 타겟_필드1= 'aaa' ,타겟_필드2= 'bbb' WHEN NOT MATCHED THEN // 존재하지 않으면 INSERT INSERT (타겟_필드1, 타겟_필드2, 타겟_필드3....) VALUES( 'aaa' , 'bbb' , 'ccc' ); // MERGE문에서는 ; 를 포함 MSSQL MERGE INTO 타겟테이블 // 결과가 완료되는 테이블 USING (SELECT 1 AS DUM) X // 임의로 select문을 선언해야함 ON (필드1= 비교할 대상) // 조건 WHEN..
[SQL] GROUP BY 개념적 정의 GROUP BY 출력하고자 하는 대상이 SUM, COUNT, AVG와 같이 계산되었을 때 출력되는 컬럼별로 통합하지 않고 출력시키는 기능 컬럼의 내용들을 개별적으로 확인하고자 할 경우 KEY가 되는 항목을 GROUP BY하여 사용 아래 예제는 전체 월급이 5000을 초과하는 JOB에 대해서 JOB과 월급여 합계를 조회하는 예입니다. 단 판매원(SALES)은 제외하고 월 급여 합계로 내림차순 정렬되어 있습니다. SELECT job, SUM(sal) "급여합계" FROM emp WHERE job != 'SALES' -- 판매원은 제외 GROUP BY job -- 업무별로 Group By HAVING SUM(sal) > 5000 -- 전체 월급이 5000을 초과하는 ORDER BY SUM(sal) DESC; ..
[SQL] INDEX 삭제 유니크 INDEX를 삭제하기위해 두가지 쿼리문을 이용 ALTER TABLE 테이블명 DROP CONSTRAINT PK명; DROP INDEX PK명;
[SQL] 특정 문자만 UPDATE Table에서 특정 문자만을 UPDATE UPDATE 테이블명 SET 컬럼명 = REPLACE(컬럼명 ,'변경전 문자','변경후 문자') 예제 1 MN_ID MN_NAME INFO USE_YN M00000 이용자1 관리자 Y M00001 이용자2 사용자 Y AAA테이블에서 MN_ID에 M00이 포함된 내용을 찾아 M00을 M11로 UPDATE UPDATE AAA SET MN_ID = REPLACE(MN_ID,'M00','M11') WHERE MN_ID LIKE '%M00%' 결과 MN_ID MN_NAME INFO USE_YN M11000 이용자1 관리자 Y M11001 이용자2 사용자 Y 예제2 MN_ID MN_NAME INFO USE_YN M00000 이용자1 관리자 Y M00001 이용자2 사용자 Y..