SQL 기본 - 윈도우 함수, WINDOW FUNCTION

윈도우 함수, WINDOW FUNCTION

 

 윈도우 함수는 부분적으로 행과 행간의 관계를 쉽게 정의하기 위한 함수. 분석함수, 순위함수라고도 한다.

 일정 범위내의 행들 사이에 순위를 나타내거나 집계, 순서, 비율, 통계를 낼 수 있다.

 

윈도우 함수 명령어의 기본 구조

 

1
2
3
SELECT 윈도우 함수(인수) OVER(
    [PARTITION BY 컬럼명] [ORDER BY 절] [WINDOWING 절])
FROM 테이블명

 

※ MYSQL에서는 OVER함수를 지원하지 않는다.  

 

 

윈도우 함수의 종류

 

- 순위 관련 함수

* RANK : 일정 범위 내의 순위를 정한다. 동일한 값에 대해서는 동일한 순위를 나타낸다.

* DENSE_RANK : RANK함수와 비슷하나 동일한 순위를 하나의 건수로 취급. 2등이 여러개 나와도 다음 순위는 3등이 된다.

* ROW_NUMBER : 일정 범위 내의 순위를 지정하나 RANK함수와는 다르게 동일한 값이 나와도 고유한 순위를 부여한다.

 

- 집계 관련 함수

* SUM : 일정 범위내의 합계를 구한다.

* MAX : 일정 범위내의 최댓값을 구한다.

* MIN : 최솟값을 구한다.

* AVG : 평균값을 구한다.

* COUNT : 갯수를 구한다.

 

- 순서 관련 함수

* FIRST_VALUE : 일정 범위 내(PARTITION BY 를 사용하여 그룹을 지정한 후)의 첫번째 행의 값을 구한다.

* LAST_VALUE : 마지막 행의 값을 구한다.

* LAG : 파티션별 윈도우에서 이전 몇번째 행의 값을 가져온다.

* LEAD : 이후 행의 값을 가져온다.

 

- 비율 관련 함수

* RATIO_TO_REPORT : 파티션 내의 전체값에 대한 행별 값의 백분율을 소수점으로 표현한다.

* PERCENT_RANK : 파티션 내의 순위를 백분율로 구한다.

* CUME_DIST : 파티션 내의 누적순위를 백분율로 구한다.

* NTILE : 입력된 인수 값만큼 그룹으로 나누고 순위를 나눈다.

 

PARTITION BY 절과 ORDER BY 절

일반적으로 GROUP BY와 같은 기능을 하고, 윈도우 함수 내의 ORDER BY절은 메인쿼리의 ORDER BY과 같은 기능을 한다. 

 

WINDOWING 절

 

WINDOWING 절은 함수의 대상이 되는 행 기준의 범위를 정할 수 있다.

 

ROWS는 값만큼 순서된 행을, RANGE는 비교하는 컬럼의 값의 범위에 해당하는 행을 지정.

일반적으로 BETWEEN ~ AND ~ 를 사용할 수 있다.

 

BETWEEN을 사용할 경우,

 

1
2
3
4
5
ROWS 혹은 RANGE 
BETWEEN 
[UNBOUNDED PRECENDING  |  (임의의 값) ROW  |  (값) PRECENDING(RANGE의 경우 FOLLOWING 사용 가능) ]
AND
[UNBOUNDED FOLLOWING  |  (임의의 값) ROW  |  (값) FOLLOWING(RANGE의 경우 PRECENDING 사용 가능) ]

 

 

사용하지 않을 경우,

 

1
2
3
ROWS 혹은 RANGE 
[UNBOUNDED PRECENDING  |  (임의의 값) ROW  |  (값) PRECENDING]
 

 

식으로 사용할 수 있다.

 

 PRECENDING는 해당하는 행의 이전 범위, FOLLOWING는 이후의 범위를 지정하며, UNBOUNDED와 같이 사용할 경우 끝까지 범위를 지정하라는 뜻.

 RANGE를 사용할 경우 값의 범위를 지정한다.

 

