
MySQL์์๋ SELECT ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ํ๋ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ ํํ ์ ์๋ค.
โ ๊ธฐ๋ณธ์ฌ์ฉ๋ฒ
SELECT ํ๋๋ช
FROM ํ
์ด๋ธ๋ช
WHERE [์กฐ๊ฑด]
๐ฅ (์์ )
์๋ Reservation ํ
์ด๋ธ์์ ID๊ฐ 3์ดํ, ReserveDate๊ฐ 2016๋
2์ 1์ผ ์ดํ์ธ ๋ ์ฝ๋๋ง ์ ํํ์ฌ ์ปฌ๋ผ๋ช
์ ANSWER ๋ก ์ง์ ํด์ฃผ์ธ์.

SELECT * AS ANSWER
FROM Reservation
WHERE ID <= 3 AND ReserveDate > '2016-02-01'
(๊ฒฐ๊ณผ)

MySQL์์๋ JOIN ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ์ ๋ฌถ์ด์ ํ๋์ ๊ฒฐ๊ณผ๋ก ๋ง๋ค์ด ๋ผ ์ ์๋ค.
์ฆ, ์๋ก ๋ค๋ฅธ ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ค.
โ ๊ธฐ๋ณธ์ฌ์ฉ๋ฒ
SELECT ํ๋๋ช
FROM ํ
์ด๋ธ๋ช
JOIN ์ฐธ์กฐํ ํ
์ด๋ธ๋ช
ON [์กฐ์ธ ์กฐ๊ฑด]
WHERE [์กฐ๊ฑด]
INNER JOIN์ ์กฐ์ธ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
MySQL์์๋ JOIN, INNER JOIN์ด ๋ชจ๋ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋๋ค.
- ๋ ํ ์ด๋ธ์์ ๊ณตํต๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์จ๋ค.
JOINํ๋ ํ ์ด๋ธ์ON์ ์ ์กฐ๊ฑด์ด ์ผ์นํ๋ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ
๐ฅ (์์ )
Employee ํ
์ด๋ธ (์ง์ ์ ๋ณด)
| emp_id | name | dept_id |
|---|---|---|
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | NULL |
| 4 | David | 104 |
Department ํ
์ด๋ธ (๋ถ์ ์ ๋ณด)
| dept_id | dept_name |
|---|---|
| 101 | HR |
| 102 | IT |
| 103 | Finance |
| 105 | Sales |
SELECT e.emp_id, e.name, d.dept_name
FROM Employee e
JOIN Department d
ON e.dept_id = d.dept_id;
(๊ฒฐ๊ณผ)
| emp_id | name | dept_name |
|---|---|---|
| 1 | Alice | HR |
| 2 | Bob | IT |
LEFT JOIN์ ์ฒซ ๋ฒ์งธ ํ
์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ๋ ๋ฒ์งธ ํ
์ด๋ธ์ ์กฐํฉํ๋ JOIN์ด๋ค.
์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ + ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์ผ์นํ๋ ๋ฐ์ดํฐ
LEFT JOIN์ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ์ผ์นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด NULL๋ก ์ฑ์ฐ๋ฉฐ ํฉ์ณ์ง๋ค.
๐ฅ (์์ )
Employee ํ
์ด๋ธ (์ง์ ์ ๋ณด)
| emp_id | name | dept_id |
|---|---|---|
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | NULL |
| 4 | David | 104 |
Department ํ
์ด๋ธ (๋ถ์ ์ ๋ณด)
| dept_id | dept_name |
|---|---|
| 101 | HR |
| 102 | IT |
| 103 | Finance |
SELECT e.emp_id, e.name, d.dept_name
FROM Employee e
LEFT JOIN Department d
ON e.dept_id = d.dept_id;
(๊ฒฐ๊ณผ)
| emp_id | name | dept_name |
|---|---|---|
| 1 | Alice | HR |
| 2 | Bob | IT |
| 3 | Charlie | NULL |
| 4 | David | NULL |
FULL OUTER JOIN์ ์ผ์ชฝ ํ
์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฐ์ ธ์ค๊ณ , ์๋ก ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ JOIN์ด๋ค.
์์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ + ์ผ์นํ๋ ๋ฐ์ดํฐ
FULL OUTER JOIN์ ์ผ์นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด NULL๋ก ์ฑ์ฐ๋ฉฐ ํฉ์ณ์ง๋ค.
๐ฅ (์์ )
Employee ํ
์ด๋ธ (์ง์ ์ ๋ณด)
| emp_id | name | dept_id |
|---|---|---|
| 1 | Alice | 101 |
| 2 | Bob | 102 |
| 3 | Charlie | NULL |
| 4 | David | 104 |
Department ํ
์ด๋ธ (๋ถ์ ์ ๋ณด)
| dept_id | dept_name |
|---|---|
| 101 | HR |
| 102 | IT |
| 103 | Finance |
| 105 | Sales |
SELECT e.emp_id, e.name, d.dept_name
FROM Employee e
FULL OUTER JOIN Department d
ON e.dept_id = d.dept_id;
(๊ฒฐ๊ณผ)
| emp_id | name | dept_name |
|---|---|---|
| 1 | Alice | HR |
| 2 | Bob | IT |
| 3 | Charlie | NULL |
| 4 | David | NULL |
| NULL | NULL | Finance |
| NULL | NULL | Sales |
MySQL์์๋ GROUP BY ๋ฌธ์ ์ฌ์ฉํ์ฌ ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ๋๋ ์ค๋ค.
(๊ฐ์ด ๊ฐ์ ์ค๋ณต๋ฐ์ดํฐ๋ผ๋ฆฌ ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์)
ํํ GROUP BY + ์ง๊ณํจ์ ์กฐํฉ์ผ๋ก ์ฐ์ธ๋ค.
โ ๊ธฐ๋ณธ์ฌ์ฉ๋ฒ
SELECT ํ๋๋ช
FROM ํ
์ด๋ธ๋ช
GROUP BY [๊ทธ๋ฃนํํ๊ณ ์ถ์ ํ๋๋ช
]
๐ฅ (์์ )
์๋ Book ํ
์ด๋ธ์์ CATEGORY๋ณ๋ก ํ๊ท PRICE๊ฐ์ ์ถ๋ ฅํด์ฃผ์ธ์.
Book ํ
์ด๋ธ
| BOOK_ID | CATEGORY | AUTHOR_ID | PRICE |
|---|---|---|---|
| 1 | ์ธ๋ฌธ | 1 | 10000 |
| 2 | ์ธ๋ฌธ | 1 | 9000 |
| 3 | ๊ฒฝ์ | 1 | 15000 |
| 4 | ๊ฒฝ์ | 2 | 11000 |
SELECT CATEGORY, AVG(PRICE)
FROM STUDENT_INFO
GROUP BY CATEGORY
(๊ฒฐ๊ณผ)
| CATEGORY | PRICE |
|---|---|
| ์ธ๋ฌธ | 9500 |
| ๊ฒฝ์ | 13000 |
์์ซ์ ์๋ a์๋ฆฟ์๊น์ง ๋ฐ์ฌ๋ฆผํ์ฌ ํ์ํ๋ค.
ROUND(๊ฐ, a์๋ฆฟ์) # ์์ซ์ a์๋ฆฟ์๊น์ง ๋ฐ์ฌ๋ฆผ
# (์์)
SELECT ROUND(10.87565, 1) FROM CUSTOMTABLE # 10.9
SELECT ROUND(10.87565, 0) FROM CUSTOMTABLE # 11
ํน์ ํ
์ด๋ธ์ ํ๋ ๊ฐ์ ํ๊ท ๊ฐ์ ๋ด์ค๋ค.
AVG(ํ๋๋ช
)
# (์์)
SELECT AVG(PRICE) FROM CUSTOMTABLE # CUSTOMTABLE์ PRICEํ๋ ๊ฐ์ ํ๊ท ๊ตฌํ๊ธฐ
Year-Month-Date ํ์์ ๋ ์ง๋ฅผ (๋
,์,์ผ)๋ก ๋๋ ์ค๋ค.
| DATE_OF_BIRTH |
|---|
| 1992-02-12 |
| 1992-02-22 |
| 1993-03-16 |
DATE_FORMAT(Column๋ช
, "%Y-%m-%d")
# (์์)
SELECT DATE_FORMAT(DATE_OF_BIRTH, "%Y-%m-%d")
FROM CUSTOMTABLE
WHERE MONTH(DATE_OF_BIRTH) = 3 # 3์๋ง ๊ณ ๋ฅด๊ธฐ (๊ฒฐ๊ณผ: 1993-03-16)
๋ฌธ์์ด์ ํจํด์ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ(์ ๊ท์๊ณผ ์ ์ฌ)
Column๋ช
LIKE 'A%' # A๋ก ์์ํ๋ ๋ฌธ์์ด ๊ฒ์
Column๋ช
LIKE '%A' # A๋ก ๋๋๋ ๋ฌธ์์ด ๊ฒ์
Column๋ช
LIKE '%A%' # A๋ฅผ ํฌํจํ ๋ฌธ์์ด ๊ฒ์
# (์์)
SELECT ADDRESS
FROM CUSTOMTABLE
WHERE ADDRESS LIKE '%๊ฐ์๋%' # ๊ฐ์๋๋ฅผ ํฌํจํ๋ ADDRESS ์ถ์ถ
๊ฐ์ด Null์ธ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ํจ์
IFNULL(Column๋ช
, "Null์ผ ๊ฒฝ์ฐ ๋์ฒด ๊ฐ")
# (์์)
SELECT IFNULL(NAME, 'No')
FROM CUSTOMTABLE
์ปฌ๋ผ์ ๋ฐ์ดํฐ ๊ฐฏ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
(์ด ๋ย NULL์ธ ๋ฐ์ดํฐ๋ ์ ์ธํ๊ณ ๊ณ์ฐ)
SELECT COUNT(*) # ์ ์ฒด ํ ๊ฐฏ์ ๊ฐ์ ธ์ค๊ธฐ
SELECT COUNT(Column๋ช
) # ์ปฌ๋ผ ๋ฐ์ดํฐ ๊ฐฏ์ ๊ฐ์ ธ์ค๊ธฐ
# (์์)
SELECT COUNT(*)
FROM CUSTOMTABLE
SUM : ์นผ๋ผ์ ํฉ์ ๊ฐ์ ธ์จ๋ค.
MAX : ์นผ๋ผ์ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ์ ธ์จ๋ค(๋ ์งํ์์ด๋ฉด ๊ฐ์ฅ ์ต๊ทผ)
MIN : ์นผ๋ผ์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค(๋ ์งํ์์ด๋ฉด ๊ฐ์ฅ ์ค๋์ )
SUM(Column๋ช
)
MAX(Column๋ช
)
MIN(Column๋ช
)
# (์์)
SELECT SUM(AGE) FROM CUSTOMTABLE;
SELECT MAX(AGE) FROM CUSTOMTABLE;
SELECT MIN(AGE) FROM CUSTOMTABLE;
์ปฌ๋ผ์ ์ค๋ณต์ ์ ๊ฑฐํด์ค๋ค.
DISTINCT Column๋ช
# (์์)
SELECT DISTINCT NAME FROM CUSTOMTABLE;
๋ฌธ์์ด์ ํฉ์ณ์ค๋ค.
CONCAT(Column๋ช
, '์ถ๊ฐํ ๋ฌธ์')
# (์์)
SELECT CONCAT(AGE, '์ด') FROM CUSTOMTABLE; # AGE์ปฌ๋ผ์ ๋ฐ์ดํฐ ๊ฐ์ด ~์ด๋ก ๋ณ๊ฒฝ๋
์ปฌ๋ผ์ ๋ฐ์ดํฐ ๊ฐฏ์๋ฅผ ๊ฐ์ ธ์จ๋ค.
(์ด ๋ย NULL์ธ ๋ฐ์ดํฐ๋ ์ ์ธํ๊ณ ๊ณ์ฐ)
SELECT COUNT(*) # ์ ์ฒด ํ ๊ฐฏ์ ๊ฐ์ ธ์ค๊ธฐ
SELECT COUNT(Column๋ช
) # ์ปฌ๋ผ ๋ฐ์ดํฐ ๊ฐฏ์ ๊ฐ์ ธ์ค๊ธฐ
# (์์)
SELECT COUNT(*)
FROM CUSTOMTABLE
๊ฒฐ๊ณผ์ ํน์ ๊ฐฏ์๋งํผ์ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์จ๋ค.
LIMIT 3 # 3๊ฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
# (์์)
SELECT *
FROM CUSTOMTABLE
LIMIT 4 # ํ
์ด๋ธ ์ ์ฒด๋ฐ์ดํฐ์์ 4๊ฐ๋ง ๊ฐ์ ธ์ค๊ธฐ