-
[데이터베이스] MSSQL 난수(random data)데이터베이스와 SQL 2022. 10. 22. 14:07
랜덤 데이터 생성 함수
1) RAND([seed]) 함수 (부동소수점, 0~1 사이의 값 중 생성)
- 쿼리 당 호출
- 정확한 의미의 난수 값은 아님 => Pseudo Random 값
- 동일 seed 에 동일한 결과로 동일 순서로 생성됨
SELECT RAND (); -- RAND() 함수는 쿼리당 한번 호출 (행 단위가 아님) SELECT TOP (5) object_id FROM sys.objects ORDER BY RAND(); -- 초기 값에 대해 반환된 결과는 항상 동일함 SELECT RAND(3); -- 한 connection에 대해 seed 를 지정하게 되면, 모든 후속은 최초 RAND()를 바탕으로 생성 SELECT RAND(3), RAND(), RAND(); -- 최종 1~ 최대값 SELECT CAST(RAND() * 1000 AS int) + 1
2) NEWID() 함수
- uniqueidentifier 형의 고유값 생성 (16byte의 GUID 값)
- 행 단위 호출
- 좀 더 단순한 형태로 변환해서 사용 => CHECKSUM(NEWID()) 를 사용하여 -21~+21억 (int) 해시값 반환
SELECT NEWID (); SELECT CHECKSUM(NEWID()); -- -21억 ~ 21억 (int)의 해시값 반환 -- 1 ~ maxNum 범위의 랜덤 값 생성하기 DECLARE @maxNum int = 10000; SELECT ABS(CHECKSUM(NEWID())) % @maxNum + 1; SELECT TOP (5) productID FROM dbo.Products ORDER BY CHECKSUM(NEWID());
3) 기타 방법
- TABLESAMPLE
- 행 단위 샘플링 알고리즘 응용
TABLESAMPLE 절
구문
SELECT *
FROM table_name
TABLESAMPLE [SYSTEM] (sample_number [PERCENT | ROWS] )
[REPEATABLE (repeat_seed)]기능
- 테이블에서 샘플 데이터 생성 지원 -> 원하는 데이터만큼 샘플링으로 반환
- 반환 행 수를 제한 (N rows -> N percent)
- [SYSTEM] 옵션 -> 데이터 page 별로 랜덤 값을 생성하고 그 중에 지정된 비율의 page를 선택 후 전체 행 반환
- 적용 가능한 시나리오
- 샘플링이 꼭 개별 행 수준에서 중복 데이터가 나와도 되는 경우에 활용할 수 있음
- page 와 row의 독립성이 없음
주의사항 !
- 테이블 행 수가 충분하지 않은 경우에, 지정한 행 수의 반환을 보장하지 못한다
- 조인이 포함된 경우에 결과 집합 일관성 문제가 발생 할 수 있다.
SELECT TOP(20) * FROM dbo.Orders TABLESAMPLE(200 ROWS); -- 테이블의 page를 선택하고 그 중에서 값 반환 SELECT TOP(5) * FROM dbo.Orders TABLESAMPLE(200 ROWS) REPEATABLE (100); -- 동일한 값에 대해서는 동일한 데이터가 리턴되도록 함 SELECT TOP(5) * FROM dbo.Orders TABLESAMPLE(200 ROWS) REPEATABLE (100);
반응형'데이터베이스와 SQL' 카테고리의 다른 글
[데이터베이스] MSSQL 다양한 DML 활용하기, 변수와 임시 테이블 (0) 2022.11.11 [데이터베이스] SQL 테이블 값 생성자 VALUES() (0) 2022.10.29 [데이터베이스] SQL의 핵심 기능, CASE문과 TOP (0) 2022.10.20 [데이터베이스] SQL 에서 NULL 다루기 (1) 2022.10.04 데이터베이스의 개체 - 인덱스, 스토어드 프로시저, 트리거 (1) 2022.09.16