๊ฐœ์ธ๊ณต๋ถ€/SQL

20. ๋Œ€ํ•œ๋ฏผ๊ตญ ์ง€์—ญ๋ณ„ ์ƒ๊ถŒ ๋ถ„์„ํ•ด๋ณด๊ธฐ (+์˜ค๋ฅ˜ํ•ด๊ฒฐ)

LEE_BOMB 2021. 10. 4. 17:24
datset

์†Œ์ƒ๊ณต์ธ์‹œ์žฅ์ง„ํฅ๊ณต๋‹จ_์ƒ๊ฐ€(์ƒ๊ถŒ)์ •๋ณด https://www.data.go.kr/data/15083033/fileData.do

์ธ๊ตฌ ์ „์ฒด ์‹œ๊ตฐ๊ตฌ ํ˜„ํ™ฉ https://27.101.213.4/index.jsp#

 

 

ORA-01722 ํ•ด๊ฒฐํ•˜๊ธฐ

์—‘์…€ํŒŒ์ผ์„ ์—ด์–ด์„œ data๊ฐ’์„ ํ™•์ธํ•˜๊ณ , ์ ๋‹นํ•œ ํ˜•์‹(varchar2 > number)๊ณผ ์ˆ˜์น˜(7 > 38)๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋‹ค.

number์˜ ๊ฒฝ์šฐ Precision์€ 1~38์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๊ฐ„๊ณผํ•˜๊ณ  50์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค๊ฐ€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ๋ฒˆ ๋” ๋ดค๋‹ค.

 

 

ORA-00942 ํ•ด๊ฒฐํ•˜๊ธฐ

โ‘  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์—ฐ๊ฒฐ์ด ์•ˆ๋˜์–ด ์žˆ์Œ

โ‘ก ํ…Œ์ด๋ธ”์— ๊ถŒํ•œ์ด ์—†์Œ

โ‘ข ๋งž์ถค๋ฒ•์ด ์˜ค๋ฅ˜ ๋˜๋Š” ์‹ค์ œ๋กœ ํ…Œ์ด๋ธ”์ด ์กด์žฌ ํ•˜์ง€ ์•Š์Œ

โ‘ฃ ํ…Œ์ด๋ธ”์˜ ์•ž์— ์†Œ์œ ์ž๋ฅผ ๋ช…์‹œํ•˜์—ฌ, SELECT ํ•ด์•ผ ํ•จ ( SELECT * FROM ์†Œ์œ ์ž.ํ…Œ์ด๋ธ”๋ช… )

 

DROP TABLE ๋กœ ํ…Œ์ด๋ธ” ์ œ๊ฑฐ ํ›„, ํ…Œ์ด๋ธ” ์žฌ์ƒ์„ฑํ•ด์„œ ํ•ด๊ฒฐ.

 

 

DATA IMPORT ๊ณผ์ •์—์„œ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€

ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€์˜ ์—‘์…€ ํŒŒ์ผ๋งŒ IMPORTํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ตฌ๊ธ€๋งํ•ด๋ดค๋Š”๋ฐ, SQL DEVELOPER์˜ ํ•œ๊ณ„์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ํ…Œ์ด๋ธ”์— ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด์„œ ๊ทธ๋‚˜๋งˆ ์ž‘์—… ์†Œ์š”์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

 

 

 

์˜ค๋Š˜์˜ ๋ชฉํ‘œ!
1. ์ง€์—ญ๋ณ„ ์—…์ข… ๊ฐœ์ˆ˜์™€ ์ข…๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
2. ์ „๊ตญ ๊ฐ์ง€์˜ ํ˜ธํ…”/์ฝ˜๋„ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์€ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.
3. ์ธ๊ตฌ ์ˆ˜ ๋Œ€๋น„ ๋งค์žฅ ๋‹น ์ธ๊ตฌ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
SELECT * FROM POPULATION;
SELECT * FROM COMMERCIAL_AREA;
SELECT COUNT(*) FROM;

 

์นผ๋Ÿผ๋ช… ๋ณ€๊ฒฝ

ALTER TABLE COMMERCIAL_AREA RENAME COLUMN "์ƒ๊ถŒ์—…์ข…๋Œ€๋ถ„๋ฅ˜๋ช…" TO "MAIN";
ALTER TABLE COMMERCIAL_AREA RENAME COLUMN "์ƒ๊ถŒ์—…์ข…์ค‘๋ถ„๋ฅ˜๋ช…" TO "MIDDLE";
ALTER TABLE COMMERCIAL_AREA RENAME COLUMN "์‹œ๋„๋ช…" TO "AREA1";
ALTER TABLE COMMERCIAL_AREA RENAME COLUMN "์‹œ๊ตฐ๊ตฌ๋ช…" TO "AREA2";


