본문 바로가기

Dev-/SQL

LEFT OUTER JOIN 추가 제약조건(WHERE, ON의 차이) JOIN 자체를 잘 안써서 몰랐는데, JOIN절의 ON과 WHERE은 같은 역할을 하는게 아니었다.세개의 테이블을 LEFT OUTER JOIN 한 뒤, 검색이 필요한 쿼리를 짰는데, 검색이 생각대로 되지 않았다. - 처음 잘못 실행한 쿼리SELECT AAA.aa, BBB.bb, CCC.cc FROM AAA AS A LEFT OUTER JOIN BBB AS B ON A.B_seq = B.seq LEFT OUTER JOIN CCC AS C ON A.C_seq = C.seq AND 추가 제약조건 --------> 제약조건이 오른쪽에 걸려서 원하는 결과가 나오지 않는다. - 원하는 결과가 나온 쿼리SELECT AAA.aa, BBB.bb, CCC.cc FROM AAA AS A LEFT OUTER JOIN BBB ..
MySQL에서 Merge Into(데이터가 있으면 수정, 없으면 삽입) 사용하기 쿼리를 잘 몰라, 특정 데이터가 있다면 수정, 없다면 삽입해야 하는 경우 아래와 같이 해결했다. /** * DB에 데이터가 없다면 = insert */ if (service.selectBoard(seq) == null) { service.insertBoard(board); /** * 있다면 = update */ } else { service.updateBoard(board); } Oracle에는 이를 간단히 해결하기 위해 Merge Into라는 기능이 있고,Mysql에서는 아래와 같이 사용하면 된다. INSERT INTO TB_BOARD ( COULUMN_1, COULUMN_2, COULUMN_3 ) VALUES ( VALUE_1, VALUE_2, VALUE_3 ) ON DUPLICATE KEY UPDA..
서브쿼리 - 로우별 카운트 추가하기(쿼리 별칭,alias 범위) 가령 1 : n 인 관계형 DB가 있을 때,1인 테이블의 각 로우에 해당하는 n인 테이블의 수를 각각 달아줘야 할 때가 있다. 예) 게시글 (1) : 코멘트 (n) 일때 아래와 같이 표시하는 경우가 종종 있다. - 조인 사용 -아래와 같이 생각을 했다.(실제 프로젝트에서는 아래 a 테이블에서 코드 테이블에 한번 더 join을 해야해서 쿼리가 엄청 길었다.) SELECT a.B_SEQ, a.TITLE, b.COMMENT_CNT FROM (SELECT B_SEQ, TITLE FROM BOARD) a LEFT OUTER JOIN (SELECT aa.B_SEQ, COUNT(aa.B_SEQ) COMMENT_CNT FROM BOARD aa, COMMENT bb WHERE aa.B_SEQ = bb.B_SEQ GROU..