- 데이터베이스를 구축하고
- 데이터의 구조 및 이름을 변경
-- csv자료를 불러와서 자료를 세팅하는 과정
-- cctv범죄검거율.csv 자료(서울지역만임)를 cctv 데이터베이스에
-- Population_in_Seoul.csv 자료를 불러와서 population 데이터베이스에 할당
# 데이터 베이스 생성 및 세팅
SHOW DATABASES;
CREATE DATABASE exam ;
USE exam;
SHOW DATABASES;
SHOW TABLES;
CREATE TABLE cctv
(기관명 VARCHAR(5) PRIMARY KEY,
소계 INT,
2013년도 INT,
2014년도 INT,
2015년도 INT,
2016년도 int
);
SHOW TABLES;
DESCRIBE cctv;
SELECT * FROM cctv;
LOAD DATA INFILE 'c:/data/CCTV범죄검거율.csv'
INTO TABLE CCTV
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
SELECT * FROM cctv LIMIT 2;
SELECT COUNT(*) 건수 FROM cctv;
SELECT *
FROM cctv
WHERE 기관명 IS NULL
OR 소계 IS NULL
OR 2013년도 IS NULL
OR 2014년도 IS NULL
OR 2015년도 IS NULL
OR 2016년도 IS NULL;
CREATE TABLE population (
gu VARCHAR(50) PRIMARY KEY,
poptot INT,
Koreans INT,
foreigners INT,
elderly_people INT
);
DESCRIBE population;
DESCRIBE cctv;
INSERT population INTO
INSERT INTO population (gu, poptot, Koreans, foreigners, elderly_people)
VALUES
('종로구', 162820, 153589, 9231, 25425),
('중구', 133240, 124312, 8928, 20764),
('성동구', 311244, 303380, 7864, 39997),
('광진구', 372164, 357211, 14953, 42214),
('동대문구', 369496, 354079, 15417, 54173),
('중랑구', 414503, 409882, 4621, 56774),
('성북구', 461260, 449773, 11487, 64692),
('강북구', 330192, 326686, 3506, 54813),
('노원구', 569384, 565565, 3819, 71941),
('은평구', 494388, 489943, 4445, 72334),
('서대문구', 327163, 314982, 12181, 48161),
('양천구', 479978, 475949, 4029, 52975),
('강서구', 603772, 597248, 6524, 72548),
('금천구', 255082, 236353, 18729, 32970),
('영등포구', 402985, 368072, 34913, 52413),
('관악구', 525515, 507203, 18312, 68082),
('서초구', 450310, 445994, 4316, 51733),
('강남구', 570500, 565550, 4950, 63167),
('송파구', 667483, 660584, 6899, 72506),
('강동구', 453233, 449019, 4214, 54622);
SELECT * FROM population;
SELECT COUNT(*) 건수 FROM population;
# 만든 데이터 베이스 만져보기 1
USE exam;
SELECT * FROM cctv
order by 소계 ASC
LIMIT 3;

# 2
SELECT 기관명, 소계, (2014년도 + 2015년도 + 2016년도) AS total_2014_2016,
(2014년도 + 2015년도 + 2016년도) - 2013년도 AS increase
FROM cctv
ORDER BY increase DESC
LIMIT 3;

# 3
# 3-1
SELECT gu, poptot, Koreans, foreigners, elderly_people,
CASE
WHEN poptot > 200000 THEN '대도시'
ELSE '중소도시'
END AS increase_level
FROM population

# 3-2
ALTER TABLE population
ADD COLUMN increase_level VARCHAR(50)
ALTER TABLE population
DROP COLUMN increase_level;
UPDATE population
SET increase_level = CASE
WHEN poptot > 200000 THEN '대도시'
ELSE '중소도시'
END;
SELECT
CASE
WHEN poptot > 200000 THEN '대도시'
ELSE '중소도시'
END AS 도시규모,
SUM(poptot) AS 인구집계
FROM population
GROUP BY
CASE
WHEN poptot > 200000 THEN '대도시'
ELSE '중소도시'
END;

# 3-3
SELECT
CASE
WHEN poptot > 200000 THEN '대도시'
ELSE '중소도시'
END AS 도시규모,
SUM(poptot) AS 인구집계,
ROW_NUMBER() OVER (ORDER BY 인구집계 DESC) AS 'RANK'
FROM population
GROUP BY
CASE
WHEN poptot > 200000 THEN '대도시'
ELSE '중소도시'
END;

# 4
SELECT gu, COUNT(*) AS 'cnt'
FROM population
GROUP BY gu
HAVING COUNT(*) > 1;

# 5
SELECT *
FROM cctv AS C
INNER JOIN population AS P
ON C.`기관명`=P.gu

# 6
SELECT C.*, P.poptot
FROM cctv AS C
RIGHT JOIN population AS P
ON C.`기관명`=P.gu
SELECT c.기관명, p.*
FROM cctv c
left JOIN population p ON c.기관명 = p.gu
WHERE p.gu IS NULL;

USE exam;
SELECT * FROM cctv
SELECT * FROM population