์ƒ๊ถŒ TABLE ์‹œ๊ตฐ๊ตฌ๋ช… ์นผ๋Ÿผ ์—ฐ๊ฒฐ

SELECT MAIN, MIDDLE,  AREA1||' '||AREA2 AS AREA FROM COMMERCIAL_AREA;


์ƒ๊ถŒ TABLE ์‹œ๊ตฐ๊ตฌ๋ช… ์นผ๋Ÿผ ํ•ฉ์น˜๊ธฐ
: ๊ฐ€์šด๋ฐ ๋„์–ด์“ฐ๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ ๋ผ์„œ ์ด ๋ฐฉ๋ฒ•์€ ํŒŒ๊ธฐ

SELECT CONCAT(AREA2, AREA1) AS AREA
FROM COMMERCIAL_AREA;


์ง€์—ญ TABLE ์ž๋ฃŒ๊ฐ’ ์ˆ˜์ • (์ง€์—ญ๋ณ„ ๋งค์žฅ ์ˆ˜ ์ถ”๊ฐ€)

SELECT AREA1||' '||AREA2 AS "AREA", MAIN, MIDDLE, COUNT(AREA1||' '||AREA2) AS "TOTAL"
FROM COMMERCIAL_AREA
GROUP BY AREA1, AREA2, MAIN, MIDDLE
ORDER BY AREA1||' '||AREA2;


data ์—‘์…€๋กœ ์ต์ŠคํฌํŠธ ํ›„ ์žฌ๊ฐ€๊ณตํ•ด์„œ ์ž„ํฌํŠธ

SELECT * FROM REAL_COM
ORDER BY AREA;


์ธ๊ตฌ TABLE ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•ด์„œ ์ต์ŠคํฌํŠธ > ์ž„ํฌํŠธ

SELECT AREA, TOTAL
FROM POPULATION;


* ์‹ค์ˆ˜ : ๊ฐ•์›๋„ "๊ฐ•๋ฆ‰์‹œ ๊ฐ•์›๋„"๋กœ ์ˆœ์„œ ๋ฐ”๋€Œ์–ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ ์ˆ˜์ •ํ•˜๊ธฐ

DELETE FROM COMMERCIAL_AREA WHERE AREA2 = '๊ฐ•์›๋„';


* ์‹ค์ˆ˜ : ์ง€์—ญ๋ช… ํ’€๋„ค์ž„ ๊ธธ์ด๊ฐ€ ์ œ๊ฐ๊ฐ์ž„

SELECT SUBSTR(AREA, 1, 15), TOTAL -- 1๋ฒˆ์งธ ์œ„์น˜๋ถ€ํ„ฐ 8๊ฐœ์˜ ๋ฌธ์ž๊นŒ์ง€๋งŒ ์ถ”์ถœํ•˜๊ฒ ๋‹ค
FROM POPULATION;

 

๊ทธ๋ž˜์„œ, data ์—‘์…€๋กœ ์ต์ŠคํฌํŠธ ํ›„, excel์—์„œ ctrl+F๋กœ ์žฌ๊ฐ€๊ณตํ•ด์„œ ์ž„ํฌํŠธํ•˜๊ธฐ๋กœ ํ•จ.
* ์•„์‰ฌ์šด ๋ถ€๋ถ„ : SQL์•ˆ์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์—ˆ์„๊นŒ? ์ง์ ‘ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•˜๋‹ค๋ฉด?

SELECT * FROM REAL_POP
ORDER BY AREA;


* ์ธ๊ตฌ์™€ ์ƒ์—…ํ˜„ํ™ฉ INNER JOIN
: ๊ฐ’์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

SELECT *
FROM REAL_COM a
LEFT JOIN REAL_POP b
ON a.AREA = b.AREA;


ํ•ด๊ฒฐ!

๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ์ œ๊ฐ๊ฐ์ด์–ด์„œ ๊ณต๋ฐฑ๋งŒ ์ถœ๋ ฅ๋œ ๊ฑฐ์˜€๋‹ค. ์–‘์ชฝ ๊ฐ’์„ ์ž๋ฅด๊ณ , ์‚ฌ๋ก€๋ฅผ ์ •๊ทœํ™”ํ•˜๋ฉด ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

