상세주소DB
주소정보와 건물단위로 매칭가능한 상세주소정보를 제공합니다.
상세주소란 도로명주소의 건물번호 뒤에 표시되는 동ㆍ층ㆍ호 정보로, 2가구 이상 거주하는 원룸ㆍ다가구ㆍ단독주택에 부여합니다.
상세주소란 도로명주소의 건물번호 뒤에 표시되는 동ㆍ층ㆍ호 정보로, 2가구 이상 거주하는 원룸ㆍ다가구ㆍ단독주택에 부여합니다.
상세주소DB 구축 및 현행화
- DB 레이아웃
전체분 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 시군구코드 | 5 | 문자 | PK1 | |
2 | 동일련번호 | 10 | 숫자 | PK2 | |
3 | 층일련번호 | 10 | 숫자 | PK3 | PK (없을 경우 0) |
4 | 호일련번호 | 10 | 숫자 | PK4 | PK (없을 경우 0) |
5 | 호접미사일련번호 | 10 | 숫자 | PK5 | PK (없을 경우 0) |
6 | 동명칭 | 50 | 문자 | ||
7 | 층명칭 | 50 | 문자 | ||
8 | 호명칭 | 50 | 문자 | ||
9 | 호접미사명칭 | 10 | 문자 | 호 상세구분 (예)101호 A, 101호 B |
|
10 | 지하구분 | 1 | 문자 | 지하층 구분 0:일반, 1:지하 |
|
11 | 건물관리번호 | 25 | 문자 | 건물 연계Key | |
12 | 법정동코드 | 10 | 문자 | 도로명주소 연계Key1 | |
13 | 도로명코드 | 12 | 문자 | 도로명주소 연계Key2 | |
14 | 지하여부 | 1 | 문자 | 도로명주소 연계Key3 | |
15 | 건물본번 | 5 | 숫자 | 도로명주소 연계Key4 | |
16 | 건물부번 | 5 | 숫자 | 도로명주소 연계Key5 |
변동분 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 시군구코드 | 5 | 문자 | PK1 | |
2 | 동일련번호 | 10 | 숫자 | PK2 | |
3 | 층일련번호 | 10 | 숫자 | PK3 | PK (없을 경우 0) |
4 | 호일련번호 | 10 | 숫자 | PK4 | PK (없을 경우 0) |
5 | 호접미사일련번호 | 10 | 숫자 | PK5 | PK (없을 경우 0) |
6 | 동명칭 | 50 | 문자 | ||
7 | 층명칭 | 50 | 문자 | ||
8 | 호명칭 | 50 | 문자 | ||
9 | 호접미사명칭 | 10 | 문자 | 호 상세구분 (예)101호 A, 101호 B |
|
10 | 지하구분 | 1 | 문자 | 지하층 구분 0:일반, 1:지하 |
|
11 | 건물관리번호 | 25 | 문자 | 건물 연계Key | |
12 | 법정동코드 | 10 | 문자 | 도로명주소 연계Key1 | |
13 | 도로명코드 | 12 | 문자 | 도로명주소 연계Key2 | |
14 | 지하여부 | 1 | 문자 | 도로명주소 연계Key3 | |
15 | 건물본번 | 5 | 숫자 | 도로명주소 연계Key4 | |
16 | 건물부번 | 5 | 숫자 | 도로명주소 연계Key5 | |
17 | 이동사유코드 | 2 | 문자 | 31:신규, 34:변동, 63:폐지 |
- 상세주소DB 현행화 SQL 예시
신규 건 처리
/* 신규분외에 누락된 자료가 있을 경우를 위해 UPDATE 후 INSERT하도록 구현 */
UPDATE 상세주소 A
SET (A.동명칭, A.층명칭, A.호명칭, ……) =
(SELECT 동명칭, 층명칭, 호명칭, …… FROM 상세주소변경분 B
WHERE B.시군구코드 = A.시군구코드
AND B.동일련번호 = A.동일련번호
AND B.층일련번호 = A.층일련번호
AND B.호일련번호 = A.호일련번호
AND B.호접미사일련번호 = A.호접미사일련번호
AND C.이동사유코드 IN ('31', '34')
AND ROWNUM = 1)
WHERE EXISTS (SELECT 1 FROM 상세주소변경분 C
WHERE B.시군구코드 = A.시군구코드
AND B.동일련번호 = A.동일련번호
AND B.층일련번호 = A.층일련번호
AND B.호일련번호 = A.호일련번호
AND B.호접미사일련번호 = A.호접미사일련번호
AND C.이동사유코드IN('31', '34') );
INSERT INTO 상세주소 (시군구코드, 동일련번호, 층일련번호 ……)
SELECT 시군구코드, 동일련번호, 층일련번호 …… FROM 상세주소변경분 A
WHERE A.이동사유코드 IN ('31', '34')
AND NOT EXISTS (SELECT 1 FROM 상세주소 B
WHERE B.시군구코드 = A.시군구코드
AND B.동일련번호 = A.동일련번호
AND B.층일련번호 = A.층일련번호
AND B.호일련번호 = A.호일련번호
AND B.호접미사일련번호 = A.호접미사일련번호 )
ORACLE 9i 이상 버전에서 Merge 사용 예시
/* (참고) ORACLE 9i이상 버전에서 MERGE문 사용 예시 */
MERGE INTO 상세주소 A
USING (SELECT 시군구코드, 동일련번호, 층일련번호, …… FROM 상세주소변경분 WHERE 이동사유코드 IN ('31', '34')) B
ON (B.시군구코드 = A.시군구코드 AND B.동일련번호 = A.동일련번호 AND B.층일련번호 = A.층일련번호 AND B.호일련번호 = A.호일련번호 AND B.호접미사일련번호 = A.호접미사일련번호)
WHEN MATCHED THEN
UPDATE SET A.동명칭 = B.동명칭, A.층명칭 = B.층명칭, ……
WHEN NOT MATCHED THEN
INSERT (A.시군구코드, A.동일련번호, A.층일련번호, A.호일련번호, ……)
VALUES (B.시군구코드, B.동일련번호, B.층일련번호, B.호일련번호, ……)
폐지 건 처리
/* 폐지자료 삭제 */
DELETE FROM 상세주소 A
WHERE EXISTS (SELECT 1 FROM 상세주소변경분 B WHERE B.시군구코드 = A.시군구코드 AND B.동일련번호 = A.동일련번호
AND B.층일련번호 = A.층일련번호 AND B.호일련번호 = A.호일련번호 AND B.호접미사일련번호 = A.호접미사일련번호 AND B.이동사유코드 = '63' )
상세주소DB 활용
- 상세주소DB 활용 SQL
건물단위 상세주소조회
/* 건물단위 상세주소조회 */
SELECT DECODE(동명칭,NULL,'',동명칭||'동')||
DECODE(지하구분,'1','지하','')||
DECODE(층명칭,NULL,'',' '||층명칭||'층')||
DECODE(호명칭,NULL,'',' '||호명칭||'호')||
DECODE(호접미사명칭,NULL,'',' '||호접미사명칭) AS 상세주소
FROM 상세주소
WHERE 건물관리번호 = '건물관리번호'
ORDER BY 동명칭, 층명칭, 호명칭, 호접미사명칭;
/* 주소단위 상세주소조회 */
SELECT DECODE(동명칭,NULL,'',동명칭||'동')||
DECODE(지하구분,'1','지하','')||
DECODE(층명칭,NULL,'',' '||층명칭||'층')||
DECODE(호명칭,NULL,'',' '||호명칭||'호')||
DECODE(호접미사명칭,NULL,'',' '||호접미사명칭) AS 상세주소
FROM 상세주소
WHERE 법정동코드 = '법정동코드'
AND 도로명코드 = '도로명코드'
AND 지하여부 = '지하여부'
AND 건물본번 = '건물본번'
AND 건물부번 = '건물부번'
ORDER BY 동명칭, 층명칭, 호명칭, 호접미사명칭;
건물DB와 매칭하여 상세주소 표출
SELECT DISTINCT
A.기초구역번호 AS 우편번호,
A.시도명 || DECODE(A.시군구명,NULL,'',' '|| A.시군구명)||
DECODE(B.읍면동구분, '0', ' '||A.읍면동명, '') ||' '||A.도로명 ||' '||
DECODE(A.지하여부, 0, '', '1','지하 '||' ', '2', '공중 '||' ')||
A.건물본번 || DECODE(A.건물부번, 0, '', '-' || A.건물부번) ||
CASE WHEN (B.읍면동구분 = '0' AND A.공동주택여부 = '0') THEN ''
WHEN (B.읍면동구분 = '0' AND A.공동주택여부 = '1') THEN DECODE(A.시군구용건물명, '', '', '(' || A.시군구건용물명 || ')' )
WHEN (B.읍면동구분 = '1' AND A.공동주택여부 = '0') THEN '(' || A.읍면동명 || ')'
WHEN (B.읍면동구분 = '1' AND A.공동주택여부 = '1') THEN '(' || A.읍면동명 || DECODE(A.시군구건물명, '', '', ',' || A.시군구건물명 ) || ')'
END AS 도로명주소,
DECODE(C.동명칭,NULL,'',' '||C.동명칭||'동')||
DECODE(C.지하구분, '1', ' '지하', '')||
DECODE(C.층명칭,NULL,'',' '||C.층명칭||'층')||
DECODE(C.호명칭,NULL,'',' '||C.호명칭||'호')||
DECODE(C.호접미사명칭,NULL,'',' '||C.호접미사명칭) AS 상세주소
FROM 건물정보 A, 도로명코드 B, 상세주소 C
WHERE B시군구코드 || B.도로명번호 = A.도로명코드
AND A.읍면동일련번호 = B.읍면동일련번호
AND A.건물관리번호 = C.건물관리번호(+)
AND A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 LIKE Param3||'%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0);
주소DB와 매칭하여 상세주소 표출
SELECT DISTINCT
A.기초구역번호 AS 우편번호,
A.시도명 || DECODE(A.시군구명,NULL,'',' '|| A.시군구명)||
DECODE(A.읍면동구분, '0', ' '||A.읍면동명, '') ||' '||A.도로명 ||' '||
DECODE(A.지하여부, 0, '', '1','지하 '||' ', '2', '공중 '||' ')||
A.건물본번 || DECODE(A.건물부번, 0, '', '-' || A.건물부번) ||
CASE WHEN (A.읍면동구분 = '0' AND A.공동주택여부 = '0') THEN ''
WHEN (A.읍면동구분 = '0' AND A.공동주택여부 = '1') THEN DECODE(A.시군구용건물명, '', '', '(' || A.시군구건용물명 || ')' )
WHEN (A.읍면동구분 = '1' AND A.공동주택여부 = '0') THEN '(' || A.읍면동명 || ')'
WHEN (A.읍면동구분 = '1' AND A.공동주택여부 = '1') THEN '(' || A.읍면동명 || DECODE(A.시군구건물명, '', '', ',' || A.시군구건물명 ) || ')'
END AS 도로명주소,
DECODE(E.동명칭,NULL,'',' '||E.동명칭||'동')||
DECODE(E.지하구분, '1', ' '지하', '')||
DECODE(E.층명칭,NULL,'',' '||E.층명칭||'층')||
DECODE(E.호명칭,NULL,'',' '||E.호명칭||'호')||
DECODE(E.호접미사명칭,NULL,'',' '||E.호접미사명칭) AS 상세주소
FROM(SELECT B.기초구역, A.시도명, A.시군구명, A.읍면동명, A.도로명, A.도로명코드,
A.읍면동구분, B.지하여부, B.건물본번, B.건물부번, C.법정동코드,
D.공동주택여부, D.시군구용건물명
FROM 도로명코드 A, 주소 B, 지번 C, 부가정보 D
WHERE A.도로명코드 = B.도로명코드
AND A.읍면동일련번호 = B.읍면동일련번호
AND B.건물관리번호 = C.건물관리번호
AND B.건물관리번호 = D.건물관리번호
AND C.대표여부 = '1') A, 상세주소 E
WHERE A.법정동코드 = E.법정동코드(+)
AND A.도로명코드 = E.도로명코드(+)
AND A.지하여부 = E.지하여부(+)
AND A.건물본번 = E.건물본번(+)
AND A.건물부번 = E.건물부번(+)
AND A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 LIKE Param3||'%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0);
내비게이션DB와 매칭하여 위치정보와 상세주소 표출
SELECT DISTINCT
A.우편번호 AS 우편번호,
A.시도명 || DECODE(A.시군구명,NULL,'',' '|| A.시군구명)||
DECODE(A.읍면동구분, '0', ' '||A.읍면동명, '') ||' '||A.도로명 ||' '||
DECODE(A.지하여부, 0, '', '1','지하 '||' ', '2', '공중 '||' ')||A.건물본번 ||
DECODE(A.건물부번, 0, '', '-' || A.건물부번) ||
CASE WHEN (A.읍면동구분 = '0' AND A.공동주택구분 = '0') THEN ''
WHEN (A.읍면동구분 = '0' AND A.공동주택구분 = '1') THEN DECODE(A.시군구용건물명, '', '', '(' || A.시군구건용물명 || ')' )
WHEN (A.읍면동구분 = '1' AND A.공동주택구분 = '0') THEN '(' || A.읍면동명 || ')'
WHEN (A.읍면동구분 = '1' AND A.공동주택구분 <> '0')
THEN '(' || A.읍면동명 || DECODE(A.시군구건물명, '', '', ',' || A.시군구건물명 ) || ')'
END AS 도로명주소,
DECODE(B.동명칭,NULL,'',' '||B.동명칭||'동')||
DECODE(B.지하구분, '1', ' '지하', '')||
DECODE(B.층명칭,NULL,'',' '||B.층명칭||'층')||
DECODE(B.호명칭,NULL,'',' '||B.호명칭||'호')||
DECODE(B.호접미사명칭,NULL,'',' '||B.호접미사명칭) AS 상세주소,
A.건물중심점_X좌표 ||', ' || A.건물중심점_Y좌표 AS 건물중심점좌표,
A.출입구_X좌표 ||', ' || A.출입구_Y좌표 AS 출입구좌표
FROM 건물정보 A, 상세주소 B
WHERE A.건물관리번호 = B.건물관리번호(+)
AND A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 LIKE Param3||'%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0);