본문 바로가기

SQL4

[SQL] Cardinality vs Selectivity (카디널리티와 선택도) 차이점 및 구하는 쿼리 데이터베이스나 빅데이터 분야에서 '카디널리티(Cardinality)'와 '선택도(Selectivity)'는 자주 언급되는 용어다. 이 용어의 차이점을 정확히 알고 있어야 가지고 있는 데이터의 특성을 잘 파악할 수 있다. 카디널리티와 선택도는 절대적인 수치가 아닌 두 개의 데이터 집합의 특성을 비교하는 상대적인 개념으로 사용해야한다. 카디널리티(Cardinality) 카디널리티는 특정 데이터 집합에서 유니크한 값의 개수를 의미한다. 예를 들어 데이터베이스의 테이블의 '성별' 컬럼의 경우 생물학적인 성별을 고려할 때 '남자'와 '여자'로 구성된다. 성별 컬럼의 카디널리티는 2라고 할 수 있다. 반대로 주민등록 번호 같이 PK 혹은 CandidateKey는 테이블에 존재하는 모든 레코드들에 유니크할 수 있다... 2021. 8. 3.
[MySQL] 오라클(Oracle) Merge into 구문 따라하기 - 중복키 (Duplicate key) 처리 오라클을 사용하면 'Merge into' 구문이라는 편리한 DML 구문을 사용할 수 있다. PK 혹은 Unique Index가 생성되어 있는 테이블에 데이터를 입력할 때, PK나 Unique Key에 해당하는 값이 이미 테이블에 존재하면 "Error Code: 1062. Duplicate entry '??' for key PRIMARY" 같은 에러가 발생한다. 이 경우 Insert 구문 대신 update 구문을 사용해서 기존에 있는 데이터를 업데이트해야한다. 이 때, 테이블에 데이터가 존재하는지 조회하고 없으면 insert, 있으면 update로 동작하도록 해야한다. 하지만 동시성 이슈로 select 해서 존재유무를 판단하고 insert 혹은 update 하는 사이에 다른 세션에서 새로운 값을 inser.. 2021. 8. 2.
[MySQL] 반올림과 버림 함수 - ROUND(), TRUNCATE() 숫자 데이터를 다룰 때 은근히 반올림과 버림을 많이 사용한다. MySQL에서는 반올림과 버림 기능을 제공하기 위해 ROUND() 함수와 TRUCATE() 함수를 제공한다. 반올림 (ROUND) MySQL의 쿼리에서 ROUND() 함수를 사용하면 반올림을 사용할 수 있다. ROUND() 함수는 2개의 인자를 받는데 "ROUND(숫자, 반올림할 자릿수)" 형태로 사용하면 된다. 예를들어 다음 쿼리들은 주석처리한 결과를 출력한다. SELECT ROUND(1234.56789) FROM DUAL -- 1235 SELECT ROUND(1234.56789 ,1) FROM DUAL -- 1234.6 SELECT ROUND(1234.56789 ,4) FROM DUAL -- 1234.5679 SELECT ROUND(123.. 2021. 8. 1.
[MySQL] 랭크(Rank)와 백분위(Percentile) 구하는 쿼리 예제 오라클을 사용하다가 MySQL을 사용하는 환경으로 옮겼을 때 여러가지 어려움을 만나게 된다. 오라클에서 지원하는 기능을 MySQL에서 지원하지 않는 경우인데 그 중 하나가 랭크(Rank)와 백분위(Percentile)를 구해야하는 경우다. MySQL 랭크 쿼리 오라클의 경우 테이블에 다음과 같은 데이터가 들어있을 때 create table t1(a number); insert into t1 values(3); insert into t1 values(6); insert into t1 values(9); insert into t1 values(2); insert into t1 values(5); insert into t1 values(8); insert into t1 values(1); insert into.. 2021. 7. 31.