SELECT LENGTH (AREA)
FROM REAL_POP; -- 6~14
SELECT LENGTH (AREA)
FROM REAL_COM; --7~14
SELECT a.AREA, a.MAIN, a.MIDDLE, a.TOTAL, b.TOTAL "POP_TOTAL"
FROM REAL_COM a
LEFT JOIN REAL_POP b
ON UPPER(TRIM(a.AREA)) = UPPER(TRIM(b.AREA));

์ฐธ๊ณ  : https://keizwer.tistory.com/190
https://stackoverflow.com/questions/26239760/inner-join-on-varchar

 

 

 

 


[๋ฐ์ดํ„ฐ ์ด์šฉ๋ฐฉ๋ฒ•] ์„œ์šธ์‹œ ๊ฐ•๋‚จ๊ตฌ์—์„œ ์ œ์ผ ๋งŽ์€ ์ˆ˜์˜ ์—…์ข… ์•Œ์•„๋ณด๊ธฐ

SELECT a.AREA, a.MAIN, a.MIDDLE, a.TOTAL, b.TOTAL "POP_TOTAL"
FROM REAL_COM a
LEFT JOIN REAL_POP b
ON UPPER(TRIM(a.AREA)) = UPPER(TRIM(b.AREA))
WHERE a.AREA LIKE '%์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ%'
ORDER BY a.TOTAL DESC;

[๊ฒฐ๊ณผ] ์Œ์‹/ํ•œ์‹ 4135๊ฐœ์˜ ๊ฐ€๊ฒŒ ์กด์žฌ

 

 

์ „๊ตญ ๊ฐ์ง€์—์„œ ํ˜ธํ…”/์ฝ˜๋„ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ์€ ์ง€์—ญ ์ˆœ์„œ ์•Œ์•„๋ณด๊ธฐ

SELECT a.AREA, a.MAIN, a.MIDDLE, a.TOTAL, b.TOTAL "POP_TOTAL"
FROM REAL_COM a
LEFT JOIN REAL_POP b
ON UPPER(TRIM(a.AREA)) = UPPER(TRIM(b.AREA))
WHERE a.MIDDLE LIKE '%ํ˜ธํ…”%'
ORDER BY a.TOTAL DESC;

[๊ฒฐ๊ณผ] ์ œ์ฃผํŠน๋ณ„์ž์น˜๋„ ์ œ์ฃผ์‹œ๋Š” ์ „๊ตญ์—์„œ ํ˜ธํ…”/์ฝ˜๋„ ์ˆ™๋ฐ•์‹œ์„ค์ด ์ œ์ผ ๋งŽ์€ ์ง€์—ญ์ด๋‹ค.

 

 

์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ์™€ ๋ถ€์‚ฐ๊ด‘์—ญ์‹œ์˜ ํ•ด์šด๋Œ€๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๋Œ€๋น„ ์นดํŽ˜ ๋‹น ์ธ๊ตฌ ์ˆ˜๋ฅผ ๋น„๊ตํ•ด๋ณด๊ธฐ

SELECT a.AREA, a.MAIN, a.MIDDLE, a.TOTAL, b.TOTAL "POP_TOTAL", ROUND(b.TOTAL/a.TOTAL, 2) "๋งค์žฅ๋‹น ์ธ๊ตฌ ์ˆ˜"
FROM REAL_COM a
LEFT JOIN REAL_POP b
ON UPPER(TRIM(a.AREA)) = UPPER(TRIM(b.AREA))
WHERE (ROUND(b.TOTAL/a.TOTAL, 2) IS NOT NULL)
AND b.AREA LIKE '%์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ%' AND a.MIDDLE LIKE '%์นดํŽ˜%';

[๊ฒฐ๊ณผ] ์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ์˜ ๋งค์žฅ๋‹น ์ธ๊ตฌ์ˆ˜๋Š” 218๋ช…, ๋ถ€์‚ฐ๊ด‘์—ญ์‹œ ํ•ด์šด๋Œ€๊ตฌ์˜ ๋งค์žฅ๋‹น ์ธ๊ตฌ ์ˆ˜๋Š” 492๋ช…์ด๋‹ค.

๊ฐ•๋‚จ๊ตฌ ์ธ๊ตฌ ์ˆ˜ ๋Œ€๋น„ ์นดํŽ˜์˜ ์ˆ˜๊ฐ€ ํ›จ์”ฌ ๋งŽ์œผ๋ฏ€๋กœ ๊ฐ•๋‚จ๊ตฌ์˜ ์นดํŽ˜๊ฐ€ ๋œ ํ˜ผ์žกํ•˜๋‹ค.

 

 

 

 



์ฐธ๊ณ  : https://burning-dba.tistory.com/77

https://wikidocs.net/71334