한번에 UPDATE 와 INSERT 를 구분하여 실행

테이블을 갱신할때, 해당레코드가 있으면, UPDATE, 없으면 INSERT를 실행해야 할때가 있다.

소스코드에서 IF을 사용해서 존재체크를 하고, 처리구분을 할 필요성이 있다.

 

SQLServer 2008부터 Merge를 사용하면 IF를 사용하지 않고, 처리구분이 가능하다.

 

MERGE 투입(INSERT), 갱신(UPDATE), 삭제(DELETE) 의 데이터가 되는 테이블과 뷰를 지정
USING 대상테이터와 결합되는 데이터소스를 지정
ON 대상데이터와 데이터소스의 일치여부가 판단하는 결합조건을 지정
WHEN WHEN MATCHED
WHEN NOT MATCHED BY TARGET
WHEN NOT MATCHED BY SOURCE

ON의 결과, WHEN을 지정한 추가의 검색조건의 결과에 따라서 실행을 지정
OUTPUT 투입(INSERT), 갱신(UPDATE), 삭제(DELETE) 되는 데이터의 레코드별도 반환

 

한개의 테이블을 MERGE

UPDATE의 예

CREATE TABLE test_table( no INT, name VARCHAR(20), age INT )
INSERT INTO test_table VALUES( 10,'jkim01',40)

MERGE INTO test_table AS A
    USING (SELECT 10 AS no,'jkim03' AS name, 30 AS age ) AS B
    ON ( A.no = B.no )
    WHEN MATCHED THEN
        UPDATE SET
             name = B.name ,age = B.age
    WHEN NOT MATCHED THEN
        INSERT (no,name,age)
        VALUES (B.no,B.name,B.age)
;
SELECT no, name, age FROM test_table ORDER BY no
DROP TABLE test_table

// 결과
//no    name     age
//10    jkim03   30

검증용으로 투입했던 데이터가 「jkim03」으로 갱신되었습니다.

ON이하의 「A.no = B.no」의 조건이 일치했으므로, UPDATE(갱신) 되었습니다.

INSERT 예

CREATE TABLE test_table( no INT, name VARCHAR(20), age INT )
INSERT INTO test_table VALUES( 10,'jkim01',40)

MERGE INTO test_table AS A
    USING (SELECT 20 AS no,'jkim02' AS name, 40 AS age ) AS B
    ON ( A.no = B.no )
    WHEN MATCHED THEN
        UPDATE SET
             name = B.name ,age = B.age
    WHEN NOT MATCHED THEN
        INSERT (no,name,age)
        VALUES (B.no,B.name,B.age)
;
SELECT no, name, age FROM test_table ORDER BY no
DROP TABLE test_table

//실행결과
no    name    age
10    jkim03  30
20    jkim02  40

ON이하의 「A.no = B.no」의 조건이 일치하지 않았으므로, INSERT(투입) 되었습니다.

'SQL Server' 카테고리의 다른 글

컴럼(Column) 의 추가(add) / 변경(modify) / 삭제(delete)  (0) 2022.06.14

Join함수는 아래와 같이 기술이 가능하다.

결합후 문자 = 결합문자.join(리스트)

실전 예를 보면 이해가 쉽습니다.

list = ['My', 'name', 'is', 'Kim', 'Test']
str = ' '.join(list)
print(str)
// My name is Kim Test
list = ['My', 'name', 'is', 'Kim', 'Test。', 15, "Years"]
str = ' '.join(list)
print(str)

// 숫자를 포함해서 하면 에러가 발생한다. 
Traceback (most recent call last):
  File "sample.py", line 2, in 
    str = ' '.join(list)
TypeError: sequence item 5: expected str instance, int found

list = ['My', 'name', 'is', 'Kim', 'Test。', 15, "Years"]
list = map(str, list)
str = ' '.join(list)
print(str)

 

'Python' 카테고리의 다른 글

For을 사용하는 방법 4가지  (0) 2022.06.20
python 가상환경(venv)  (0) 2021.10.17
conda command 정리  (0) 2021.10.17
Anaconda install 하기  (0) 2021.10.17
Python 와 Anaconda 의 차이점  (0) 2021.10.17

