2019.01.17 데이터 갱신(UPDATE),집계함수,그룹화(GROUP BY)

2019. 1. 17. 12:10SQL


#1 데이터 갱신 : UPDATE


<table's sample41>




*데이터 갱신하기 - UPDATE (셀 단위로 수정!)
 UPDATE 테이블명 SET 열명 = 값 WHERE 조건식;



* UPDATE로 갱신 시 주의사항
 
UPDATE sample41 SET no = no + 1;
  ->
현재의 no 값에 1을 더한 값으로 no 열을 갱신한다   -> no(갱신값) = no(기존값)+1;




① 2행 B열 날짜 갱신하기  -> 여기서 b ='~'는 대입 연산자로 사용된다.





② 복수열 갱신

UPDATE 테이블명 SET 열명1=1, 열명2=2, ... WHERE 조건식




③ SET구의 실행 방법

->no(갱신값) = no(기존값)+1;

cf )   MySQL - SET 구로 나열된 수식의 순서에 영향을 받는다.       ex)  UPDATE sample41 SET no=no+1, a=no;

 Oracle - SET 구로 나열된 수식의 순서에 영향을 받지 않음     ex) UPDATE sample41 SET a=no, no=no+1;  

물리삭제와 논리삭제
- 물리삭제 : DELETE로 행 삭제
- 논리삭제 : 삭제플래그 열로 UPDATE해서 삭제한 것으로 가장
    ex
) 삭제하면 1로 갱신
   
UPDATE SET 삭제플래그=1 WHERE no=2;
   
SELECT FROM xxxx WHERE 삭제플래그 <> 1; 로 검색

>> 보통의 경우 논리삭제를 선호한다. #2 집계 함수 >>집합(행단위 집합)을 계산하는 함수

COUNT([ALL|DISTINCT] 집합) - 행 개수 구하기. 모든 자료형 가능 SUM([ALL|DISTINCT] 집합) - 합계 구하기. 수치형만 가능. AVG([ALL|DISTINCT] 집합) - 평균 구하기. 수치형만 가능. MIN([ALL|DISTINCT] 집합) - 최소값 구하기. 모든 자료형 가능 MAX([ALL|DISTINCT] 집합) - 최대값 구하기. 모든 자료형 가능

<table's sample51>

① COUNT-> 행의 개수 >> COUNT(열의 이름)


집계함수는 집함 안에 NULL 값이 있을 경우 무시한다


DISTINCT 로 중복 제거하기

>>응용: 중복 제거 후 COUNT ( 형식에 유의 할것) ******이 형식으로는 사용 불가 : SELECT DISTINCT COUNT(name) FROM sample51;  (X)


SUM(합계) , AVG(평균), MIN·MAX(최대,최소)

#3 그룹화 : GROUP BY

- 그룹화 - GROUP BY
 
SELECT * FROM 테이블명 GROUP BY1,2, - GROUP BY 구와 집계함수를 조합
 (GROUP BY 구를 지정하는 경우에는 집계함수와 함께 사용하지 않으면 별 의미가 없음)

- 내부처리 순서
 
WHERE 구 → GROUP BY 구 → HAVING 구 → SELECT 구 → ORDER BY
- GROUP BY 에서 지정할 열 이외의 열은
  집계함수를 사용하지 않은 채
SELECT 구에서 지정할 수 없다!

-
SELECT no, name, quantity FROM sample51 GROUP BY name; (X)
   >
name열은 GROUP BY에서 지정하므로 OK
   >
no, quantity는 지정할 수 없다.




HAVING 구로 조건 지정
 
SELECT name, COUNT(name) FROM sample51
 
WHERE COUNT(name)=1 GROUP BY name;
- WHERE 구에서는 집계함수를 사용할 수 없다! >> sample51에서 name열을 그룹화 , 행의 개수가 1개인 행


* GROUP BY 에서 지정할 열 이외의 열은
  집계함수를 사용하지 않은 채 SELECT 구에서 지정할 수 없다!


  SELECT no, name, quantity FROM sample51 GROUP BY name; (X)
   - name열은 GROUP BY에서 지정하므로 OK
   - no, quantity는 지정할 수 없다. >>






* 집계한 결과 정렬하기
 




* 복수열의 그룹화








'SQL' 카테고리의 다른 글

2019.02.26 SQL구문 예제-SELECT(1)  (0) 2019.02.26
2019.01.21 CREATE,DROP,ALTER  (0) 2019.01.21
2019.01.17 서브쿼리,IN  (0) 2019.01.17
2019.01.16 SQL 연습문제#1  (0) 2019.01.16
2019.01.15 SQL의 기본설정, SELECT,ORDER  (0) 2019.01.15