๐ ์ค๋ ๋ฐฐ์ด ๋ด์ฉ!
- SQL / NoSQL
- SQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ
โ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค (Database)
- ์ปดํจํฐ ์์คํ ์ ์ ์์ ์ผ๋ก ์ ์ฅ๋๋ ์กฐ์งํ๋ ๋ฐ์ดํฐ ๋ชจ์
- ๋ฐ์ดํฐ๋ฅผ ์กฐ์งํ ํ๊ธฐ ๋๋ฌธ์ ๋๋์ ๋ฐ์ดํฐ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
โ๏ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ (DBMS)
- Database Management System
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅด ์ค์ง์ ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ
Ex. MySQL, Oracle, SQLite, MariaDB, PostgresSQL ๋ฑ
โ๏ธ RDBMS
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
โ๏ธ SQL vs NoSQL
1. SQL (Structured Query Language)
- ๊ตฌ์กฐํ๋ ์ฟผ๋ฆฌ ์ธ์ด
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
โ๏ธ ์ฟผ๋ฆฌ (query)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ง ์ถ๋ฆฌ๊ณ ์ถ์ ๋ ํ๋ ๋ช ๋ น(์ง์๋ฌธ)
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด ์ํ๋ ๋ฐ์ดํฐ๋ง ํํฐ๋งํ์ฌ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ฝ์ ํ ์ ์์
โ
Ex. ํ์๋ค ์ค ์ฑ๋ณ์ด ๋จ์์ธ ํ์๋ง ๊ฐ์ ธ์
2. NoSQL (Non Structured Query Language)
- ๊ตฌ์กฐํ๋์ง ์์ ์ฟผ๋ฆฌ ์ธ์ด
- ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
โ๏ธ SQL ๊ธฐ๋ฐ <๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค>
- ๊ณ ์ ๋ ํ(row)๊ณผ ์ด(column)๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ์ฅ
- ๊ฐ ์ด์ ํ๋์ ์์ฑ์ ๋ํ ์ ๋ณด ์ ์ฅ / ๊ฐ ํ์ ๊ฐ ์ด์ ๋ฐ์ดํฐ ํ์์ ๋ง๋ ๋ฐ์ดํฐ ์ ์ฅ
- ํ ์ด๋ธ์ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ํ์ ๋ฑ์ ์ฌ์ ์ ์ ์ํ๊ณ , ํ ์ด๋ธ์ ์ ์๋ ๋ด์ฉ์ ์๋ง์ ํํ์ ๋ฐ์ดํฐ๋ง ์ฝ์ ํ ์ ์์
- SQL์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ ๋ณด ์ฟผ๋ฆฌ
- ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ ๋ ์คํค๋ง์ ๋ง๊ฒ ์
๋ ฅํด์ผํด์ ์คํค๋ง๊ฐ ๋๋ ทํ๊ฒ ๋ณด์
(ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ง๊ด์ ์ผ๋ก ํ์ ๊ฐ๋ฅ)
Ex. MySQL, Oracle, SQLite, PostgresSQL, MariaDB ๋ฑ
โ ์ฅ์
- ๋ฐ์ดํฐ ์ฑ๋ฅ์ด ์ผ๋ฐ์ ์ผ๋ก ์ข์ ์ ๋ ฌ, ํ์, ๋ถ๋ฅ๊ฐ ๋น ๋ฆ
- ์ ๋ขฐ์ฑ์ด ๋์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅ
- ์ ๊ทํ์ ๋ฐ๋ฅธ ๊ฐฑ์ ๋น์ฉ์ ์ต์ํ
( ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์ ์ค๋ณต์ ์ต์ํํด์ ๊ตฌ์กฐํํ๋ ํ๋ก์ธ์ค )
โ ๋จ์
- ๊ธฐ์กด์ ์์ฑ๋ ์คํค๋ง์ ์์ ์ด ์ด๋ ค์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถํ๋ฅผ ๋ถ์ํ๊ธฐ ์ด๋ ค์
- ๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ๋งค์ฐ ๋นํจ์จ์
โ๏ธ ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ACID ์ฑ์ง์ ์ค์ํด์ผ ํ๋ ๊ฒฝ์ฐ
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ ํํ๊ฒ ๊ท์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฐ์ํ ์ ์๋ ์์ธ์ ์ธ ์ํฉ์ ์ค์ด๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฌด๊ฒฐ์ฑ์ ๋ณดํธํ ์ ์์
Ex. ๊ธ์ต ์๋น์ค๋ฅผ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ
- ์ํํธ์จ์ด์ ์ฌ์ฉ๋๋ ๋ฐ์ดํฐ๊ฐ ๊ตฌ์กฐ์ ์ด๊ณ ์ผ๊ด๋ ๊ฒฝ์ฐ
โ ๋ค์ํ ๋ฐ์ดํฐ ์ ํ๊ณผ ๋์ ํธ๋ํฝ์ ์ง์ํ๋๋ก ์ค๊ณ๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ
โ๏ธ NoSQL ๊ธฐ๋ฐ <๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค>
- ๋ฐ์ดํฐ๊ฐ ๊ณ ์ ๋์ด์์ง ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋ ์ตํต์ฑ์๋ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ, ๋ฐ์ดํฐ ์ ์ฅ/๊ฒ์์ ํนํ๋ ๋งค์ปค๋์ฆ ์ ๊ณต
- NoSQL์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ ๋ณด ์ฟผ๋ฆฌ
- ์ ์ฐํ ์คํค๋ง๋ฅผ ์ ๊ณตํ์ฌ, ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋ ์คํค๋ง์ ๋ฐ๋ผ ๋ฐ์ดํฐ ์ฝ์ด์ด
(schema on read) - ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋ ๋ฐฉ์์ ๋ฐ๋ผ, ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ฌ ๋ ์ํฅ์ ๋ฏธ์นจ
- Key-Value ํ์ , ๋ฌธ์ํ(Document) ๋ฐ์ดํฐ๋ฒ ์ด์ค, Wide-Column ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ทธ๋ํ(Graph) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๊ตฌ์ฑ
- Key-Value ํ์
โ ์์ฑ์ key-value์ ์์ผ๋ก ๋ํ๋ด๋ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ํํ๋ก ์ ์ฅ
( key - ์์ฑ ์ด๋ฆ / value - ๊ทธ ์์ฑ์ ๋ฐ์ดํฐ ๊ฐ )
Ex. Redis, Dynamo ๋ฑ
- ๋ฌธ์ํ(Document) ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ ํ ์ด๋ธ์ด ์๋ ๋ฌธ์์ฒ๋ผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
( JSON๊ณผ ์ ์ฌํ ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ํํ์ฌ ์ ์ฅ )
โ ๊ฐ ๋ฌธ์๋ ํ๋์ ์์ฑ์ ๋ํ ๋ฐ์ดํฐ ๊ฐ์ง๊ณ ์๊ณ , ์ปฌ๋ ์ ์ด๋ผ๊ณ ํ๋ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ด๋ฆฌ
Ex. MongoDB
- Wide-Column ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด(column)์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ค์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ ๊ฐ ์ด์๋ key-value ํ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๊ณ , ์ปฌ๋ผ ํจ๋ฐ๋ฆฌ(column families)๋ผ๋ ์ด์ ์งํฉ์ฒด ๋จ์๋ก ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
โ ํ๋์ ํ์ ๋ง์ ์ด์ ํฌํจํ ์ ์์ด์ ์ ์ฐ์ฑ์ด ๋์
โ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํ์ํ ์ด์ ์ ์ฐํ ์ ํ์ด ๊ฐ๋ฅํ๊ธฐ์ ๊ท๋ชจ๊ฐ ํฐ ๋ฐ์ดํฐ ๋ถ์์ ์ฃผ๋ก ์ฌ์ฉ
Ex. Cassandra, HBase
- ๊ทธ๋ํ(Graph) ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ ์๋ฃ๊ตฌ์กฐ์ ๊ทธ๋ํ์ ๋น์ทํ ํ์์ผ๋ก ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค
โ ๋ ธ๋(nodes)์ ์์ฑ๋ณ(entities)๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
( ๊ฐ ๋ ธ๋๊ฐ ๊ด๊ณ๋ ์ (edge)์ผ๋ก ํํ )
Ex. Neo4J, InfiniteGraph
โ ์ฅ์
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ํจ์จ์
- ๋ฐ์ด๋ ํ์ฅ์ฑ์ผ๋ก ๊ฒ์์ ์ ๋ฆฌ.
- ์ต์ ํ๋ ํค ๊ฐ ์ ์ฅ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์๋ต์๋๋ ์ฒ๋ฆฌํจ์จ ๋ฑ์์ ์ฑ๋ฅ์ด ๋ฐ์ด๋จ
โ ๋จ์
- ์ฟผ๋ฆฌ ์ฒ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ํ์ฑ ํ ์ฐ์ฐ์ ํด์ผํด์ ํฐ ํฌ๊ธฐ์ ๋ฌธ์ ๋ค๋ฃฐ ๋๋ ์ฑ๋ฅ์ด ์ ํ๋จ
โ๏ธ ์ฌ์ฉ
- ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ๊ฑฐ์ ๋๋ ์ ํ ์๋ ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒฝ์ฐ
โ ๋๋ถ๋ถ ์ ์ฅํ ์ ์๋ ๋ฐ์ดํฐ ์ ํ์ ์ ํ์ด ์์ด ์ธ์ ๋ ์ง ์ ์ ํ ์ถ๊ฐ ๊ฐ๋ฅ
โ ์ ํํ ๋์ง ์์ ๋ง์ ์์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ ํจ์จ์ - ํด๋ผ์ฐ๋ ์ปดํจํ
๋ฐ ์ ์ฅ๊ณต๊ฐ์ ์ต๋ํ ํ์ฉํ๋ ๊ฒฝ์ฐ
โ ์ ๋ ดํ ๋น์ฉ์ ์๋ฃจ์ ์ ๊ณต๋ฐ์ ์ ์๊ณ , ํ์ฅ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ์๋ ๋ฒ๊ฑฐ๋ก์ ์์ด ํ์ฅ์ด ๊ฐ๋ฅ - ๋น ๋ฅด๊ฒ ์๋น์ค๋ฅผ ๊ตฌ์ถํ๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฃผ ์
๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ
โ ์คํค๋ง๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํ ํ์๊ฐ ์์ด ๋น ๋ฅธ ๊ฐ๋ฐ์ ์ ๋ฆฌ
Ex. ์์ฅ์ ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ ์ ์ถ์ํด์ผ ํ๋ ๊ฒฝ์ฐ
โ๏ธ SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐจ์ด์
1. ๋ฐ์ดํฐ ์ ์ฅ(Storage) ๋ฐฉ์
โ๏ธ SQL ๊ธฐ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- SQL์ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ ์ฅ
- ๋ฏธ๋ฆฌ ์์ฑ๋ ์คํค๋ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํด์ง ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ ์ ์ฅ
โ๏ธ NoSQL ๊ธฐ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- key-value, document, wide-column, graph ๋ฑ์ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ ์ ์ฅ
2. ์คํค๋ง(Schema)
โ๏ธ SQL ๊ธฐ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ณ ์ ๋ ํ์์ ์คํค๋ง๊ฐ ํ์
( ์ฒ๋ฆฌํ๋ ค๋ ๋ฐ์ดํฐ ์์ฑ๋ณ๋ก ์ด(column)์ ๋ํ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋์ด์ผ ํจ ) - ์คํค๋ง๋ ๋์ค์ ๋ณ๊ฒฝ ๊ฐ๋ฅ
But, ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฒด๋ฅผ ์์ ํ๊ฑฐ๋ ์คํ๋ผ์ธ(down-time)์ผ๋ก ์ ํํด์ผํจ
โ๏ธ NoSQL ๊ธฐ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ๋์ ์ผ๋ก ์คํค๋ง์ ํํ ๊ด๋ฆฌ ๊ฐ๋ฅ
- ํ์ ์ถ๊ฐํ ๋ ์ฆ์ ์๋ก์ด ์ด์ ์ถ๊ฐํ ์ ์๊ณ , ๊ฐ๋ณ ์์ฑ์ ๋ํด์ ๋ชจ๋ ์ด์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋์ ์ ๋ ฅํ์ง ์์๋ ๋จ
3. ์ฟผ๋ฆฌ(Querying)
โ๏ธ SQL ๊ธฐ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ
์ด๋ธ์ ํ์๊ณผ ํ
์ด๋ธ๊ฐ์ ๊ด๊ณ์ ๋ง์ถฐ ๋ฐ์ดํฐ ์์ฒญ
โ ์ ๋ณด๋ฅผ ์์ฒญ์, ๊ตฌ์กฐํ๋ ์ฟผ๋ฆฌ ์ธ์ด(SQL) ์ฌ์ฉ
โ๏ธ NoSQL ๊ธฐ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ดํฐ ๊ทธ๋ฃน ์์ฒด๋ฅผ ์กฐํํ๋ ๊ฒ์ ์ด์
โ ๊ทธ๋์ ๊ตฌ์กฐํ ๋์ง ์์ ์ฟผ๋ฆฌ ์ธ์ด๋ก๋ ๋ฐ์ดํฐ ์์ฒญ ๊ฐ๋ฅ - UnQL(UnStructured Query Language)์ด๋ผ๊ณ ๋งํ๊ธฐ๋ ํจ
4. ํ์ฅ์ฑ(Scalability)
โ๏ธ SQL ๊ธฐ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์์ง์ ์ผ๋ก ํ์ฅ
( ๊ธฐ๋ณธ๊ฒ์ ์ ํ๋์จ์ด๋ก ๊ต์ฒดํ์ฌ ์ฑ๋ฅ์ ํ์ฅํ๋ ๊ฒ )
โ ์์ ํ high-end์ธ ํ๋์จ์ด๋ฅผ ๊ตฌ๋งคํ์ง ์์ ๊ฒฝ์ฐ์๋ ๋น์ฉ ์ ๋ ด
But, ํ์ฅ์ด ๋ฐ๋ณต๋ ์๋ก ๊ธฐํ๊ธ์์ ์ธ ๋น์ฉ์ด ๋ค์ด๊ฐ )
- ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ค์ด๋์์ ๋, ๋จ์ผ ํ๋์จ์ด๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์๋ฒ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํจ
( ์ด๋ฅผ ๋ฐฉ์งํ๋ ค๊ณ , ๋์์ ๋ฐฑ์ ํ์ฌ ๋ค์ด๋์์ ๊ฒฝ์ฐ, ๋ฐ๋ก ๊ทธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋์ด๊ฐ๋๋ก ์ฌ์ฉ ) - ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ตฌ์ถ๋ ํ๋์จ์ด์ ์ฑ๋ฅ์ ๋ง์ด ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋ง์ด ๋ฆ
- ์ฌ๋ฌ ์๋ฒ์ ๊ฑธ์ณ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๊ณ ์ ์๊ฐ ๊ฐ๋ฅํ์ง๋ง, ๋งค์ฐ ๋ณต์กํ๊ณ ์๊ฐ ๋ง์ด ์๋ชจ
โ๏ธ NoSQL ๊ธฐ๋ฐ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์ํ์ ์ผ๋ก ํ์ฅ
( ๋ณ๋ ฌ์ ์ผ๋ก, ๋ณด๋ค ๊ฐ์ผ ์๋ฒ ์ฆ์ค, ๋๋ ํด๋ผ์ฐ๋ ์๋น์ค ์ด์ฉํ์ฌ ์ด์ ์์ ๋๋ ค ํ์ฅ )
โ ์๋์ ์ผ๋ก ๋น์ฉ์ด ์ ๋ ด - ์ด๋ฅผ ์ํ ์๋ฒ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๊ตฌ์ถํ๋ฉด, ๋ง์ ํธ๋ํฝ์ ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ
โ๏ธ ํธ๋์ญ์ (Transaction)
- ์ฌ๋ฌ๊ฐ์ ์์
์ ํ๋๋ก ๋ฌถ์ ์คํ ์ ๋
( ํ ํธ๋์ญ์ ์์ ์ฌ๋ฌ ์์ ์ค ํ๋๋ผ๋ ์คํจํ๋ฉด ์คํจํ ๊ฒ์ผ๋ก ํ๋จ, ๋ชจ๋ ์๋ฃํด์ผ ์ ์์ ์ผ๋ก ์ข ๋ฃ )
Ex. ๋ด ๊ณ์ข์์ B ๊ณ์ข๋ก 10๋ง์์ ์ด์ฒดํ๋ค๊ณ ํ ๋, ๋ด ๊ณ์ข์์๋ 10๋ง์์ด ๋น ์ ธ๋๊ฐ๊ณ B ๊ณ์ข์์๋ 10๋ง์์ด ๋ค์ด์์ผํจ.
์ด ๋, ๋ ์ก์ ๋ชจ๋ ์ฑ๊ณตํด์ผ ๊ณ์ข์ด์ฒด ์ฑ๊ณตํ ๊ฒ
โ ํธ๋์ญ์ ์ ํน์ฑ โ ACID
- ํ๋์ ํธ๋์ญ์
(transaction)์ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ํ์ํ ์ฑ์ง
1. Atomicity (์์์ฑ)
- ์ฑ๊ณตํ ๊ฑฐ๋ฉด ๋ค ์ฑ๊ณต, ์คํจํ ์์๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด ๋ฌด์กฐ๊ฑด ์คํจ
( ํ๋๋ผ๋ ์คํจํ๋ค๋ฉด ํ๋์ ๋จ์๋ก ๋ฌถ์ฌ์๋ ๋ชจ๋ ์์ ์ด ์คํจํ๊ฒ ๋ง๋ค์ด ๊ธฐ์กด ๋ฐ์ดํฐ ๋ณดํธํจ )
Ex. ์์ ๊ณ์ข์ด์ฒด ์์์์,
๋ด ๊ณ์ข์์๋ง ๋์ด ๋น ์ ธ๋๊ฐ๊ณ B ๊ณ์ข์๋ ๋์ด ๋ค์ด์ค์ง ์๋๋ค๋ฉด ๋ด ๋์ ์ฆ๋ฐ๋จ
โ ํ๋๋ผ๋ ์คํจํ๋ฉด ์คํจํ๊ธฐ ์ ์ ์ํฉ์ผ๋ก ๋์๊ฐ ( rollback )
2. Consistency (์ผ๊ด์ฑ)
- ํ๋์ ํธ๋์ญ์
์์๋ ์ํ๊ฐ ์ผ๊ด๋์ด์ผํจ
( ํธ๋์ญ์ ์ด ์ผ์ด๋ ์ดํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฝ์ด๋ ๊ท์น์ ๋ง์กฑํด์ผํ๋ค๋ ์๋ฏธ )
Ex. ์ํ์ ์ง๊ธ๊น์ง ๋ด ์ด๋ฆ์ผ๋ก ์๊ธ์ ํ๋๋ฐ, ๊ฐ์๊ธฐ ๊ทธ ์ค ํ๋์ ์ด๋ฆ์ ๋นผ๊ฑฐ๋ ์ด๋ฆ์ ์์ด ์๊ธ์ ํ๋ ๊ฒ์ ์๋จ
โ ์ผ๊ด๋๊ฒ ์ด๋ฆ์ ๋ฃ๊ณ ์๊ธํด์ผํจ
3. Isolation (๊ฒฉ๋ฆฌ์ฑ, ๊ณ ๋ฆฝ์ฑ)
- ๊ฐ๊ฐ์ ํธ๋์ญ์
์ ๋
๋ฆฝ์ , ์๋ก์ ์ฐ์ฐ์ ํ์ธ๋ฐ๊ฑฐ๋ ์ํฅ X
โ ๋์์ ์คํ๋๋ ๊ฒ์ด ์ฐ์์ผ๋ก ์คํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋
( ์ด๋ ๊ฒ ๋์์ ์คํ๋๊ฑฐ๋ ์ฐ์์ผ๋ก ์คํ๋ ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ๊ฐ ๋์ผํด์ผํจ)
Ex. ๋ด ๊ณ์ข์์ B ๊ณ์ข์ 10๋ง์์ ๋ณด๋ด๋ ๊ฒ๊ณผ C ๊ณ์ข์ 10๋ง์์ ๋ณด๋ด๋ ๊ฒ์ ์๋ก ๋ค๋ฅธ ๊ฒ
โ ์ด ๋ ์ก์ ์ด ์๋ก ์ํฅ์ ๋ฏธ์น๋ฉด ์๋จ
โ ๋์ ๋์์ ๋ณด๋ด๋ ๊ฒ๊ณผ B์ ๋ณด๋ด๊ณ C์ ๋ณด๋ด๊ณ ์ด๋ ๊ฒ ์ฐ์์ผ๋ก ๋ณด๋ด๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ ๋์์ผํจ
4. Durability (์ง์์ฑ)
- ํ๋์ ์ฑ๊ณต๋ ํธ๋์ญ์ ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋๊ณ ์๊ตฌ์ ์ผ๋ก ๋จ์
Ex1. ๋ด ๊ณ์ข์์ B ๊ณ์ข๋ก 10๋ง์ ๋ณด๋ด๋ ค๊ณ ํ ๋,
์ด์ฒด๋ฅผ ํ๊ณ ์ํ์์ ์ฑ๊ณตํ๋ค๋ ๋ฌธ์(๋ก๊ทธ)๊ฐ ์๊ณ ์ดํ ์ํ ์๋ฒ์ ์๋ฌ๊ฐ ๋ฌ๋ค๊ณ ํจ
โ ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ๊ฐ ์จ ํ ์๋ฌ๊ฐ ๋ฌ์ผ๋ ์ด์ฒด ์ฑ๊ณต๊ณผ ํจ๊ป ๋ก๊ทธ๊ฐ ๊ธฐ๋ก๋จ
Ex2. ๋ด ๊ณ์ข์์ B ๊ณ์ข๋ก 10๋ง์ ๋ณด๋ด๋ ค๊ณ ํ ๋,์ด์ฒด๋ฅผ ํ๋๋ฐ ์ํ ์๋ฒ์ ์๋ฌ๊ฐ ๋ฌ๋ค๊ณ ํ๊ณ ์ฑ๊ณตํ๋ค๋ ๋ฌธ์(๋ก๊ทธ)๋ ์ค์ง ์์โ ์๋ฌ๊ฐ ๋์ ์ด์ฒด์ ์คํจํ์ผ๋ ์ด์ฒด ์ ์ผ๋ก rollback๋ ๊ฒ
โ๏ธ SQL ์ฟผ๋ฆฌ๋ฌธ ๋ฌธ๋ฒ
[์ฐธ๊ณ ] https://www.w3schools.com/sql/default.asp
๐ก DELETE vs DROP vs TRUNCATE ์ฐจ์ด
- DELETE - ํ ์ด๋ธ์ ์์ ์ญ์ (์ด ๋ฐ ์ธ๊ฐ ์ค์ ์๋ง ๋ก๊ทธ๊ฐ ๋จ์์ ๋ณต๊ตฌ ๊ฐ๋ฅ)
- DROP - ํ ์ด๋ธ ์์ฒด๋ฅผ ์ญ์
- TRUNCATE - ํ ์ด๋ธ์ ํ์ ๋๋๊ณ ๋น์ฐ๊ธฐ (์์ฑ๋ ์ด๊ธฐ ์ํ๋ก ๋ง๋ค๊ธฐ)
(TRUNCATE๋ ์์ฃผ ์์จ์ ์ธ์ฐ์ง ์์๋ ๋จ)
โ๏ธ CREATE DATABASE
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
CREATE DATABASE ๋ฐ์ดํฐ๋ฒ ์ด์ค_์ด๋ฆ;
โ๏ธ DROP DATABASE
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญ์
( ๋ก๊ทธ๊ฐ ๋จ์ง ์์ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅ )
DROP DATABASE ๋ฐ์ดํฐ๋ฒ ์ด์ค_์ด๋ฆ;
โ๏ธ CREATE TABLE
โ ํ ์ด๋ธ ์์ฑ
CREATE TABLE ํ
์ด๋ธ_์ด๋ฆ ( ์ด1 ์ด๋ฆ, ์ด2 ์ด๋ฆ, ... );
โ๏ธ DROP TABLE
โ ํ
์ด๋ธ ์ญ์
( ๋ก๊ทธ๊ฐ ๋จ์ง ์์ ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅ )
DROP TABLE ํ
์ด๋ธ_์ด๋ฆ;
โ๏ธ ALTER TABLE
โ ํ
์ด๋ธ์์ ์ด์ ์์๋ค(๋ฐ์ดํฐ๋ค)์ add
, delete
, modify
( ๋ฐ์ดํฐ ํ์
์ int, varchar(255), date ๋ฑ )
ALTER TABLE ํ
์ด๋ธ_์ด๋ฆ
ADD ์ด_์ด๋ฆ ๋ฐ์ดํฐ_ํ์
;
ALTER TABLE ํ
์ด๋ธ_์ด๋ฆ
DROP COLUMN ์ด_์ด๋ฆ;
ALTER TABLE table_name
MODIFY COLUMN ์ด_์ด๋ฆ ๋ฐ์ดํฐ_ํ์
;
โ๏ธ SELECT
โ ๋ฐ์ดํฐ ์ ์ ํฌํจ๋ ํน์ฑ์ ํน์ ํ์ฌ ์กฐํ
โ๏ธ FROM
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ด๋ค ํ ์ด๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ์กฐํํ ์ง
SELECT Country FROM Customers;
โ Customers ํ
์ด๋ธ์ Country ์ด๋ง ์
๋ ํด์ค
( ์ค๋ณต์ด ์์ด๋ ๊ทธ๋๋ก ๋ณด์ฌ์ค )
โ๏ธ DISTINCT
โ ์ค๋ณต ์ ๊ฑฐ ์ญํ
SELECT DISTINCT Country FROM Customers;
โ Customers ํ
์ด๋ธ์ Country ์ด์์ ์ค๋ณต์ ์์ค ๋ค ๋ค๋ฅธ ์ด๋ค์ ์
๋ ํด์ค
( ์ค๋ณต์ด ์์ผ๋ฉด ์ค๋ณต์ ์์ ๊ณ ๋ณด์ฌ์ค )
โ๏ธ WHERE
โ ํํฐ ์ญํ ( ์ ํ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ )
SELECT * FROM Customers
WHERE Country='Mexico';
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Mexico์ธ ์ฌ๋๋ค์ ํ์ ํ์ฌ ๊ทธ ์ ์ฒด๋ฅผ ์
๋ ํด์ค
(๋ฌธ์๋ ''๋ก ๋ฌถ๊ณ ์ซ์๋ฉด ๊ทธ๋ฅ ์ซ์๋ง ์)
โ๏ธ WHERE ์ ์ฐ์ฐ์
=
- ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ํ์ ํ ๋>
/<
/>=
/<=
- ๋ฐ์ดํฐ๊ฐ์ ๋น๊ตํ์ฌ ํ์ ํ ๋<>
/!=
- ์ ํ๋ ๋ฒ์ ์ธ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ํ์ ํ ๋
SELECT * FROM Customers
WHERE Country<>'Germany';
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany๊ฐ ์๋ ๊ณ ๊ฐ ์ ์ฒด
- BETWEEN AND - ์ ํ๋ ๋ฒ์ ์ฌ์ด์ ๋ฐ์ดํฐ๊ฐ ํ์ ํ ๋
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
โ Products ํ
์ด๋ธ์์ Price๊ฐ 10-20 ์ฌ์ด์ธ ์ ํ ์ ์ฒด ์
๋
(NOT BETWEEN ํ๋ฉด ์ฌ์ด๊ฐ ์๋ ๊ฒ)
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';
โ Orders ํ
์ด๋ธ์์ OrderDate๊ฐ 1996-07-01 ~ 1996-07-31์ธ ์ ํ ์ ํ
- AND - AND๋ก ๊ตฌ๋ถ๋ ๋ชจ๋ ์กฐ๊ฑด์ด true์ธ ๊ฒฝ์ฐ
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany ์ด๊ณ City๊ฐ Berlin์ธ ๊ณ ๊ฐ ์ ์ฒด
- OR - OR๋ก ๊ตฌ๋ถ๋ ์กฐ๊ฑด๋ค ์ค ํ๋๋ผ๋ true์ธ ๊ฒฝ์ฐ
SELECT * FROM Customers
WHERE Country='Germany' OR City='Berlin';
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany ์ด๊ฑฐ๋ City๊ฐ Berlin์ธ ๊ณ ๊ฐ ์ ์ฒด
- NOT - ์กฐ๊ฑด์ด ๋ชจ๋ true๊ฐ ์๋ ๊ฒฝ์ฐ
SELECT * FROM Customers
WHERE NOT Country='Germany';
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany๊ฐ ์๋ ๊ณ ๊ฐ ์ ์ฒด
- IS NULL / IS NOT NULL - ๊ฐ์ด NULL์ธ ๊ฒ๋ง ํ์ ํ์ฌ ๋ฐํํ๊ณ NULL์ด ์๋ ๊ฒ๋ง ํ์ ํ์ฌ ๋ฐํํ๋ ๊ฒ
- LIKE / IN - WHERE ์์์๋ ๋ ๊ฐ์ ํน์ง์ผ๋ก ํ์ ํ ๋
โ๏ธ IS NULL / IS NOT NULL
โ WHERE ์ ์์์ NULL ๊ฐ ํ ์คํธ
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
โ Customers ํ
์ด๋ธ์์ Address ๊ฐ์ด null์ธ ์ ๋ค ์ค์ CustomerName, ContactName, Address๋ง ์
๋ ํด์ค
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
โ Customers ํ
์ด๋ธ์์ Address ๊ฐ์ด null์ด ์๋ ์ ๋ค ์ค์ CustomerName, ContactName, Address๋ง ์
๋ ํด์ค
โ๏ธ LIKE
โ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํ์ฌ WHERE ์ ์์์ ์ด์ ํน์ ํจํด์ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ
- LIKE 'a%' - a๋ก ์์ํ๋ ๋จ์ด (๋จ์ด๊ฐ ๊ทธ๋ฅ a์ฌ๋ ์๊ด X)
- LIKE '%a' - a๋ก ๋๋๋ ๋จ์ด
- LIKE '%a%' - ์ค๊ฐ์ a๊ฐ ์๋ ๋จ์ด
- LIKE '_a%' - ๋๋ฒ์งธ ๋ฌธ์๊ฐ a์ธ ๋จ์ด
- LIKE 'a_%' - a๋ก ์์ํ์ฌ ๊ธธ์ด๊ฐ ์ต์ 2๋ ๋๋ ๋จ์ด
- LIKE 'a__%' - a๋ก ์์ํ์ฌ ๊ธธ์ด๊ฐ ์ต์ 3์ ๋๋ ๋จ์ด
- LIKE 'a%b' - a๋ก ์์ํ์ฌ b๋ก ๋๋๋ ๋จ์ด
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';
โ Customers ํ
์ด๋ธ์์ CustomerName์ด a๋ก ์์ํ์ง ์๋ ์ ์ฒด ์
๋
โ๏ธ WHILDCARD
โ LIKE ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ๋จ
%
,_
[]
,-
- ๋จ์ด ์ ๋ฌธ์์ ๋ฒ์ ํ์
SELECT * FROM Customers
WHERE City LIKE '[acb]%';
โ Customers ํ
์ด๋ธ์์ City๊ฐ a / c / b ๋ก ์์ํ๋ ๋ชจ๋ ๊ณ ๊ฐ ์ ํ
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
โ Customers ํ
์ด๋ธ์์ City๊ฐ a ~ c๋ก ์์ํ๋ ๋ชจ๋ ๊ณ ๊ฐ ์ ํ
^ ๋บ ๊ธ์
- ์ ํ๋ ๋ฌธ์ ์ธ์ ๋ค๋ฅธ ๋ฌธ์๊ฐ ์ค๋ ๋จ์ด ํ์
SELECT * FROM Customers
WHERE City LIKE '[^bsp]%';
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';
โ Customers ํ
์ด๋ธ์์ City๊ฐ b, s, p ์ค ํ๋๋ก๋ ์์ํ์ง ์๋ ๋ชจ๋ ๊ณ ๊ฐ ์ ํ
โ๏ธ IN
โ WHERE์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ์ฌ๋ฌ OR ์กฐ๊ฑด๋ค์ ๋์ด ๋ฒ์ ํ์
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany, France, UK ์ค ํ๋์ธ ๊ณ ๊ฐ ์ ์ฒด ์
๋
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany, France, UK ์ค ํ๋๋ผ๋ ์๋ ๊ณ ๊ฐ ์ ์ฒด ์
๋
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Customers ํ
์ด๋ธdml Suppliers(๊ณต๊ธ์
์ฒด)์ ๊ฐ์ ๊ณ ๊ฐ๋ง ์ ์ฒด ์
๋
โ๏ธ ORDER BY
โ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ณธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅ
SELECT * FROM Customers
ORDER BY Country;
โ Customers ํ
์ด๋ธ์์ Country ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
SELECT * FROM Customers
ORDER BY Country DESC;
โ Customers ํ
์ด๋ธ์์ Country ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์
SELECT * FROM Customers
ORDER BY Country, CustomerName;
โ Customers ํ
์ด๋ธ์์ Country, CustomerName ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์
( ๊ตญ๊ฐ๋ณ๋ก ์ค๋ฆ์ฐจ์ํ ๊ฒ๋ค ์์ ๊ณ ๊ฐ ์ด๋ฆ๋ ์ค๋ฆ์ฐจ์ ๋์ด์์ )
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
โ Customers ํ
์ด๋ธ์์ Country ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, CustomerName ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์
โ๏ธ INSERT INTO
โ ๋ฐ์ดํฐ ๋ฃ๊ธฐ
INSERT INTO Customers (CustomerName, ContactName, Address, City, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Stavanger', '4006', 'Norway');
โ Customers ํ
์ด๋ธ์์ ์ ํ๋ ๊ฐ ์ด์ values๋ฅผ ๊ฐ๊ฐ ์ถ๊ฐํด์ ํ๋์ ํ ์ถ๊ฐ
โ๏ธ UPDATE
โ ๋ฐ์ดํฐ ์์
( UPDATEํ ๋ WHERE์ ์ด ์์ผ๋ฉด ์ ์ฒด์ ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๊ธฐ ๋๋ฌธ์ ๊ผญ WHERE์ ๋ก ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ ํด์ค์ผํจ )
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
โ Customers ํ
์ด๋ธ์์ ID๊ฐ 1์ธ ์ ๋ค์ ContactName๊ณผ City๋ฅผ ๊ฐ๊ฐ Alfred Schmidt, Frankfurt๋ก ๋ณ๊ฒฝ
โ๏ธ DELETE
โ ํ
์ด๋ธ ์์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๋ ์ฌ์ฉ
( DELETEํ ๋ WHERE์ ์ด ์์ผ๋ฉด ์ ์ฒด์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ๊ผญ WHERE์ ๋ก ์ญ์ ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ ํด์ค์ผํจ )
( ๋ก๊ทธ๊ฐ ๋จ์์ ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ )
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
โ Customers ํ
์ด๋ธ์์ CustomerName์ด Alfreds Futterkiste์ธ ์ ๋ฅผ ์ญ์ ํด์ค
DELETE FROM Customers;
โ Customers ํ
์ด๋ธ์์ ๋ชจ๋ ํ ์ญ์ (ํ
์ด๋ธ์ ๋จ์์์)
โ๏ธ LIMIT
โ ์ถ๋ ฅํ ๋ฐ์ดํฐ์ ๊ฐ์ ํ์ ( ์ฟผ๋ฆฌ๋ฌธ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐ )
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
โ Customers ํ
์ด๋ธ์์ Country๊ฐ Germany์ธ ์ ๋ค ์ค ์์ 3๊ฐ๋ง ์ ์ฒด ์ ํ
โ๏ธ MIN / MAX
โ ์ต์๊ฐ / ์ต๋๊ฐ
SELECT MIN(Price) AS SmallestPrice
FROM Products;
โ Products ํ
์ด๋ธ์์ SmallestPrice๋ผ๋ ์ด๋ฆ์ ํ์ผ๋ก Price์ด์ ๋ฐ์ดํฐ ์ค ์ต์๊ฐ ์
๋
SELECT MAX(Price) AS LargestPrice
FROM Products;
โ Products ํ
์ด๋ธ์์ LargestPrice๋ผ๋ ์ด๋ฆ์ ํ์ผ๋ก Price์ด์ ๋ฐ์ดํฐ ์ค ์ต๋๊ฐ ์
๋
โ๏ธ COUNT / AVG / SUM
- COUNT() - ( )์ ์ ํ๋ ์ซ์ ์ด์ ๋ฐ์ดํฐ ์๋ฅผ ๋ฐํ
SELECT COUNT(ProductID)
FROM Products;
โ Products ํ
์ด๋ธ์์ productID์ ์
(NULL ๊ฐ์ ๊ณ์ฐX)
- AVG() - ( )์ ์ ํ๋ ์ซ์ ์ด์ ํ๊ท ๊ฐ ๋ฐํ
SELECT AVG(Price)
FROM Products;
โ Products ํ
์ด๋ธ์์ Price์ด ๋ฐ์ดํฐ(๊ฐ๊ฒฉ)์ ํ๊ท
(NULL ๊ฐ์ ๋ฌด์)
- SUM() - ( )์ ์ ํ๋ ์ซ์ ์ด์ ์ด ํฉ๊ณ ๋ฐํ
SELECT SUM(Quantity)
FROM OrderDetails;
โ OrderDetails ํ
์ด๋ธ์์ Quantity ์ด์ ํฉ๊ณ
โ๏ธ AS
โ ๋ณ์นญ ๋ง๋ค๊ธฐ
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
โ Customers ํ
์ด๋ธ์์ ๊ณ ๊ฐID ์ด์ ๋ณ์นญ์ ID๋ก, CustomerName ์ด์ ๋ณ์นญ์ Customer๋ก ํ์ฌ ์
๋
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
โ Customers ํ
์ด๋ธ์์ CustomerName ์ด์ ๋ณ์นญ์ Customer๋ก, ContactName ์ด์ ๋ณ์นญ์ Contact Person์ผ๋ก ํ์ฌ ์
๋
( ๋ณ์นญ ์ด๋ฆ์ ๊ณต๋ฐฑ์ด ํฌํจ๋ ๊ฒฝ์ฐ ํฐ๋ฐ์ดํ ๋๋ ๋๊ดํธ๊ฐ ํ์)
โ๏ธ JOIN
INNER JOIN
- ๋ ํ ์ด๋ธ์์ ์ผ์นํ๋ ๊ฐ์ ๊ฐ์ง ๋ ์ฝ๋ ๋ฐํ (๊ต์งํฉ)
( Join ์์ ์๋ฌด๊ฒ๋ ์์ฐ๊ณ Join๋ง ์ฐ๋ฉด ์๋์ผ๋ก INNER JOIN์ผ๋ก ์ฌ์ฉ๋จ )
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
โ Orders ํ
์ด๋ธ์์ Orders ํ
์ด๋ธ์ CustomerID ํ๋์ Customers ํ
์ด๋ธ์ CustomerID ํ๋๊ฐ ์ผ์นํ๋ ๊ณ ๊ฐ๋ค๋ง
์ถ๋ ค์ Orders.OrderID, Customers.CustomerName, Orders.OrderDate ์
๋
LEFT (OUTER) JOIN
- ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋ ๋ฐํํ๊ณ (๊ณตํต๋์ง ์์ ํ๋), ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์์๋ ์ผ์ชฝ ํ ์ด๋ธ๊ณผ ๊ต์งํฉ๋ ๋ ์ฝ๋๋ง ๋ฐํ
(JOIN
์ฐ์ฐ์ ๊ธฐ์ค ์ผ์ชฝ์ด LEFE / ์ค๋ฅธ์ชฝ์ด RIGHT )RIGHT (OUTER) JOIN
- ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋ ๋ฐํํ๊ณ (๊ณตํต๋์ง ์์ ํ๋), ์ผ์ชฝ ํ ์ด๋ธ์์๋ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ๊ณผ ๊ต์งํฉ๋ ๋ ์ฝ๋๋ง ๋ฐํ
( ์ฌ์คLEFT (OUTER) JOIN
์ฌ์ฉํ ๋, ๊ฐ ํ ์ด๋ธ์ ์์น๋ง ๋ฐ๊พธ๋ฉดRIGHT (OUTER) JOIN
์ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์์ )FULL (OUTER) JOIN
- ๋ ํ ์ด๋ธ์ ์ผ์นํ๋ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ, ๋ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋ ๋ฐํ
โ๏ธ GROUP BY
โ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ ๊ฐ ๊ทธ๋ฃน์ ๊ฒฐ๊ณผ ๋ฐํ
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
โ Customers ํ
์ด๋ธ์์ Country ๋ณ๋ก CustomerId์ ์์ ๊ตญ๊ฐ ์
๋
๐ ๋๋์
๋ฌธ๋ฒ ์์๋ค์ด ๋ง์์ง๋ง ๊ทธ๋๋ ์ด๋ฒ ํ์ต์ ์์ํ๋ค!!
ํ์ง๋ง ํ๋ํ๋ ๋ค ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค๋ณด๋ ์ญ์ ์ ๋ฆฌ๊ฐ ์ค๋ ๊ฑธ๋ฆฐ๋ค ใ
( ๋ณธ ๊ฒ์๋ฌผ์ 2022/10/07์ ์์ฑํ ๊ธ์ ์ฎ๊ธด ๊ธ์ ๋๋ค. ์๋ฌธ์ ์๊ธฐ์ ์์! )
'โข CodeStates BootCamp > Section 2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ [Section2] 13. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ (1) | 2023.04.07 |
---|---|
๐ [Section2] 12. SQL ์ค์ต (0) | 2023.04.07 |
๐ [Section2] 10. HTTP / REST API (1) | 2023.04.07 |
๐ [Section2] 9. ๋คํธ์ํฌ2 (0) | 2023.04.07 |
๐ [Section2] 8. ๋คํธ์ํฌ1 (0) | 2023.04.07 |