๋ชฉ์ฐจ
๋ชฉ์ฐจ1. sql์ด๋2. sql ๊ธฐ๋ณธ๊ตฌ์กฐ3. ํ
์ด๋ธ ๋ง๋ค๊ธฐ4. ๊ธฐ์กด ๊ทธ๋ํ๋ฅผ ๊ฐ์ ธ์์ ํ
์ด๋ธ ๋ง๋ค๊ธฐ5. ๋ฐ์ดํฐ ์
๋ ฅํ๊ธฐ6. ํ๊ท , ๋ถ์ฐ, ๊ฐ๋จํ ์ซ์ ์ธ๊ธฐ7. ์ ์นผ๋ผ ์ด๋ฆ ๋ถ์ฌ8. AND์ OR9. ๋ฐ์ดํฐ ์ ๋ ฌ10. ๊ทธ๋ฃน๋ณ๋ก ์ฐ์ฐ
1. sql์ด๋
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์
๋๋ค.
ย
2. sql ๊ธฐ๋ณธ๊ตฌ์กฐ
sql ๊ธฐ๋ณธ ๊ตฌ์กฐ
proc sql; /*SQL ๋ฌธ์ฅ*/ quit;
sql ๊ธฐ๋ณธ ๊ตฌ์กฐ
PROC SQL; CREATE TABLE AS SELECT FROM WHERE GROUP BY HAVING ORDER BY
ย
์ฃผ์์ฌํญ : WHERE ๊ณผ GROUP BY ์ ์์๊ฐ ๋ค๋ฐ๋๋ค๋ฉด ์๋ฌ๊ฐ ๋๊ฒ ๋ฉ๋๋ค.
ย
3. ํ ์ด๋ธ ๋ง๋ค๊ธฐ
PROC SQL; CREATE TABLE ๋ฐ์ดํฐ์ (๋ณ์๋ช CHAR(12) ,๋ณ์๋ช NUM ) ; QUIT;
ย
PROC SQL; CREATE TABLE mysas.table2 (NAME CHAR(12) ,AGE NUM ,HEIGHT NUM ,WEIGHT NUM ,ADDR CHAR) ; QUIT;
ย
ย
4. ๊ธฐ์กด ๊ทธ๋ํ๋ฅผ ๊ฐ์ ธ์์ ํ ์ด๋ธ ๋ง๋ค๊ธฐ
PROC SQL; CREATE TABLE ํ ์ด๋ธ AS SELECT ๋ณ์, ๋ณ์, ๋ณ์ FROM ๊ธฐ์กด ํ ์ดํฐ์ ; QUIT;
ย
PROC SQL; CREATE TABLE mysas.table1 AS SELECT id, name, class_ FROM mysas.subject_test1_1 ; QUIT;
ย
ย
5. ๋ฐ์ดํฐ ์ ๋ ฅํ๊ธฐ
TABLE2๋ฅผ ๊ฐ์ ธ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๋๋ก ํ๊ฒ ์ต๋๋ค.
1) ๋งค ํ๋ง๋ค ์
๋ ฅํ ์นผ๋ผ๋ช
์ ์ง์ ํฉ๋๋ค.
PROC SQL; INSERT INTO ๋ฐ์ดํฐ์ SET ๋ณ์๋ช =๊ฐ, ๋ณ์๋ช =๊ฐ ; QUIT;
ย
proc sql; insert into mysas.table2 set NAME='ํ๊ธธ๋', AGE=20, HEIGHT=180, WEIGHT=70, ADDR='JEJU' ; quit; proc print data=mysas.table2; run;
ย
ย
๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ ์นผ๋ผ์ ์ง์ ํ์ง ์์ผ๋ฏ๋ก, ์นผ๋ผ์๋งํผ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
ย
2) ๋๋ฝ๊ฐ์ด ์๋๋ผ๋ VALUE๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์
๋ ฅํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
INSERT INTO TEST (XXX,YYY,ZZZ) VALUE(โAAAโ,โBBBโ,111);
ย
proc sql; insert into mysas.table2(NAME, AGE, ADDR) values('๊น๊ธธ์', 55 ,'SEOUL') ; run; proc print data=mysas.table2; run;
ย
ย
์ฌ์น์ฐ์ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
PROC SQL; CREATE TABLE ํ ์ด๋ธ AS SELECT ๋ณ์, ๋ณ์+๋ณ์ FROM ๊ธฐ์กด ํ ์ดํฐ์ ; QUIT;
ย
proc sql; create table mysas.table3 as select NAME, HEIGHT / WEIGHT from mysas.table2 ; quit; PROC PRINT DATA=mysas.table3; run;
ย
ย
+(๋ํ๊ธฐ), -(๋บ์
), *(๊ณฑํ๊ธฐ), /(๋๋๊ธฐ)
์ฌ์น์ฐ์ฐ
์ ์ด์ฉํ์ค ์ ์์ต๋๋ค.ย
6. ํ๊ท , ๋ถ์ฐ, ๊ฐ๋จํ ์ซ์ ์ธ๊ธฐ
SELECT SUM(๋ณ์), SUM(๋ณ์1,๋ณ์2), MEAN(๋ณ์), MIDIAN(๋ณ์), MIN(๋ณ์), MAX(๋ณ์), VAR(๋ณ์), STD(๋ณ์), COUNT(๋ณ์), COUNT(๋ณ์1,๋ณ์2)
SUM(XXX,YYY)
: ์นผ๋ผXXX์ YYY์ ๊ฐ์ ๋ชจ๋ ๋ํ๋ ๊ฒ์ ๋๋ค.
MEAN(XXX)
: ์นผ๋ผXXX์ ํ๊ท ๊ฐ์ ๊ตฌํฉ๋๋ค.
MIDIAN(XXX)
: ์นผ๋ผXXX์ ์ค์๊ฐ์ ๊ตฌํฉ๋๋ค.
MIN(XXX)
: ์นผ๋ผXXX์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ตฌํฉ๋๋ค.
MAX(XXX)
: ์นผ๋ผXXX์์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํฉ๋๋ค.
VAR(XXX)
: ์นผ๋ผXXX์ ๋ถ์ฐ์ ๊ตฌํฉ๋๋ค.
STD(XXX)
: ์นผ๋ผXXX์ ํ์คํธ์ฐจ๋ฅผ ๊ตฌํฉ๋๋ค.
ย
proc sql; create table mysas.table3 as select NAME, sum(HEIGHT,WEIGHT) from mysas.table2 ; quit; PROC PRINT DATA=mysas.table3; run;
ย
ย
๋ค์์ผ๋ก
SUM(HEIGHT,WEIGHT)
์ ๋ณด๊ฒ ์ต๋๋ค. ์นผ๋ผ TEMA001์ด ์์ฑ๋์ต๋๋ค. ๊ฐ ํ์์ ์นผ๋ผHEIGHT์ ์นผ๋ผWEIGHT๋ฅผ ๋ํฉ๋๋ค. ๊ทธ๋์ ๊ฐ๊ฐ์ ํ์ด ๊ฐ์ด ๋ค๋ฆ
๋๋ค. ๋ค๋ง ํน์ด์ ์ด ์ฐ๋ฆฌ๋ ๋ถ๋ช
SELECT๋ช
๋ น์ด์์ ๋ณ์HEIGHT์ WEIGHT๋ฅผ ์ ํํ์ง ์์๋ค๋ ์ ์
๋๋ค.์ฌ๊ธฐ์ SQL๋ช
๋ น์ด์ ํน์ง์ ๋ณผ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ SELECT๋ก ์นผ๋ผWEIGHT์ ํํํ์ง ์๋๋ผ๋, FROM ํ
์ด๋ธ์ ์นผ๋ผWEIGHT๊ฐ ์์ ๊ฒฝ์ฐ, SQL์ ์ด๋ฅผ ์ธ์ํ๊ณ ๊ณ์ฐํฉ๋๋ค.
SELECT๋ช
๋ น์ด๋ ์นผ๋ผ์ ํํํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ ๋ง์ ํ๋ ์
์
๋๋ค.
ย
7. ์ ์นผ๋ผ ์ด๋ฆ ๋ถ์ฌ
PROC SQL; CREATE TABLE TEST AS SELECT ๋ณ์๋ช , ๊ธฐ์กด๋ณ์๋ช AS ์๋ก์ด๋ณ์๋ช FROM SASHELP.CLASS ; QUIT;
ย
PROC SQL; CREATE TABLE mysas.table4 AS SELECT NAME, _TEMA001 AS HW FROM mysas.table3 ; QUIT;
ย
ย
ย
ํน์ ๋ฐ์ดํฐ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
PROC SQL; CREATE TABLE mysas.table5 AS SELECT NAME, AGE, ADDR FROM mysas.table2 WHERE AGE=20 ; QUIT;
ย
ย
8. AND์ OR
PROC SQL; CREATE TABLE mysas.table6 AS SELECT NAME, AGE, HEIGHT FROM mysas.table2 WHERE AGE=20 AND ADDR='JEJU' ; QUIT;
ย
ย
9. ๋ฐ์ดํฐ ์ ๋ ฌ
PROC SQL; CREATE TABLE mysas.table7 AS SELECT * FROM mysas.subject_test1 ORDER BY score ; QUIT;
ย
ย
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
ORDER BY
๊ตฌ๋ฌธ์ ํตํด์ ์ ๋ ฌ์ ํ ๋ ์นผ๋ผAGE๋ง ๋ฐ๋๋ ๊ฒ ์๋๋ผ ์ ์ฒด ์นผ๋ผ
์ด ๋ชจ๋ ํจ๊ป ์ด๋ํฉ๋๋ค.ย
๋ด๋ฆผ์ฐจ์
์ผ๋ก ์ ๋ ฌ์ ํ๋ ค๋ฉด โORDER BY AGE DESC'
๋ฅผ ์ฌ์ฉํฉ๋๋ค.`PROC SQL; CREATE TABLE mysas.table7 AS SELECT * FROM mysas.subject_test1 ORDER BY score desc ; QUIT;
ย
ย
์ฌ๋ฌ ๊ฐ ์นผ๋ผ์ ๋์์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
' , '
๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ๊ตฌ๋ถํด์ค๋๋ค.ORDER BY name, score: name๋ฅผ ์ ๋ ฌํ๊ณ , name๋ณ๋ก score์ ์ ๋ ฌํฉ๋๋ค.
ย
10. ๊ทธ๋ฃน๋ณ๋ก ์ฐ์ฐ
ํด๋์ค๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ ๋ฐ๋ณ๋ก score ์ ์๋ฅผ ๋ด๊ณ ๋ณ์๋ช
์ sum_score์ผ๋ก ์ง์ ํด ์ฃผ์์ต๋๋ค.
PROC SQL; CREATE TABLE mysas.table9 AS SELECT *, SUM(score) AS sum_score FROM mysas.subject_test1 GROUP BY class_ ; QUIT;
ย
ย
๊ทธ๋ฃน๋ณ ํน์ ๋ฐ์ดํฐ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
PROC SQL; CREATE TABLE mysas.table10 AS SELECT *, SUM(score) AS sum_score FROM mysas.subject_test1 GROUP BY class_ HAVING sum_score>=175 ; QUIT;
GROUP BY
: ๋ช
๋ น์ด๋ก ์์ฑ๋ ๊ฐ์์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ง์ ์ถ์ถํฉ๋๋ค.ย
ย
๋ง์ฝ GROUP BY๋ช
๋ น์ด ๋ค์์ WHERE๋ช
๋ น์ด๋ฅผ ์ธ ๊ฒฝ์ฐ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ ๋ค๊ณ GROUP BY๋ช
๋ น์ด ์์ชฝ์ WHERE๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
ย
WHERE sum_score >= 175 GROUP BY class_
ย
GROUP BY๋ช
๋ น์ด ๋ค์์๋ ๋ฐ๋์
HAVING
๋ช
๋ น์ด๊ฐ ๋์์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ SAS SQL์ ๋ฌธ๋ฒ๊ท์น์
๋๋ค.ย
์๋ํ๋ฉด sum_score๋ ๊ธฐ์กด ํ
์ด๋ธ์๋ ์กด์ฌํ์ง ์๋ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
sum_score๋ SQL๋ช
๋ น์ด์ ์ํด์ ์์ฑ๋์ต๋๋ค.
WHERE ๋ช
๋ น์ด๋ SQL๋ช
๋ น์ด์ ์ํด ์๋ก ์์ฑ๋ ์นผ๋ผ์ ๊ณ ๋ คํ์ง ์์ต๋๋ค.
์ค์ง FROM์ผ๋ก ๋ถ๋ฌ์จ ํ
์ด๋ธ์ sum_score๊ฐ ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.
ํ
์ด๋ธ์ sum_score๊ฐ ์์ผ๋ฏ๋ก ํด๋น ๋ช
๋ น์ด๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ ์ด๋ฅผ ์๋ฌ์์ด ์ํํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด Group By ์ ๋ค์ Having ์ ์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ์ง์ ํด์ผ ํฉ๋๋ค.
GROUP BY class_ HAVING sum_score >=175
ย
HAVING๋ช
๋ น์ด๋ SQL๋ช
๋ น์ด์ ์ํด ์์ฑ๋๊ณ ๊ณ์ฐ๋ ํ์ ๋ชจ๋ ์นผ๋ผ์ ๋์์ผ๋ก ๋ช
๋ น์ ์ํํ๊ธฐ ๋๋ฌธ์
๋๋ค.
ย
์ด๋ ๊ฒ ํด์ sas๋ฅผ ์ด์ฉํ sql๋ฌธ์ ๋ง์น๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ค๋ฅธ sql๋ฌธ๋ sql ๊ธฐ๋ณธ๊ตฌ์กฐ ์์ ๋ฃ์ผ๋ฉด ํ์ฉํ ์ ์์ต๋๋ค.