PRECENDING, FOLLOWING는 상대적인 위치를 지정하는 것이라면, ROW는 절대위치를 지정한다.

 

예) ROWS BETWEEN UNBOUNDED PRECENDING AND 1 FOLLOWING

(해당하는 행으로 부터 처음까지, 그리고 다음 1개 행까지 지정.)

 

RANGE BETWEEN 100 PRECENDING AND 50 FOLLOWING

(해당하는 행의 컬럼에 해당하는 값의 -100부터 +50까지 해당하는 행을 지정.)

 

ROWS 10 ROW

(10번째 행부터 해당하는 행까지를 지정.)

 

 

모든 내용은 'SQL 전문가 가이드, 한국데이터베이스진흥원'에서 인용, 발췌하였습니다.

댓글()

SQL 기본 - 데이터 조작어, DML(INSERT, UPDATE, DELETE, SELECT)

웹 & 안드로이드/DataBase|2014. 2. 28. 21:33

INSERT

: 테이블에 데이터를 입력한다.

 

* 일부 필드에 데이터를 입력하는 경우

 

1
2
3
4
5
6
7
8
9
10
11
12
INSERT INTO 테이블명
(
    컬럼명1,
    컬럼명2,
    ..
)
VALUES
(
    데이터1,
    데이터2,
    ..
);

 

※ 컬럼명1에 데이터1, 컬럼명2에 데이터2 이런식으로 순서대로 입력된다. 입력되지 않은 필드는 NULL값 혹은 디폴트값으로 채워진다.

 

* 필드 전체에 데이터를 입력하는 경우

 

1
2
3
4
5
6
7
INSERT INTO 테이블명
VALUES
(
    데이터1,
    데이터2,
    ..
);

     

※ 테이블 컬럼 순서대로 데이터가 입력된다.

 

 

UPDATE

: 이미 입력되어 있는 데이터를 변경, 수정한다.

 

1
2
3
4
5
6
UPDATE 테이블명
SET 
컬럼명1 = 수정할 데이터1,
컬럼명2 = 수정할 데이터2,
...
WHERE [조건식];

 

※ 모든 행의 컬럼의 데이터를 일괄 수정시 WHERE절을 제외하면 된다.

 

 

DELETE

: 입력되어있는 데이터를 삭제한다.

 

1
2
DELETE FROM 테이블명
WHERE [조건식];

 

※ 모든 행의 데이터를 일괄 삭제할 시 WHERE절을 제외.

 

 

SELECT

: 데이터를 조회하기 위한 명령어이다.

 

1
2
SELECT [ALL/DISTINCT] 조회할 컬럼명1, 컬럼명2, ...
FROM 테이블 명;

※ ALL/DISTINCT : ALL은 데이터 중복에 상관없이 모두 출력(디폴트), DISTINCT는 중복된 데이터를 제외하여 1건으로 처리.

 

* 모든 컬럼을 조회하고 싶을땐 *(애스터리스크)를 사용한다.

 

1
2
SELECT *
FROM 테이블 명;

 

 

* ALIAS : 조회된 결과의 컬럼에 별명을 붙임.

 

1
2
SELECT 컬럼명1 AS '별명1', 컬럼명2 AS '별명2', ..
FROM 테이블 명;

 

 

