주소DB
아파트단지(또는 집합건물), 단독건물 등의 출입구 위치를 기준으로 부여된 주소 정보입니다.
(아파트단지(또는 집합건물 등)가 여러 동으로 구성되어도 출입구 기준 하나의 주소정보만 제공됩니다.)
(아파트단지(또는 집합건물 등)가 여러 동으로 구성되어도 출입구 기준 하나의 주소정보만 제공됩니다.)
주소DB 구축 및 현행화
- DB 레이아웃
주소DB 관계도

도로명코드 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 도로명코드 | 12 | 문자 | PK1 | |
2 | 도로명 | 80 | 문자 | ||
3 | 도로명 로마자 | 80 | 문자 | ||
4 | 읍면동일련번호 | 2 | 문자 | PK2 | |
5 | 시도명 | 20 | 문자 | ||
6 | 시도명 로마자 | 40 | 문자 | ||
7 | 시군구명 | 20 | 문자 | ||
8 | 시군구명 로마자 | 40 | 문자 | ||
9 | 읍면동명 | 20 | 문자 | ||
10 | 읍면동명 로마자 | 40 | 문자 | ||
11 | 읍면동구분 | 1 | 문자 | 0: 읍면, 1:동, 2:미부여 | |
12 | 읍면동코드 | 3 | 문자 | 법정동기준읍면동코드 | |
13 | 사용여부 | 1 | 문자 | 0:사용, 1:미사용 | |
14 | 변경사유 | 1 | 문자 |
0:도로명변경, 1:도로명폐지, 2:시도시군구변경, 3:읍면동변경, 4:영문도로명변경, 9:기타 |
|
15 | 변경이력정보 | 14 | 문자 | 도로명코드(12)+ 읍면동일련번호(2) ※ 신규정보일경우“신규”로표시 |
|
16 | 고시일자 | 8 | 문자 | YYYYMMDDD | |
17 | 말소일자 | 8 | 문자 | YYYYMMDDD |
도로명주소 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 관리번호 | 25 | 문자 | PK | |
2 | 도로명코드 | 12 | 문자 | FK1 | |
3 | 읍면동일련번호 | 2 | 문자 | FK2 | |
4 | 지하여부 | 1 | 문자 | 0:지상, 1:지하 | |
5 | 건물본번 | 5 | 숫자 | ||
6 | 건물부번 | 5 | 숫자 | ||
7 | 기초구역번호 | 5 | 문자 | ||
8 | 변경사유코드 | 2 | 문자 | 31:신규, 34:변경, 63:폐지 | |
9 | 고시일자 | 8 | 문자 | NULL | |
10 | 변경전 도로명주소 | 25 | 문자 | NULL | |
11 | 상세주소 부여여부 | 1 | 문자 | 0:미부여, 1:부여 |
지번(대표지번+관련지번) DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 관리번호 | 25 | 문자 | PK1 | FK |
2 | 일련번호 | 3 | 문자 | PK2 | |
3 | 법정동코드 | 10 | 문자 | ||
4 | 시도명 | 20 | 문자 | ||
5 | 시군구명 | 20 | 문자 | ||
6 | 법정읍면동명 | 20 | 문자 | ||
7 | 법정리명 | 20 | 문자 | ||
8 | 산여부 | 1 | 문자 | 0:대지, 1:산 | |
9 | 지번본번(번지) | 4 | 숫자 | ||
10 | 지번부번(호) | 4 | 숫자 | ||
11 | 대표여부 | 1 | 문자 | 0:관련지번, 1:대표지번 |
부가정보 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 관리번호 | 25 | 문자 | PK | FK |
2 | 행정동코드 | 10 | 문자 | 참고용 | |
3 | 행정동명 | 20 | 문자 | 참고용 | |
4 | 우편번호 | 5 | 문자 | ||
5 | 우편번호 일련번호 | 3 | 문자 | NULL | |
6 | 다량배달처명 | 40 | 문자 | NULL | |
7 | 건축물대장 건물명 | 40 | 문자 | ||
8 | 시군구 건물명 | 40 | 문자 | ||
9 | 공동주택여부 | 1 | 문자 | 0:비공동주택, 1:공동주택 |
- 주소변경자료를 통한 현행화 체계구축
도로명코드 현행화
-- 신규건 처리
INSERT INTO 도로명코드전체분 (도로명코드, 도로명, 도로명로마자, ……)
SELECT A.도로명코드, A.도로명, A.도로명로마자, ……
FROM 도로명코드변동분 A
WHERE NOT EXISTS ( SELECT 1
FROM 도로명코드전체분 C
WHERE C.도로명코드 = A.도로명코드
AND C.읍면동일련번호 = A.읍면동일련번호);
-- 변동 및 폐지건 처리 (신규가 아닌 경우는 모두 UPDATE 처리, 폐지건의 경우 사용여부가 '1'로 변경)
UPDATE 도로명코드전체분 A
SET (A.도로명코드, A.도로명, A.도로명로마자, ……)
= (SELECT B.도로명코드, B.도로명, B.도로명로마자, ……
FROM 도로명코드변동분 B
WHERE B.도로명코드 = A.도로명코드
AND B.읍면동일련번호 = A.읍면동일련번호
AND ROWNUM =1)
WHERE EXISTS ( SELECT 1
FROM 도로명코드변동분 C
WHERE C.도로명코드 = A.도로명코드
AND C.읍면동일련번호 = A.읍면동일련번호);
주소정보/지번정보/부가정보 현행화(일변동)
/*
신규 건 처리
- 테이블 관계의 최상위 레벨인 "주소정보"부터 처리
- 신규분외에 누락된 자료가 있을 경우를 위해 UPDATE 후 INSERT하도록 구현
*/
-- 주소정보 처리
UPDATE 주소정보 A
SET (A.도로명코드, A.읍면동일련번호, A.지하여부, ……) =
(SELECT 도로명코드, 읍면동일련번호, 지하여부, …… FROM 주소정보변경분 B
WHERE B.관리번호 = A.관리번호 AND B.이동사유코드 IN ('31', '34') AND ROWNUM= 1)
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 C WHERE C.관리번호 = 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관리번호)
-- 지번정보 처리
UPDATE 지번정보 A
SET (A.법정동코드, A.시도명, A.시군구명, ……) =
(SELECT B.법정동코드, B.시도명, B.시군구명, …… FROM 지번정보변경분 B
WHERE B.관리번호 = A.관리번호 AND B.일련번호 = A.일련번호 AND B.이동사유코드 IN ('31', '34') AND ROWNUM= 1)
WHERE EXISTS (SELECT 1 FROM 지번정보변경분 C WHERE C.관리번호 = A.관리번호 AND C.일련번호 = 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.일련번호)
-- 부가정보 처리
UPDATE 부가정보 A
SET (A.행정동코드, A.행정동명, A.우편번호, ……) =
(SELECT B.행정동코드, B.행정동명, B.우편번호, …… FROM 부가정보변경분 B
WHERE B.관리번호 = A.관리번호 AND B.이동사유코드 IN ('31', '34') AND ROWNUM= 1)
WHERE EXISTS (SELECT 1 FROM 부가정보변경분 C WHERE C.관리번호 = 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.관리번호)
/* ORACLE 9i이상 버전에서 MERGE문 사용 예시 */
MERGE INTO 주소정보 A
USING (SELECT 관리번호, 도로명코드, 읍면동일련번호, 지하여부...... FROM 주소정보변경분 WHERE 이동사유코드 IN ('31', '34')) B
ON (A.관리번호 = B.관리번호)
WHEN MATCHED THEN
UPDATE SET A.도로명코드 = B.도로명코드, A.읍면동일련번호 = B.읍면동일련번호, B.지하여부 = A.지하여부, ……
WHEN NOT MATCHED THEN
INSERT (A.관리번호, A.도로명코드, A.읍면동일련번호, A.지하여부, ……)
VALUES (B.관리번호, B.도로명코드, B.읍면동일련번호, B.지하여부, ……)
/*
폐지 건 처리
- 테이블 관계의 최하위 레벨인 "지번정보” 및 “부가정보"부터 처리
*/
DELETE FROM 지번정보 A
WHERE EXISTS (SELECT 1 FROM 지번정보변경분 C WHERE C.관리번호 = A.관리번호 AND C.일련번호 = A.일련번호 AND C.이동사유코드 = '63')
DELETE FROM 부가정보 A
WHERE EXISTS (SELECT 1 FROM 부가정보변경분 C WHERE C.관리번호 = A.관리번호 AND C.이동사유코드 = '63')
DELETE FROM 주소정보 A
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 C WHERE C.관리번호 = A.관리번호 AND C.이동사유코드 = '63')
주소정보/지번정보/부가정보 현행화(월변동)
/* 신규 건 처리 */
-- 주소정보
INSERT INTO 주소정보 (관리번호, 도로명코드, ……)
SELECT A.관리번호, A.도로명코드, ……
FROM 주소정보변경분 A
WHERE A.이동사유코드 = '31'
AND NOT EXISTS (SELECT 1 FROM 주소정보 B WHERE B.관리번호 = A관리번호)
-- 지번정보
INSERT INTO 지번정보 (관리번호, 일련번호, ……)
SELECT B.관리번호, B.일련번호, ……
FROM 주소정보변경분 A, 지번정보변경분 B
WHERE A.이동사유코드 = '31'
AND A.관리번호 = B.관리번호
AND NOT EXISTS (SELECT 1 FROM 지번정보 C WHERE C.관리번호 = A관리번호)
-- 부가정보
INSERT INTO 부가정보 (관리번호, 행정동코드, ……)
SELECT B.관리번호, B.행정동코드, ……
FROM 주소정보변경분 A, 부가정보변경분 B
WHERE A.이동사유코드 = '31'
AND A.관리번호 = B.관리번호
AND NOT EXISTS (SELECT 1 FROM 부가정보 C WHERE C.관리번호 = A관리번호)
/* 변경 건 처리 */
-- 주소정보변경
UPDATE 주소정보 A
SET (A.도로명코드, A.읍면동일련번호, A.지하여부, ……) =
(SELECT B.도로명코드, B.읍면동일련번호, B.지하여부, ……
FROM 주소정보변경분 B
WHERE B.관리번호 = A.관리번호 AND B.이동사유코드 = '34')
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 C WHERE C.관리번호 = A.관리번호 AND C.이동사유코드 = '34');
-- 지번정보변경
UPDATE 지번정보 A
SET (A.법정동코드, A.시도명, A.시군구명, ……) =
(SELECT C.법정동코드, C.시도명, C.시군구명, ……
FROM 주소정보변경분 B, 지번정보변경분 C
WHERE C.관리번호 = B.관리번호 AND B.관리번호 = A.관리번호 AND C.일련번호 = A.일련번호 AND B.이동사유코드 = '51')
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 D WHERE D.관리번호 = A.관리번호 AND D.일련번호 = A.일련번호 AND D.이동사유코드 = '51');
-- 우편번호변경
UPDATE 부가정보 A
SET (A.우편번호) =
(SELECT C.우편번호
FROM 주소정보변경분 B, 부가정보변경분 C
WHERE C.관리번호 = B.관리번호 AND B.관리번호 = A.관리번호 AND B.이동사유코드 = '70')
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 D WHERE D.관리번호 = A.관리번호 AND D.이동사유코드 = '70');
-- 건물명변경
UPDATE 부가정보 A
SET (A.건축물대장 건물명, A.시군구 건물명) =
(SELECT C.건축물대장 건물명, C.시군구 건물명
FROM 주소정보변경분 B, 부가정보변경분 C
WHERE C.관리번호 = B.관리번호 AND B.관리번호 = A.관리번호 AND B.이동사유코드 = '71')
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 D WHERE D.관리번호 = A.관리번호 AND D.이동사유코드 = '71');
-- 기타부가정보변경
UPDATE 부가정보 A
SET (A.행정동코드, A.행정동명, A.공동주택여부) =
(SELECT C.행정동코드, C.행정동명, C.공동주택여부
FROM 주소정보변경분 B, 부가정보변경분 C
WHERE C.관리번호 = B.관리번호 AND B.관리번호 = A.관리번호 AND B.이동사유코드 = '79')
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 D WHERE D.관리번호 = A.관리번호 AND D.이동사유코드 = '79');
/* 폐지 건 처리 */
-- 주소정보
DELETE FROM 주소정보 A
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 B WHERE B.관리번호 = A.관리번호 AND B.이동사유코드 = '63');
-- 지번정보
DELETE FROM 지번정보 A
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 B WHERE B.관리번호 = A.관리번호 AND B.이동사유코드 = '63');
-- 부가정보
DELETE FROM 부가정보 A
WHERE EXISTS (SELECT 1 FROM 주소정보변경분 B WHERE B.관리번호 = A.관리번호 AND B.이동사유코드 = '63');
/* 관련지번 변경 처리 */
-- '19년8월 월변동분부터 관련지번변동분 제공(관련지번_변동분.txt), 일변동 지번정보 현행화 방식으로 현행화
-- 관련지번 신규
INSERT INTO 지번정보 (관리번호, 일련번호, ……)
SELECT A.관리번호, A.일련번호, ……
FROM 관련지번변경분 A
WHERE A.이동사유코드 IN ('31', '34')
AND NOT EXISTS (SELECT 1 FROM 지번정보 B WHERE B.관리번호 = A관리번호 AND B.일련번호 = A.일련번호);
-- 관련지번 변경
UPDATE 지번정보 A
SET (A.법정동코드, A.시도명, A.시군구명, ……) =
(SELECT B.법정동코드, B.시도명, B.시군구명, ……
FROM 관련지번변경분 B
WHERE B.관리번호 = A.관리번호 AND B.일련번호 = A.일련번호 AND B.이동사유코드 IN ('31', '34') AND ROWNUM = 1
WHERE EXISTS (SELECT 1 FROM 관련지번변경분 C WHERE C.관리번호 = A.관리번호 AND C.일련번호 = A.일련번호 AND C.이동사유코드 IN ('31', '34') );
-- 관련지번 폐지
DELETE FROM 지번정보 A
WHERE EXISTS (SELECT 1 FROM 관련지번변경분 C WHERE C.관리번호 = A.관리번호 AND C.일련번호 = A.일련번호 AND C.이동사유코드 = '63');
주소DB 활용
- 주소DB 활용 SQL(도로명주소 조회 구성)
도로명주소 검색 예시
-- 선행조건 : 도로명코드 테이블에 "도로명"으로 인덱스 구성, 도로명주소 테이블에 도로명코드와 읍면동일련번호로 인덱스 구성
SELECT DISTINCT
A.기초구역번호 AS 새우편번호,
B.시도명||' '||DECODE(B.시군구명,'','', B.시군구명||' ')||
DECODE(B.읍면동구분,'0',B.읍면동명||' ')||
B.도로명||' '||
DECODE(A.지하여부,0,'',1,'지하 ',2,'공중 ')||
A.건물본번||DECODE(A.건물부번,0,'','-'||A.건물부번)||
CASE WHEN (B.읍면동구분 = '0' AND D.공동주택여부 = '0') THEN ''
WHEN (B.읍면동구분 = '0' AND D.공동주택여부 = '1') THEN DECODE(D.시군구건물명, '', '', '(' || D.시군구건물명 || ')' )
WHEN (B.읍면동구분 = '1' AND D.공동주택여부 = '0') THEN '('||B.읍면동명||')'
WHEN (B.읍면동구분 = '1' AND D.공동주택여부 = '1') THEN '('||B.읍면동명 || DECODE(D.시군구건물명, '', '', ',' || D.시군구건물명 ) ||')'
END AS 도로명주소
FROM 도로명주소 A, 도로명코드 B, 부가정보 D
WHERE A.도로명코드 = B.도로명코드
AND A.읍면동일련번호 = B.읍면동일련번호
AND A.관리번호 = D.관리번호
AND B.시도명 LIKE Param1 || '%'
AND B.시군구명 LIKE Param2 || '%'
AND B.도로명 LIKE Param3 || '%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0)
지번 검색 예시
-- 선행조건 : 지번정보 테이블에 "읍면동명"으로 시작되는 인덱스 구성, 도로명주소 테이블에 도로명코드와 읍면동일련번호로 인덱스 구성
SELECT DISTINCT
A.기초구역번호 AS 새우편번호,
B.시도명||' '||DECODE(B.시군구명,'','', B.시군구명||' ')||
DECODE(B.읍면동구분,'0',B.읍면동명||' ')||
B.도로명||' '||
DECODE(A.지하여부,0,'',1,'지하 ',2,'공중 ')||
A.건물본번||DECODE(A.건물부번,0,'','-'||A.건물부번)||
CASE WHEN (B.읍면동구분 = '0' AND D.공동주택여부 = '0') THEN ''
WHEN (B.읍면동구분 = '0' AND D.공동주택여부 = '1') THEN DECODE(D.시군구건물명, '', '', '(' || D.시군구건물명 || ')' )
WHEN (B.읍면동구분 = '1' AND D.공동주택여부 = '0') THEN '('||B.읍면동명||')'
WHEN (B.읍면동구분 = '1' AND D.공동주택여부 = '1') THEN '('||B.읍면동명 || DECODE(D.시군구건물명, '', '', ',' || D.시군구건물명 ) ||')'
END AS 도로명주소
FROM 도로명주소 A, 도로명코드 B, 지번정보 C, 부가정보 D
WHERE A.도로명코드 = B.도로명코드
AND A.읍면동일련번호 = B.읍면동일련번호
AND A.관리번호 = C.관리번호
AND A.관리번호 = D.관리번호
AND C.읍면동명 LIKE Param3 || '%'
AND C.지번본번 = Param4
AND C.지번부번 = NVL(Param5, 0)
도로명주소 정렬방법
SELECT ...
TO_NUMBER(NVL(TRANSLATE(B.도로명, '1234567890'||B.도로명, '1234567890'),0)) ORD1 ,
NVL(REPLACE(REPLACE(B.도로명, TRANSLATE(B.도로명, '1234567890'||B.도로명, '1234567890'),
LPAD(TRANSLATE(B.도로명, '1234567890'||B.도로명, '1234567890'), 9, '0')), B.도로명, '') , '0') AS ORD2,
A.건물본번, A.건물부번
FROM 도로명주소 A, 도로명코드 B, 부가정보 D
WHERE A.도로명코드 = B.도로명코드
AND A.읍면동일련번호 = B.읍면동일련번호
AND A.관리번호 = D.관리번호
AND B.시도명 LIKE Param1 || '%'
AND B.시군구명 LIKE Param2 || '%'
AND B.도로명 LIKE Param3 || '%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0)
ORDER BY ORD1, ORD2, A.건물본번, A.건물부번
도로명주소 표기방법
* 도로명주소 표기방법
- 시/도 + 시/군/구 + 읍/면 + 도로명 + 건물번호(본번-부번) + 상세주소(동/층/호) + (참고항목: 법정동, 공동주택명)
1) 읍/면이고 공동주택인 경우 :
- 시/도 + 시/군/구 + 읍/면 + 도로명 + 건물번호(본번-부번) + 상세주소(동/층/호) + (참고항목: 공동주택명)
ex) 경기도 가평군 가평읍 가화로 164, 201동 102호(휴먼시아)
2) 읍/면이고 공동주택이 아닌 경우(단독주택 또는 일반 건축물) :
- 시/도 + 시/군/구 + 읍/면 + 도로명 + 건물번호(본번-부번) + 상세주소(동/층/호)
ex) 강원도 평창군 대화면 가평로 19-1
3) 동이고 공동주택인 경우 :
- 시/도 + 시/군/구 + 도로명 + 건물번호(본번-부번) + 상세주소(동/층/호) + (참고항목: 법정동, 공동주택명)
ex) 경기도 고양시 덕양구 화중로 164, 512동 1004호(화정동, 은빛마을5단지아파트)
4) 동이고 공동주택이 아닌 경우(단독주택 또는 일반 건축물) :
- 시/도 + 시/군/구 + 도로명 + 건물번호(본번-부번) + 상세주소(동/층/호) + (참고항목: 법정동)
ex) 서울특별시 구로구 중앙로 5, 3층(고척동)