by 마농 [마농] join update update [2018.04.03 16:30:55]
문제 : 사원테이블(emp)의 부서번호(deptno)에 해당하는 부서명(dname)을 부서테이블(dept)에서 찾아
사원테이블(emp)의 부서명(dname)을 갱신하시오.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | -- Oracle -- -- 1. SubQuery 를 이용한 Update UPDATE emp e SET e.dname = ( SELECT d.dname FROM dept d WHERE d.deptno = e.deptno) WHERE EXISTS ( SELECT 0 FROM dept d WHERE d.deptno = e.deptno) ; -- 2. Updatable Join View 이용 -- 단, d.deptno 가 반드시 PK 이어야 함 -- 10G 까지는 PK 아니더라도 힌트로 제어 가능(/*+ bypass_ujvc */) UPDATE /*+ bypass_ujvc */ ( SELECT e.dname , d.dname AS dname_new FROM emp e , dept d WHERE d.deptno = e.deptno ) SET dname = dname_new ; -- 3. Merge MERGE INTO emp e USING dept d ON (d.deptno = e.deptno) WHEN MATCHED THEN UPDATE SET e.dname = d.dname ; |
1 2 3 4 5 6 7 | -- MSSQL - From 절 사용 조인 -- UPDATE e SET e.dname = d.dname FROM emp e INNER JOIN dept d ON d.deptno = e.deptno ; |
1 2 3 4 5 6 7 | -- MySQL - Update 절에서 바로 조인 -- -- SET sql_safe_updates = 0; UPDATE emp e INNER JOIN dept d ON d.deptno = e.deptno SET e.dname = d.dname ; |