본문 바로가기
개발/개인

공통코드 테이블 조인 - 사용자상세검색

by areumtb 2016. 11. 15.

사용자 검색시 DCODE로 했던 부분을 코드 테이블과 조인으로  변경



- 원래소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<select id="AllEmployeeList" resultMap="EmployeeMapper"
        parameterType="map">
        
        select
        UCODE,DCODE,ENAME,NAME,BIRTHDAY,PHONE,EXNUM,EMAIL,ADDRESS,BIREDAY,
        NOTE,DEPARTMENT,BIREDAY,
        DECODE(POSITION,'W_PO1','사원','W_PO2','선임','책임','관리자'
        ,'W_PO4','과장','W_PO5','차장','W_PO6','팀장','W_PO7','이사')AS POSITION,
        DECODE(PRESENT,'W_PE1','정상회원','W_PE2','대출정지','W_PE3','관리자')AS PRESENT
        from EMPLOYEE order by ${SIDX}
        <if test="SORD == ('asc')">ASC</if>
        <if test="SORD == ('desc')">DESC</if> 
 
</select>
 
cs


코드테이블을 활용을 하지 않고 일단 DCODE로 바뀌에 해놨음 



코드테이블과 조인을해서 SELECT를 해봅시당.



기본적인 조인문 활용


-사용자 검색 - 이름검색, 사원번호검색

1
2
3
4
5
- 기존
<select id="userSearchDcode" resultMap="EmpSearchMapper"    parameterType="com.eco.library.dto.Emp_SearchVo">
        SELECT *
        FROM EMPLOYEE WHERE DCODE like
        '%'||#{DCODE}||'%'
    </select>
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- 조인문
<select id="userSearchDcode" resultMap="EmpSearchMapper"    parameterType="com.eco.library.dto.Emp_SearchVo">
 
        SELECT E.ENAME,E.NAME,E.DCODE,BIREDAY,
        DE.DESCRIPTION AS DEPARTMENT,
        PO.DESCRIPTION AS POSITION,
        PR.DESCRIPTION AS PRESENT   
        FROM CODE_TABLE PO,CODE_TABLE PR, CODE_TABLE DE ,EMPLOYEE E  // 각각의 DESCRIPTION 과 매핑하기위해
         코드테이블을 세번 조인함
WHERE PO.CODE = E.POSITION AND // 조인조건
        PR.CODE = E.PRESENT AND
        DE.CODE = E.PRESENT
        AND DCODE like    '%'||#{DCODE}||'%' // 검색조건
 
 
    </select>
 cs


  검색 조건이 하나일때는 그냥 AND 연산자 뒤에 검색조건을 추가해주면 된다. 



그러나 검색조건이 하나이상이 되면은 각각에 데이터가 다 출력이 된다. 

  이렇게....

   - 사용자 상세검색 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
    SELECT E.ENAME,E.NAME,E.DCODE,BIREDAY,
        DE.DESCRIPTION AS DEPARTMENT,
        PO.DESCRIPTION AS POSITION,
        PR.DESCRIPTION AS PRESENT   
        FROM CODE_TABLE PO,CODE_TABLE PR, CODE_TABLE DE ,EMPLOYEE E 
        WHERE PO.CODE = E.POSITION AND
        PR.CODE = E.PRESENT AND
        DE.CODE = E.DEPARTMENT AND
        DCODE ='444'
        or NAME ='아름'
        or ENAME ='아름'
        or PRESENT = 'DEPT03'
        or POSITION = 'W_PO2'
        or DEPARTMENT = 'W_PE1';
cs


    - 결과값


이런일이 발생하게됨 ㅠㅜ   그래서 조인에대해서 검색을 겁나 하다가 ON을 알게됨

http://vaert.tistory.com/158  참조




ON 구문


·         조인 조건을 지정 할 수 있다.


·         모든 논리 연산 및 서브쿼리를 지정할 수 있다.

 

-- 테스트를 위해 scott유저에서 아래 insert문장을 실행시킨다.


SQL> INSERT INTO bonus(ename, job, sal) VALUES('SMITH','CLERK',500);

 


-- ON 사용 예제 (multi-table joins)


SQL> SELECT e.empno, e.ename, e.sal

     FROM emp e JOIN dept d  ON (e.deptno=d.deptno)

                JOIN bonus b ON (b.ename = e.ename)

     WHERE e.sal IS NOT NULL



라고한다...  그래서 사용해보기로





- 사용자 상세검색 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
E.ENAME,E.NAME,E.DCODE,E.BIREDAY,
DE.DESCRIPTION  AS DEPARTMENT,
PO.DESCRIPTION  AS POSITION,
PR.DESCRIPTION  AS PRESENT
FROM EMPLOYEE E JOIN CODE_TABLE PO ON (PO.CODE = E.POSITION) JOIN
CODE_TABLE PR ON (PR.CODE = E.PRESENT) JOIN
CODE_TABLE DE ON (DE.CODE = E.DEPARTMENT)
WHERE
    E.DCODE like '%4%'
    or E.NAME like '%아름%'  
    or E.ENAME like        '%아름%'
    or DE.DESCRIPTION like '%DEPT03%'
    or PO.DESCRIPTION like '%W_PO2%'
    or PR.DESCRIPTION like '%W_PE1%';
cs

 

       FROM 조인테이블1 JOIN 조인테이블2 ON (조인조건) JOIN 조인테이블3 ON (조인조건)  요렇게 ON 사용

       ※ 아마 등가조인인듯 (equi join) ※



 결과값



ㅜㅜㅜㅜ 성공 ㅜㅜ

댓글