※ 기본적으로 작은따옴표(')를 생략 가능하나 별명에 공백이 있을 경우에는 반드시 사용한다. 


 

댓글()

SQL 기본 - 데이터 정의어, DDL(CREATE, ALTER, DROP)

웹 & 안드로이드/DataBase|2014. 2. 28. 16:30

 

 

CREATE TABLE

* 테이블을 생성하는 명령어.

 

* 기본적인 생성 sql문장

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE 테이블명
(
컬럼명1    데이터유형    [디폴트 값],
컬럼명2    데이터유형    [디폴트 값],
컬럼명3    데이터유형    [디폴트 값]
...
..
.
컬럼명n    데이터유형    [디폴트 값],
CONSTRAINT    제약조건 명     제약조건 종류     해당 컬럼명
);
 

 

* 제약조건의 종류

- PRIMARY KEY : 테이블에 저장된 행을 고유하게 식별하기 위한 기본 키. 하나의 테이블에 하나의 기본키 제약만 정의할 수 있다. UNIQUE KEY + not null과 같은 형태.

 

- UNIQUE KEY :  행을 고유하게 식별 할 수 있는 키. 기본키와 다르게 NULL이 허용.

 

- NOT NULL :  NULL값 입력을 금지. 입력 필수인 필드를 만든다.

 

- CHECK : 입력할 수 있는 값의 범위 등을 지정. TRUE, FALSE로 평가할 수 있는 논리식을 지정.

 

- FOREIGN KEY : 외래키. 다른 테이블의 기본키를 참조하는 키.

 

※ NULL의 의미는 공백(" "), 숫자 0과는 전혀 다른 값. 아직 정의되지 않은 미지의 값이나 현재 데이터를 입력하지 못하는 경우를 뜻함.

 

* SELECT 문장을 통해 테이블 생성이 가능하다.

1
2
3
CREATE TABLE 복사한 테이블 명
AS SELECT * FROM 원본 테이블 명;
 

 

 

 

ALTER TABLE

* 정의한 테이블 구조를 수정.

 

* ADD COLUMN, 컬럼 추가

: 기존의 테이블에 컬럼을 추가한다.

 

1
2
ALTER TABLE 테이블 명
ADD (추가할 컬럼명    데이터 유형    [제약조건]);

※ 이 경우 추가한 컬럼은 무조건 마지막에 붙는다. 순서를 조정 할 수 없다.

 

*  DROP COLUMN, 컬럼 삭제

: 기존에 존재한 컬럼을 삭제한다.

1
2
ALTER TABLE 테이블 명
DROP 컬럼명;

 

* MODIFY COLUMN, 컬럼 수정

: 기존의 컬럼의 정의 조건을 수정한다.

1
2
ALTER TABLE [테이블 명]
ALTER (컬럼명    데이터유형    [제약조건]); 

 

 

* RENAME COLUMN, 컬럼명 수정 (※ ANSI 표준이 아닌 ORACLE등의 일부 DBMS에만 적용.)

: 컬럼의 이름을 수정한다.

1
2
ALTER TABLE [테이블 명]
RENAME COLUMN    기존의 컬럼명    TO    수정할 컬럼명;

 

* DROP CONSTRAINT, 제약조건 삭제

: 테이블 생성시에 부여했던 제약조건을 삭제한다.

1
2
ALTER TABLE 테이블 명
DROP CONSTRAINT 제약조건 명;

 

 

* ADD CONSTRAINT, 제약조건 추가

: 제약조건을 추가한다

1
2
ALTER TABLE 테이블 명
ADD CONSTRAINT    제약조건 명   제약조건    컬럼명;

 

 

 

DROP TABLE

* 테이블을 완전히 삭제한다.

 

1
DROP TABLE 테이블명;

 

TRUNCATE TABLE

* 테이블 구조는 그대로 두고, 데이터 행만을 제거하는 명령어. 사용 후 테이블을 재사용 할 수 있다.

 

1
TRUNCATE TABLE 테이블 명;

 

 

모든 내용은 'SQL 전문가 가이드, 한국데이터베이스진흥원'에서 인용, 발췌하였습니다.

댓글()

MySql 설치하기

웹 & 안드로이드/DataBase|2013. 9. 27. 16:27

Mysql Community Server 5.5버전




다운로드 페이지 - http://www.mysql.com/downloads/




heidisql : mysql gui 관리 툴.


다운로드 페이지 - http://www.heidisql.com/

댓글()