728x90
[초보] 데이터 분석을 위한 SQL 기초 모음
1.[초보] SQL 기초 모음 - SELECT(1)
2.[초보] SQL 기초 모음 - INSERT(1)
3. [초보] SQL 기초 모음 - UPDATE(1)
4. [초보] SQL 기초 모음 - DELETE(1)
출처: [AgileBus - IT 기술자를 위한 최신 기술 Trends:티스토리]
[초보] SQL 기초 모음 - UPDATE(1) 원리
테이블 또는 뷰의 데이터를 갱신하려면 UPDATE문을 사용 합니다.
UPDATE문을 사용하여 WHERE절의 탐색 조건을 충족시키는 각 행에서 하나 이상의 컬럼(열)의 값을 변경할 수 있습니다.
Update문은 간단하면서도 상황에 따라 복잡한 Update Join 문으로 작성하여 한번에 많은 데이터 수정이 가능하다.
1. (Simple Update)테이블의 특정 컬럼의 값을 수정 하는 방법
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
[예시]
UPDATE customers
SET cust_name = 'Tome', cust_nick = 'Maveric', code_postal = '123-234'
WHERE cust_id = 200
2. (Update Join) 두 테이블을 JOIN하여 테이블의 값을 수정하는 방법
UPDATE t1
SET t1.c1 = t2.c2, t1.c2 = expression, ...
FROM t1
[INNER | LEFT] JOIN t2 ON join_predicate
WHERE where_predicate;
UPDATE Tablealias
SET A.c1 = B.C1, ...
FROM tableA A
[INNER | LEFT] JOIN tableA B ON join_predicate
WHERE where_predicate;
UPDATE [변경될테이블]
SET [컬럼1] = a.[컬럼1] , [컬럼2] = a.[컬럼2]
FROM [조인테이블1] a
JOIN [조인테이블2] b ON a.[컬럼] = b.[컬럼]
WHERE [변경될테이블].[조건컬럼] = a.[조건컬럼]
* WHERE절에서 조인된 테이블과 UPDATE 대상 테이블과의 조건이 중요하다.
UPDATE Per
SET Per.PersonCityName=Addr.City, Per.PersonPostCode=Addr.PostCode
FROM Persons Per
INNER JOIN AddressList Addr
ON Per.PersonId = Addr.PersonId
* 각 데이터베이스 마다 Update Join의 형식에서 차이가 있으나 작동 방식은 같다. UPDATE가 작동되는 동안 해당 테이블의 Primary KEY 를 통해서 Row를 인식하고 수정 컬럼의 값을 수정 할수 있다.
-- Oracle --
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) ;
-- MSSQL --
UPDATE e
SET e.dname = d.dname
FROM emp e
INNER JOIN dept d ON d.deptno = e.deptno;
-- MySQL --
UPDATE emp e
INNER JOIN dept d ON d.deptno = e.deptno
SET e.dname = d.dname ;
[예시]
* UPDATE문의 WHERE 조건으로 지정된 값을 수정할 수 있다.
UPDATE t1 SET c1 = c1 + 1
WHERE c1 IN ( SELECT t1.c1 FROM t1 WHERE t1.c1 > 10);
* UPDATE문에 Table을 JOIN하여 관련 테이블의 값으로 연산의 결과를 저장할 수 있다.
UPDATE sales.commissions
SET sales.commissions.commission = c.base_amount * t.percentage
FROM sales.commissions c
INNER JOIN sales.targets t ON c.target_id = t.target_id;
UPDATE sales.commissions
SET sales.commissions.commission = c.base_amount * COALESCE(t.percentage, 0.1)
FROM sales.commissions c
LEFT JOIN sales.targets t ON c.target_id = t.target_id;
* COALESCE(A, B, C ...) 는 Null이 아닌 첫번째 값을 출력한다. COALESCE(t.percentage, 0.1) : t.percentage의 값이 NULL이면 0.1, NULL이 아니면 원래 값을 나타낸다.
UPDATE t1
SET a.Calculated_Column= b.[Calculated_Column]
FROM table1 a
INNER JOIN table2 b ON a.common_field = b.[common_field]
WHERE a.BatchNO = '222'
[초보] SQL 기초 모음
1.[초보] SQL 기초 모음 - SELECT(1)
2.[초보] SQL 기초 모음 - INSERT(1)
3. [초보] SQL 기초 모음 - UPDATE(1)
4. [초보] SQL 기초 모음 - DELETE(1)
728x90
반응형
'BigData' 카테고리의 다른 글
실시간 데이터 처리를 위한 Redpanda와 pinot 활용 (0) | 2022.12.22 |
---|---|
실시간분석을 위한 OLAP 저장소 Apache pinot (0) | 2022.12.18 |
[초보] SQL 기초 모음 - DELETE(1) (0) | 2022.08.11 |
[SQLite] Sqlite transaction ACID 개념 (0) | 2022.08.10 |
[SQLite] Sqlite transaction 처리문 - BEGIN TRANSACTION (0) | 2022.08.10 |
[초보] SQL 기초 모음 - INSERT(1) (0) | 2022.08.10 |
[초보] SQL 기초 모음 - SELECT(1) (0) | 2022.08.06 |