건물DB
주소정보를 건물 단위로 제공합니다. 아파트 등 집합건물의 경우 단지 내 동 단위 까지 정보가 제공됩니다.
건물DB 구축 및 현행화
- DB 레이아웃
도로명코드 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 시군구코드 | 5 | 문자 | PK1 | 도로명코드 : 시군구코드(5) + 도로명번호(7) |
2 | 도로명번호 | 7 | 문자 | ||
3 | 도로명 | 80 | 문자 | ||
4 | 영문도로명 | 80 | 문자 | ||
5 | 읍면동일련번호 | 2 | 문자 | PK2 | |
6 | 시도명 | 40 | 문자 | ||
7 | 시군구명 | 40 | 문자 | ||
8 | 읍면동구분 | 1 | 문자 | 0: 읍면, 1:동, 2:미부여 | |
9 | 읍면동코드 | 3 | 문자 | 법정동기준읍면동코드 | |
10 | 읍면동명 | 40 | 문자 | ||
11 | 상위도로명번호 | 7 | 문자 | NULL | |
12 | 상위도로명 | 80 | 문자 | NULL | |
13 | 사용여부 | 1 | 문자 | 0:사용, 1:미사용 | |
14 | 변경이력사유 | 1 | 문자 | 0:도로명변경, 1:도로명폐지, 4:영문명변경 | |
15 | 변경이력정보 | 14 | 문자 | 도로명코드(12)+ 읍면동일련번호(2) ※ 신규정보일경우“신규”로표시 |
|
16 | 영문시도명 | 40 | 문자 | ||
17 | 영문시군구명 | 40 | 문자 | ||
18 | 영문읍면동명 | 40 | 문자 | ||
19 | 고시일자 | 8 | 문자 | 도로명코드 고시일자(YYYYMMDD) | |
20 | 말소일자 | 8 | 문자 | 도로명코드 말소일자(YYYYMMDD) |
건물정보 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 법정동코드 | 10 | 문자 | ||
2 | 시도명 | 40 | 문자 | ||
3 | 시군구명 | 40 | 문자 | ||
4 | 법정읍면동명 | 40 | 문자 | ||
5 | 법정리명 | 40 | 문자 | ||
6 | 산여부 | 1 | 문자 | 0:대지, 1:산 | |
7 | 지번본번(번지) | 4 | 숫자 | ||
8 | 지번부번(호) | 4 | 숫자 | ||
9 | 도로명코드 | 12 | 문자 | 시군구코드(5)+도로명번호(7) | |
10 | 도로명 | 80 | 문자 | ||
11 | 지하여부 | 1 | 문자 | 0:지상, 1:지하, 2:공중 | |
12 | 건물본번 | 5 | 숫자 | ||
13 | 건물부번 | 5 | 숫자 | ||
14 | 건축물대장건물명 | 40 | 문자 | ||
15 | 상세건물명 | 100 | 문자 | ||
16 | 건물관리번호 | 25 | 문자 | PK | |
17 | 읍면동일련번호 | 2 | 문자 | ||
18 | 행정동코드 | 10 | 문자 | 참고용 | |
19 | 행정동명 | 20 | 문자 | 참고용 | |
20 | 우편번호 | 5 | 문자 | 2015. 8. 1일부 기초구역번호(신우편번호)제공 | |
21 | 우편일련번호 | 3 | 문자 | 2015. 8. 1일부 NULL | |
22 | 다량배달처명 | 40 | 문자 | 2015. 8. 1일부 NULL | |
23 | 이동사유코드 | 2 | 문자 | 31:건물번호부여, 34:변동, 63:건물번호폐지 72:건물군내일부건물폐지 73:건물군내일부건물생성 |
|
24 | 고시일자 | 8 | 문자 | YYYYMMDD | |
25 | 변동전도로명주소 | 25 | 문자 | NULL | |
26 | 시군구용건물명 | 200 | 문자 | ||
27 | 공동주택여부 | 1 | 문자 | 0:비공동주택, 1:공동주택 | |
28 | 기초구역번호 | 5 | 문자 | 2015. 8. 1일부 이용되는 신우편번호 | |
29 | 상세주소여부 | 1 | 문자 | 0:미부여, 1:부여 | |
30 | 비고1 | 15 | 문자 | ||
31 | 비고2 | 15 | 문자 |
관련지번 DB 레이아웃
순번 | 컬럼명 | 크기 | 형식 | PK | 비고 |
---|---|---|---|---|---|
1 | 법정동코드 | 10 | 문자 | ||
2 | 시도명 | 40 | 문자 | ||
3 | 시군구명 | 40 | 문자 | ||
4 | 법정읍면동명 | 40 | 문자 | ||
5 | 법정리명 | 40 | 문자 | ||
6 | 산여부 | 1 | 문자 | 0:대지, 1:산 | |
7 | 지번본번(번지) | 4 | 숫자 | ||
8 | 지번부번(호) | 4 | 숫자 | ||
9 | 도로명코드 | 12 | 문자 | PK1 | 시군구코드(5)+도로명번호(7) |
10 | 지하여부 | 1 | 문자 | PK2 | 0:지상, 1:지하, 2:공중 |
11 | 건물본번 | 5 | 숫자 | PK3 | |
12 | 건물부번 | 5 | 숫자 | PK4 | |
13 | 지번일련번호 | 10 | 숫자 | PK5 | |
14 | 이동사유코드 | 2 | 문자 | 31:생성, 34:변동, 63:폐지 |
- 주소변동자료연계를 통한 현행화 체계 구축
도로명코드 현행화
-- 신규가 아닌 경우는 모두 UPDATE 처리, 폐지도 사용여부만 'N'으로 변경함
UPDATE 도로명코드 A
SET (A.도로명, A.영문도로명 , A.사용여부, A.말소일자) =
(SELECT B.도로명, B.영문도로명, B.사용여부, B.말소일자 FROM 도로명코드변경분 B
WHERE B.시군구코드 = A.시군구코드 AND B.도로명번호 = A.도로명번호 AND B.읍면동일련번호 = A.읍면동일련번호 AND ROWNUM=1)
WHERE (A. 시군구코드, A.도로명번호, A.읍면동일련번호)
IN (SELECT C.시군구코드, C.도로명번호, C.읍면동일련번호 FROM 도로명코드변경분 C WHERE NVL(C.변경이력정보, 'X') <> '신규')
-- 신규 생성된 도로명코드인 경우
INSERT INTO 도로명코드
(시군구코드, 도로명번호, 도로명, 영문도로명, 읍면동일련번호, 시도명, 시군구명, 읍면동구분, 읍면동코드, 읍면동명, 상위도로명번호,상위도로명, 사용여부
, 변경이력사유, 변경이력정보, 영문시도명, 영문시군구명, 영문읍면동명, 고시일자, 말소일자)
SELECT 시군구코드, 도로명번호, 도로명, 영문도로명, 읍면동일련번호, 시도명, 시군구명, 읍면동구분, 읍면동코드, 읍면동명, 상위도로명번호,상위도로명, 사용여부
, 변경이력사유, 변경이력정보, 영문시도명, 영문시군구명, 영문읍면동명, 고시일자, 말소일자
FROM 도로명변경분 WHERE NVL(변경이력정보, 'X') = '신규'
건물정보/관련지번 현행화
/*
신규 건 처리
- 테이블 관계의 최상위 레벨인 “건물정보"부터 처리
- 신규분외에 누락된 자료가 있을 경우를 위해 UPDATE 후 INSERT하도록 구현
*/
-- 건물정보 처리
UPDATE 건물정보 A
SET (A.법정동코드, A.시도명, A.시군구명, ……) =
(SELECT 법정동코드, 시도명, 시군구명, ……FROM 건물정보변경분 B
WHERE B.건물관리번호 = A.건물관리번호 AND B.이동사유코드 IN ('31', '34','73') AND ROWNUM = 1)
WHERE EXISTS (SELECT 1 FROM 건물정보변경분 C WHERE C.건물관리번호 = A.건물관리번호 AND C.이동사유코드 IN ('31', '34', '73'))
INSERT INTO 건물정보 (법정동코드, 시도명, 시군구명……)
SELECT 법정동코드, 시도명, 시군구명 …… FROM 건물정보변경분 A
WHERE A.이동사유코드 IN ('31', '34', '73') 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.건물본번 = A.건물본번 AND 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.건물본번 = A.건물본번
AND 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.지하여부 AND B.건물본번 = A.건물본번
AND B.건물부번 = A.건물부번 AND B.지번일련번호= A.지번일련번호 )
/* ORACLE 9i이상 버전에서 MERGE문 사용 예시 */
MERGE INTO 건물정보 A
USING (SELECT 법정동코드, 시도명, 시군구명, 법정읍면동명...... FROM 건물정보변경분 WHERE 이동사유코드 IN ('31', '34', '73')) B
ON (A.건물관리번호 = B.건물관리번호)
WHEN MATCHED THEN
UPDATE SET A.법정동코드 = B.법정동코드, 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 관련지번변경분 C WHERE C.도로명코드 = A.도로명코드 AND C.지하여부 = A.지하여부 AND C.건물본번 = A.건물본번
AND C.건물부번 = A.건물부번 AND C.지번일련번호= A.지번일련번호 AND C.이동사유코드 = '63' )
-- 건물정보처리
DELETE FROM 건물정보 A
WHERE EXISTS (SELECT 1 FROM 건물정보변경분 C WHERE C.건물관리번호 = A.건물관리번호 AND C.이동사유코드 IN ('63','72'))
건물DB 활용
- 건물DB를 활용 SQL
주소와 지번정보로 매칭데이터 구성
CREATE VIEW 요약주소VIEW AS
SELECT A.법정동코드,
A.시도명, A.시군구명, A.법정읍면동명, A.도로명코드,
A.도로명, A.지하여부, A.건물본번, A.건물부번, A.시군구건물명,
A.시도명 AS 지번_시도명,
A.시군구명 AS 지번_시군구명, A.법정읍면동명 AS 지번_읍면동명, A.법정리명 AS 지번_법정리명,
A.산여부, A.지번본번, A.지번부번,
A.기초구역번호(새우편번호), A.공동주택여부, A.읍면동일련번호 , Y.읍면동구분
FROM 건물정보 A, 도로명코드 Y
WHERE A.도로명코드 = Y.시군구코드||Y.도로명번호 /* 도로명코드 = 시군구코드(5) +도로명번호(7) */
AND A.읍면동일련번호 = Y.읍면동일련번호
UNION
SELECT A.법정동코드,
A.시도명, A.시군구명, A.읍면동명, A.도로명코드,
A.도로명, A.지하여부, A.건물본번, A.건물부번, A.시군구건물명,
X.시도명 AS 지번_시도명,
X.시군구명 AS 지번_시군구명, X.법정읍면동명 AS 지번_읍면동명, X.법정리명 AS 지번_법정리명,
X.산여부, X.지번본번, X.지번부번,
A.기초구역번호(새우편번호), A.공동주택여부, A.읍면동일련번호 , Y.읍면동구분
FROM 건물정보 A, 관련지번 X, 도로명코드 Y
WHERE A.도로명코드 = X.도로명코드
AND A.지하여부 = X.지하여부
AND A.건물본번 = X.건물본번
AND A.건물부번 = X.건물부번
AND A.도로명코드 = Y.시군구코드||Y.도로명번호
AND A.읍면동일련번호 = Y.읍면동일련번호
도로명주소 검색
SELECT DISTINCT
A.기초구역번호 AS 새우편번호,
A.시도명 || ' ' ||
DECODE(A.시군구명,'','', 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 도로명주소
FROM 요약주소VIEW A
WHERE A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 LIKE Param3||'%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0)
지번주소 검색
SELECT DISTINCT
A.기초구역번호 AS 새우편번호,
A.시도명 || ' ' ||
DECODE(A.시군구명,'','', 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 도로명주소
FROM 요약주소VIEW A
WHERE A.지번_시도명 LIKE Param1||'%'
AND A.지번_시군구명 LIKE Param2||'%'
AND A.지번_읍면동명 LIKE Param3||'%'
AND A.산여부 = Param4
AND A.지번본번 = Param5
AND A.지번부번 = NVL(Param6,0)
- 건물DB활용 TIP(오류방지처리, 주소정렬방법)
검색조건에 건물부번 입력시 검색되지 않는 오류방지 방법
SELECT A.기초구역번호 AS 새우편번호,
A.시도명 || ' ' ||
DECODE(A.시군구명,'','', 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 도로명주소
FROM 요약주소VIEW A
WHERE A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 LIKE Param3||'%'
AND A.건물본번||DECODE(A.건물부번, 0, '', '-'||A.건물부번) LIKE Param4||'%'
동일주소 중복표기 방지 방법
SELECT DISTINCT
A.기초구역번호 AS 새우편번호,
A.시도명 || ' ' ||
DECODE(A.시군구명,'','', 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 도로명주소
FROM 요약주소VIEW A
WHERE A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 LIKE Param3||'%'
AND A.건물본번 = Param4
AND A.건물부번 = NVL(Param5,0)
도로명주소 정렬방법
SELECT ....
TO_NUMBER(NVL(TRANSLATE(A.도로명, '1234567890'||A.도로명, '1234567890'),0)) ORD1 ,
NVL(REPLACE(REPLACE(A.도로명, TRANSLATE(A.도로명, '1234567890'||A.도로명, '1234567890'),
LPAD(TRANSLATE(A.도로명, '1234567890'||A.도로명, '1234567890'), 9, '0')), A.도로명, '') , '0') AS ORD2,
A.건물본번, A.건물부번
FROM 요약주소VIEW A
WHERE A.시도명 LIKE Param1||'%'
AND A.시군구명 LIKE Param2||'%'
AND A.도로명 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층(고척동)