์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
[52] 230314 SQL Ch 3. ์ ๋ ฌ๊ณผ ์ฐ์ฐ: 9๊ฐ ์ ๋ ฌ - ORDER BY, 10๊ฐ ๋ณต์์ ์ด์ ์ง์ ํด ์ ๋ ฌํ๊ธฐ, 11๊ฐ ๊ฒฐ๊ณผ ํ ์ ํํ๊ธฐ - LIMIT, 12๊ฐ ์์น ์ฐ์ฐ, 13๊ฐ ๋ฌธ์์ด ์ฐ์ฐ, 14๊ฐ ๋ ์ง ์ฐ์ฐ, 15 CASE ๋ฌธ์ผ๋ก ๋ฐ์ดํฐ ๋ณํํ.. ๋ณธ๋ฌธ
[52] 230314 SQL Ch 3. ์ ๋ ฌ๊ณผ ์ฐ์ฐ: 9๊ฐ ์ ๋ ฌ - ORDER BY, 10๊ฐ ๋ณต์์ ์ด์ ์ง์ ํด ์ ๋ ฌํ๊ธฐ, 11๊ฐ ๊ฒฐ๊ณผ ํ ์ ํํ๊ธฐ - LIMIT, 12๊ฐ ์์น ์ฐ์ฐ, 13๊ฐ ๋ฌธ์์ด ์ฐ์ฐ, 14๊ฐ ๋ ์ง ์ฐ์ฐ, 15 CASE ๋ฌธ์ผ๋ก ๋ฐ์ดํฐ ๋ณํํ..
yjyuwisely 2023. 3. 14. 09:50230314 Tue 52nd class
Ch 3. ์ ๋ ฌ๊ณผ ์ฐ์ฐ
์ง๋: p. 94 ~ (๊ต์ฌ: SQL ์ฒซ๊ฑธ์, ์ ์: ์์ฌ์ด ์์ธ ์)
MySQL Workbench Manual: https://dev.mysql.com/doc/workbench/en/
MySQL ํํ ๋ฆฌ์ผ: https://www.tutorialspoint.com/mysql/
SQLD ์์ฝ pdf: https://yurimac.tistory.com/40
์ฑ
์์ฝ (9p) pdf: https://brunch.co.kr/@ydy702/10
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
๋ด๊ฐ ๋ชฐ๋๋ ๊ฒ ์ ๋ฆฌ
- ์ฉ์ด
In computing, a client is a piece of computer hardware or software that accesses a service made available by a server as part of the client–server model of computer networks.
์ปดํจํฐ ๋คํธ์ํฌ์์ ํด๋ผ์ด์ธํธ(client, ๋ฌธํ์ด: ์๋ขฐ๊ธฐ)๋ ๋คํธ์ํฌ๋ฅผ ํตํ์ฌ ์๋ฒ๋ผ๋ ๋ค๋ฅธ ์ปดํจํฐ ์์คํ
์์ ์๊ฒฉ ์๋น์ค์ ์ ์ํ ์ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด๋ ์๋น์ค๋ฅผ ๋งํ๋ค.
์ฟผ๋ฆฌ๋ ์น ์๋ฒ์ ํน์ ํ ์ ๋ณด๋ฅผ ๋ณด์ฌ๋ฌ๋ผ๋ ์น ํด๋ผ์ด์ธํธ ์์ฒญ(์ฃผ๋ก ๋ฌธ์์ด์ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ฒญ์ด๋ค)์ ์ํ ์ฒ๋ฆฌ์ด๋ค.
A query in a database is a request for information from a database management system (DBMS), which is the software program that maintains data. Users can make a query to retrieve data or change information in a database, such as adding or removing data.
- ํจ์
- decimal(10,2) means you can have a decimal number with a maximal total precision of 10 digits. 2 of them after the decimal point and 8 before. (10,2) defines the precision of the decimal value. 10 digits and 2 digits after the comma.
- Point: SELECT ๊ตฌ์์ ์ง์ ํ ๋ณ๋ช
์ WHERE ๊ตฌ ์์์ ์ฌ์ฉํ ์ ์๋ค. p. 122
- Point: ORDER BY ๊ตฌ์์๋ SELECT ๊ตฌ์์ ์ง์ ํ ๋ณ๋ช
์ ์ฌ์ฉํ ์ ์๋ค. p. 125
- The IFNULL() function returns a specified value if the expression is NULL. If the expression is NOT NULL, this function returns the expression.
SELECT IFNULL(NULL, 500);
-- 500
์ฐธ๊ณ : https://www.w3schools.com/sql/func_mysql_ifnull.asp
- The COALESCE() function returns the first non-null value in a list.
COALESCE(val1, val2, ...., val_n)
SELECT COALESCE(NULL, 1, 2, 'W3Schools.com');
-- 1
์ฐธ๊ณ : https://www.w3schools.com/sql/func_mysql_coalesce.asp
CAOLESCE ์์
๋ค์ ๊ธฐ์ตํ๊ธฐ
ํ ์ด๋ธ ๊ตฌ์กฐ ์ฐธ์กฐํ๊ธฐ (DESC = DESCRIBE)
DESC ๋ช
๋ น: ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ์ฐธ์กฐํ๋ค.
์ฐธ์กฐ: ์ฐธ๊ณ ๋ก ๋น๊ตํ๊ณ ๋์กฐํ์ฌ ๋ณด๋ค.
The DESC command is used to sort the data returned in descending order.
The DESC command is a short form of the DESCRIBE command.
DESC ํ
์ด๋ธ๋ช
์์ฝ
SELECT SQL ๋ฌธ๋ฒ ์์ฑ ์์ (์ฌ์ฉ์ ์์ฑ)
SELECT ์ด๋ช (5)
FROM ํ ์ด๋ธ๋ช (1)
WHERE ์กฐ๊ฑด์ (2)
GROUP BY ๊ทธ๋ฃนํํ ์ด๋ช (3)
HAVING ๊ทธ๋ฃนํ๊ณ ๋ ํ์ ์กฐ๊ฑด์ (4)
ORDER BY ์ ๋ ฌํ๊ณ ์ ํ๋ ์ด๋ช (6)
SELECT SQL ์ฟผ๋ฆฌ ์คํ ์์ (DBMS ๋ด๋ถ ์ฒ๋ฆฌ)
FROM: ์กฐํ ํ ์ด๋ธ ํ์ธ
WHERE: ๋ฐ์ดํฐ ์ถ์ถ ์กฐ๊ฑด ํ์ธ
GROUP BY: ๊ทธ๋ฃนํ
HAVING: ๊ทธ๋ฃนํ ํ ์กฐ๊ฑด
SELECT: ๋ฐ์ดํฐ ์ถ์ถ
ORDER BY: ๋ฐ์ดํฐ ์์ ์ ๋ ฌ
Ch 3. ์ ๋ ฌ๊ณผ ์ฐ์ฐ
์ฑ ์ ๋ชฉ์ฐจ
__09๊ฐ__์ ๋ ฌ - ORDER BY
1. ORDER BY๋ก ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ
2. ORDER BY DESC๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
3. ๋์๊ด๊ณ
4. ORDER BY๋ ํ ์ด๋ธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
__10๊ฐ__๋ณต์์ ์ด์ ์ง์ ํด ์ ๋ ฌํ๊ธฐ
1. ๋ณต์ ์ด๋ก ์ ๋ ฌ ์ง์
2. ์ ๋ ฌ๋ฐฉ๋ฒ ์ง์ ํ๊ธฐ
3. NULL ๊ฐ์ ์ ๋ ฌ ์์
__11๊ฐ__๊ฒฐ๊ณผ ํ ์ ํํ๊ธฐ - LIMIT
1. ํ์ ์ ํ
2. ์คํ์ ์ง์
__12๊ฐ__์์น ์ฐ์ฐ
1. ์ฌ์น ์ฐ์ฐ
2. SELECT ๊ตฌ๋ก ์ฐ์ฐํ๊ธฐ
3. ์ด์ ๋ณ๋ช
4. WHERE ๊ตฌ์์ ์ฐ์ฐํ๊ธฐ
5. NULL ๊ฐ์ ์ฐ์ฐ
6. ORDER BY ๊ตฌ์์ ์ฐ์ฐํ๊ธฐ
7. ํจ์
8. ROUND ํจ์
__13๊ฐ__๋ฌธ์์ด ์ฐ์ฐ
1. ๋ฌธ์์ด ๊ฒฐํฉ
2. SUBSTRING ํจ์
3. TRIM ํจ์
4. CHARACTER_LENGTH ํจ์
__14๊ฐ__๋ ์ง ์ฐ์ฐ
1. SQL์์์ ๋ ์ง
2. ๋ ์ง์ ๋ง์ ๊ณผ ๋บ์
__15๊ฐ__CASE ๋ฌธ์ผ๋ก ๋ฐ์ดํฐ ๋ณํํ๊ธฐ
1. CASE ๋ฌธ
2. ๋ ํ๋์ CASE ๋ฌธ
3. CASE๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฃผ์์ฌํญ
9๊ฐ ์ ๋ ฌ - ORDER BY
ORDER BY ๊ตฌ
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์ ORDER BY ์ด๋ช
์ ๋ ฌ
๋ฐ์ดํฐ๋ฅผ ์ค๋ฆ์ฐจ์ ๋๋ ๋ด๋ฆผ์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฐฐ์น
์ค๋ฆ์ฐจ์: a-z, 1-9, ใฑ-ใ
๋ด๋ฆผ์ฐจ์: z-a, 9-1, ใ -ใฑ
9.1 ORDER BY๋ก ๊ฒ์ ๊ฒฐ๊ณผ ์ ๋ ฌํ๊ธฐ
WHERE ๊ตฌ ๋ค์ ORDER BY ๊ตฌ๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ
์์๋ ๋ฐ๋์ง ์๋๋ค.
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์ ORDER BY ์ด๋ช
FROM ๊ตฌ ๋ค์ ORDER BY ๊ตฌ๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ (๊ฒ์ ์กฐ๊ฑด์ด ํ์ ์๋ ๊ฒฝ์ฐ์๋ WHERE ๊ตฌ ์๋ต)
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
ORDER BY ์ด๋ช
์ฐ์ด๋ ๊ฒฝ์ฐ
ex) ์ผํ๋ชฐ ์ฟ ํก: ์ฟ ํก ๋ญํน์ | ๋ฎ์ ๊ฐ๊ฒฉ์ | ๋์ ๊ฐ๊ฒฉ์ | ํ๋งค๋์ | ์ต์ ์
์์ ) age ์ด๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample31;
-- age ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample31 ORDER BY age; -- ๋์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
์์ ) address ์ด๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample31;
-- address ์ด๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample31 ORDER BY address; -- ์ฃผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
9.2 ORDER BY DESC๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ (DESC = descendant(ํ๊ฐ))
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
ORDER BY ์ด๋ช
DESC
์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ (ASC = ascendant(์์น))
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
ORDER BY ์ด๋ช
ASC
Point: DESC๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๋ค.
ASC๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ค.
ORDER BY์ ๊ธฐ๋ณธ ์ ๋ ฌ๋ฐฉ๋ฒ์ ์ค๋ฆ์ฐจ์์ด๋ค.
์์ ) DESC์ ASC
-- age ์ด์ ๊ฐ์ DESC๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample31 ORDER BY age DESC;
-- age ์ด์ ๊ฐ์ ASC๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample31 ORDER BY age ASC;
9.3 ๋์๊ด๊ณ
๋ ์ง์๊ฐํ ๋ฐ์ดํฐ์ ๋์๊ด๊ณ
(์๋ค = ์ด์ ) 1999๋
< ... < 2013๋
< 2014๋
(ํฌ๋ค = ์ต๊ทผ)
Point: ๋ฌธ์์ดํ ๋ฐ์ดํฐ์ ๋์๊ด๊ณ๋ ์ฌ์ ์ ์์์ ์ํด ๊ฒฐ์ ๋๋ค.
์์ ) sample311 ํ
์ด๋ธ
-- sample311 ํ
์ด๋ธ์ ๋ด์ฉ ์ฐธ์กฐํ๊ธฐ
SELECT * FROM sample311;
์์ ) sample311์ a ์ด๋ก ์ ๋ ฌํ๊ธฐ
-- a ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample311 ORDER BY a;
a ์ด์ด ๋ฌธ์์ดํ์ผ๋ก ๋์ด ์์ด ๋์๊ด๊ณ๋ฅผ ์ฌ์ ์ ์์๋ก ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ ํ์์ด๋ค.
1 < 10 < 11 < 2 (๋ฌธ์์ดํ)
b ์ด๋ก ์ ๋ ฌํด๋ณด๋ฉด b ์ด์ ์์นํ ์ด์ด๋ฏ๋ก ๊ฒฐ๊ณผ๊ฐ ์์๋๋ก๋ค.
Point: ์์นํ๊ณผ ๋ฌธ์์ดํ ๋ฐ์ดํฐ๋ ๋์๊ด๊ณ์ ๊ณ์ฐ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค.
9.4 ORDER BY๋ ํ
์ด๋ธ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
ORDER BY๋ฅผ ์ด์ฉํ๋ฉด ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ํ ์์๋ฅผ ๋ฐ๊พธ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒ๋ฟ, ์ ์ฅ์ฅ์น์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ํ ์์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ค.
SELECT ๋ช
๋ น์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ช
๋ น์ด๋ค. ์ด๋ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐ๋ง ํ ๋ฟ์ด๋ฉฐ ๋ณ๊ฒฝ์ ํ์ง ์๋๋ค.
์ฐธ์กฐ: ์ฐธ๊ณ ๋ก ๋น๊ตํ๊ณ ๋์กฐํ์ฌ ๋ณด๋ค.
10๊ฐ ๋ณต์์ ์ด์ ์ง์ ํด ์ ๋ ฌํ๊ธฐ (ORDER BY) p. 102
-- ORDER BY ๊ตฌ
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์
ORDER BY ์ด๋ช
1 [ASC|DESC], ์ด๋ช
2 [ASCDESC] ...
10.1 ๋ณต์ ์ด๋ก ์ ๋ ฌ ์ง์
์์ ) sample32 ํ
์ด๋ธ
-- sample32 ํ
์ด๋ธ์ ๋ด์ฉ ์ฐธ์กฐํ๊ธฐ
SELECT * FROM sample32;
์์ ) a ์ด๋ก ์ ๋ ฌํ๊ธฐ
-- sample32๋ฅผ a์ด๋ง์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample32 ORDER BY a;
- ORDER BY๋ก ๋ณต์ ์ด ์ง์ ํ๊ธฐ
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
ORDER BY ์ด๋ช
1, ์ด๋ช
2...
์์ ) a ์ด๊ณผ b ์ด๋ก ์ ๋ ฌํ๊ธฐ
-- sample32๋ฅผ a ์ด๊ณผ b ์ด๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample32 ORDER BY a, b;
Point: ORDER BY ๊ตฌ์ ๋ณต์์ ์ด์ ์ง์ ํ ์ ์๋ค.
์์ ) b ์ด๊ณผ a ์ด๋ก ์ ๋ ฌํ๊ธฐ
-- sample32๋ฅผ b ์ด๊ณผ a ์ด๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample32 ORDER BY b, a;
๋จผ์ b ์ด์์ ๊ฐ์ ํฌ๊ธฐ ์์๋๋ก ์ ๋ ฌ๋๊ณ , ๊ฐ์ด ๊ฐ์ ๋ถ๋ถ์ a ์ด๋ก ์ ๋ ฌ๋ ๊ฒ์ ์ ์ ์๋ค.
10.2 ์ ๋ ฌ๋ฐฉ๋ฒ ์ง์ ํ๊ธฐ p. 106
๋ณต์ ์ด ์ ๋ ฌ
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
ORDER BY ์ด๋ช
1 [ASC|DESC], ์ด๋ช
2 [ASC|DESC] ...
์์ ) a ์ด์ ASC๋ก b ์ด์ DESC๋ก ์ ๋ ฌํ๊ธฐ
-- sample32๋ฅผ a ์ด ASC๋ก, b ์ด DESC๋ก ์ ๋ ฌํ๊ธฐ
SELECT * FROM sample32 ORDER BY a ASC, b DESC;
๋ฌธ์ฅ์ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด์๋ผ๋ ๊ฐ๋ฅํ ํ ์ ๋ ฌ๋ฐฉ๋ฒ์ ์๋ตํ์ง ๋ง๊ณ ์ง์ ํ๋๋ก ํ๋ค.
10.3 NULL ๊ฐ์ ์ ๋ ฌ ์์
ORDER BY๋ก ์ง์ ํ ์ด์์ NULL ๊ฐ์ ๊ฐ์ง๋ ํ์ ๊ฐ์ฅ ๋จผ์ ํ์๋๊ฑฐ๋ ๊ฐ์ฅ ๋์ค์ ํ์๋๋ค.
MySQL์ ๊ฒฝ์ฐ NULL ๊ฐ์ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก ์ทจ๊ธํด ASC(์ค๋ฆ์ฐจ์)์์๋ ๊ฐ์ฅ ๋จผ์ , DESC(๋ด๋ฆผ์ฐจ์)์์๋ ๊ฐ์ฅ ๋์ค์ ํ์ํ๋ค.
11๊ฐ ๊ฒฐ๊ณผ ํ ์ ํํ๊ธฐ - LIMIT p. 108
LIMIT ๊ตฌ
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
LIMIT ํ์ [OFFSET ์์ํ]
ํ์ด์ง ์ฒ๋ฆฌ์ ์ฐ์ธ๋ค.
- LIMIT(ํ์คSQL์ด ์๋๋ค. DBMS์ ๋ฐ๋ผ ์ง์์ด ์ ๋ ์ ์๋ค.)
- ROWNUM(ํ์คSQL์ด๋ค.)
11.1 ํ์ ์ ํ
LIMIT ๊ตฌ๋ ํ์ค SQL์ ์๋๋ค. MySQL๊ณผ PostgreSQL์์ ์ฌ์ฉํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค.
LIMIT ๊ตฌ
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์ ORDER BY ์ด๋ช
LIMIT ํ์
์์ ) sample33 ํ ์ด๋ธ
-- sample33 ํ
์ด๋ธ์ ๋ด์ฉ ์ฐธ์กฐํ๊ธฐ
SELECT * FROM sample33;
์์ ) LIMIT๋ก ํ์ ์ ํํ๊ธฐ
-- sample33์ LIMIT 3์ผ๋ก ์์ 3๊ฑด๋ง ์ทจ๋ํ๊ธฐ
SELECT * FROM sample33 LIMIT 3;
3๊ฐ์ ํ์ด ๋ฐํ๋์๋ค. LIMIT๋ก ์ง์ ํ๋ ๊ฒ์ '์ต๋ ํ์'์ด๋ค.
๋ง์ฝ ํ
์ด๋ธ์ ํ๋์ ํ๋ง ์๋ค๋ฉด LIMIT 3์ผ๋ก ์ง์ ํด๋ 1๊ฐ์ ํ์ด ๋ฐํ๋๋ค.
Point: LIMIT ๊ตฌ๋ก ๋ฐํ๋ ํ์๋ฅผ ์ ํํ ์ ์๋ค.
๋จ์ํ๊ฒ WHERE ์ ์ ์ธ ๊ฒฝ์ฐ ํ์ด์ง ์ฒ๋ฆฌ ๋ ๊ธ ์ญ์ ํ๋ฉด ์ ๋๋ก ์ ๋๋ฏ๋ก LIMIT๋ฅผ ์ด๋ค.
1) ์ ๋ ฌํ ํ ์ ํํ๊ธฐ
์์ ) ์ ๋ ฌ ํ LIMIT๋ก ํ์ ์ ํํ๊ธฐ
-- sample33์ ์ ๋ ฌ ํ LIMIT 3์ผ๋ก ์์ 3๊ฑด๋ง ์ทจ๋ํ๊ธฐ
SELECT * FROM sample33 ORDER BY no DESC LIMIT 3;
no ์ด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ฆฌํ ๋ค์ ์์ 3๊ฐ ํ์ ํด๋นํ๋ '7, 6, 5'๊ฐ ํ์๋์๋ค.
2) LIMIT๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์์ ํ ์ ํ p. 111
SQL Server
SELECT TOP 3 * FROM sample33;
Oracle
SELECT * FROM sample33 WHERE ROWNUM <= 3;
ROWNUM: ํด๋ผ์ด์ธํธ์๊ฒ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ ๋ ๊ฐ ํ์ ํ ๋น๋๋ ํ ๋ฒํธ
๋ค์ ์ซ์๊ฐ ์ฌ์ ๋น๋๋ฏ๋ก ๊ฒฐ๊ด๊ฐ์ด ๋ค๋ฅด๋ค.
ROWNUM | no |
1 | 1 |
2 | 3 |
3 | 4 |
4 | 5 |
5 | 6 |
6 | 7 |
ex) ๋ค์ด๋ฒ ์นดํ ๊ฒ์ํ ๊ธ ๋ฒํธ๊ฐ 990์์ 1004๋ก ๋์ด๊ฐ๋ค.
ํ์ง๋ง, ํ์ด์ง ์ฒ๋ฆฌํ ๋๋ ROWNUM์ผ๋ก ์ฒ๋ฆฌํ๋ค.
In computing, a client is a piece of computer hardware or software that accesses a service made available by a server as part of the client–server model of computer networks.
11.2 ์คํ์
์ง์ p. 112
๊ทธ๋ฆผ) ํ์ด์ง ๋ฐ๊พธ๊ธฐ
1 [0] | LIMIT 5 (5๊ฐ์ฉ ํ์) |
6 <- OFFSET 5 [5] (๋ฐฐ์ด 5) | LIMIT 5 (5๊ฐ์ฉ ํ์) |
2 [1] | 7 [6] | ||
3 [2] | 8 [7] | ||
4 [3] | 9 [8] | ||
5 [4] | 10 [9] | ||
< 1 2 3 > 1 ํ์ด์ง | < 1 2 3 > 2 ํ์ด์ง |
LIMIT 5 OFFSET 5: 2ํ์ด์ง์ ๊ฒฝ์ฐ, ๋ฐฐ์ด ์ธ๋ฑ์ค 5(∴6ํ)๋ถํฐ 5๊ฑด ํ์
LIMIT 5: ๋ณด์ฌ์ฃผ๋ ๊ฐ์ 5๊ฐ
OFFSET 5: ์ด๋์ ์์ํ๋์ง ์ธ๋ฑ์ค 5์์ ์์ํ๋ค. (์๋ฐ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋น์ทํ๋ค.)
ํ ํ์ด์ง ๋น ๋ฐ์ดํฐ 3๊ฑด์ฉ ์ด 3๊ฐ ํ์ด์ง์ ๋๋ ํ์ํ๋ค.
์์ ) LIMIT๋ก ์ฒซ ๋ฒ์งธ ํ์ด์ง์ ํ์ํ ๋ฐ์ดํฐ ์ทจ๋ํ๊ธฐ
-- sample33์์ LIMIT 3 OFFSET 0์ผ๋ก ์ฒซ ๋ฒ์งธ ํ์ด์ง ํ์
SELECT * FROM sample33 LIMIT 3 OFFSET 0;
LIMIT 3: 3๊ฐ ํ์
OFFSET 0: 0๋ถํฐ (์๋ฐ ๋ฐฐ์ด ์ธ๋ฑ์ค์ ๋น์ทํ๋ค.)
no | ๋ฐฐ์ด ์ธ๋ฑ์ค |
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 5 |
7 | 6 |
๋ฐฐ์ด(array)์ ๊ฐ์ ํ์ ์ ๋ณ์๋ค๋ก ์ด๋ฃจ์ด์ง ์ ํ ์งํฉ์ผ๋ก ์ ์๋ฉ๋๋ค. ๋ฐฐ์ด์ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ๊ฐ์ ๋ฐฐ์ด ์์(element)๋ผ๊ณ ํ๋ฉฐ, ๋ฐฐ์ด์์์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์ซ์๋ ์ธ๋ฑ์ค(index)๋ผ๊ณ ํฉ๋๋ค.
OFFSET ์ง์
SELECT ์ด๋ช
FROM ํ
์ด๋ธ๋ช
LIMIT ํ์ OFFSET ์์น
์์ ) LIMIT๋ก ๋ ๋ฒ์งธ ํ์ด์ง์ ํ์ํ ๋ฐ์ดํฐ ์ทจ๋ํ๊ธฐ
-- sample33์์ LIMIT 3 OFFSET 0์ผ๋ก ๋ ๋ฒ์งธ ํ์ด์ง ํ์
SELECT * FROM sample33 LIMIT 3 OFFSET 3;
LIMIT 3: 3๊ฐ ํ์
OFFSET 3: 3๋ถํฐ
no | ๋ฐฐ์ด ์ธ๋ฑ์ค |
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
5 | 4 |
6 | 5 |
7 | 6 |
12๊ฐ ์์น ์ฐ์ฐ p. 114
์ฐ์ ์ฐ์ฐ
+ - * / % MOD
-์ฐ์ฐ ํ CREATE TABLE๋ก ํ
์ด๋ธ(์ด)์ ์ ๋ง๋ค์ด๋ ๋๋ค.
- SELECT ์ ์ (SELECT ์ค๋ฅธ์ชฝ์) ์ฐ์ฐ์ ๋ฃ์ด์ ์ฐ์ฐ์ ํ๋ค.
12.1 ์ฌ์น ์ฐ์ฐ
+
-
*
/
% (๋๋จธ์ง)
Point: ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ฌ๋ฌ ๊ฐ์ง ์ฐ์ฐ์ ํ ์ ์๋ค.
์ฐ์ ์์ *, /, % > +, -
12.2 SELECT ๊ตฌ๋ก ์ฐ์ฐํ๊ธฐ
SELECT ๊ตฌ
SELECT ์ 1, ์ 2 ... FROM ํ
์ด๋ธ๋ช
์์ ) sample34 ํ ์ด๋ธ
-- sample34 ํ
์ด๋ธ์ ๋ด์ฉ ์ฐธ์กฐํ๊ธฐ
SELECT * FROM sample34;
์์ ) SELECT ๊ตฌ๋ก ๊ธ์ก ๊ณ์ฐํ๊ธฐ
SELECT * ์์ , ์ ๊ณ ์ฐ์ฐ์ ์ด๋ค.
-- ๊ฐ๊ฒฉ x ์๋์ผ๋ก ๊ธ์ก ๊ณ์ฐํ๊ธฐ
SELECT *, price * quantity FROM sample34;
12.3 ์ด์ ๋ณ๋ช
(Aliases) (, price * quantity AS amount) p. 118
SQL aliases are used to give a table, or a column in a table, a temporary name.
Aliases are often used to make column names more readable.
An alias only exists for the duration of that query.
An alias is created with the AS keyword.
์ฐธ๊ณ : https://www.w3schools.com/sql/sql_alias.asp
price * qunatity์ ๊ฐ์ด ์ด ์ด๋ฆ์ด ๊ธธ๊ณ ์์๋ณด๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ๋ ๋ณ๋ช ์ ๋ถ์ฌ ์ด๋ช ์ ์ฌ์ง์ ํ ์ ์๋ค.
์์ ) SELECT ๊ตฌ์์ ์์ ๋ณ๋ช ๋ถ์ด๊ธฐ
-- price * quantity ์์ amount๋ผ๋ ๋ณ๋ช
๋ถ์ด๊ธฐ
SELECT *, price * quantity AS amount FROM sample34;
ํค์๋ AS๋ ์๋ตํ ์ ์๋ค.
์์ผ๋ฆฌ์ด์ค(alias)๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ ๋ณ๋ช
์ ์์ด, ์ซ์, ํ๊ธ ๋ฑ์ผ๋ก ์ง์ ํ ์ ์๋ค. ๋จ, ๋ณ๋ช
์ ํ๊ธ๋ก ์ง์ ํ๋ ๊ฒฝ์ฐ์๋ ์ฌ๋ฌ ๊ฐ์ง๋ก ์ค์๋ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ๋๋ธ์ฟผํธ(MySQL์์๋ ๋ฐฑ์ฟผ๋)๋ก ๋๋ฌ์ธ์ ์ง์ ํ๋ค.
SELECT price * quantity "๊ธ์ก" FROM sample34;
Point: ์ด๋ฆ์ ASCII ๋ฌธ์ ์ด์ธ์ ๊ฒ์ ํฌํจํ ๊ฒฝ์ฐ๋ ๋๋ธ์ฟผํธ๋ก ๋๋ฌ์ธ์ ์ง์ ํ๋ค.
๋๋ธ์ฟผํธ๋ก ๋๋ฌ์ธ๋ฉด ๋ช
๋ น๊ตฌ๋ฌธ์ ๋ถ์ํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด์ ์ด๋ฆ์ด๋ผ๊ณ ๊ฐ์ฃผํ๋ค.
MySQL์์๋ ๋ฐฑ์ฟผํธ(``)๋ก ๊ฐ์ธ์ค๋ค.
ํํธ ์ฑ๊ธ์ฟผํธ๋ก ๋๋ฌ์ธ๋ ๊ฒ์ ๋ฌธ์์ด ์์์ด๋ค.
์์: ๋ณํ์ง ์๋ ๋ณ์
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ช
"sample21" "sample34" -- ๋๋ธ์ฟผํธ๋ก ๋๋ฌ์ผ๋ค.
-- ๋ฌธ์์ด ์์
'ABC' '๋ฐ์ค์ฉ' -- ์ฑ๊ธ์ฟผํธ๋ก ๋๋ฌ์ผ๋ค.
๋๋ธ์ฟผํธ๋ก ๋๋ฌ์ธ์ ์ง์ ํ๋ฉด ์์ฝ์ด์ ๊ฐ์ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์๋ค.
SELECT price * quantity AS "SELECT" FROM sample34;
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด๋ช
์ ์ซ์๋ก ์์ํด์๋ ์ ๋๋ค๋ ์ ์ฝ์ด ์๋ค.
MySQL: ์ซ์๋ก ์์ํ๋ ๊ฐ์ฒด๋ช
์ด ํ์ฉ๋์ง๋ง ์ซ์๋ง์ผ๋ก ๊ตฌ์ฑ๋๋ ๊ฐ์ฒด๋ช
์ ํ์ฉ๋์ง ์๋๋ค.
Oracle: ์ซ์๋ก ์์ํ๋ ์ด๋ฆ์ ํ์ฉ๋์ง ์๋๋ค.
Point: ์ด๋ฆ์ ์ง์ ํ๋ ๊ฒฝ์ฐ ์ซ์๋ก ์์๋์ง ์๋๋ก ํ๋ค.
12.4 WHERE ๊ตฌ์์ ์ฐ์ฐํ๊ธฐ (WHERE price * quantity >= 2000)
์์ ) WHERE ๊ตฌ์์ ๊ณ์ฐ, ๊ฒ์ํ๊ธฐ
SELECT *, price * quantity AS amount FROM sample34;
-- WHERE ๊ตฌ์์ ๊ธ์ก์ ๊ณ์ฐํ๊ณ 2000์ ์ด์์ธ ํ ๊ฒ์ํ๊ธฐ
SELECT *, price * quantity AS amount FROM sample34
WHERE price * quantity >= 2000;
WHERE ๊ตฌ → SELECT ๊ตฌ์ ์์๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก WHERE ๊ตฌ ์์ amount๋ฅผ ์ฐ๋ฉด amount๋ผ๋ ์ด์ ์กด์ฌํ์ง ์๋๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
Point: SELECT ๊ตฌ์์ ์ง์ ํ ๋ณ๋ช
์ WHERE ๊ตฌ ์์์ ์ฌ์ฉํ ์ ์๋ค.
12.5 NULL ๊ฐ์ ์ฐ์ฐ (NULL + 1 = NULL)
SQL์์๋ NULL ๊ฐ์ด 0์ผ๋ก ์ฒ๋ฆฌ๋์ง ์๋๋ค.
๋ค์ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ํ ๋ชจ๋ NULL์ด ๋๋ค.
NULL + 1
1 + NULL
1 + 2 * NULL
1 / NULL -- NULL์ด 0์ผ๋ก ์ฒ๋ฆฌ๋์ง ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ๊ฒฐ๊ณผ๋ NULL์ด ๋๋ค.
Point: NULL๋ก ์ฐ์ฐํ๋ฉด ๊ฒฐ๊ณผ๋ NULL์ด ๋๋ค.
12.6 ORDER BY ๊ตฌ์์ ์ฐ์ฐํ๊ธฐ (ORDER BY amount DESC)
์์ ) ๊ธ์ก์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT *, price * quantity AS amount FROM sample34;
-- ORDER BY ๊ตฌ์์ ๊ธ์ก์ ๊ณ์ฐํ๊ณ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT *, price * quantity AS amount FROM sample34 ORDER BY price * quantity DESC;
์์ ) ๊ธ์ก์ ๋ณ๋ช ์ ์ฌ์ฉํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๊ธฐ
SELECT *, price * quantity AS amount FROM sample34;
-- ORDER BY ๊ตฌ์์ ๋ณ๋ช
์ ์ฌ์ฉํด ์ ๋ ฌํ๊ธฐ
SELECT *, price * quantity AS amount FROM sample34 BY amount DESC;
WHERE ๊ตฌ → SELECT ๊ตฌ (์ฌ๊ธฐ์ ๋ณ๋ช ์ ์ง์ ) → ORDER BY ๊ตฌ
Point: ORDER BY ๊ตฌ์์๋ SELECT ๊ตฌ์์ ์ง์ ํ ๋ณ๋ช ์ ์ฌ์ฉํ ์ ์๋ค.
12.7 ํจ์
ํจ์
ํจ์๋ช
(์ธ์1, ์ธ์2 ...)
Point: ํจ์๋ ์ฐ์ฐ์๋ ํ๊ธฐ ๋ฐฉ๋ฒ์ด ๋ค๋ฅผ ๋ฟ, ๊ฐ์ ๊ฒ์ด๋ค.
12.8 ROUND ํจ์
create table sample341(
price int,
quantity int,
amount decimal(10,2)
);
decimal(10,2) means you can have a decimal number with a maximal total precision of 10 digits. 2 of them after the decimal point and 8 before. (10,2) defines the precision of the decimal value. 10 digits and 2 digits after the comma.
์์ ) ROUND๋ก ๋ฐ์ฌ๋ฆผํ๊ธฐ
SELECT * FROM sample341;
-- ROUND๋ก ๋ฐ์ฌ๋ฆผ
SELECT amount, ROUND(amount) FROM sample341;
- ๋ฐ์ฌ๋ฆผ ์๋ฆฟ์ ์ง์
9 | 6 | 1 | . | 6 | 0 |
-3 = 100 ๋จ์ | -2 = 10 ๋จ์ | -1 = 1๋จ์ | 0 = ์์์ ์ฒซ์งธ ์๋ฆฌ | 1 = ์์์ ๋์งธ ์๋ฆฌ |
์์ ) ์์์ ๋์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๊ธฐ
-- ROUND ํจ์์ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ์ง์ ํด, ์์์ ๋์งธ ์๋ฆฌ๋ฅผ ๋ฐ์ฌ๋ฆผ
SELECT amount, ROUND(amount, 1) FROM sample341;
์์ ) 10 ๋จ์๋ฅผ ๋ฐ์ฌ๋ฆผํ๊ธฐ
-- ROUND ํจ์์ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ์ง์ ํด 10๋จ์๋ฅผ ๋ฐ์ฌ๋ฆผ
SELECT amount, ROUND(amount, -2) FROM sample341;
13๊ฐ ๋ฌธ์์ด ์ฐ์ฐ p. 150
๋ฌธ์์ด ์ฐ์ฐ
+|| CONCAT SUBSTRING TRIM CHARACTER_LENGTH
13.1 ๋ฌธ์์ด ๊ฒฐํฉ (CONCAT)
๋ฌธ์์ด ๊ฒฐํฉ ์ฌ๋ก
'ABC' || '1234' → 'ABC1234'
์ฐ์ฐ์/ํจ์ | ์ฐ์ฐ | ๋ฐ์ดํฐ๋ฒ ์ด์ค |
+ | ๋ฌธ์์ด ๊ฒฐํฉ | SQL Server |
|| | ๋ฌธ์์ด ๊ฒฐํฉ | Oracle, DB2, PostgreSQL |
CONCAT | ๋ฌธ์์ด ๊ฒฐํฉ | MySQL |
Point: + ์ฐ์ฐ์, || ์ฐ์ฐ์, CONCAT ํจ์๋ก ๋ฌธ์์ด์ ๊ฒฐํฉํ ์ ์๋ค.
concatenate: to put things together as a connected series
์์ ) ๋ฌธ์์ด ๊ฒฐํฉ
SELECT * FROM sample35;
-- ๋ฌธ์์ด ๊ฒฐํฉ์ผ๋ก ๋จ์๋ฅผ ์ฐ๊ฒฐํด ๊ฒฐ๊ณผ ์ป๊ธฐ
SELECT CONCAT(quantity, unit) FROM sample35;
13.2 SUBSTRING ํจ์ (๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ ๊ณ์ฐํด์ ๋ฐํ)
SUBSTRING: ๋ฌธ์์ด์ ์ผ๋ถ๋ถ์ ๊ณ์ฐํด์ ๋ฐํํด ์ฃผ๋ ํจ์์ด๋ค.
-- ์ 4์๋ฆฌ(๋
) ์ถ์ถ
SUBSTRING('20140125001', 1, 4) -> '2014'
-- 5์งธ ์๋ฆฌ๋ถํฐ 2์๋ฆฌ(์) ์ถ์ถ
SUBSTRING('20140125001', 5, 2) -> '01'
์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ ๋ฑ์ ์ฐ์ธ๋ค.
13.3 TRIM ํจ์ (์คํ์ด์ค ์ ๊ฑฐ)
TRIM: ๋ฌธ์์ด์ ์๋ค๋ก ์ฌ๋ถ์ ์คํ์ด์ค๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ๊ฑฐํด ์ฃผ๋ ํจ์๋ก ๋ฌธ์์ด ๋์ค์ ์กด์ฌํ๋ ์คํ์ด์ค๋ ์ ๊ฑฐ๋์ง ์๋๋ค.
-- TRIM์ผ๋ก ์คํ์ด์ค ์ ๊ฑฐํ๊ธฐ
TRIM('ABC ') -> 'ABC'
13.4 CHARACTER_LENGTH ํจ์ (๋ฌธ์์ด์ ๊ธธ์ด)
CHARACTER_LENGTH: ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํด ๋๋ ค์ฃผ๋ ํจ์์ด๋ค.
OCTET_LENGTH: ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํด ๋๋ ค์ฃผ๋ ํจ์์ด๋ค.
๋ฌธ์ ํ๋์ ๋ฐ์ดํฐ๊ฐ ๋ช ๋ฐ์ดํธ์ ์ ์ฅ๊ณต๊ฐ์ ํ์๋ก ํ๋์ง '์ธ์ฝ๋ ๋ฐฉ์'์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค.
Point: ๋ฌธ์์ด ๋ฐ์ดํฐ์ ๊ธธ์ด๋ ๋ฌธ์์ธํธ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
14๊ฐ ๋ ์ง ์ฐ์ฐ p. 136
๋ ์ง ์ฐ์ฐ
CURRENT_TIMESTAMP CURRENT_DATE INTERVAL
14.1 SQL์์์ ๋ ์ง
1) ์์คํ ๋ ์ง
์์ ) ์์คํ
๋ ์ง ํ์ธํ๊ธฐ (CURRENT_TIMESTAMP)
-- CURRENT_TIMESTAMP๋ก ์์คํ
๋ ์ง ํ์ธ
SELECT CURRENT_TIMESTAMP;
Oracle: SYSDATE ํจ์
SQL Server: GETDATE ํจ์
2) ๋ ์ง ์์ (date_format(hiredate, "%y/%m/%d"))
Oracle์ ๊ฒฝ์ฐ TO_DATE ํจ์๋ฅผ ์ฌ์ฉํด ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ ์งํ ๋ฐ์ดํฐ๋ก ๋ณํํ ์ ์๋ค.
TO_DATE('2014/01/25', 'YYYY/MM/DD')
Point: ๋ ์ง ๋ฐ์ดํฐ๋ ์์์ ์ง์ ํ ์ ์๋ค.
14.2 ๋ ์ง์ ๋ง์ ๊ณผ ๋บ์
์์ ) ์์คํ ๋ ์ง์ 1์ผ ํ๋ฅผ ๊ณ์ฐํ๊ธฐ (CURRENT_DATE + INTERVAL 1 DAY)
-- ๋ ์ง๋ฅผ ์ฐ์ฐํด ์์คํ
๋ ์ง์ 1์ผ ํ๋ฅผ ๊ฒ์
SELECT CURRENT_DATE + INTERVAL 1 DAY;
- ๋ ์งํ ๊ฐ์ ๋บ์ (DATEDIFF)
MySQL
DATEDIFF('2014-02-28', '2014-01-01')
SELECT DATEDIFF(month, '2017/08/25', '2011/08/25') AS DateDiff;
-- ๊ฒฐ๊ณผ -72 (๋ฌ)
SELECT DATEDIFF(hour, '2017/08/25 07:00', '2017/08/25 12:45') AS DateDiff;
-- ๊ฒฐ๊ณผ 5 (์๊ฐ)
์ฐธ๊ณ : https://www.w3schools.com/sql/func_sqlserver_datediff.asp
Oracle
'2014-02-28' - '2014-01-01'
15๊ฐ CASE ๋ฌธ์ผ๋ก ๋ฐ์ดํฐ ๋ณํํ๊ธฐ p. 140
IF์ ์ ์ฌํ๋ค.
CASE ๋ฌธ
CASE WHEN ์กฐ๊ฑด์1 THEN ์1
[WHEN ์กฐ๊ฑด์2 THEN ์2 ...]
[ELSE ์3]
END
15.1 CASE ๋ฌธ p. 141
CASE ๋ฌธ
CASE WHEN ์กฐ๊ฑด์1 THEN ์1
[WHEN ์กฐ๊ฑด์2 THEN ์2 ...]
[ELSE ์3]
END
์์ ) NULL ๊ฐ์ 0์ผ๋ก ๋ณํํ๊ธฐ
NULL๊ฐ์ด ์์ผ๋ฉด ์ฐ์ฐ์ด ์ ๋๋ฏ๋ก ๋ณํํ๋ค.
SELECT a FROM sample37;
-- CASE๋ก NULL ๊ฐ์ 0์ผ๋ก ๋ณํํ๊ธฐ
SELECT a, CASE WHEN a IS NULL THEN 0 ELSE a END "a(null=0)" FROM sample37;
The IFNULL() function returns a specified value if the expression is NULL. If the expression is NOT NULL, this function returns the expression.
SELECT IFNULL(NULL, 500);
-- 500
- COALESCE ํจ์ p. 142
SELECT a, COALESCE(a, 0) FROM sample37;
์ฌ๋ฌ ๊ฐ์ ์ธ์๋ฅผ ์ง์ ํ ์ ์๋ค. NULL์ด ์๋ ๊ฐ์ ๋ํด์๋ ๊ฐ์ฅ ๋จผ์ ์ง์ ๋ ์ธ์์ ๊ฐ์ ๋ฐํํ๋ค.
a๊ฐ NULL์ด ์๋๋ฉด a๊ฐ์ ๊ทธ๋๋ก ์ถ๋ ฅํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด (a๊ฐ NULL์ด๋ฉด) 0์ ์ถ๋ ฅํ๋ค.
COALESCE(val1, val2, ...., val_n)
The COALESCE() function returns the first non-null value in a list.
SELECT COALESCE(NULL, 1, 2, 'W3Schools.com');
-- 1
15.2 ๋ ํ๋์ CASE ๋ฌธ
WHEN a = 1 THEN '๋จ์'
WHEN a = 2 THEN '์ฌ์'
Point: CASE ๋ฌธ์๋ 2๊ฐ์ ๊ตฌ๋ฌธ์ด ์๋ค.
[1] ๋จ์ CASE ์ - NULL๊ฐ ๋น๊ต ๋ถ๊ฐ
CASE ์1
WHEN ์2 THEN ์3
[WHEN ์4 THEN ์5 ... ]
[ELSE ์6]
END
์์ ) ์ฑ๋ณ ์ฝ๋ ๋ณํํ๊ธฐ ([2] ๊ฒ์ CASE - NULL๊ฐ ๋น๊ต ๊ฐ๋ฅ)
-- ๊ฒ์ CASE๋ก ์ฑ๋ณ ์ฝ๋๋ฅผ ๋จ์, ์ฌ์๋ก ๋ณํํ๊ธฐ
SELECT a AS "์ฝ๋",
CASE
WHEN a = 1 THEN '๋จ์'
WHEN a = 2 THEN '์ฌ์'
ELSE '๋ฏธ์ง์ ' -- ์ด์ด 1 ๋๋ 2๊ฐ ์๋ ๊ฒฝ์ฐ
END AS "์ฑ๋ณ" FROM sample37;
์์ ) ์ฑ๋ณ ์ฝ๋ ๋ณํํ๊ธฐ ([1] ๋จ์ CASE - NULL๊ฐ ๋น๊ต ๋ถ๊ฐ)
-- ๋จ์ CASE๋ก ์ฑ๋ณ ์ฝ๋๋ฅผ ๋จ์, ์ฌ์๋ก ๋ณํํ๊ธฐ
SELECT a AS "์ฝ๋",
CASE a -- CASE ๋ค์๋ ๋์์ ์ ๋๋ค.
WHEN 1 THEN '๋จ์' -- WHEN ๋ค์๋ ๊ฐ๋ง ์ ๋๋ค.
WHEN 2 THEN '์ฌ์'
ELSE '๋ฏธ์ง์ '
END AS "์ฑ๋ณ" FROM sample37;
NULL๊ฐ ๋น๊ต๋ IS NULL์ด๋ฏ๋ก NULL๊ฐ์ด ์์ผ๋ฉด ์ฌ์ฉ ์ ํ๋ ๋ฐฉ์์ด๋ค.
15.3 CASE๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ฃผ์์ฌํญ p. 145
1) ELSE ์๋ต
ELSE๋ฅผ ์๋ตํ๋ฉด ELSE NULL์ด ๋๋ ๊ฒ์ ์ฃผ์ํ๋ค.
POINT: CASE ๋ฌธ์ ELSE๋ ์๋ตํ์ง ์๋ ํธ์ด ๋ซ๋ค.
2) WHEN์์ NULL ์ง์ ํ๊ธฐ
-- ๋จ์ CASE ๋ฌธ์์ WHEN ์ ์ NULL ์ง์ ํ๊ธฐ - NULL ๊ฐ ๋น๊ต ๋ถ๊ฐ๋ฅ
CASE a
WHEN 1 THEN '๋จ์'
WHEN 2 THEN '์ฌ์'
WHEN NULL THEN '๋ฐ์ดํฐ ์์'
ELSE '๋ฏธ์ง์ '
END
๋จ์ CASE ๋ฌธ์ผ๋ก๋ NULL์ ๋น๊ตํ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค.
์์ ) [2] ๊ฒ์ CASE ๋ฌธ์ผ๋ก NULL ํธ์ ํ๊ธฐ - NULL ๊ฐ ๋น๊ต ๊ฐ๋ฅ
CASE
WHEN a = 1 THEN '๋จ์'
WHEN a = 2 THEN '์ฌ์'
WHEN a IS NULL THEN '๋ฐ์ดํฐ ์์'
ELSE '๋ฏธ์ง์ '
END
Point: [1] ๋จ์ CASE ๋ฌธ์ผ๋ก๋ NULL ๊ฐ์ ๋น๊ตํ ์ ์๋ค.
3) DECODE, NVL (Oracle)
Oracle: ๋์ฝ๋๋ฅผ ์ํํ๋ DECODE ํจ์๊ฐ ๋ด์ฅ๋์ด ์๋ค.
- NVL: NULL ๊ฐ์ ๋ณํํ๋ค.
NVL lets you replace null (returned as a blank) with a string in the results of a query.
SQL Server
- ISNULL: NULL ๊ฐ์ ๋ณํํ๋ค.
ํ์ค SQL: COALESCE ํจ์๋ฅผ ์ฌ์ฉํ๋ค.