특정 database 지정하여 모든 테이블 데이터 삭제 SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, '.' ,table_name) INTO @tables FROM information_schema.tables WHERE table_schema = 'DB명'; SET @tables = CONCAT('DROP TABLE ', @tables); PREPARE stmt FROM @tables; EXECUTE stmt; DEALLOCATE PREPARE stmt;
요건사항 USER 테이블에서 USER_GRP_ID 의 그룹 별 USER_GENDER 개수와 USER_AGE 개수를 알고싶다. SELECT * FROM USER; USER_ID USER_GENDER USER_AGE USER_GRP_ID 1 F 22 U001 2 F 22 U001 3 M 20 U001 4 M 20 U002 5 F 23 U003 6 M 23 U003 원하는 결과 USER_GRP_GENDER_CNT USER_GRP_AGE_CNT USER_GRP_ID 2 2 U001 1 1 U002 2 1 U003 설명 ** U001의 경우 USER_GENDER = F,M, USER_AGE = 22, 20 일 경우로 각 2개, 2개가 나온다. ** U002의 경우 USER_GENDER= M, USER_AGE = ..
ORA-10858 a non-numeric chracter was found where a numeric as expected 해당 오류는 아래와 같은 상황에서 발생한다. SELECT TO_DATE(SYSDATE, 'YYYYMMDD') FROM DUAL; SYSDATE는 이미 DATE 타입의 값인데 해당 값을 다시 TO_DATE()를 사용하여 DATE 타입으로 변환을 시도했기 때문에 발생한다. SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') FROM DUAL; Foramt 을 변경하려면, Date 타입의 값을 TO_CHAR()을 사용하여 변경해주자. ORA-01481 invalid number format model 해당 오류는 아래와 같은 상황에서 발생한다. SELECT TO_CHAR(..
startDate-endDate 기준 포함되는 월(Month) 조회 SELECT TO_CHAR(ADD_MONTHS(TO_DATE(SUBSTR('20210301', 5, 2), 'MM'), LEVEL - 1 ),'MM') AS MONTHS FROM DUAL CONNECT BY LEVEL
Before WM_CONCAT() 사용 전의 select 조회 select * from dept; DNAME AA BB CC After WM_CONCAT() 사용 후의 select 조회 select WM_CONCAT(DNAME) from dept; DNAME AA,BB,CC 위 결과를 보았을때, WM_CONCAT() 함수를 사용하여 원하는 컬럼의 여러 데이터를 하나의 행으로 표현할 수 있다.
24시간(하루) 이내에 업로드된 데이터 찾기 SELECT COUNT(*) FROM test WHERE created_date > DATE_ADD(now(), INTERVAL -1 DAY); 작성날짜 컬럼 created_date 일때, DATE_ADD(now(), INTERVAL -1 DAY)를 사용하면된다.
ORDER BY - 정렬 ORDER BY idx DESC LIMIT #{offset}, #{limit} DESC : 데이터 내림차순 (idx가 5-4-3-2-1 순으로 내림차순되어 조회된다) ASC : 데이터 오름차순 (idx가 1-2-3-4-5 순으로 오름차순되어 조회된다) -> DESC를 쓰지 않으면 default 값으로 ASC(오름차순)되어 정렬된다. LIMIT - 개수제한 (페이징) Mysql에서는 LIMIT을 사용하여 쉽게 페이징을 구현할 수 있다. LIMIT #{offset], #{limit} 예를들어, offset이 0이고 limit이 10일때, 0번째 데이터부터 10개를 조회한다는 의미이다. 따라서 페이징의 기능을 구현해보고자할때 limit값이 10일때에 하나의 페이지에서 10개씩의 게시글..
mysql에서 검색어를 찾는 select 쿼리를 알아보자 SELECT col1, col2 FROM text WHERE title LIKE CONCAT('%', #{searchText}, '%') 위 쿼리는 검색어 변수 searchText가 null이 아니고, 빈문자열("")이 아닐때 검색어 searchText를 포함하는 제목을 가진 게시글을 찾는다. if test 조건문을 사용하여 검색어가 입력되어있는지, 아닌지 확인하고 검색어가 입력되어있다면 mysql에서는 LIKE CONCAT 을 통해 해당 검색어를 포함한 데이터를 찾을 수 있다. '%'를 searchText의 앞과 뒤에 모두 적어준 이유는 아래와 같다. searchText = "게시글" 일때, AA게시글과 게시글AA를 모두 찾기위함이다.
IFNULL 함수 IFNULL((SELECT col1 FROM test WHERE idx = 1), '테스트 완료') IFNULL 함수(조건1, 조건2) - 조건 1의 값이 NULL 이면 조건 2를 출력 - 조건 1의 값이 NULL이 아니면 조건 1의 값을 출력
case~when~then 문 CASE col1 WHEN 'a' THEN '햄버거' WHEN 'b' THEN '피자' END AS food CASE~THEN~WHEN 문은 위 예제 한줄로만 봐도 충분히 이해가 가능하다. CASE 컬럼이 WHEN 해당 값이라면, THEN 해당 값으로 변경한다. CASE ~ WHEN ~ THEN ~ WHEN ~ THEN ~ ELSE '' END -> ELSE를 사용하여 나머지 값들도 설정해줄수 있다. 또는, CASE WHEN col1 = 'a' THEN '햄버거' 라고도 할 수 있다.
mybatis 쿼리문 실행결과 컬럼(열) 순서를 고정 SELECT col1, col2, col3 FROM test 위 SELECT 해온 쿼리의 결과를 리스트로 받아올때, 리스트의 순서를 col1, col2, col3로 고정시키고 싶은 경우가 있다. 하지만 hashMap을 resultType으로 받는 위 결과를 보면 SELECT 컬럼 순서대로 조회되지 않는다. SELECT col1, col2, col3 FROM test 결과타입 resultType을 "java.util.LinkedHashMap" 으로 변경하면, SELECT 선언 컬럼 순서대로 데이터를 담을 수 있다.
Mybatis 실행결과 Return spring 프로젝트를 할때 serviceImpl에서 mappe파일을 호출하여 쿼리가 실행될때 이 쿼리로 인해 변경되거나 삽입되거나 삭제된 행의 개수를 가져올 수 있다. 1. count : insert된 개수가 리턴된다. int count = ExamMapper.insertUsers(); if (count < 1) { Log.info("변경사항 없음"); } 2. count : update된 개수가 리턴된다. int count = ExamMapper.updateUsers(userVO if (count < 1) { Log.info("변경사항 없음"); } 3. count : delete된 개수가 리턴된다. int count = ExamMapper.deleteUsers(i..