물리삭제와 논리삭제

 

물리삭제 : DELETE문을 사용해 실제 데이터를 테이블에서 삭제하는것

논리삭제 : 테이블에 삭제플래그(예를 들어 해당 열의 값이 0이면 사용중, 1이면 삭제된 데이터)열을 만들어서 

삭제/비삭제 데이터를 구분할 수 있게 하는 것

 

 

두 삭제 방법은 용도, 상황에 맞게 선택하면 된다.

예를 들어 SNS 서비스처럼 개인정보를 다루는 시스템에서는 사용자가 탈퇴한 경우 데이터를 삭제한다(물리삭제)

 

반면, 쇼핑 사이트의 경우 사용자가 주문을 취소하면 논리삭제를 한다(주문은 취소되었지만 통계적으로 유용하게 활용이 가능하기 때문)

 

 

그리고 하드웨어의 제한으로 인해 물리삭제를 해야하는 경우도 있을 수 있다(저장공간이 모자랄 경우)

 

 

행 개수 구하기 - COUNT

대표적인 집계함수)

COUNT(집합)

SUM(집합)

AVG(집합)

MIN(집합)

MAX(집합)

 

 

1. COUNT로 행 개수 구하기

SELECT COUNT(*) FROM sample51;

 

 

- WHERE 구 지정하기

SELECT COUNT(*) FROM sample51 WHERE name = 'A';

 

2. 집계함수와 NULL값

COUNT의 인수로 열명을 지정할 수 있다.

열 명을 지정하면 그 열에 한해서 행의 개수를 구할 수 있다.

실제로 집계함수는 이 목적을 위해 많이 사용된다.

하지만 집합 안에 NULL 값이 있으면 제외하고 카운트 하게 된다.

SELECT COUNT(no), COUNT(name) FROM sample51;

name열에 NULL 값을 가지는 행이 하나 존재하므로 COUNT 값이 4가 나왔다.

 

3. DISTINCT로 중복 제거

 

DISTINCT 키워드를 붙이면 중복 데이터를 제외한 결과를 얻을 수 있다.

SELECT DISTINC name FROM sample51;

 

4. 집계함수에서 DISTINCT

NULL 값을 제외하고, 중복하지 않는 데이터의 개수를 구하고 싶을때는 어떻게 해야 할까?

SELECT DINSTINCT COUNT(name) FROM sample51;

위와 같은 SQL문은 사용할 수 없다. COUNT 쪽이 먼저 계산되어버리기 때문이다.

 

중복을 제거한 값을 함수로 계산하고 싶으면 집계 함수의 인수에 DISTINCT를 사용한 수식을 지정하면 된다.

 

SELECT COUNT(ALL name), COUNT(DISTINCT name) FROM sample51;

(ALL은 Default 키워드이다. 위의 식에서 그냥 name만 써도 똑같은 결과를 얻을 수 있음)

 

+ Recent posts