2021. 1. 15. 17:13ㆍSQL/Excel
들어가며
실습환경은 Microsoft SQL Server Management Studio 2019 / Microsoft Excel 2016 for Windows 에 최적화 되어 있습니다.
DB를 다루다보면 특정컬럼을 특정조건에 따라 UPDATE(업데이트) 하는 경우가 많습니다.
그 중, 특정 테이블의 컬럼 값을 조회하여 그 값에 따라 타겟 테이블의 컬럼 값을 UPDATE 하는 경우에는 일반적으로 JOIN 연산을 통해서 UPDATE를 하곤 합니다.
위 방법은 물론 좋은 방법이지만,
- 데이터 수가 많아지거나,
- WHERE 조건문으로 조회된 값을 명확하게 알고 싶거나,
- 혹은 UPDATE 기록을 남기기 위해
한 줄씩 UPDATE 쿼리문을 작성하여 실행하기도 합니다.
이번 포스팅에서는 엑셀을 통해서 한 줄씩 쿼리문을 작성하는 방법에 대해서 알아보겠습니다.
먼저 아래 두 개의 테이블을 보면서 이야기해보겠습니다.
TABLE_A | FRUIT_CODE(과일코드) | FRUIT_KO_NAME(과일한글명) |
1 | 0 | 사과 |
2 | 0 | 포도 |
3 | 0 | 사과 |
4 | 0 | 사과 |
5 | 0 | 포도 |
TABLE_B | FRUIT_CODE(과일코드) | FRUIT_KO_NAME(과일한글명) |
1 | f1 | 사과 |
2 | f2 | 포도 |
TABLE A와 B는 모두 과일코드와 과일한글명으로 이루어져있습니다.
그러나 TABLE A의 과일코드는 전부 0으로 데이터가 입력되어 있네요.
테이블 A의 과일코드를 사과는 f1, 포도는 f2로 입력하기 위해서는 어떻게 해야 할까요?
- 테이블 A와 B를 JOIN한 다음
- 테이블 B의 과일코드로 테이블 A의 과일코드를 UPDATE
위와 같은 방식으로 접근하면 될 것입니다.
따라서 쿼리문은 아래와 같이 작성됩니다.
-- 1번 방법
UPDATE TABLE_A
SET FRUIT_CODE = B.FRUIT_CODE -- B의 과일코드로 A 과일코드를 UPDATE
FROM TABLE_B B
WHERE TABLE_A.FRUIT_KO_NAME = B.FRUIT_KO_NAME; -- JOIN
그러나 아쉽게도, 위 쿼리문만 보아서는 사과라는 레코드(Record)가 f1이라는 코드값을 가졌다는 것을 알 수 없습니다.
직관적으로 알 수 있도록 표현되는 쿼리는 아래와 같을 것입니다.
-- 2번 방법
UPDATE TABLE_A SET FRUIT_CODE = 'f1' WHERE FRUIT_KO_NAME = '사과';
UPDATE TABLE_A SET FRUIT_CODE = 'f2' WHERE FRUIT_KO_NAME = '포도';
2번 방법은 FRUIT_CODE가 어떤 조건에 의해서 값을 가지게 되었는지 명확하게 나타내고 있습니다.
만약 위 UPDATE문을 따로 저장하여 파일로 관리하고 있으면,
후에 어떤 과일 이름이 어떤 과일 코드로 업데이트 되었는지 찾기 기능(ctrl + F)을 활용하여 쉽게 알 수 있습니다.
하지만 코드 값이 많아질수록 2번 방법의 쿼리를 타이핑할 양 역시 늘어납니다.
따라서 엑셀을 통해서, 쉽게 쿼리문을 생성해보겠습니다.
엑셀의 문법
엑셀의 문법만 알면, 누구나 쉽게 쿼리를 생성할 수 있습니다.
먼저 수식을 사용하면서 안에 텍스트를 적기 위한 문법은 아래와 같습니다.
=“텍스트”
텍스트 안에 엑셀의 셀주소값 을 불러오기 위해서는 아래와 같이 작성합니다.
=““&{셀주소}&””
만약, 작은 따옴표로 묶고 싶다면 아래와 같이 작성합니다.
=“‘“&{셀주소}&”’”
위 세가지 문법을 이해하셨다면, 이제 쿼리를 생성하실 수 있습니다.
-- 2번 방법
UPDATE TABLE_A SET FRUIT_CODE = 'f1' WHERE FRUIT_KO_NAME = '사과';
UPDATE TABLE_A SET FRUIT_CODE = 'f2' WHERE FRUIT_KO_NAME = '포도';
위 쿼리를 엑셀로 작성해보겠습니다.
="UPDATE TABLE_A SET FRUIT_CODE = '"&C6&"' WHERE FRUIT_KO_NAME = '"&D6&"';"
이제 쿼리를 복사하여 SQL 실행창에서 실행하시면 됩니다.
Microsoft SQL Server Management Studio 2019 기준 다중 행 쿼리 실행 단축키는 ctrl + E 입니다.
실습에 사용한 예제 쿼리를 첨부합니다.
위에서부터 순서대로 실행하시면 됩니다.
CREATE TABLE TABLE_A (
FRUIT_CODE VARCHAR(10)
, FRUIT_KO_NAME VARCHAR(10)
);
CREATE TABLE TABLE_B (
FRUIT_CODE VARCHAR(10)
, FRUIT_KO_NAME VARCHAR(10)
);
--TRUNCATE TABLE TABLE_A;
--TRUNCATE TABLE TABLE_B;
INSERT INTO TABLE_A (FRUIT_CODE, FRUIT_KO_NAME)
VALUES (0, '사과');
INSERT INTO TABLE_A (FRUIT_CODE, FRUIT_KO_NAME)
VALUES (0, '포도');
INSERT INTO TABLE_A (FRUIT_CODE, FRUIT_KO_NAME)
VALUES (0, '사과');
INSERT INTO TABLE_A (FRUIT_CODE, FRUIT_KO_NAME)
VALUES (0, '사과');
INSERT INTO TABLE_A (FRUIT_CODE, FRUIT_KO_NAME)
VALUES (0, '포도');
INSERT INTO TABLE_B (FRUIT_CODE, FRUIT_KO_NAME)
VALUES ('f1', '사과');
INSERT INTO TABLE_B (FRUIT_CODE, FRUIT_KO_NAME)
VALUES ('f2', '포도');
-- 1번 방법
UPDATE TABLE_A
SET FRUIT_CODE = B.FRUIT_CODE
FROM TABLE_B B
WHERE TABLE_A.FRUIT_KO_NAME = B.FRUIT_KO_NAME;
-- UPDATE 초기화
-- UPDATE TABLE_A
-- SET FRUIT_CODE = '0';
-- 2번 방법
UPDATE TABLE_A SET FRUIT_CODE = 'f1' WHERE FRUIT_KO_NAME = '사과';
UPDATE TABLE_A SET FRUIT_CODE = 'f2' WHERE FRUIT_KO_NAME = '포도';