SQL - SELECT๋ฌธ
โ๏ธ SELECT
SQL์์ SELECT๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ช ๋ น์ด
โ๏ธ ๊ธฐ๋ณธ ๊ตฌ์กฐ
SELECT [์ด ์ด๋ฆ]
FROM [ํ
์ด๋ธ ์ด๋ฆ]
WHERE [์กฐ๊ฑด];
๐ WHERE
WHERE์ ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ(row)๋ง์ ๊ฒ์
- userid๊ฐ bbk์ธ ํ ๊ฒ์
SELECT * FROM usertbl WHERE userid='bbk';

๐ ๊ด๊ณ ์ฐ์ฐ์
AND, OR ๋ฑ์ ๊ด๊ณ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด ์ง์
- birthyear์ด 1970 ์ดํ์ด๊ณ , ํค๊ฐ 182 ์ด์์ธ ํ ์ถ๋ ฅ
SELECT * FROM usertbl WHERE birthyear >= 1970 AND height >= 182;

๐ BETWEEN ... AND ...
๋ฒ์๋ฅผ ์ง์ ํ์ฌ ๋ฐ์ดํฐ ๊ฒ์ ๊ฐ๋ฅ
- ํค 180 ~ 183
SELECT name, height FROM usertbl WHERE height BETWEEN 180 AND 183;

๐ IN
๋ฆฌ์คํธ ํ์์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ง์ ํ์ฌ ๋ฐ์ดํฐ ๊ฒ์
- ๊ฒฝ๋จ, ์ ๋จ, ๊ฒฝ๋ถ ์ค ๊ณ ํฅ์ด ์ผ์นํ๋ ํ
SELECT name, height FROM usertbl WHERE addr IN ('๊ฒฝ๋จ','์ ๋จ','๊ฒฝ๋ถ');

๐ %(LIKE)
ํน์ ํจํด๊ณผ ์ผ์นํ๋ ๋ฐ์ดํฐ ๊ฒ์
- ์ด๋ฆ์ด ๊น์ผ๋ก ์์ํ๋
SELECT name, height FROM usertbl WHERE name LIKE '๊น%';

๐ ์๋ธ์ฟผ๋ฆฌ
์ฟผ๋ฆฌ ๋ฌธ ์์ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฒ์
- ๊น๊ฒฝํธ๋ณด๋ค ํค๊ฐ ํฐ ์ฌ๋
SELECT name, height FROM usertbl
WHERE height >= (SELECT height FROM usertbl WHERE name='๊น๊ฒฝํธ');

๐ ANY
์กฐ๊ฑด์ด ํ๋๋ผ๋ ์ผ์นํ๋ ๋ฐ์ดํฐ ๊ฒ์
- ๊ฒฝ๋จ์ด ๊ณ ํฅ์ธ ์ฌ๋ ์ค ํ ๋ช ์ ํค๋ณด๋ค ํฐ ์ฌ๋
SELECT name, height FROM usertbl
WHERE height >= ANY (SELECT height FROM usertbl WHERE addr='๊ฒฝ๋จ');

๐ ALL
๋ชจ๋ ์กฐ๊ฑด์ด ์ผ์นํ๋ ๋ฐ์ดํฐ ๊ฒ์
- ๊ฒฝ๋จ์ด ๊ณ ํฅ์ธ ์ฌ๋๋ค ๋ชจ๋๋ณด๋ค ํค๊ฐ ํฐ ์ฌ๋
SELECT name, height FROM usertbl
WHERE height >= ALL (SELECT height FROM usertbl WHERE addr='๊ฒฝ๋จ');

๐ ORDER BY
๊ฒฐ๊ณผ ์ ๋ ฌํ์ฌ ์ถ๋ ฅ
์ค๋ฆ์ฐจ์ (ASC)
mdate ๊ธฐ์ค ์ค๋ฆ์ฐจ์
SELECT name, mdate FROM usertbl ORDER BY mdate;

๋ด๋ฆผ์ฐจ์ (DESC)
mdate ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์
SELECT name, mdate FROM usertbl ORDER BY mdate DESC;

๐ DINSTINCT
์ค๋ณต๋ ๊ฐ ์ ๊ฑฐํ์ฌ ์ถ๋ ฅ
- addr ์ค๋ณต ๊ฐ์ ํ๋๋ก ์ฒ๋ฆฌ
SELECT DISTINCT addr FROM usertbl;

๐ LIMIT
๊ฒฐ๊ณผ์ ๊ฐ์ ์ ํํ์ฌ ์ถ๋ ฅ
- ํค ํฐ ์ฌ๋ top5
SELECT name, height FROM usertbl ORDER BY height DESC LIMIT 5;

๐ CREATE TABLE ... SELECT
๊ธฐ์กด ํ ์ด๋ธ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ํ ์ด๋ธ ์์ฑ
- buytbl๊ณผ ๋ด์ฉ์ด ๋๊ฐ์ ํ ์ด๋ธ ์์ฑ
CREATE TABLE buytbl2 (SELECT * FROM buytbl);

๐ VIEW ๋ง๋ค๊ธฐ
ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ ํ ์ด๋ธ ์์ฑ
- ํค๊ฐ ํฐ 3๋ช ์ ๋ทฐ ํ ์ด๋ธ์ ์ ์ฅ
CREATE VIEW v_memberh AS SELECT * FROM usertbl ORDER BY height DESC LIMIT 3;
- ํค ๋ณ๊ฒฝ ํ ๊ฐ ํ์ธ (์กฐ์ฉํ ํค๋ฅผ 195๋ก ๋ณ๊ฒฝ ํ ๋ทฐ ํ ์ด๋ธ์๋ ์ ์ฉ๋จ.)

๐ GROUP BY
๋ฐ์ดํฐ ๊ทธ๋ฃนํํ์ฌ ์ง๊ณํจ์ ์ฌ์ฉ ๊ฐ๋ฅ
- userid๋ก ๊ทธ๋ฃน ์ง์ด amount์ ํฉ ํ์ธ
SELECT userid, SUM(amount) FROM buytbl GROUP BY userid;

๐ AS
์ปฌ๋ผ์ด๋ ํ ์ด๋ธ์ ๋ณ์นญ ์ง์ ํ์ฌ ๊ฐ๋ ์ฑ ๋์
- ์ด ๊ตฌ๋งค ๊ฐ์
SELECT userid AS '์ฌ์ฉ์ ์์ด๋', SUM(amount) AS '์ด ๊ตฌ๋งค ๊ฐ์' FROM buytbl GROUP BY userid;

- ์ด ๊ตฌ๋งค ์ก

๐ ์ง๊ณํจ์ - COUNT
ํน์ ์ด์ ๋ฐ์ดํฐ ํจ์ ์ธ๊ธฐ
- ์ง์ญ๋ง๋ค์ ์ฌ๋ ์ ์ถ๋ ฅ
SELECT addr AS '์ง์ญ ๋ช
', COUNT(addr) AS '์ฌ๋ ์' FROM usertbl GROUP BY addr ORDER BY COUNT(addr) DESC;

๐ HAVING
GROUP BY์ ํจ๊ป ์ฌ์ฉํ์ฌ ๊ทธ๋ฃน ์กฐ๊ฑด ์ง์
- ์ด ๊ตฌ๋งค์ก 1000 ๋๋ ์ฌ์ฉ์ ์ถ๋ ฅ
SELECT userid AS '์ฌ์ฉ์', SUM(price*amount) AS '์ด ๊ตฌ๋งค์ก' FROM buytbl GROUP BY userid HAVING SUM(price*amount) > 1000;
