반응형

항상 까먹어서 매번 찾아보길래 기록해두기!!!

sdet_info 테이블에는 존재하는데 prep_sdet_info 테이블에는 존재하지않는 정보들을 가져오고자 함

공통된부분 + 왼쪽테이블에만 존재하는거

Inner join은 공통된 부분만 가져오는데 이거는 일단 left 이기 때문에 왼쪽에 먼저 정의한 테이블이 중심인데, 그 중심이 되는 테이블에서 공통되는 부분과 중심 테이블에만 있는 부분이 함께 출력된다. 

출처: https://www.dofactory.com/sql/outer-join

 

SELECT 
	*
FROM 
	sdet_info as s 
	left outer join 
	prep_sdet_info as ps 
	on ps.KEDI_CD=s.KEDI_CD
	where stus='정상'
    and
    s.KEDI_CD IS NULL;

on : 부분에는 공통적으로 들어가는 부분에 대한 조건을 넣어준다 (다른 join과 같은 사용용도)

하지만, 나는 공통된 부분은 제외하고 싶었기 때문에 where 절에 중심테이블인 sdet_info 에만 존재하는 컬럼으로 조건을 넣어줬다. 그래서 sdet_info에만 있는 데이터들만 나왔다.

 

반응형

 

반응형
반응형

prep_sdet_info 테이블 의 정보가 sdet_info 테이블 에도 있고 sdet_info의 STUS 컬럼이 '정상' 인 row 들만 update하게 하고 싶었다. 그래서 내가 먼저 짠 쿼리는......

바로!!!!

UPDATE 
	prep_sdet_info as ps
	,sdet_info AS s 
SET ps.APRV_CNT = 1 
WHERE ps.KEDI_CD=s.KEDI_CD 
    AND ps.SDET_NM=s.SDET_NM 
    AND ps.GDE=s.GDE 
    AND ps.CLA=s.CLA 
    AND ps.SDET_NO=s.SDET_NO
    AND s.STUS='정상' 
    AND ps.APRV_CNT=0;

그런데!!!!! 역시 무엇인가 불안했다. 그래서 물어봤다!! update문은 신중해야하기에..... 당연히 이 쿼리도 작동은 하지만 직관적이지않아 바로 해석이 되지 않는다 했다. 코드는 심플하고 직관적이게!!! 해야하니깐

그래서 알려주신 방법!!!!

UPDATE 
	prep_sdet_info as ps 
SET ps.APRV_CNT = 1 
WHERE 0 < (
    SELECT 
        COUNT(*)
    from  
        sdet_info AS s 
    WHERE 
        ps.KEDI_CD=s.KEDI_CD 
        AND ps.SDET_NM=s.SDET_NM 
        AND ps.GDE=s.GDE 
        AND ps.CLA=s.CLA 
        AND ps.SDET_NO=s.SDET_NO 
        AND s.STUS='정상')
AND ps.APRV_CNT=0;

결국 이 개념을 내가 잘 이해하지 못해서 매번 헷갈리는거다. 

즉, 이 UPDATE문이 실행되는 방식은 일단, 먼저 UPDATE시키고자하는 테이블을 기준으로 한 row의 데이터를 선택하고 WHERE 조건문에 있는 서브쿼리의 조건에 맞는지를 확인해서, COUNT(*)를 해보고 0보다 크면 (즉, 조건에 해당하는 ROW 이면) UPDATE문을 실행하는거다. 

한 ROW 씩 읽고 조건에 맞으면 UPDATE가 되고 안되고하면서 넘어가는거다. 

반응형

 

반응형
반응형

HeidiSQL (mariaDB) 

root로 접속한 후,

데이터베이스 생성
on 데이터베이스이름 to '아이디@아이피주소' identified by '비밀번호'

생성한 데이터베이스를 새로운 session 에 넣어주자. '사용자' 에는 아이디를 '암호'에는 비밀번호를 설정한 대로 넣어준다. 그러면 데이터베이스 쪽에 삼각형을 누르면 방금 생성했던 데이터베이스가 있는 걸 볼 수 있다. 그걸 선택해서 열어준다.

쿼리를 실행 후, 새로고침을 눌러주면 데이터베이스에 테이블이 생성되있는 걸 볼 수 있다!!!!!

반응형

 

반응형
반응형

mybatis를 이용할 때, 회원가입과 같은 로직을 진행할 때 두테이블에 insert를 해줘야하는데 첫번째 테이블에서 insert할때 생성되는 값을 두번째 테이블 insert시에 필요할때 사용!!!

엄청 유용하다!!!

나는 회원가입시에 학부모 회원가입에 먼저 insert되고, 회원가입 테이블에서 IDX 값(auto_increment가 걸려있음)을 학부모 매칭 테이블에 FK값으로 가져와야한다. 이럴 경우, 신기하게 selectKey 를 사용하면 편하다!!!! 

resultType : 해당 컬럼의 타입
keyProperty : 가져오고싶은 컬럼명
order : 쿼리 실행 전에 가져올 것인지, 실행 후에 가져올 것 인지

여기서 처음에 받아온 params 에는 insert 처음에 들어가는 키값들이 들어가 있고, AddNewParent 가 실행된 후에 원했던, IDX값이 {IDX : 값} 이렇게 추가 되어서 출력이 되어진다!!!

그래서 위에서 처음 로그 찍어봤을때랑 AddNewParent가 실행된 후에 찍어봤을때의 params에는 원했던 갑이 추가되어진 map으로 찍힐것이다!!!

 

반응형

+ Recent posts