CREATE TABLE Manager
(ManagerID int auto_increment PRIMARY KEY, -- 지역관리자 id
ManagerName varchar(5), -- 지역관리자 이름
MobilePhone varchar(15), -- 지역관리자 전화번호
Email varchar(40), -- 지역관리자 이메일
AreaName varchar(15), -- 담당지역명
Area geometry SRID 0) ; -- 담당지역 폴리곤
INSERT INTO Manager VALUES
(NULL, '존밴이', '011-123-4567', 'johnbann@kinghot.com', '서울 동/북부지역',
ST_GeomFromText('POLYGON((-90 0, -90 90, 90 90, 90 -90, 0 -90, 0 0, -90 0))')) ,
(NULL, '당탕이', '019-321-7654', 'dangtang@kinghot.com', '서울 서부지역',
ST_GeomFromText('POLYGON((-90 -90, -90 90, 0 90, 0 -90, -90 -90))'));
SELECT ManagerName, Area as '당탕이' FROM Manager WHERE ManagerName = '당탕이';
SELECT ManagerName, Area as '존밴이' FROM Manager WHERE ManagerName = '존밴이';
도로 테이블
CREATE TABLE Road
(RoadID int auto_increment PRIMARY KEY, -- 도로 ID
RoadName varchar(20), -- 도로 이름
RoadLine geometry ); -- 도로 선
INSERT INTO Road VALUES
(NULL, '강변북로',
ST_GeomFromText('LINESTRING(-70 -70 , -50 -20 , 30 30, 50 70)'));
SELECT RoadName, ST_BUFFER(RoadLine,1) as '강변북로' FROM Road;
관리자의 담당 체인점 이름과 주소
SELECT M.ManagerName, R.restName, R.restAddr, M.AreaName
FROM Restaurant R, Manager M
WHERE ST_Contains(M.area, R.restLocation) = 1
ORDER BY M.ManagerName;
2호점과 5호점 중복 출력
1호점에 배달이 너무 밀려 1호점과 가까운 다른 지점 출력
SELECT R2.restname, R2.restAddr, R2.restPhone, ST_distance(R1.restLocation, R2.restLocation) AS '1호점과의 거리'
FROM Restaurant R1, Restaurant R2
WHERE R1.restName = '왕매워 짬뽕 1호점'
ORDER BY ST_distance(R1.restLocation, R2.restLocation);
두 관리자의 지역을 모두 합쳐서 출력
SELECT Area INTO @eastNorthSeoul FROM Manager WHERE AreaName = '서울 동/북부지역';
SELECT Area INTO @westSeoul FROM Manager WHERE AreaName = '서울 서부지역';
SELECT ST_Union(@eastNorthSeoul, @westSeoul) AS "모든 관리지역을 합친 범위" ;
두 관리자의 지역중 중복되는 곳만 출력
SELECT Area INTO @eastNorthSeoul FROM Manager WHERE ManagerName = '존밴이';
SELECT Area INTO @westSeoul FROM Manager WHERE ManagerName = '당탕이';
SELECT ST_Intersection(@eastNorthSeoul, @westSeoul) INTO @crossArea ;
SELECT DISTINCT R.restName AS "중복 관리 지점"
FROM Restaurant R, Manager M
WHERE ST_Contains(@crossArea, R.restLocation) = 1;
강변북로에서 30m 이내에 있는 짬뽕집 조회
SELECT ST_Buffer(RoadLine, 30) INTO @roadBuffer FROM Road;
SELECT R.restName AS "강변북로 30M 이내 지점"
FROM Restaurant R
WHERE ST_Contains(@roadBuffer,R.restLocation) = 1;
SELECT ST_Buffer(RoadLine, 30) INTO @roadBuffer FROM Road;
SELECT ST_Buffer(RoadLine, 30) as '강변북로 30m' FROM Road;
SELECT ST_Buffer(R.restLocation, 5) as '체인점' -- 지점을 약간 크게 출력
FROM Restaurant R
WHERE ST_Contains(@roadBuffer, R.restLocation) = 1;
SELECT RoadLine as '강변북로' FROM Road;