Database/MS Sql: 4개의 글
이번 글에서는 DECIMAL 타입에서 사칙연산이 동작하는 방식에 대해서 정리해보겠습니다. DECIMAL 연산에 대한 설명에 앞서서 간단하게 DECIMAL이라는 타입에 대해 알아보겠습니다. DECIMAL은 Precision과 Scale로 정의되어 있습니다. Precision은 전체 자릿수, Scale은 .(점) 오른쪽에 오는, 소수 자릿수를 의미합니다. SELECT CAST(1.0005 as DECIMAL(4, 3)) 위 예시에서는 그림과 같이 precision과 scale을 표시할 수 있고 scale의 범위를 넘은 소수점의 값(5)은 반올림 하여 위 query의 결과는 1.001이 됩니다. (정수가 자릿수를 초과할 경우에는 overflow error가 발생합니다.) Calculation 그럼 DECIMA..
intro 이번 글에서 collation 충돌이 발생하는 원인과 해결 방법에 대해 다뤄보겠습니다. 이번 글에서는 collation에 대한 설명은 따로 하지 않겠습니다. collation에 대해 알고싶으신 분은 다음 링크를 참고해 주시기 바랍니다. 설명을 위해 다음과 같은 두 테이블을 정의하겠습니다. CREATE TABLE korean (id INT, name VARCHAR(100) COLLATE Korean_Wansung_CI_AS) CREATE TABLE american (id INT, name VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC) 하나의 테이블 collation 값은 Korean_Wansung_CI_AS(한국어 사전 기준)으로 또 다른 하나의 테이블..
intro 이번 글에서는 문자 데이터 정렬, Collation에 대하여 살펴보겠습니다. collation은 데이터 정렬, 비교하는 방식을 지정하는 명령어로 collation 설정에 따라 작업 결과가 다르게 나타날 수 있습니다. 자세한 설명에 앞서, 다음 쿼리를 통해 우리가 사용하고 있는 collation 설정값을 확인해 보겠습니다. SELECT name, collation_name FROM sys.databases; 위 쿼리문을 실행하면 아래와 같은 ( 환경에 따라 값은 다르게 나옵니다. ) 결과를 확인할 수 있습니다. name collation_name 1 master Korean_Wansung_CI_AS 2 sample Korean_Wansung_CI_AS master와 sample은 데이터베이스의 ..
Group By 최대값을 가진 Row를 추출하는 쿼리Group by를 이용하여 특정필드의 최대값을 가지고 올수 있지만 group by 특성상 해당하는 row의 다른 필드의 값을 가지고 올수가 없다.최대값이 있는 row 값을 가지고 오는 방법을 아래와 같이 2가지 방법이 있다.DB, Index, Table 구조 등에 따라 속도가 달라지기때문에 그때 그때에 맞게 2가지 방법중에 사용하면 된다. SELECT a.id, a.rev, a.contentsFROM YourTable aINNER JOIN ( SELECT id, MAX(rev) rev FROM YourTable GROUP BY id) b ON a.id = b.id AND a.rev = b.rev Group BY와 SubQuery를 활용하여 먼저 id와 ..