728x90


UPDATE 테이블 A INNER JOIN 테이블 B
ON A.조인할 컬럼명 = B.조인할 컬럼명
SET A.변경할 컬럼명 = 변경할값
( WHERE 조건절 )


테이블 A

  a1 아이디
  a2 비밀번호
  a3 이름
  a4 자기소개

테이블 B
  b1 아이디
  b2 특기
  b3 취미


이렇게 두 테이블이 있을 때,

A 테이블의 a4 (자기소개) 필드의 데이터 뒤에 B테이블의 특기, 취미를 붙여넣고 싶다!

이럴 때 쿼리 한 문장으로 업데이트 할 수 있다.

두 테이블의 key 값은 아이디 A.a1 = B.b1
두 테이블을 조인(JOIN)할 때에는 서로 같이 묶어줄 칼럼이 있어야 한다.


UPDATE A, B SET A.a5 = CONCAT(A.a4, B.b2, B.b3) WHERE A.a1 = B.b1;

또는

UPDATE A INNER JOIN B ON A.a1 = B.b1 SET A.a5 = CONCAT(A.a4, B.b2, B.b3);


여기서 잠시 단순 Update 문과 비교해보면서 이해해보자.

Update 조인도 단순 Update 문과 다를게 하나도 없다. 참 쉽다.


UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;


UPDATE A, B

SET A.a5 = CONCAT(A.a4, B.b2, B.b3)

WHERE A.a1 = B.b1;


테이블이 1개 →테이블 2개 이상 으로 테이블이 좀더 늘어났다는 것

칼럼명은 어느 테이블의 칼럼인지 명확하게 구분해주고 있다는 것

조건절도 어느 테이블의 칼럼인지 명확하게 구분해주고 있다는 것

블로그 이미지

Link2Me

,
728x90

어떤 정보를 조회, 수정, 삭제 하는 업무를 수행할 때, 하나의 테이블만 가지고 작업을 하는 경우는 거의 없다.

대부분 두개 이상의 테이블을 연결하여 원하는 데이터를 조회하거나 변경하고 삭제한다.


양쪽 테이블에 같은 조건이 존재할 경우의 값만 가져오는 Join 을 EQUI Join (등가 조인)이라고 한다.

DBMS가 먼저 접근하는 테이블을 드라이빙 테이블이라고 하는데, 드라이빙 테이블을 어떤 테이블로 하느냐에 따라 전체적인 조인 수행 속도에 영향을 끼칠 수 있다.




기본적인 구문은


SELECT column_name(s)
FROM tableA
INNER JOIN tableB
ON tableA.column_name = tableB.column_name;

w3schools.com 에 이렇게 나오는데 여기서 column_nams(s) 라는 말이 잘 와닿지 않을 수 있다.

아래 JOIN 구문을 보면 이해가 명확해진다.

테이블명을 칼럼마다 전부 적어주려면 구문이 길어지므로 별칭으로 간단하게 a, b 등을 사용한다.

SELECT 하는 column 이 테이블A 에 있는 column 인지 테이블B 에 있는 column 인지 명확하게 해주어야 한다.

칼럼(column)이 명확하게 구분되는 경우에는 안적어줘도 되지만, 명확하게 하는게 좋다. 테이블A, 테이블B가 다른 테이블이 아니라 같은 테이블을 조인하는 걸 Self JOIN 이라고 한다.


select a.no, b.mp3 from 테이블A a, 테이블B b where a.no = b.relateduid;

select a.no, b.mp3 from 테이블A a JOIN 테이블B b ON a.no = b.relateduid;   -- ANSI JOIN


위 2개의 JOIN Query 문은 동일하다.

테이블A 와 테이블B 사이의 콤마 대신에 JOIN, Where 대신에 ON 을 사용하게 다르다.


만약, 3개의 테이블을 JOIN 한다고 하면....

select a.no, b.mp3, c.membername from 테이블A a, 테이블B b, 테이블C c WHERE a.no = b.relateduid AND a.relateduid = c.memberid;


select a.no, b.mp3, c.membername from 테이블A a JOIN 테이블B b ON a.no = b.relateduid JOIN 테이블C c ON a.relateduid = c.memberid;



테이블A 의 특정 칼럼의 데이터를 업데이트 해야 하는 경우

다른 테이블(테이블 B)의 데이터를 바탕으로 테이블 A의 특정 칼럼을 업데이트 해야 하는 경우가 있다.


UPDATE 테이블명A a JOIN 테이블명B b
ON a.조인할 컬럼명 = b.조인할 컬럼명
SET 변경할 컬럼명 = 변경할값
( WHERE 절 )

의 쿼리문으로 해결할 수 있다.


약  4만건의 데이터를 JOIN Update 를 했더니 0.92초 걸렸다.





블로그 이미지

Link2Me

,