๐์ 1์ฅ SQL ๊ธฐ๋ณธ
- ์ 1์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
- ์ 2์ SELECT ๋ฌธ
- ์ 3์ ํจ์
- ์ 4์ WHERE ์
- ์ 5์ GROUP BY, HAVING ์
- ์ 6์ ORDER BY ์
- ์ 7์ ์กฐ์ธ
- ์ 8์ ํ์ค ์กฐ์ธ
- ์ฅ ์์ฝ
- ์ฐ์ต๋ฌธ์
โจ์ 1์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค (DBMS : Database Management System)
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ | |
1960๋ ๋ | ํ๋ก์ฐ์ฐจํธ ์ค์ฌ์ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์๋ฉฐ ํ์ผ ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ๊ด๋ฆฌํ๋ค. |
1970๋ ๋ | ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ๊ธฐ๋ฒ์ด ํ๋ํ๋ ์๊ธฐ์์ผ๋ฉฐ ๊ณ์ธตํ(Hierarchical) ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๋งํ(Network) ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ ํ๋ค์ด ์์ฉํ๊ฐ ๋๋ค. |
1980๋ ๋ | ํ์ฌ ๋๋ถ๋ถ์ ๊ธฐ์
์์ ์ฌ์ฉ๋๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์์ฉํ๊ฐ ๋๋ค. Oracle, Sybase, DB2์ ๊ฐ์ ์ ํ์ด ์ฌ์ฉ๋๋ค. |
1990๋ ๋ | Oracle, Sybase, Informix, DB2, Teradata, SQL Server ์ธ ๋ง์ ์ ํ์ด ๋ ํฅ์๋ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ณด์์คํ
์ ํต์ฌ ์๋ฃจ์
์ผ๋ก ์๋ฆฌ์ก์๋ค. ์ธํฐ๋ท ํ๊ฒฝ์ ๊ธ์ํ ๋ฐ์ ์ ๋ฐ๋ง์ถฐ ๊ฐ์ฒด์งํฅ ์ ๋ณด๋ฅผ ์ง์ํ๊ธฐ์ํด ๊ฐ์ฒด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ฐ์ ํ๋ค. |
โ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
1970๋ ์๊ตญ์ ์ํ์์๋ E.F. Godd ๋ฐ์ฌ์ ๋ ผ๋ฌธ์์ ์ฒ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(Relational Database) ๊ฐ ์๊ฐ๋ ์ดํ, IBM์ SQL ๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ Oracle์ ์ ๋ฐ๋ก ์ฌ๋ฌ ํ์ฌ์์ ์์ฉํํ ์ ํ์ ๋ด๋์๋ค.
์ดํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ๋ฌ ์ฅ์ ์ด ์๋ ค์ง๋ฉด์ ๊ธฐ์กด์ ํ์ผ ์์คํ ๊ณผ ๊ณ์ธตํ, ๋งํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋๋ถ๋ถ ๋์ฒดํ๋ฉด์ ์ฃผ๋ ฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋๋ค.
2. SQL (Structured Query Language)
๋ช ๋ น์ด์ ์ข ๋ฅ | ๋ช ๋ น์ด | ์ค๋ช |
๋ฐ์ดํฐ ์กฐ์์ด (DML, Data Manipulation Language) |
SELECT | ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค์ด ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋ ๊ฒ์ํ๊ธฐ ์ํ ๋ช ๋ น์ด๋ก RETRIEVE๋ผ๊ณ ๋ ํ๋ค. |
INSERT UPDATE DELETE |
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋ค์ด ์๋ ๋ฐ์ดํฐ์ ๋ณํ์ ๊ฐํ๋ ์ข ๋ฅ์ ๋ช ๋ น์ด๋ค์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ํ ์ด๋ธ์ ์๋ก์ด ํ์ ์ง์ด๋ฃ๊ฑฐ๋, ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฑฐ๋ ์ํ์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒ๋ค์ ๋ช ๋ น์ด๋ค์ DML ์ด๋ผ๊ณ ํ๋ค. | |
๋ฐ์ดํฐ ์ ์์ด (DDL, Data Definition Language) |
CREATE ALTER DROP RENAME |
ํ
์ด๋ธ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ช
๋ น์ด๋ค์ด๋ค. ๊ตฌ์กฐ๋ฅผ ์์ฑ, ๋ณ๊ฒฝ, ์ญ์ ํ๊ฑฐ๋ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ๋ช ๋ น์ด๋ค์ DDL์ด๋ผ๊ณ ํ๋ค. |
๋ฐ์ดํฐ ์ ์ด์ด (DCL, Data Control Language) |
GRANT (๊ถํ๋ถ์ฌ TO) REVOKE (๊ถํํ์ FROM) |
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ ๊ฐ์ฒด๋ค์ ์ฌ์ฉํ๋๋ก ๊ถํ์ ์ฃผ๊ณ ํ์ํ๋ ๋ช ๋ น์ด๋ฅผ DCL์ด๋ผ๊ณ ํ๋ค. |
ํธ๋์ญ์
์ ์ด์ด (TCL, Transaction Control Language) |
COMMIT ROLLBACK |
๋ ผ๋ฆฌ์ ์ธ ์์ ๋จ์๋ฅผ ๋ฌถ์ด์ DML์ ์ํด ์กฐ์๋ ๊ฒฐ๊ณผ๋ฅผ ์์ ๋จ์(ํธ๋์ญ์ )๋ณ๋ก ์ ์ดํ๋ ๋ช ๋ น์ด๋ฅผ ๋งํ๋ค. |
3. STANDARD SQL ๊ฐ์
1970๋ | Dr. E.F.Codd ๊ด๊ณํ DBMS(Relational DB) ๋ ผ๋ฌธ ๋ฐํ |
1974๋ | IBM SQL ๊ฐ๋ฐ |
1979๋ | Oracle ์์ฉ DBMS ๋ฐํ |
1980๋ | Sybase SQL Server ๋ฐํ(์ดํ Sybase ASE๋ก ๊ฐ๋ช ) |
1983๋ | IBM DB2 ๋ฐํ |
1986๋ | ANSI/ISO SQL ํ์ค ์ต์ด ์ ์ (SQL-86, SQL1) |
1992๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL-92, SQL2) |
1993๋ | MS SQL Server ๋ฐํ(Windows OS, Sybase Code ํ์ฉ) |
1999๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL-99, SQL3) |
2003๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL:2003) |
2006๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL:2006) |
2008๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL:2008) |
2011๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL:2011) |
2016๋ | ANSI/ISO SQL ํ์ค ๊ฐ์ (SQL:2016) |
๊ตญ๋ด๋ฟ๋ง ์๋๋ผ ์ ์ธ๊ณ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ค๋ธ์ ํธ ๊ฐ๋ ์ ํฌํจํ ์ฌ๋ฌ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ด ๊พธ์คํ ์ถ๊ฐ๋๊ณ ์๋ค.
ํ์ฌ ๊ธฐ์ ํ DBMS๋ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋, ๊ฐ์ฒด์ง์ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๊ฐ์ฒด๊ด๊ณํ(Object Relational) ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋๋ถ๋ถ์ด๋ค.
4. ํ ์ด๋ธ
์ฉ์ด | ์ค๋ช |
ํ ์ด๋ธ | ํ๊ณผ ์นผ๋ผ์ 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ์ ์ ์ฅ ์ฅ์์ด๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ |
์นผ๋ผโ์ด | 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์์ ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ ํ๋์ ํน์ ์์ฑ(๋์ด์ ๋๋ ์ ์๋ ํน์ฑ) |
ํ | 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์์ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ |
ํ ์ด๋ธ ๊ด๊ณ ์ฉ์ด๋ค
์ฉ์ด | ์ค๋ช |
์ ๊ทํ | ํ ์ด๋ธ์ ๋ถํ ํด ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ํ๋ณดํ๊ณ , ๋ถํ์ํ ์ค๋ณต์ ์ค์ด๋ ํ๋ก์ธ์ค |
๊ธฐ๋ณธํค | 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์์ ์ธ๋ก ๋ฐฉํฅ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋ ํ๋์ ํน์ ์์ฑ(๋์ด์ ๋๋ ์ ์๋ ํน์ฑ) |
์ธ๋ถํค | 2์ฐจ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ํ ์ด๋ธ์์ ๊ฐ๋ก ๋ฐฉํฅ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ |
5. ERD(Entity Relationship Diagram)
6. ๋ฐ์ดํฐ ์ ํ
๋ฐ์ดํฐ ์ ํ | ์ค๋ช |
CHARACTER(s) | - ๊ณ ์ ๊ธธ์ด ๋ฌธ์์ด ์ ๋ณด(Oracle, SQL Server ๋ชจ๋ CHAR๋ก ํํ) - s๋ ๊ธฐ๋ณธ ๊ธธ์ด 1๋ฐ์ดํธ, ์ต๋ ๊ธธ์ด Oracle 2000Byte, SQL Server 8000Byte - s๋งํผ ์ต๋ ๊ธธ์ด, ๊ณ ์ ๊ธธ์ด๋ฅผ ๊ฐ๊ณ ์์ผ๋ฏ๋ก ํ ๋น๋ ๋ณ์ ๊ฐ์ ๊ธธ์ด๊ฐ s๋ณด๋ค ์์ ๊ฒฝ์ฐ์๋ ๊ทธ ์ฐจ์ด ๊ธธ์ด๋งํผ ๊ณต๊ฐ์ผ๋ก ์ฑ์์ง๋ค. |
VARCHAR(s) | - Character Varying์ ์ฝ์๋ก ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด ์ ๋ณด(Oracle์ Varchar2๋ก ํํ, SQL Server๋ VARCHAR๋ก ํํ) - s๋ ๊ธฐ๋ณธ ๊ธธ์ด 1๋ฐ์ดํธ, ์ต๋ ๊ธธ์ด Oracle 4000Byte, SQL Server 8000Byte |
NUMERIC | - ์ ์, ์ค์ ๋ฑ ์ซ์ (Oracle์ NUMBER๋ก, SQL Server๋ 10๊ฐ์ง ์ด์์ ์ซ์ ํ์
์ ๊ฐ๊ณ ์์) - Oracle์ ์ฒ์์ ์ ์ฒด ์๋ฆฌ ์๋ฅผ ์ง์ ํ๊ณ , ๊ทธ ๋ค์ ์์ ๋ถ๋ถ์ ์๋ฆฌ ์๋ฅผ ์ง์ ํ๋ค. ์๋ฅผ ๋ค์ด, ์ ์ ๋ถ๋ถ์ด 6์๋ฆฌ์ด๊ณ ์์์ ๋ถ๋ถ์ด 2์๋ฆฌ์ธ ๊ฒฝ์ฐ์๋ 'NUMBER(8,2)'์ ๊ฐ์ด ๋๋ค. |
DATETIME | - ๋ ์ง์ ์๊ฐ ์ ๋ณด(Oracle์ DATE๋ก ํํ, SQL Server๋ DATETIME์ผ๋ก ํํ) - Oracle์ 1์ด ๋จ์, SQL Server๋ 3.33ms(millisecond) ๋จ์ ๊ด๋ฆฌ |
โจ์ 2์ SELECT ๋ฌธ
1. SELECT
์ ์คํฐ๋ฆฌ์คํฌ(*) | ํด๋น ํ ์ด๋ธ์ ๋ชจ๋ ์นผ๋ผ ์ ๋ณด๋ฅผ ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ์ * ๋ฅผ ์ฌ์ฉํด ์กฐํํ๋ค. |
ALL | Default ์ต์ ์ด๋ฏ๋ก ๋ณ๋๋ก ํ์ํ์ง ์์๋ ๋๋ค. ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๋ชจ๋ ์ถ๋ ฅํ๋ค. |
DISTINCT | ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ 1๊ฑด์ผ๋ก ์ฒ๋ฆฌํด ์ถ๋ ฅํ๋ค. |
ALIAS ๋ถ์ฌํ๊ธฐ (๋ณ๋ช )
- ์นผ๋ผ๋ช ๋ฐ๋ก ๋ค์ ์จ๋ค.
- ์นผ๋ผ๋ช ๊ณผ ALIAS ์ฌ์ด์ AS, as ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค(์ต์ ).
- ๊ณต๋ฐฑ์ด ๋ค์ด๊ฐ๋ ๊ฒฝ์ฐ " " Double quotation ์ ์ฌ์ฉํด์ผ ํ๋ค.( SQL Server ์ ๊ฒฝ์ฐ " ", ' ', [ ] ์ด๋ ๊ฒ 3๊ฐ์ง ๋ฐฉ์ )
2. ์ฐ์ ์ฐ์ฐ์์ ํฉ์ฑ ์ฐ์ฐ์
์ฐ์ ์ฐ์ฐ์์ ์ข ๋ฅ | |
( ) | ์ฐ์ฐ์์ ์ฐ์ ์์๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํ ๊ดํธ ( ๊ดํธ ์์ ์ฐ์ฐ์ด ์ฐ์ ๋๋ค ) |
* | ๊ณฑํ๊ธฐ |
/ | ๋๋๊ธฐ |
+ | ๋ํ๊ธฐ |
- | ๋นผ๊ธฐ |
ํฉ์ฑ(Concatenation) ์ฐ์ฐ์ ( ๐ก๋ฌธ์์ด ํฉ์น๊ธฐ ) | |
|| | (Oracle) ๋ฌธ์์ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ 2๊ฐ์ ์์ง ๋ฐ๋ฅผ ์ฌ์ฉ |
+ | (SQL Server) ๋ฌธ์์ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ + ํ์๋ฅผ ์ฌ์ฉ |
CONCAT | (Oracle, SQL Server) CONCAT(String1, String2) ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. |
โจ์ 3์ ํจ์
1. ๋ด์ฅ ํจ์ ๊ฐ์
SELECT, WHERE, ORDER BY ์ ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
2. ๋ฌธ์ํ ํจ์
๋ฌธ์ํ ํจ์ | ๊ฒฐ๊ณผ ๊ฐ | ํจ์ ์ค๋ช |
LOWER('SQL Expert') | 'sql expert' | ๋ฌธ์์ด์ ์ํ๋ฒณ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ค๋ค. |
UPPER('SQL Expert') | 'SQL EXPERT' | ๋ฌธ์์ด์ ์ํ๋ฒณ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ค๋ค. |
ASCII('A') | 65 | ๋ฌธ์๋ ์ซ์๋ฅผ ASCII ์ฝ๋ ๋ฒํธ๋ก ๋ฐ๊พธ์ด ์ค๋ค. |
CHR(65) /CHAR(65) *ASCII์ฝ๋ | 'A' | ASCII ์ฝ๋ ๋ฒํธ๋ฅผ ๋ฌธ์๋ ์ซ์๋ก ๋ฐ๊พธ์ด ์ค๋ค. |
CONCAT('RDBMS','SQL') 'RDBMS' || 'SQL' / 'RDBMS' + 'SQL' |
'RDBMS SQL' | ๋ฌธ์์ด1๊ณผ ๋ฌธ์์ด2๋ฅผ ์ฐ๊ฒฐํ๋ค. ํฉ์ฑ ์ฐ์ฐ์ ( || , + ) ์ ๋์ผ |
SUBSTR('SQL Expert', 5, 3) SUBSTRING('SQL Expert', 5, 3) |
'Exp' | (๋ฌธ์์ด, m[,n]) m์์น์์ n๊ฐ์ ๋ฌธ์ ๊ธธ์ด ๋ฆฌํด, n์ด ์๋ต๋๋ฉด ๋ง์ง๋ง ๋ฌธ์ ๊น์ง ๋ฆฌํดํ๋ค. |
LENGTH('SQL Expert') LEN('SQL Expert') |
10 | ๋ฌธ์์ด์ ๊ฐ์๋ฅผ ์ซ์๊ฐ์ผ๋ก ๋ฆฌํด |
LTRIM ('xxxYYZZxYZ','x') | 'YYZZxYZ' | ์ฒซ ๋ฌธ์๋ถํฐ ํ์ธ ์ง์ ๋ฌธ์๊ฐ ๋ํ๋๋ฉด ํด๋น ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ค. SQL Server์์๋ LTRIM ํจ์์ ์ง์ ๋ฌธ์ ์ฌ์ฉ ๋ถ๊ฐ, ๊ณต๋ฐฑ๋ง ์ ๊ฑฐ๊ฐ๋ฅํ๋ค. |
RTRIM('XXYYzzXYzz','z') RTRIM('XXYYZZXYZ ') |
'XXYYzzXY' 'XXYYZZXYZ' |
๋ง์ง๋ง ๋ฌธ์๋ถํฐ ํ์ธ ์ง์ ๋ฌธ์๊ฐ ๋ํ๋๋ฉด ํด๋น ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๋ค. SQL Server์์๋ LTRIM ํจ์์ ์ง์ ๋ฌธ์ ์ฌ์ฉ ๋ถ๊ฐ, ๊ณต๋ฐฑ๋ง ์ ๊ฑฐ๊ฐ๋ฅํ๋ค. |
TRIM('x' FROM 'xxYYZZxYZxx') | 'YYZZxYZ' | TRIM ([ leading(์ฒซ๋ฌธ์) | trailing(๋ง์ง๋ง๋ฌธ์) | both(์์ชฝ) ] ์ง์ ๋ฌธ์ FROM ๋ฌธ์์ด ) SQL Server์์๋ leading, trailing, both ์ฌ์ฉํ ์์๋ค. ์์ชฝ์ ์๋ ์ง์ ๋ฌธ์๋ง ์ ๊ฑฐ ๊ฐ๋ฅ default : both |
3. ์ซ์ํ ํจ์
์ซ์ํ ํจ์ ์ฌ์ฉ | ์ถ๋ ฅ | ํจ์์ค๋ช |
ABS(-15) | 15 | ์ซ์์ ์ ๋๊ฐ์ ๋๋ ค์ค๋ค. |
SIGN(-20) SIGN(0) SIGN(+20) |
-1 0 1 |
์ซ์๊ฐ ์์์ธ์ง, ์์์ธ์ง 0์ธ์ง๋ฅผ ๊ตฌ๋ณํ๋ค. |
MOD(7,3) / 7%3 | 1 | ์ซ์ 7์ 3์ผ๋ก ๋๋์ด ๋๋จธ์ง ๊ฐ์ ๋ฆฌํดํ๋ค. (% ์ฐ์ฐ์ ๋์ฒด ๊ฐ๋ฅ) |
CEIL(38.123) (์ฌ๋ฆผ) CEILING(38.123) CEILING(-38.123) |
39 39 -38 |
์ซ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ต์ ์ ์๋ฅผ ๋ฆฌํดํ๋ค. |
FLOOR(38.123) (๋ด๋ฆผ) | 38 | ์ซ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ต๋ ์ ์๋ฅผ ๋ฆฌํดํ๋ค. |
ROUND(38.5235, 3) ROUND(38.5235, 1) ROUND(38.5235) (๋ฐ์ฌ๋ฆผ) |
38.524 38.5 39( 0 ์ด Default ) |
(์ซ์ [,m]) ์ซ์๋ฅผ ์์์ m์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํด ๋ฆฌํดํ๋ค. m์ด ์๋ต๋๋ฉด ๋ํดํธ ๊ฐ์ 0 |
TRUNC(38.5235, 3) TRUNC(38.5235, 1) TRUNC(38.5235) |
38.523 38.5 38( 0 ์ด Default ) |
(์ซ์ [,m]) ์ซ์๋ฅผ ์์ m์๋ฆฌ์์ ์๋ผ์ ๋ฒ๋ฆฐ๋ค. m์ด ์๋ต๋๋ฉด ๋ํดํธ ๊ฐ์ 0 *SQL Server์์ TRUNC ํจ์๋ ์ ๊ณตํ์ง ์๋๋ค. |
SIN(0) COS(0) TAN(0) |
0 1 0 |
์ซ์์ ์ผ๊ฐํจ์ ๊ฐ์ ๋ฆฌํดํ๋ค. |
EXP(2) | 7.3890561 | ์ซ์์ ์ง์ ๊ฐ์ ๋ฆฌํดํ๋ค. ์ฆ e(e=2.7182813...)์ ์ซ์ ์ ๊ณฑ ๊ฐ์ ๋ฆฌํดํ๋ค(=e์ซ์). |
POWER(2, 3) | 8 | ์ซ์์ ๊ฑฐ๋ญ์ ๊ณฑ ๊ฐ์ ๋ฆฌํดํ๋ค. |
SQRT(4) | 2 | ์ซ์์ ์ ๊ณฑ๊ทผ(=์ซ์) ๊ฐ์ ๋ฆฌํดํ๋ค. |
LOG(10, 100) / LOG(100, 10) | 2 | LOG(์ซ์ 1, ์ซ์2) ์ซ์1์ ๋ฐ์๋ก ํ๋ ์ซ์2์ ๋ก๊ทธ ๊ฐ(=LOG์ซ์1์ซ์2)์ ๋ฆฌํดํ๋ค. *SQL Server๋ ์ซ์2๋ฅผ ๋ฐ์๋ก ํ๋ ์ซ์1์ ๋ก๊ทธ ๊ฐ(=LOG์ซ์2์ซ์1) |
LN(7.3890561) | 2 | ์ซ์์ ์์ฐ ๋ก๊ทธ ๊ฐ(=LOGe์ซ์)์ ๋ฆฌํดํ๋ค. *SQL Server์์ LV ํจ์๋ ์ ๊ณตํ์ง ์๋๋ค. |
4. ๋ ์งํ ํจ์
๋ ์งํ ํจ์ | ํจ์ ์ค๋ช |
SYSDATE / GETDATE() | ํ์ฌ ๋ ์ง์ ์๊ฐ์ ์ถ๋ ฅํ๋ค. |
EXTRACT('YEAR'|'MONTH'|'DAY'| from d) / DATEPART('YEAR'|'MONTH'|'DAY',d) |
๋ ์ง ๋ฐ์ดํฐ์์ ์ฐ์์ผ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. ์๋ถ์ด๋ ๊ฐ๋ฅํ๋ค. |
TO_NUMBER(TO_CHAR(d, 'YYYY')) / YEAR(d), TO_NUMBER(TO_CHAR(d, 'MM')) / MONTH(d), TO_NUMBER(TO_CHAR(d, 'DD')) / DAY(d) |
๋ ์ง ๋ฐ์ดํฐ์์ ์ฐ์์ผ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. Oracle EXTRACT YEAR/MONTH/DAY ์ต์ ์ด๋ SQL Server DEPART YEAR/MONTH/DAY ์ต์ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ด๋ค. TO_NUMBER ํจ์ ์ ์ธ ์ ๋ฌธ์ํ์ผ๋ก ์ถ๋ ฅ๋๋ค. |
5. ๋ณํํ ํจ์
๋ฐ์ดํฐ ์ ํ ๋ณํ์ ์ข ๋ฅ
- ๋ช ์์ (Explicit) : ๋ฐ์ดํฐ ๋ณํํ ํจ์๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ ํ์
- ์์์ (Implicit) : ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ผ๋ก ๋ฐ์ดํฐ ์ ํ์ ๋ณํํด ๊ณ์ฐํ๋ ๊ฒฝ์ฐ (์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.)
๋ช ์์ ๋ฐ์ดํฐ ๋ณํํ ํจ์์ ์ข ๋ฅ
๋ณํํ ํจ์ | ํจ์ ์ค๋ช |
TO_NUMBER (๋ฌธ์์ด) / CAST (expression AS data_type [(length)]) |
์ซ์๋ก ๋ณํ ๊ฐ๋ฅํ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ๋ค. expression์ ๋ชฉํ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๋ณํํ๋ค. |
TO_CHAR (์ซ์|๋ ์ง [, FORMAT]) / CONVERT (data_type [(length)], expression [,style]) |
์ซ์๋ ๋ ์ง๋ฅผ ์ฃผ์ด์ง FORMAT ํํ์ธ ๋ฌธ์์ด ํ์
์ผ๋ก ๋ณํํ๋ค. expression์ ์ฃผ์ด์ง style ํํ์ธ ๋ชฉํ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ๋ณํํ๋ค. |
TO_DATE (๋ฌธ์์ด [, FORMAT]) / CONVERT (data_type [(length)], expression [,style]) |
๋ฌธ์์ด์ ์ฃผ์ด์ง FORMAT ํํ์ธ ๋ ์ง ํ์ ์ผ๋ก ๋ณํํ๋ค. |
6. CASE ํํ
๋จ์ผํ CASE ํํ์ ์ข ๋ฅ
CASE ํํ | ํจ์ ์ค๋ช |
CASE SIMPLE_CASE_EXPRESSION ์กฐ๊ฑด [ELSE ๋ํดํธ๊ฐ] END |
SIMPLE_CASE_EXPRESSION ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด SIMPLE_CASE_EXPRESSION ์กฐ๊ฑด ๋ด์ THEN ์ ์ ์ํํ๊ณ , ์กฐ๊ฑด์ด ๋ง์ง ์์ผ๋ฉด ELSE ์ ์ ์ํํ๋ค. |
CASE SEARCHED_CASE_EXPRESSION ์กฐ๊ฑด [ELSE ๋ํดํธ ๊ฐ] END |
SEARCHED_CASE_EXPRESSION ์กฐ๊ฑด์ด ๋ง์ผ๋ฉด SEARCHED_CASE_EXPRESSION ์กฐ๊ฑด ๋ด์ THEN ์ ์ ์ํํ๊ณ , ์กฐ๊ฑด์ด ๋ง์ง ์์ผ๋ฉด ELSE ์ ์ ์ํํ๋ค. |
DECODE(ํํ์, ๊ธฐ์ค๊ฐ1, ๊ฐ1 [, ๊ธฐ์ค๊ฐ2, ๊ฐ2,..., ๋ํดํธ ๊ฐ]) |
(if ๋ฌธ) CASE ํํ์ SIMPLE_CASE_EXPRESSION ์กฐ๊ฑด๊ณผ ๋์ผํ๋ค. *Oracle ์์ ์ฌ์ฉ๊ฐ๋ฅ |
CASE
WHEN [์กฐ๊ฑด] THEN [ ์ํ๊ฐ ]
ELSE [DEFAULT]
END
DECODE(ํํ์, ๊ฐ, Default)
7. NULL ๊ด๋ จ ํจ์
์ผ๋ฐํ ํจ์ | ํจ์ ์ค๋ช |
NVL(ํํ์1, ํํ์2) / ISNULL(ํํ์1, ํํ์2) |
ํํ์1์ ๊ฒฐ๊ณผ ๊ฐ์ด NULL์ด๋ฉด ํํ์2์ ๊ฐ์ ์ถ๋ ฅํ๋ค. ๋จ ํํ์1๊ณผ ํํ์2์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ด ๊ฐ์์ผ ํ๋ค. NULL ๊ด๋ จ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํจ์์ด๋ฏ๋ก ์๋นํ ์ค์ํ๋ค. |
NULLIF(ํํ์1, ํํ์2) | ํํ์1์ด ํํ์2์ ๊ฐ์ผ๋ฉด NULL์, ๊ฐ์ง ์์ผ๋ฉด ํํ์1์ ๋ฆฌํดํ๋ค. |
COALESCE(ํํ์1, ํํ์2, ....) | ์์์ ๊ฐ์ ํํ์์์ NULL์ด ์๋ ์ต์ด์ ํํ์์ ๋ํ๋ธ๋ค. ๋ชจ๋ ํํ์์ด NULL์ด๋ผ๋ฉด NULL์ ๋ฆฌํดํ๋ค. |
๐ Oracle ํจ์ / SQL Server ํจ์ ํ์, '/' ์๋ ๊ฒ์ ๊ณตํต ํจ์
โจ์ 4์ WHERE ์
1. WHERE ์กฐ๊ฑด์ ๊ฐ์
SELECT [DISTINCT/ALL]
์นผ๋ผ๋ช
[ALIAS๋ช
]
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์;
2. ์ฐ์ฐ์์ ์ข ๋ฅ
- ๋น๊ต ์ฐ์ฐ์(๋ถ์ ๋น๊ต ์ฐ์ฐ์ ํฌํจ)
- SQL ์ฐ์ฐ์(๋ถ์ SQL ์ฐ์ฐ์ ํฌํจ)
- ๋ ผ๋ฆฌ ์ฐ์ฐ์
์ฐ์ฐ์ ์ฐ์ ์์ | ์ค๋ช |
1 | ๊ดํธ () |
2 | ๋น๊ต ์ฐ์ฐ์, SQL ์ฐ์ฐ์ |
3 | NOT ์ฐ์ฐ์ |
4 | AND |
5 | OR |
3. ๋น๊ต ์ฐ์ฐ์
๋น๊ต ์ฐ์ฐ์์ ์ข ๋ฅ | ์ฐ์ฐ์์ ์๋ฏธ |
= | ๊ฐ๋ค. |
> | ๋ณด๋ค ํฌ๋ค. |
>= | ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๋ค. |
< | ๋ณด๋ค ์๋ค. |
<= | ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. |
โ ๋ฌธ์ ์ ํ ๋น๊ต ๋ฐฉ๋ฒ โ
๊ตฌ๋ถ | ๋น๊ต๋ฐฉ๋ฒ |
๋น๊ต ์ฐ์ฐ์์ ์์ชฝ์ด ๋ชจ๋ CHAR ์ ํ ํ์ ์ธ ๊ฒฝ์ฐ | ๊ธธ์ด๊ฐ ์๋ก ๋ค๋ฅธ CHARํ ํ์ ์ด๋ฉด ์์ ์ชฝ์ ์คํ์ด์ค๋ฅผ ์ถ๊ฐํด ๊ธธ์ด๋ฅผ ๊ฐ๊ฒ ํ ํ ๋น๊ตํ๋ค. |
์๋ก ๋ค๋ฅธ ๋ฌธ์๊ฐ ๋์ฌ ๋๊น์ง ๋น๊ตํ๋ค. | |
๋ฌ๋ผ์ง ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ๊ฐ์ ๋ฐ๋ผ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ ํ๋ค. | |
๋ฌธ์ ๋ ๋ธ๋ญํฌ ์๋ง ๋ค๋ฅด๋ค๋ฉด ์๋ก ๊ฐ์ ๊ฐ์ผ๋ก ๊ฒฐ์ ํ๋ค. | |
๋น๊ต ์ฐ์ฐ์์ ์ด๋ ํ ์ชฝ์ด VARCHAR ์ ํ ํ์ ์ธ ๊ฒฝ์ฐ | ์๋ก ๋ค๋ฅธ ๋ฌธ์๊ฐ ๋์ฌ ๋๊น์ง ๋น๊ตํ๋ค. |
๊ธธ์ด๊ฐ ๋ค๋ฅด๋ค๋ฉด ์งง์ ๊ฒ์ด ๋๋ ๋๊น์ง๋ง ๋น๊ตํ ํ ๊ธธ์ด๊ฐ ๊ธด ๊ฒ์ด ํฌ๋ค๊ณ ํ๋จํ๋ค. | |
๊ธธ์ด๊ฐ ๊ฐ๊ณ ๋ค๋ฅธ ๊ฒ์ด ์๋ค๋ฉด ๊ฐ๋ค๊ณ ํ๋จํ๋ค. | |
VARCHAR๋ NOT NULL๊น์ง ๊ธธ์ด๋ฅผ ๋งํ๋ค. ์ฆ ๋ฌธ์ ๋ ๋ธ๋ญํฌ๋ ๋ฌธ์๋ก ์ทจ๊ธํ๋ค. | |
์์๊ฐ๊ณผ ๋น๊ตํ ๊ฒฝ์ฐ | ์์ ์ชฝ์ ๋ณ์ ํ์ ๊ณผ ๋์ผํ๊ฒ ๋ฐ๊พธ๊ณ ๋น๊ตํ๋ค. |
๋ณ์ ์ชฝ์ด CHAR ์ ํ ํ์ ์ด๋ฉด ์์ CHAR ์ ํ ํ์ ์ ๊ฒฝ์ฐ๋ฅผ ์ ์ฉํ๋ค. | |
๋ณ์ ์ชฝ์ด VARCHAR ์ ํ ํ์ ์ด๋ฉด ์์ VARCHAR ์ ํ ํ์ ์ ๊ฒฝ์ฐ๋ฅผ ์ ์ฉํ๋ค. |
4. SQL ์ฐ์ฐ์
SQL ์ฐ์ฐ์์ ์ข ๋ฅ | ์ฐ์ฐ์์ ์๋ฏธ |
BETWEEN a AND b | a์ b์ ๊ฐ ์ฌ์ด์ ๊ฐ์ ๊ฐ๋๋ค(a์ b๊ฐ์ด ํฌํจ๋จ) |
IN (list) | ๋ฆฌ์คํธ์ ์๋ ๊ฐ ์ค์์ ์ด๋ ํ๋๋ผ๋ ์ผ์นํ๋ค. |
LIKE '๋น๊ต๋ฌธ์์ด' | ๋น๊ต๋ฌธ์์ด๊ณผ ํํ๊ฐ ์ผ์นํ๋ค. % = 0๊ฐ ์ด์์ ์ด๋ค ๋ฌธ์๋ฅผ ์๋ฏธ (%ํฌํจ%,์์%,%๋ง์ง๋ง) _ = 1๊ฐ์ ๋จ์ผ ๋ฌธ์๋ฅผ ์๋ฏธ |
IS NULL | NULL ๊ฐ์ธ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. |
5. ๋ ผ๋ฆฌ ์ฐ์ฐ์
๋ ผ๋ฆฌ ์ฐ์ฐ์์ ์ข ๋ฅ | ์ฐ์ฐ์์ ์๋ฏธ |
AND | ์์ ์๋ ์กฐ๊ฑด๊ณผ ๋ค์ ์ค๋ ์กฐ๊ฑด์ด ์ฐธ(TRUE)์ด ๋๋ฉด ๊ฒฐ๊ณผ๋ ์ฐธ(TRUE)์ด ๋๋ค. ์ฆ ์์ ์กฐ๊ฑด๊ณผ ๋ค์ ์กฐ๊ฑด์ ๋์์ ๋ง์กฑํด์ผ ํ๋ ๊ฒ์ด๋ค. |
OR | ์์ ์กฐ๊ฑด์ด ์ฐธ(TRUE)์ด๊ฑฐ๋ ๋ค์ ์กฐ๊ฑด์ด ์ฐธ(TRUE)์ด ๋๋ฉด ๊ฒฐ๊ณผ๋ ์ฐธ(TRUE)์ด ๋๋ค. ์ฆ ์๋ค์ ์กฐ๊ฑด ์ค ํ๋๋ง ์ฐธ(TRUE)์ด๋ฉด ๋๋ค. |
NOT | ๋ค์ ์ค๋ ์กฐ๊ฑด์ ๋ฐ๋๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋๋๋ ค ์ค๋ค. |
6. ๋ถ์ ์ฐ์ฐ์
๋ถ์ ์ฐ์ฐ์์ ์ข ๋ฅ | ์ฐ์ฐ์ | ์ฐ์ฐ์์ ์๋ฏธ |
๋ถ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์ | != | ๊ฐ์ง ์๋ค. |
^= | ๊ฐ์ง ์๋ค. | |
<> | ๊ฐ์ง ์๋ค(ANIS/ISO ํ์ค, ๋ชจ๋ OS์์ ์ฌ์ฉ ๊ฐ๋ฅ) | |
NOT ์นผ๋ผ๋ช = | ~์ ๊ฐ์ง ์๋ค. | |
NOT ์นผ๋ผ๋ช > | ~๋ณด๋ค ํฌ์ง ์๋ค. | |
๋ถ์ SQL ์ฐ์ฐ์ | NOT BETWEEN a AND b | a์ b์ ๊ฐ ์ฌ์ด์ ์์ง ์๋ค(a, b๊ฐ์ ํฌํจํ์ง ์์) |
NOT IN (list) | list ๊ฐ๊ณผ ์ผ์นํ์ง ์๋ค. | |
IS NOT NULL | NULL ์ด ์๋๋ค. |
โจ์ 5์ GROUP BY, HAVING ์
1. ์ง๊ณํจ์
์ง๊ณํจ์์ ์ข ๋ฅ | ์ฌ์ฉ ๋ชฉ์ |
COUNT(*) | NULL ๊ฐ์ ํฌํจํ ํ์ ์๋ฅผ ์ถ๋ ฅ |
COUNT(ํํ์) | ํํ์์ ๊ฐ์ด NULL ๊ฐ์ธ ๊ฒ์ ์ ์ธํ ํ ์๋ฅผ ์ถ๋ ฅ |
SUM([DISTINCT | ALL] ํํ์) | ํํ์์ NULL ๊ฐ์ ์ ์ธํ ํฉ๊ณ๋ฅผ ์ถ๋ ฅ |
AVG([DISTINCT | ALL] ํํ์) | ํํ์์ NULL ๊ฐ์ ์ ์ธํ ํ๊ท ์ ์ถ๋ ฅ |
MAX([DISTINCT | ALL] ํํ์) | ํํ์์ ์ต๋๊ฐ์ ์ถ๋ ฅ (๋ฌธ์, ๋ ์ง ๋ฐ์ดํฐ ํ์ ๋ ๊ฐ๋ฅ) |
MIN([DISTINCT | ALL] ํํ์) | ํํ์์ ์ต์๊ฐ์ ์ถ๋ ฅ (๋ฌธ์, ๋ ์ง ๋ฐ์ดํฐ ํ์ ๋ ๊ฐ๋ฅ) |
STDDEV([DISTINCT | ALL] ํํ์) | ํํ์์ ํ์ค ํธ์ฐจ๋ฅผ ์ถ๋ ฅ |
VARIANCE/VAR([DISTINCT | ALL] ํํ์) | ํํ์์ ๋ถ์ฐ์ ์ถ๋ ฅ |
๊ธฐํ ํต๊ณ ํจ์ | ๋ฒค๋๋ณ๋ก ๋ค์ํ ํต๊ณ์์ ์ ๊ณต |
2. GROUP BY ์
- GROUP BY ์ ์ SQL๋ฌธ์์ FROM์ ๊ณผ WHERE ์ ๋ค์ ์ค๋ฉฐ,
๋ฐ์ดํฐ๋ค์ ์์ ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฅํด ์๊ทธ๋ฃน์ ๋ํ ํญ๋ชฉ๋ณ ํต๊ณ ์ ๋ณด๋ฅผ ์ป์ ๋ ์ฌ์ฉ๋๋ค.
( GROUP BY ์ ์๋ ALIAS ๋ช ์ ์ฌ์ฉํ ์ ์๋ค.)
SELECT [DISTINCT] ์นผ๋ผ๋ช
[ALIAS๋ช
]
FROM ํ
์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด์]
[GROUP BY ์นผ๋ผ(Column) ์ด๋ ํํ์]
[HAVING ๊ทธ๋ฃน ์กฐ๊ฑด์];
3. HAVING ์
SELECT [DISTINCT] ์นผ๋ผ๋ช
[ALIAS๋ช
]
FROM ํ
์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด์]
[GROUP BY ์นผ๋ผ(Column) ์ด๋ ํํ์]
[์์]
HAVING AVG (์กฐ๊ฑด) >= ์กฐ๊ฑด;
HAVING ์ ์ ์ง๊ณํจ์ ์ฌ์ฉ๊ฐ๋ฅ, WHERE ์ ์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
4. CASE ํํ์ ํ์ฉํ ์๋ณ ๋ฐ์ดํฐ ์ง๊ณ
โ Step 1. ๋จผ์ ๊ฐ๋ณ ์ ์ฌ์ ๋ณด์์ ์๋ณ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ค. (๊ฐ๋ณ ๋ฐ์ดํฐ ํ์ธ)
๐Oracle
SELECT ENAME AS ์ฌ์๋ช
, DEPTNO AS ๋ถ์๋ฒํธ
, EXTRACT(MONTH FROM HIREDATE) AS ์
์ฌ์, SAL AS ๊ธ์ฌ
FROM EMP;
๐SQL Server
SELECT ENAME AS ์ฌ์๋ช
, DEPTNO AS ๋ถ์๋ฒํธ
, DATEPART(MONTH, HIREDATE) AS ์
์ฌ์, SAL AS ๊ธ์ฌ
FROM EMP;
SELECT ENAME AS ์ฌ์๋ช
, DEPTNO AS ๋ถ์๋ฒํธ
, MONTH(HIREDATE) AS ์
์ฌ์, SAL AS ๊ธ์ฌ
FROM EMP;
โ Step 2. ์ถ์ถ๋ ์๋ณ ๋ฐ์ดํฐ๋ฅผ Simple Case Expression์ ์ด์ฉํด 12๊ฐ์ ์๋ณ ์นผ๋ผ์ผ๋ก ๊ตฌ๋ถํ๋ค.
๐Oracle
SELECT ENAME AS ์ฌ์๋ช
, DEPTNO AS ๋ถ์๋ฒํธ
,CASE MONTH WHEN 1 THEN SAL END AS M01, CASE MONTH WHEN 2 THEN SAL END AS M02
,CASE MONTH WHEN 3 THEN SAL END AS M03, CASE MONTH WHEN 4 THEN SAL END AS M04
,CASE MONTH WHEN 5 THEN SAL END AS M05, CASE MONTH WHEN 6 THEN SAL END AS M06
,CASE MONTH WHEN 7 THEN SAL END AS M07, CASE MONTH WHEN 8 THEN SAL END AS M08
,CASE MONTH WHEN 9 THEN SAL END AS M09, CASE MONTH WHEN 10 THEN SAL END AS M10
,CASE MONTH WHEN 11 THEN SAL END AS M11, CASE MONTH WHEN 12 THEN SAL END AS M12
FROM (SELECT ENAME, DEPTNO, EXTRACT (MONTH FROM HIREDATE) AS MONTH, SAL FROM EMP);
โ Step 2. ๋ถ์๋ณ ํ๊ท ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด GROUP BY์ ๊ณผ AVG ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ๋ค.
๐Oracle
SELECT ENAME AS ์ฌ์๋ช
, DEPTNO AS ๋ถ์๋ฒํธ
,AVG (DECODE (MONTH, 1, SAL)) AS M01, AVG (DECODE (MONTH, 2, SAL)) AS M02
,AVG (DECODE (MONTH, 3, SAL)) AS M03, AVG (DECODE (MONTH, 4, SAL)) AS M04
,AVG (DECODE (MONTH, 5, SAL)) AS M05, AVG (DECODE (MONTH, 6, SAL)) AS M06
,AVG (DECODE (MONTH, 7, SAL)) AS M07, AVG (DECODE (MONTH, 8, SAL)) AS M08
,AVG (DECODE (MONTH, 9, SAL)) AS M09, AVG (DECODE (MONTH,10, SAL)) AS M10
,AVG (DECODE (MONTH,11, SAL)) AS M11, AVG (DECODE (MONTH,12, SAL)) AS M12
FROM (SELECT ENAME, DEPTNO, EXTRACT (MONTH FROM HIREDATE) AS MONTH, SAL FROM EMP)
GROUP BY DEPTNO;
5. ์ง๊ณํจ์์ NULL ์ฒ๋ฆฌ
Oracle | NVL |
SQL Server | ISNULL |
SELECT ์นผ๋ผ๋ช
,NVL (์นผ๋ผ(Column) ์ด๋ ํํ์, default๊ฐ) AS [ALIAS๋ช
]
FROM ํ
์ด๋ธ๋ช
[GROUP BY ์นผ๋ผ(Column) ์ด๋ ํํ์];
โจ์ 6์ ORDER BY ์
1. ORDER BY ์ ๋ ฌ
SELECT ์นผ๋ผ๋ช
[ALIAS๋ช
]
FROM ํ
์ด๋ธ๋ช
[WHERE ์กฐ๊ฑด์]
[GROUP BY ์นผ๋ผ(Column)์ด๋ ํํ์]
[HAVING ๊ทธ๋ฃน์กฐ๊ฑด์]
[ORDER BY ์นผ๋ผ(Column)์ด๋ ํํ์ [ASC ๋๋ DESC]];
- ASC (Ascending) : ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค(๊ธฐ๋ณธ ๊ฐ์ด๋ฏ๋ก ์๋ต ๊ฐ๋ฅ)
- DESC (Descending) : ์กฐํํ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
2. SELECT ๋ฌธ์ฅ ์คํ ์์
SELECT ์นผ๋ผ๋ช
[ALIAS๋ช
]
FROM ํ
์ด๋ธ๋ช
WHERE ์กฐ๊ฑด์
GROUP BY ์นผ๋ผ(Column)์ด๋ ํํ์
HAVING ๊ทธ๋ฃน์กฐ๊ฑด์
ORDER BY ์นผ๋ผ(Column)์ด๋ ํํ์;
โจ์ 7์ ์กฐ์ธ
1. ์กฐ์ธ๊ฐ์
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ๋ค์ ์ฐ๊ฒฐํด ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ์กฐ์ธ(JOIN)์ด๋ผ๊ณ ํ๋ค.
2. EQUI(๋ฑ๊ฐ) JOIN
- EQUI JOIN
SELECT ํ
์ด๋ธ1.์นผ๋ผ๋ช
, ํ
์ด๋ธ2.์นผ๋ผ๋ช
, . . .
FROM ํ
์ด๋ธ1, ํ
์ด๋ธ2
WHERE ํ
์ด๋ธ2.์นผ๋ผ๋ช
= ํ
์ด๋ธ1.์นผ๋ผ๋ช
; -- WHERE ์ ์ JOIN ์กฐ๊ฑด์ ๊ธฐ์ ํ๋ค.
- ANSI/ISO SQL ํ์ค ๋ฐฉ์
SELECT ํ
์ด๋ธ1.์นผ๋ผ๋ช
, ํ
์ด๋ธ2.์นผ๋ผ๋ช
, . . .
FROM ํ
์ด๋ธ1 INNER JOIN ํ
์ด๋ธ2
ON ํ
์ด๋ธ2.์นผ๋ผ๋ช
= ํ
์ด๋ธ1.์นผ๋ผ๋ช
; -- ON ์ ์ JOIN ์กฐ๊ฑด์ ๊ธฐ์ ํ๋ค.
3. Non EQUI JOIN
- Non EQUI JOIN ( Between, >, >=, <, <= ๋ฑ )
SELECT ํ
์ด๋ธ1.์นผ๋ผ๋ช
, ํ
์ด๋ธ2.์นผ๋ผ๋ช
, . . .
FROM ํ
์ด๋ธ1, ํ
์ด๋ธ2
WHERE ํ
์ด๋ธ1.์นผ๋ผ๋ช
BETWEEN ํ
์ด๋ธ2.์นผ๋ผ๋ช
1 AND ํ
์ด๋ธ2.์นผ๋ผ๋ช
2;
4. 3๊ฐ ์ด์ TABLE JOIN
WHERE ์ ์ 2๊ฐ ์ด์์ ์กฐ์ธ ์กฐ๊ฑด์ด ํ์ํ๋ค.
5. OUTER JOIN
์์ ๋ค๋ฃจ์๋ EQUI JOIN, Non EQUI JOIN์ ๋ชจ๋ ์กฐ์ธ ์กฐ๊ฑด์ ๊ฒฐ๊ณผ๊ฐ ์ฐธ(TRUE)์ธ ํ๋ค๋ง ๋ฐํํ๋ INNER(๋ด๋ถ)์กฐ์ธ์ด๋ค.
OUTER(์ธ๋ถ) JOIN์ ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ํ๋ค๋ ํจ๊ป ๋ฐํํ ๋ ์ฌ์ฉํ๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฐ ์ฅ์ ์ด๋ฉด์ SQL ํ๋์ ์ค์ ๋์์ด ๋๋ ์กฐ์ธ์ ์๋ชป ๊ธฐ์ ํ๋ฉด,
์์คํ ์์ ๋ถ์กฑ์ด๋ ๊ณผ๋คํ ์๋ต์๊ฐ ์ง์ฐ์ ๋ฐ์์ํค๋ ์ค์ ์์ธ์ด ๋๋ฏ๋ก ์กฐ์ธ ์กฐ๊ฑด์ ์ ์คํ๊ฒ ์์ฑํด์ผ ํ๋ค.
โจ์ 8์ ํ์ค ์กฐ์ธ
1. FROM ์ ์กฐ์ธ ํํ
- INNER JOIN
- NATURAL JOIN
- USING ์กฐ๊ฑด์
- ON ์กฐ๊ฑด์
- CROSS JOIN
- OUTER JOIN
2. INNER JOIN
- INNER JOIN์ OUTER(์ธ๋ถ) ์กฐ์ธ๊ณผ ๋๋นํด ๋ด๋ถ ์กฐ์ธ์ด๋ผ๊ณ ํ๋ฉฐ ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ค๋ง ๋ฐํํ๋ค.
3. NATURAL JOIN
- NATURAL JOIN์ ๋ ํ ์ด๋ธ ๊ฐ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๋ชจ๋ ์นผ๋ผ๋ค์ ๋ํด EQUI(=) JOIN์ ์ํํ๋ค.
- NATURAL JOIN์ด ๋ช ์๋๋ฉด ์ถ๊ฐ๋ก USING ์กฐ๊ฑด์ , ON ์กฐ๊ฑด์ , WHERE ์ ์์ ์กฐ์ธ ์กฐ๊ฑด์ ์ ์ํ ์ ์๋ค.
- SQL Server ๋ ์ง์ํ์ง ์์
- ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ฑ๊ฒฉ(๋๋ฉ์ธ)๊ณผ ์นผ๋ผ๋ช ๋ฑ์ด ๋์ผํด์ผ ํ๋ ์ ์ฝ์กฐ๊ฑด์ด ์๋ค.
4. USING ์กฐ๊ฑด์
- SQL Server ๋ ์ง์ํ์ง ์์
- FROM ์ ์ USING ์กฐ๊ฑด์ ์ ์ด์ฉํ๋ฉด ์ํ๋ ์นผ๋ผ์ ๋ํด์๋ง EQUI JOIN์ ํ ์ ์๋ค.
SELECT *
FROM [ํ
์ด๋ธ1] JOIN [ํ
์ด๋ธ2]
USING (์กฐ๊ฑด์ );
5. ON ์กฐ๊ฑด์
- ์นผ๋ผ๋ช ์ด ๋ค๋ฅด๋๋ผ๋ ์กฐ์ธ ์กฐ๊ฑด์ ์ฌ์ฉํ ์ ์๋ค.
- ON ์กฐ๊ฑด์ ์ WHERE ์ ์ ์กฐ์ธ ์กฐ๊ฑด๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ฉด์๋, ๋ช ์์ ์ ์กฐ์ธ์ ์กฐ๊ฑด์ ๊ตฌ๋ถํ ์ ์๋ค.
6. CROSS JOIN
- CROSS JOIN์ E.F.CODD ๋ฐ์ฌ๊ฐ ์ธ๊ธํ ์ผ๋ฐ ์งํฉ ์ฐ์ฐ์์ PRODUCT์ ๊ฐ๋ ์ผ๋ก ํ ์ด๋ธ ๊ฐ ์กฐ์ธ ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ์๊ธธ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์กฐํฉ์ ๋งํ๋ค.
- ๋ ๊ฐ์ ํ ์ด๋ธ์ ๋ํ CARTESIAN PRODUCT ๋๋ CROSS PRODUCT์ ๊ฐ์ ํํ์ผ๋ก, ๊ฒฐ๊ณผ๋ ์์ชฝ ์งํฉ์ M*N ๊ฑด์ ๋ฐ์ดํฐ ์กฐํฉ์ด ๋ฐ์ํ๋ค(์๋ 56๊ฑด์ ๋ฐ์ดํฐ๋ EMP 14๊ฑด * DEPT 4๊ฑด์ ๋ฐ์ดํฐ ์กฐํฉ ๊ฑด์์ด๋ค).
SELECT A.ENAME, B.DNAME
FROM EMP A CROSS JOIN DEPT B
ORDER BY A.ENAME;
-- ์คํ ๊ฒฐ๊ณผ ์)
ENAME DNAME
------------------
ADAMS ACCOUNTING
ADAMS RESEARCH
ADAMS SALES
. . .
. .
.
56 ๊ฐ์ ํ์ด ์ ํ๋์ต๋๋ค.
7. OUTER JOIN
- INNER JOIN๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก FROM ์ ์์ ์ ์ํ๊ฒ ๋ค๋ ํ์์ด๋ฏ๋ก USING ์กฐ๊ฑด์ ์ด๋ ON ์กฐ๊ฑด์ ์ ํ์์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ค.
โจ์ฅ ์์ฝ
์ 1์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ |
ํน์ ๋ฐ์ดํฐ๋ค์ ์งํฉ์์ ํ์๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ ์กฐํํ๊ณ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ,์์ ,์ญ์ ํ๋ ํ์๋ฅผ ํตํด ์ฌ์ฉ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ SQL(Structured Query Language)์ ์ด๋ฌํ ๋ํ๋ฅผ ๊ฐ๋ฅํ๋๋ก ๋งค๊ฐ ์ญํ ์ ํ๋ ๊ฒ์ด๋ค. SQL์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ ์ ์, ๋ฐ์ดํฐ ์กฐ์, ๋ฐ์ดํฐ ์ ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ ์ธ์ด์ด๋ค. |
์ 2์ SELECT ๋ฌธ |
SELECT ๋ฌธ์ฅ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค. ๋ฐ์ดํฐ ์กฐํ ์ ์ฐ์ ์ฐ์ฐ์์ ํฉ์ฑ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ ๊ฐ์ ์ฐ์ฐ์ ์ํํ ์ ์๋ค. ์ฐ์ ์ฐ์ฐ์๋ NUMER์ DATE ์๋ฃํ์ ๋ํด ์ ์ฉ๋๋ฉฐ (), *, /, +, - ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ค. ํฉ์ฑ์ฐ์ฐ์๋ ๋ฌธ์์ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ๋ฉฐ, CONCAT(string1, string2) ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค. |
์ 3์ ํจ์ |
์ฌ์ฉ์๋ ๋ฒค๋์์ ์ ๊ณตํ๋ ๋ด์ฅ ํจ์(FUNCTION)๋ฅผ ํตํด ๋ฐ์ดํฐ ๊ฐ์ ๊ฐํธํ๊ฒ ์กฐ์ํ ์ ์๋ค. ๋จ์ผํ ํจ์๋ ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ์ ํ์์ ๋ฐ๋ผ์ ๋ฌธ์ํ, ์ซ์ํ, ๋ ์งํ, ๋ณํํ, NULL ๊ด๋ จ ํจ์๋ก ๋๋ ์ ์๋ค. |
์ 4์ WHERE ์ |
WHERE ์กฐ๊ฑด์ ์ ์ ํ์ ๋์ด ์ํ๋ ์๋ฃ๋ง์ ์กฐํํ ์ ์๋ค. WHERE ์ ์ ์ฌ์ฉ๋๋ ์ฐ์ฐ์๋ ๋น๊ต ์ฐ์ฐ์, SQL ์ฐ์ฐ์, ๋ ผ๋ฆฌ ์ฐ์ฐ์, ๋ถ์ ์ฐ์ฐ์๊ฐ ์๋ค. |
์ 5์ GROUP BY, HAVING ์ |
์ง๊ณํจ์(Aggregate Function)๋ ์ฌ๋ฌ ํ๋ค์ด ๋ชจ์ฌ์ ๊ทธ๋ฃน๋น ๋จ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋๋ ค์ฃผ๋ ๋ค์คํ ํจ์์ ์ผ๋ถ๋ก์ COUNT, SUM, AVG, MAX, MIN ๋ฑ์ด ์๋ค. GROUP BY ์ ์ ์งํฉ๋ณ ํต๊ณ ์ ๋ณด์ ๊ธฐ์ค์ ๋ช ์ํ๊ณ , HAVING ์ ์๋ ์งํฉ์ ๋ํ ์ ํ ์กฐ๊ฑด์ ๋์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ด์ฉ๋ง ์ถ๋ ฅํ๋ค. |
์ 6์ ORDER BY ์ |
ORDER BY ์ ์ ์กฐํ๋ ์๋ฃ๋ฅผ ์ํ๋ ์นผ๋ผ ์์ผ๋ก ์ ๋ ฌํ๋ ๊ธฐ๋ฅ์ ์ํํ๊ณ , SELECT ๋ฌธ์ฅ์ ์ ์ผ ๋ง์ง๋ง์ ์์นํ๋ค. SELECT ๋ฌธ์ฅ์ FROM ์ , WHERE ์ , GROUP BY ์ , HAVING ์ , SELECT ์ , ORDER BY ์ ์์๋ก ์คํ๋๋ค. |
์ 7์ ์กฐ์ธ |
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ๋ค์ ์ฐ๊ฒฐํด ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ์กฐ์ธ(JOIN)์ด๋ผ๊ณ ํ๋ฉฐ, ์ ํต์ ์ธ ๋ฐฉ์์ ์กฐ์ธ ๋ฌธ๋ฒ์์๋ WHERE ์ ์ ์กฐ์ธ ์กฐ๊ฑด๊ณผ ๋ฐ์ดํฐ ์ ํ ์กฐ๊ฑด์ ํจ๊ป ๊ธฐ์ ํ๋ค. |
์ 8์ ํ์ค ์กฐ์ธ |
ANSI/ISO SQL์์ ๊ท์ ํ ์กฐ์ธ์ INNER JOIN, NATURAL JOIN, CROSS JOIN, OUTER JOIN์ ์กฐ์ธ ์ ํ์ผ๋ก ๋ถ๋ฅํ ์ ์๋ค. ANSI/ISO ํ์ค ๋ฐฉ์์ ์กฐ์ธ ๋ฌธ๋ฒ์์ ๊ฐ์ฅ ๋๋๋ฌ์ง ํน์ง์ ON์กฐ๊ฑด ์ ๋ฐ USING์กฐ๊ฑด ์ ์ ์ฌ์ฉํด ์กฐ์ธ ์กฐ๊ฑด์ WHERE ์ ์ ๋ฐ์ดํฐ ์ ํ ์กฐ๊ฑด์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํด ๊ธฐ์ ํ๋ค๋ ๊ฒ์ด๋ค. |
'IT์๊ฒฉ์ฆ ๊ณต๋ถ > SQLD ์๊ฒฉ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL ์ ๋ฌธ๊ฐ] ๊ณผ๋ชฉII. ์ 2์ฅ SQL ํ์ฉ (0) | 2022.04.14 |
---|---|
[SQL ์ ๋ฌธ๊ฐ] ๊ณผ๋ชฉII. ์ 1์ฅ SQL ๊ธฐ๋ณธ - ์ฐ์ต๋ฌธ์ (1) | 2022.04.14 |
[SQL ์ ๋ฌธ๊ฐ] ๊ณผ๋ชฉI. ์ 2์ฅ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ - ์ฐ์ต๋ฌธ์ (0) | 2022.04.11 |
[SQL ์ ๋ฌธ๊ฐ] ๊ณผ๋ชฉI. ์ 2์ฅ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ (0) | 2022.04.11 |
[SQL ์ ๋ฌธ๊ฐ] ์ 1์ฅ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด - ์ฐ์ต๋ฌธ์ (0) | 2022.04.11 |