스마트웹앱콘텐츠전문가/데이터베이스 36

[MySQL]좌표 사이의 거리 구하기

(참고 : Mysql 8.0 이상 버전 이상, mariadb에서도 사용가능) ST_Distance_Sphere 함수를 사용하면 두 좌표의 거리(최단거리)를 계산할 수 있습니다. ○ ST_Distatnce_Sphere(g1 : geomerty, g2: geometry)Point형은 geomerty형에 포함되므로, g1과 g2에 Point형을 넣어서주면 됩니다.    테스트)영등포역과 신길역 사이의 거리 구하기영등포역(위도 : 37.515432857597176, 경도 : 126.90741709757052) 신길역(위도 :  37.51673842335889, 경도 : 126.91843287025256)     사용예시) 두 지점간의 거리 : 982m결과값의 단위는 M(Meter)입니다. 네이버, 카카오등의 포..

테이블 안에서 원하는 데이터 복사

행를 추가할 때, 동일한 테이블 내에서 원하는 데이터를 복사해서 그 값을 그대로 사용할 수는 없을까??? 당연히 사용할 수 있습니다. 방법은 다음과 같습니다. 기본적인 형태) INSERT INTO '테이블명' SELECT '컬럼1', '컬럼2','컬럼3',... FROM '테이블명' WHERE '조건' 예시) name age nickname hong 10 honghong kong 12 kongkong [test 테이블] 1) test 테이블에서 name이 hong인 행 데이터(name, age, nickname)를 그대로 새로운 행에 복사할 경우 INSERT INTO test SELECT name, age, nickname FROM test WHERE name = 'hong'; 2) test 테이블에서 ..

[PostgreSQL]GROUP BY JSON

GROUP BY 구문에서 사용할 수 있는 함수들이 여러 가지가 있겠지만, 흔히 알려진 것은 집계함수 입니다. 평균(AVG), 최대(MAX), 최소(MIN) 등.... 그 외에도, xxx_agg() 라고 하는 함수도 사용할 수 있습니다. PostgreSQL에서 지원하는 agg 함수는 json_object_agg, array_agg, string_agg 등이 있습니다. 1. json_object_agg() : 해당 그룹 안에 있는 요소를 키, 값 형태로 출력하고 싶을 때 사용합니다.(JSON 형태로 출력) id point subject A1 10 A B1 20 B B2 30 B C1 40 C > select subject, max(point), json_object_agg(id, point) from tab..

[PostgreSQL]있으면 UPDATE, 없으면 INSERT

조건에 맞는 데이터가 있으면 UPDATE, 없으면 INSERT 하는 것을 흔히 'UPSERT' 라고 표현을 합니다. 오라클에서는 merge into ~, mysql에서는 ~ on duplicate on key update ~ 를 사용해서 UPSERT를 하듯 PostgreSQL에서도 UPSERT를 사용할 수 있습니다. 사용 방법은 간단합니다. 이 구문만 따라 해주면 됩니다. ( V9.5 이상에서 사용) INSERT INTO 'TABLE' (COL1, COL2, ...) VALUES (VAL1, VAL2, ...) ON CONFLICT(COL1, COL2) DO UPDATE SET COL1 = VAL1, .. 주의) ON CONFLICT 안에 들어 가는 칼럼들은 해당 테이블의 Constraints(예: 유니..

[postgresql]대소문자구분없이조회

postgresql 에서는 비교적 간단한 쿼리를 작성하여 데이터를 대소문자 구분없이 조회할 수 있습니다. ※ 방법 : LIKE -> ILIKE 'LIKE' 대신 'ILIKE'를 사용하는 것 입니다. > SELECT * FROM TEST WHERE NAME LIKE '%KIM%'; #NAME 데이터 중 KIM이 포함된 데이터 조회(대소문자구별O) ----------- NAME ----------- KIM MIN SU KIM HOON KIM MINA ----------- > SELECT * FROM TEST WHERE NAME ILIKE '%KIM%'; #NAME 데이터 중 KIM이 포함된 데이터 조회(대소문자구별X) ----------- NAME ----------- KIM MIN SU KiM YOON S..

[마이바티스] FetchSize

마이바티스 FetchSize 설정을 통해 쿼리 조회 성능을 높일 수 있습니다. //예시 기본적으로 fetchSize를 설정하지 않으면, 기본값은 10 입니다. (비교 : 조회하려는 데이터가 2000건이라고 가정한다면, fetchSize를 기본(10)으로 할 경우, DB에서 200번 조회를 하게 되고, fetchSize를 1000으로 설정 할 경우, DB에서 20번 조회를 하게 됩니다.) 따라서, fetchSize 설정을 통해, 조회 성능 특히, 조회 소요 시간을 단축시킬 수 있습니다.

[MariaDB]Interger to Boolean

MariaDB에서 테이블 컬럼을 boolean 형식으로 사용하고 싶은 경우, 타입이 boolean이 형식이 아닌 tinyint 형식으로 저장이 됩니다. 문제는 여기서, 프로그래밍으로 이 데이터를 꺼내 Boolean 데이터로 가공하려고 햘 때 발생합니다. 다음 내용을 한 번 보시죠. // Integer to Boolean Boolean test = Boolean.valueOf(String.valueOf(testService.get("dataBoolean"))); // testService.get("dataBoolean") false, 0 -> false ) 참, 아이러니하게도 해당 컬럼의 타입(길이)를 변경해 주면 결과는 달라집니다. 2. "dataBoolean" 컬럼의 타입(길이)이 tinyint(1)이..

[Mybatis] 조회값이 아예 없는 경우

조회한 데이터가 아예 없는 경우, 즉, 조회 결과 행(row)이 아예 없는 경우를 한번 쯤을 경험해 봤을 겁니다. 이 경우, 자바에서 호출하게 되면 NullException 오류가 나옵니다. 이 Null 처리에 대한 방법은 여러가지가 있겠지만, 마이바티스 설정을 통해서 어느 정도 해결할 수 있습니다. 바로 이것이죠. 바이바티스 설정 파일에 추가하면 됩니다.(흔히 mybatis-config.xml, configuration.xml)