DB를 사용하다 보면 A라는 테이블에서 a라는 값을 꺼내서 B라는 테이블에 파라미터로 입력받은 값을 함께 넣고 싶을대가 있다.
하나라면 그냥 받아서 넣으면 된다. 간단하다.
BUT!
만약 A라는 테이블에 a에 해당하는 값이 100개라면 1000개라면 어떻게 할것인가.
이를 위해서
Selet-Insert
쿼리가 있다.
예를 들어 보자.
A Table
Name |
Age |
A |
10 |
B |
11 |
C |
12 |
B Table
Name |
Age |
속성1 |
속성2 |
속성3 |
속성4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
이 상황에서 B Table에 이름은 A Table 에 있는 이름을 이용해서 넣고 나머지 값들은 파라미터로 받어서 넣을 생각이다.
여기 Age를 파라미터로 받고 Age에 해당하는 이름이 들어 갈것이다.
일단 결론부터 보이 자면
INSERT INTO B
SELECT Name,
#{Age},
#{속성1},
#{속성2},
#{속성3},
#{속성4}
FROM A
WHERE Age = #{Age}
위와 같이 쿼리를 적용하면 된다.
쿼리가 작동하는데 구체적으로 한가지 예를 들어 보자
Age |
속성1 |
속성2 |
속성3 |
속성4 |
10 |
a |
b |
c |
d |
10 |
e |
f |
g |
h |
10 |
i |
j |
k |
l |
10 |
m |
n |
o |
p |
11 |
q |
r |
s |
t |
11 |
u |
v |
w |
x |
12 |
y |
z |
1 |
2 |
12 |
3 |
4 |
5 |
6 |
위와 같이 파라미터가 들어 가면
A Table에서 Age가 10인 경우의 Name
즉, A가 B테이블에 Name으로 들어간다.
따라서 B Table에 들어가는 결과는
Name |
Age |
속성1 |
속성2 |
속성3 |
속성4 |
A |
10 |
a |
b |
c |
d |
A |
10 |
e |
f |
g |
h |
A |
10 |
i |
j |
k |
l |
A |
10 |
m |
n |
o |
p |
B |
11 |
q |
r |
s |
t |
B |
11 |
u |
v |
w |
x |
C |
12 |
y |
z |
1 |
2 |
C |
12 |
3 |
4 |
5 |
6 |
위와 같이 나온다.
위와 같이 하면 Select 와 Insert를 따로따로 쓰지 않고
쿼리 한번에 만들수 있어서 대용량을 처리 할 경우 발생할수 있는 시간문제를 단방에 해결할 수 있다.