본문 바로가기

개발중/sql

(34)
[MYSQL] 하위요소들 모두 구해주라 #{acSeq} 에 들어갈 일련번호를 p_ac_seq 로 가지는 애들 모두 구해라 ! select group_concat(ac_seq) from ( select p_ac_seq, ac_seq from ${DB_TABLE_NAME}CATEGORY where use_yn = 'Y') T, ( select @pv := #{acSeq} ) initialization where find_in_set(p_ac_seq, @pv) and length(@pv := concat(@pv, ',', ac_seq))
Mysql5 에서 rownum 과 그룹별 rownum 이런 table이 있다고 가정하자 name : scores column : class, name, score class (반), name(학생이름), score(점수) 하고자 하는 작업은 각 반별로 상위 점수 3명을 구하는 것이다. 1. rownum mysql에서는 rownum을 제공하지 않기 때문에 다음과 같이 해서 구할 수 있다. select class, name, score, @rownum:=@rownum+1 as rownum from scores, (select @rownum:=0) r 2. rownum by group : 그룹별로 rownum을 만들어 보자 -- group 별 rownum select class, name, score , case when @grp = class then @row..
MYSQL 쿼리 활용 FIND_IN_SET 쿼리를 쓰다 하나의 속성 값에 여러 코드의 값이 ',' 로 묶여 하나의 문자열로 저장되어 있었는데, 현재 ',' 로 엮인 코드들을 OR 값으로 검색해야 하는 일이 생겼다. LIKE 절로 하자니 ,,,,, 뭔가 지저분해서 찾은 방법이 FIND_IN_SET 이다! FIND_IN_SET 는 두 개의 인자를 받는다. FIND_IN_SET( 찾고자 하는 문자열, 타겟 컬럼 ) 아래와 같이 쿼리를 작성하면 즉, CODE 컬럼에 'SB' 라는 문자열이 존재한다면 'SB' 의 인덱스를 반환한다 ! 따라서 0 이상이면 내가 찾고자하는 코드가 있다는거다 ! 쿼리 활용 SELECT * FROM SBTABLE WHERE FIND_IN_SET( 'SB', CODE ) > 0 MYBATIS 활용 WHERE FIND_IN_SET(..
스칼라 서브쿼리와 인덱스 뷰 성능 차이 알아보고 개선하기 !! 🚦 스칼라 서브쿼리와 인덱스 뷰란? 스칼라 서브쿼리와 인덱스 뷰를 쉽게 이해하자면 위치로 구분할 수 있다. 아래와 같이 SELECT 와 FROM 사이에 있다면 스칼라 서브쿼리 SELECT (스칼라 서브쿼리) FROM (인덱스 뷰) 아래와 같이 FROM 절 뒤에 있다면 인덱스 뷰 SELECT (스칼라 서브쿼리) FROM (인덱스 뷰) 같은 목적을 가지고 쿼리를 실행시켰을 때 실행 속도가 아래와 같이 차이가 났다. 인덱스 뷰가 훨씬 빠르고 스칼라 서브 쿼리가 많이 느리다. 인덱스 뷰 스칼라 서브쿼리 SELECT A.SU_SEQ , B.PU_NAME FROM INFO JOIN USER B ON A.su_seq = B.PU_SEQ SELECT SU_SEQ , ( SELECT PU_NAME FROM USER WHER..
Scala Subquery 와 Left Outer Join 의 성능차이 오늘 쿼리를 짜다가 의문이 들어서 포스팅을 하려고 한다. Scala Subquery 와 Left Outer Join 의 성능 차이가 있을까 ?? 😦 Scala Subquery 는 내가 주로 사용하는 조인 방식이다. SELECT A.SEQ , A.NAME , ( SELECT B.CODE_NAME FROM CODEB WHERE A.CODE_SEQ = B.CODE_SEQ ) FROM USER A Left Outer Join 방식은 다른 사람들 코드에서 흔히 볼 수 있는 조인 방식이다. SELECT A.SEQ , A.NAME , B.CODE_NAME FROM USER A LEFT OUTER JOIN CODE B ON A.CODE_SEQ = B.CODE_SEQ 오늘 쿼리를 짜다가 안 풀리는 부분이 있어서 대리님께..
SQL TimeStamp 함수 ✅ 반환값은 DATETIME SELECT TIMESTAMP('2015-11-10'); --> 2015-11-09 00:00:00 ✅ 일시의 타임스탬프 출력 SELECT UNIX_TIMESTAMP('2015-11-09 00:00:00'); --> 1446994800 ✅ 인수가 없으면 현재 일시의 타임스탬프 출력 SELECT UNIX_TIMESTAMP(); --> 1447144168 ✅ 인수로 타임스탬프 값을 입력 SELECT FROM_UNIXTIME(1446994800); // --> 2015-11-09 00:00:00
[MYSQL] INSERT MAX + 1 mysql은 oracle과는 달리 서브쿼리의 from절과 업데이트 target 모두를 같은 테이블로 사용할 수 없다는 룰이 존재한다. 아래처럼 TABLE AS 사용시 가능해 o(* ̄▽ ̄*)ブ ⭕ 잘된 예 INSERT INTO NEO.DEVEL_ADVANCED_CATEGORY ( , ac_category ) VALUES ( (SELECT IFNULL(MAX(T.ac_group), 0) + 1 FROM DEVEL_ADVANCED_CATEGORY T ) ) ❌ 에러 예 INSERT INTO NEO.DEVEL_ADVANCED_CATEGORY ( , ac_category ) VALUES ( (SELECT IFNULL(MAX(ac_group), 0) + 1 FROM DEVEL_ADVANCED_CATEGORY ) )
insert key keyProperty="user_seq" useGeneratedKeys="true" api.user.vo.UserVo" keyProperty="user_seq" useGeneratedKeys="true" >