์ค๋๋ถํฐ 3์ผ๊ฐ
SQL ์์ ์์!
SELECT
: SELECT ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ์ด์ ๊ฐ์ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉํ๋ฉฐ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ํ์ ์ ํํ๊ณ ํน์ ์ด์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
SELECT column1, column2 FROM table_name;
SELECT DESTINCT
: ์ค๋ณต๋ ๊ฐ์ ์ ์ธํ๊ณ ๊ณ ์ ํ ๊ฐ์ ๋ฐํํ์ฌ, ์ค๋ณต๋ ํ์ด ์์ ๋, ์ค๋ณต๋ ๊ฐ์ ํ๋๋ง ๋ฐํํฉ๋๋ค.
SELECT DISTINCT column1 FROM table_name;
COUNT
: ํน์ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ ๋ง๋ ์ ๋ ฅ ํ์ ์๋ฅผ ๋ฐํํ๋ค. (table์ ํน์ฑ ์ ์๋ฌดrow๋ ์ ๋ ฅํด๋ ๊ฐ์ ๋์ผํ๋ค)
SELECT COUNT (DISTINCT name)
โ๏ธํน์ ๋์์ ์์ฉํ๋ ํจ์์ด๊ธฐ ๋๋ฌธ์, ๊ดํธ๋ ํ์์ด๋ค!
WHERE
: SQL ์ฟผ๋ฆฌ์์ ์ฌ์ฉ๋์ด ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ง์ ์ ํํ๋๋ก ํ๋ ์ญํ ์ ํฉ๋๋ค.
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
from์ ๋ฐ๋ก ๋ค์ ์์นํ๋ค (select๋ฌธ์์ ๋ฐํ๋๋ ํ์ ๊ฑฐ๋ฅด๊ธฐ ์ํด์)
๋น๊ต์ฐ์ฐ์
- =: ๊ฐ์
- != ๋๋ <>: ๊ฐ์ง ์์
- <: ๋ฏธ๋ง
- <=: ์ดํ
- >: ์ด๊ณผ
- >=: ์ด์
๋ ผ๋ฆฌ์ฐ์ฐ์
- AND
- OR
- NOT
ORDER BY
: ORDER BY๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ ๋ ฌ์ ์ค๋ฆ์ฐจ์(ASC, ๊ธฐ๋ณธ๊ฐ) ๋๋ ๋ด๋ฆผ์ฐจ์(DESC)์ผ๋ก ์ํ๋ฉ๋๋ค.
๋์ผํ ์ฟผ๋ฆฌ๋ ์ปดํจํฐํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์๋ก ํ๊ธฐ๋๊ธฐ ๋๋ฌธ์ ์์๋ฅผ ๋ช ์ํ๋๊ฒ์ด ์ข๋ค
์ฟผ๋ฆฌ ๋ง์ง๋ง์ ๋ช ์ํ๋ค(์ต์ข ์ ์ผ๋ก ๋ถ๋ฅํ๊ธฐ ๋๋ฌธ์)
SELECT employee_id, first_name, last_name, salary
FROM employees
ORDER BY salary DESC, first_name ASC;
โ๏ธ์ฌ๋ฌ ์ด์ ๋ํ ์ ๋ ฌ๋ ๊ฐ๋ฅํ๋ค!
์ด์ ๊ฐ์ด, ๊ธ์ฌ๊ฐ ๋์ ์์ผ๋ก ์ ๋ ฌํ๊ณ , ๊ธ์ฌ๊ฐ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ด๋ฆ์ผ๋ก ์ ๋ ฌํ ์ ์๋ค.
LIMIT
:LIMIT๋ ๊ฒฐ๊ณผ์์ ๋ฐํํ ํ์ ๊ฐ์๋ฅผ ์ง์ ํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ , ์์/ํ์์ ํ๋ง ํ์ํ์ฌ ํ ์ด๋ธ์ ํ์ ํ๋ ค๊ณ ํ ๋ ์ฌ์ฉํ๋ค.
Q. ๊ฐ์ฅ ์ต๊ทผ ๊ตฌ๋งคํ 10๊ฐ๋?
SELECT * FROM payment
WHERE amount!==0.00
ORDER BY payment_date DESC
LIMIT 10;
(where ์กฐ๊ฑด์ ๋จผ์ ํํฐ๋งํ๊ณ , order by๋ก ์ ๋ ฌํ ํ limit์ ๊ฐ์๋งํผ ์ต์ข ์ ์ธ ํ์ ๋ฐํํ๋ค)
BETWEEN
:BETWEEN ์ฐ์ฐ์๋ ์ฃผ์ด์ง ๋ฒ์ ๋ด์ ์๋ ๊ฐ์ ์ ํํ๋ฉฐ, where๋ฌธ์ ์ฌ์ฉํ๋ ์กฐ๊ฑด๋ฌธ์ด๋ค!
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary BETWEEN 5 AND 7;
5์ 7์ ํฌํจํ ์ฌ์ด๊ฐ์ด ํฌํจ๋๋ค.
SELECT * FROM payment
WHERE payment_date
BETWEEN '2007-02-01' AND '2007-02-14'
โ๏ธ์ด๋, 2007-02-14์ ์๊ฐ์ด 23:59๊น์ง๊ฐ ์๋ 0:00๊ธฐ์ค์ด๊ธฐ ๋๋ฌธ์ 15์ผ๋ก ์ค์ ํด์ผ 14์ผ์ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์๋ค
IN
: IN ์ฐ์ฐ์๋ ํน์ ๊ฐ๋ค ์ค ํ๋์ ์ผ์นํ๋ ํ์ ์ ํํ๋ฉฐ, where๋ฌธ์ ์ฌ์ฉํ๋ ์กฐ๊ฑด๋ฌธ์ด๋ค!
SELECT employee_id, first_name, last_name, department_id
FROM employees
WHERE department_id IN (10, 20);
LIKE ILIKE
: ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ํจํด๊ณผ ์ผ์นํ๋ ๊ฐ ๋ฆฌํดํ๋ฉฐ, ๋์ ์ฐจ์ด๋ ๋์๋ฌธ์์ ๊ตฌ๋ถ์ฌ๋ถ์ด๋ค.
- like : ๋์๋ฌธ์ ๊ตฌ๋ถ
- ilike : ๋์๋ฌธ์ ๊ตฌ๋ถํ์ง ์์
- %: ๊ธ์๋ ๋ฌธ์์ ์์์ ๊ด๊ณ์์ด ์ฌ์ฉ๋๋ ์์ผ๋์นด๋ ๋ฌธ์
- _: ๋ฌธ์ ํ๋๋ง ๊ต์ฒด ๊ฐ๋ฅํ๋ค
โstart : ‘A%’ (A๋ก ์์)
โend: ‘%A’ (A๋ก ๋)
WHERE name LIKE '_her%'
//Cheryl
//Theresa
//Sherri
์ง๊ณํจ์ (Aggreate Function)
โ๏ธselect, having์ ์์๋ง ํธ์ถ๋ ์ ์์ผ๋ฉฐ, ํ๋์ ์ด์ ๋ํด์๋ง ์ง๊ณํจ์๋ฅผ ํธ์ถํ ์ ์๋ค.
- COUNT(): ํน์ ์ด์ด๋ ํ ์ด๋ธ์ ํ ์๋ฅผ ๊ณ์ฐํฉ
- SUM(): ํน์ ์ด์ ๊ฐ์ ํฉ
- AVG(): ํน์ ์ด์ ๊ฐ์ ํ๊ท ์ ๊ณ์ฐ
- MIN(): ํน์ ์ด์ ์ต์๊ฐ
- MAX(): ํน์ ์ด์ ์ต๋๊ฐ
SELECT MAX(replacement_cost),MIN(replacement_cost)
FROM film
GROUP BY
: ํน์ ์ด(์นดํ ๊ณ ๋ฆฌ) ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ, ๊ทธ๋ฃน ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฝํ๊ณ ํต๊ณ๋ฅผ ์์ฑํ๋ ๋ฐ ์ ์ฉํ๋ค.
SELECT customer_id, SUM(amount)
FROM payment
GROUP BY customer_id
ORDER BY SUM(amount)
group by์ ์์๋ ์ค์ํ์ง ์๋ค! ๋ฐ์ดํฐ๋ฅผ ๋ฌถ๊ธฐ๋ง ํ๋ค๋ฉด select๋ฌธ์์ ๊ทธ ์์๋ ์ค์ํ์ง ์๋ค
→ ๋ชจ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ์กฐํํ์ง๋ง ํ์๋ฐฉ์์ ์ฌ์ฉ์๊ฐ ์ ํ ์์๋ค (๋๋ถ๋ถ select,groupby ์์ ๋์ผํ๊ฒ ์ง์ ํ๋ค)
โญ๏ธSUM์ WHERE๋ฌธ์ผ๋ก ํํฐ๋ง ํ ์ ์๋ค! ์๋?! SUM์ ๊ทธ๋ฃน๋ฐ์ด๋ฅผ ํธ์ถํ๊ธฐ ์ ๊น์ง ์คํ๋์ง ์๊ธฐ๋๋ฌธ์ด๋ค. →having ์ฌ์ฉํด์ผํจ
โ๏ธwhere๋ฌธ์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค! ์ด๋ having๋ฌธ์ ์ฌ์ฉํ๋ค!
HAVING
GROUP BY์ ํจ๊ป ์ฌ์ฉ๋์ด ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ์กฐ๊ฑด์ ์ ์ฉํ๋ฉฐ, HAVING์ ์ผ๋ฐ์ ์ผ๋ก ์ง๊ณ ํจ์์ ๊ด๋ จ์ด ์์ผ๋ฉฐ, ํน์ ๊ทธ๋ฃน์ ๊ฒฐ๊ณผ์ ๋ํ ์กฐ๊ฑด์ ์ง์ ํ ๋ ์ฌ์ฉ๋๋ค.
SELECT customer_id, SUM(amount)
FROM payment
WHERE staff_id=2
GROUP BY customer_id
HAVING SUM(amount)>100
โญ๏ธ WHERE vs HAVING
→ํ๊ณผ ๊ด๋ จ๋ ์กฐ๊ฑด์๋ WHERE ์ ์ ์ฌ์ฉํ๊ณ , ์ง๊ณ ๊ฒฐ๊ณผ์ ๊ด๋ จ๋ ์กฐ๊ฑด์๋ HAVING ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