[๋ชฉ์ฐจ]
๐WHERE์ , ์ฐ์ฐ์, ROWNUM, DUALํ ์ด๋ธ
WHERE์
์ฐ์ฐ์
๊ฐ์ง์นผ๋ผ ROWNUM, TOP(N)
DUALํ ์ด๋ธ(Oracle)
๐GROUP BY, HAVING์
GROUP BY์ SELECT ์นผ๋ผ
GROUP BY์ ์ง๊ณํจ์
๐ORDER BY ASC/DESC
Oracle๊ณผ SQL Server์ NULL์ทจ๊ธ
๐SELECT ๋ฌธ์ฅ ์คํ ์์
๐ WHERE์ , ์ฐ์ฐ์, ROWNUM, DUAL ํ ์ด๋ธ
WHERE์
์กฐํํ๋ ค๋ ๋ฐ์ดํฐ์ ํน์ ์กฐ๊ฑด์ ๋ถ์ฌํ๋ค.
SELECT ~ FROM ~ WHERE ์กฐ๊ฑด์;
์ฐ์ฐ์
๊ฐ์ง์นผ๋ผ ROWNUM, TOP(N)
Oracle | SQL Server |
SELECT ~ FROM ~ WHERE ROWNUM <= N; |
SELECT TOP(N) [WITH TIES] FROM ~; |
SELECT SAL FROM (SELECT SAL FROM EMP ORDER BY SAL) WHERE ROWNUM<4; |
SELECT TOP(2) WITH TIES SAL FROM EMP ORDER BY SAL; //500, 300, 300 |
Oracle์์๋ ORDER BY์ ์ด ๊ฐ์ด ์ฌ์ฉ๋๋ฉด ์ ๋ ฌ ์ ์ ROWNUM์ ์ฒ๋ฆฌํ๊ฒ๋์ด ๋ฌด์์ ๊ฒฐ๊ณผ๊ฐ ์ถ์ถ๋๋ค. |
SQL Server์์๋ ORDER BY์ WITH TIES๋ฅผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๊ณต๋์์๋ ๊ฐ์ด ์ถ๋ ฅํด์ค๋ค. |
DUAL ํ ์ด๋ธ(Oracle)
์ฌ์ฉ์ ํ ์ด๋ธ์ด ํ์์๋ SQL๋ฌธ์ฅ์ ์คํํ ๋ ์ฌ์ฉํ๋ค.
SELECT ~ FROM ~ ํ์์ ๊ฐ์ถ๊ธฐ์ํ ์ผ์ข ์ DUMMY ํ ์ด๋ธ์ด๋ค.
SELECT LENGTH('SQL Expert') FROM DUAL;
//๊ฒฐ๊ณผ
//LENGTH('SQL Expert')
//-------------------
// 10
โป SQL Server์ ๊ฒฝ์ฐ์ SELECT๋ก๋ SQL๋ฌธ์ฅ์ด ์ํ ๊ฐ๋ฅํ๊ธฐ๋๋ฌธ์ DUALํ ์ด๋ธ์ด ์๋ค.
select len('SQL Expert');
//๊ฒฐ๊ณผ
//(์ด ์ด๋ฆ ์์)
//------------
// 10
๐ GROUP BY, HAVING์
GROUP BY ์ ์ ํ๋ค์ ์๊ทธ๋ฃนํ ํ๋ค.
SELECT ~ FROM ~ WHERE ~ GROUP BY ์นผ๋ผ HAVING ์กฐ๊ฑด
HAVING์ ์ GROUP BY๋ก ๋ฌถ์ธ ๊ทธ๋ฃน๋ค์ ์กฐ๊ฑด์ ์ ์ฉํ๋ค.
(WHERE์ ์๋ ๊ฐ์ฒด ์์ค์ ์กฐ๊ฑด์ ์ ์ฉํ ์ ์๋ค.)
NULL์ด ์์ ๊ฒฝ์ฐ์ ์ฐ์ฐ์์ ์ ์ธ๋๋ค. => ๊ตณ์ด NVLํจ์๋ก NULL์ 0์ผ๋ก ๋ง๋ค์ด์ค ํ์ X
GROUP BY์ ์๋ ALIAS ๋ณ๋ช ์ ์ฌ์ฉํ ์ ์๋ค.
SELECT AGE ๋์ด FROM PLAYER GROUP BY ๋์ด; --์ค๋ฅ
GROUP BY์ SELECT ์นผ๋ผ
GROUP BY์ ์์ ๊ทธ๋ฃนํ ๊ธฐ์ค์ ์ ์ํ๊ฒ ๋๋ฉด
๊ธฐ์ค์ ์ฌ์ฉ๋ ์นผ๋ผ๊ณผ ์ง๊ณํจ์์ ์ฌ์ฉ๋ ์ ์๋ ์ซ์ ๋ฐ์ดํฐ์ ์งํฉ์ ์๋ก ๋ง๋ ๋ค.
์ด๋, ๊ฐ๋ณ ๋ฐ์ดํฐ๋ ํ์ ์์ผ๋ฏ๋ก ์ ์ฅํ์ง ์๋๋ค.
= GROUP BY ์ดํ ์ํ๋๋ SELECT, ORDER BY์์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
= ๊ฒฐ๊ณผ์ ์ผ๋ก SELECT์์๋ group by์ ์ฌ์ฉ๋ ์นผ๋ผ๋ง ์ฌ์ฉํ ์ ์๋ค.
SELECT JOB, SAL FROM EMP GROUP BY JOB;
-- ์คํจ
-- JOB๊ณผ SAL๋๋ค ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด SAL๋ ๊ทธ๋ฃนํํด์ผํ๋ค.
SELECT JOB, SAL FROM EMP GROUP BY JOB, SAL;
-- ์ฑ๊ณต
-- ์ถ๋ ฅํ๋ JOB, SAL์ด GROUP BY์ ์์ ๋ชจ๋ ๊ทธ๋ฃนํ๋์ด์๋ค.
GROUP BY์ ์ง๊ณํจ์
์ง๊ณํจ์๋ ์ฌ๋ฌํ๋ค์ ๊ทธ๋ฃน์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน๋น ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ํจ์์ด๋ค.
(COUNT(์), SUM(์), AVG(์), MAX(์), MIN(์) ... ๋ฑ)
ํ์ ๊ทธ๋ฃน์ ๋ง๋ค์ด์ฃผ๋ GROUP BY์ ๋ง์ด ์ฌ์ฉ๋๋ค.
์ง๊ณํจ์๋ GROUP BY ์ดํ์ ์คํ๋๋ HAVING, SELECT, ORDER BY์ ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. (WHERE์ ์์ ์ฌ์ฉ ๋ถ๊ฐ!!)
GROUP BY์ ์ ์ ์ํ์ง ์์ ์นผ๋ผ๋ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ๋ฉด HAVING, SELECT, ORDER BY์ ์์ ์ฌ์ฉํ ์ ์๋ค.
SELECT JOB FROM EMP GROUP BY JOB ORDER BY MAX(EMPNO), SUM(SAL);
-- ์ฑ๊ณต
-- ์ด๋ฏธ JOB์ผ๋ก ๊ทธ๋ฃนํ๋์๊ธฐ๋๋ฌธ์ GROUP BY๋ณด๋ค ์ํ์ด ๋ฆ์
-- HAVING, SELECT, ORDER BY์์ ์ง๊ณํจ์๋ก ๋ค๋ฅธ ์นผ๋ผ์ ๊ทธ๋ฃนํํ ์ ์๋ค.
SELECT JOB, MAX(EMPNO) FROM EMP GROUP BY JOB ORDER BY MAX(EMPNO), SUM(SAL);
-- ์ฑ๊ณต
-- JOB๋ ๊ทธ๋ฃนํ๋์๊ณ , EMPNO๋ ์ง๊ณํจ์๋ก ๊ทธ๋ฃนํ๋์ด์๋ค.
SELECT JOB, EMPNO FROM EMP GROUP BY JOB ORDER BY MAX(EMPNO), SUM(SAL);
-- ์คํจ
-- EMPNO๊ฐ ๊ทธ๋ฃนํ๋์ง ์์ ์นผ๋ผ์ด๊ธฐ๋๋ฌธ์ ์คํจํ๋ค.
์ง๊ณํจ์ ์ฌ์ฉ ์, ์ ์ฒด๊ฐ ํ๋์ ๊ทธ๋ฃน์ด ๋๋ ๊ฒฝ์ฐ์๋ GROUP BY์ ์์ด ๋จ๋ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
SELECT COUNT(*) "์ ์ฒด ํ์", COUNT(HEIGHT) "ํค ๊ฑด์"
๐ ORDER BY ASC/DESC
๋ฐ์ดํฐ๋ค์ ํน์ ์นผ๋ผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๊ฒํด์ค๋ค.
SELECT ~ FROM ~ WHERE ~ GROUP BY ~ HAVING ~ ORDER BY ์นผ๋ผ๋ช ASC/DESC;
์ค๋ฆ์ฐจ์ ASC(๊ธฐ๋ณธ๊ฐ), ๋ด๋ฆผ์ฐจ์ DESC
ORDER BY์ ์ ๋ณ๋ช ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
SELECT AGE ๋์ด FROM PLAYER ORDER BY ๋์ด; --๊ฐ๋ฅ
์กฐํํ๋ ์นผ๋ผ์ ์์๋ฒํธ๋ฅผ ์ฌ์ฉํด๋ ๊ฐ๋ฅํ๋ค.
SELECT AGE ๋์ด, NAME ์ด๋ฆ FROM PLAYER ORDER BY 2; --์ด๋ฆ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์์ ๋ ฌ
์กฐํํ์ง ์๋ ์นผ๋ผ์ผ๋ก ์ ๋ ฌํ ์ ์๋ค.
SELECT AGE, NAME FROM PLAYER ORDER BY ID;
๐๋ฌธ์
PLAYER ํ
์ด๋ธ์์ ์ ์๋ช
๊ณผ ํ๋ช
์ ์ค๋ฆ์ฐจ์, ์ฐ๋ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์กฐํํ๋ SQL ๋ก ๋ฐ๋ฅธ๊ฒ์?
1) SELECT ์ ์๋ช
, ํ๋ช
, ์ฐ๋ด FROM ORDER BY ์ ์๋ช
DESC, ํ๋ช
DESC, ์ฐ๋ด ASC
2) SELECT ์ ์๋ช
, ํ๋ช
, ์ฐ๋ด FROM ORDER BY ์ ์๋ช
ASC, ํ๋ช
ASC , ์ฐ๋ด
3) SELECT ์ ์๋ช
, ํ๋ช
, ์ฐ๋ด FROM ORDER BY ์ ์๋ช
ASC, ํ๋ช
, 3 DESC //๋ณ๋ช
, ์์๋ฒํธ ํผํฉํด์ ์ฌ์ฉ ๊ฐ๋ฅ
4) SELECT ์ ์๋ช
, ํ๋ช
, ์ฐ๋ด FROM ORDER BY ์ ์๋ช
, ํ๋ช
, DESC ์ฐ๋ด
Oracle๊ณผ SQL Server์ NULL ์ทจ๊ธ
Oracle | SQL Server |
NULL์ ๊ฐ์ฅ ํฐ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ค. | NULL์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ์ทจ๊ธํ๋ค. |
๐ SELECT ๋ฌธ์ฅ ์คํ์์