Python의 for문을 이용하는 방법

Python에는 반복되는 처리를 위해서 for를 사용한다.

 

전방에서 부터 참조

for 요소 in 리스트:
    처리

---------------------------------------------------
# 첫번째 방법
lis = [1, 2, 3]
for el in lis:  # for로 리스트분 반복한다.
    print(el)  # 리스트내용을 출력한다. 
# 1
# 2
# 3

# 두번째 방법
lis = [1, 2, 3]
for i in range(len(lis)):
    print(lis[i])
    
# 1
# 2
# 3

후방에서 부터 참조

리스트의 slice기능을 이용하면, 뒷면의 요소부터 참조 할 수 있다.

lis[::-1]처럼 -1을 하면,  리스트를 역순으로 복사하는것이 가능하다.

# 첫번째 방법
lis = [1, 2, 3]
for el in lis[::-1]:
    print(el)
# 3
# 2
# 1

# 두번째 방법
lis = [1, 2, 3]
for i in range(len(lis) - 1, -1, -1):
    print(lis[i])
# 3
# 2
# 1

range에 대해서
// range(param1, param2, param3)
// param1: 정수의 개시점
// param2: 종료점 (-1지정이면, -1일때 종료)
// param3: step수 (-1지정이면, -1일씩 이동)

for문과 list, enumerate

for문에서 리스트를 반복할 경우, 요소와 리스트순서 번호를 동시에 출력하고 싶을때 사용가능하다.

for 순서번호, 요소 in enumerate(리스트):
    처리
    
-------------------------------------------------
    
lis = [10, 20, 30]
for i, el in enumerate(lis):
    print(i, el)
# 0 10
# 1 20
# 2 30

for문과 list, zip

두개의 리스트를 한개처럼 반복시키기 위해서 zip를 사용한다.

lis1 = ['a', 'b', 'c']
lis2 = [1, 2, 3]
for tup in zip(lis1, lis2):
    print(tup)
# ('a', 1)
# ('b', 2)
# ('c', 3)
------------------------------------------
lis1 = ['a', 'b', 'c']
lis2 = [1, 2, 3]
for i, el in zip(lis1, lis2):
    print(i, el)
# a 1
# b 2
# c 3

 

for문과 list 내포표기

리스트의 값을 한줄로 표현하는것이 가능하다.

Python은 내포표기처럼 소스를 간단화해서, 가독성을 높이는 것이 가능하다. 

 

lis1 = [1, 2, 3]
lis2 = [el * 2 for el in lis1]
print(lis2)
# [2, 4, 6]

'Python' 카테고리의 다른 글

Join함수 사용하는 방법  (0) 2022.06.21
python 가상환경(venv)  (0) 2021.10.17
conda command 정리  (0) 2021.10.17
Anaconda install 하기  (0) 2021.10.17
Python 와 Anaconda 의 차이점  (0) 2021.10.17

JSON을 문자열로 변환기켜주는 Method입니다.

문자로 변환을 할 경우에, Serialize를 합니다.

예를 들면 new Date()의 경우엔, toJSON()이 실행되고, Serialize된 값을

문자로 변환한다.

JSON.stringify ( value [ , replacer [ , space ] ] )

value: 문자열을 만드는 JSON
replacer: 함수나 배열로 출력하는 요소를 지정
space: indent를 문자로 지정
function replacer(key, value) {
  // Filtering out properties
  if (typeof value === 'string') {
    return undefined;
  }
  return value;
}

var foo = {foundation: 'Mozilla', model: 'box', week: 45, transport: 'car', month: 7};
JSON.stringify(foo, replacer);
// '{"week":45,"month":7}'
JSON.stringify(foo, ['week', 'month']);
// '{"week":45,"month":7}'



JSON.stringify({ a: 2 }, null, ' ');
// '{
//  "a": 2
// }'

JSON.stringify({ uno: 1, dos: 2 }, null, '\t');
// returns the string:
// '{
//     "uno": 1,
//     "dos": 2
// }'

 

'Javascript' 카테고리의 다른 글

shallow copy & deep copy  (0) 2022.06.19
Object.assign 의 사용법  (0) 2022.06.19
배열 조작  (0) 2022.06.19

+ Recent posts