ํ์คํ ์น๐ ๊ฐ๋ฐ์ ์ง๋ง์ ๐ง๐ฝโ๐ป
โ ์ธ๊ณต์ง๋ฅ ๊ด์ฌ ๐ค
Categories
-
โฃ
โถ COMPUTER_SCIENCE
๐: 7 -
โฃ
โถ WEB
๐: 3 -
โฃ
โถ ETC
๐: 3-
โ
โฃ
ETCS
๐: 10 -
โ
โฃ
SUBBRAIN ๊ฐ๋ฐ๊ธฐ
๐: 5 -
โ
โ
YOS ๊ฐ๋ฐ๊ธฐ
๐: 1
-
โ
โฃ
-
โ
โถ AI
๐: 9-
โฃ
AITOOLS
๐: 3 -
โฃ
CV
๐: 2 -
โฃ
DEEP_LEARNING
๐: 1 -
โฃ
DATA_VIS
๐: 2 -
โฃ
GRAPH
๐: 1 -
โฃ
LIGHTWEIGHT
๐: 1 -
โฃ
MATH
๐: 1 -
โฃ
NLP
๐: 3 -
โ
STRUCTURED_DATA
๐: 2
-
โฃ
Database SQL ๊ธฐ์ด
- Database SQL ๊ธฐ์ด
Database SQL ๊ธฐ์ด
DB
- ์ฒด๊ณํ๋ ๋ฐ์ดํฐ๋ค์ ๋ชจ์
- ์ด, ์นผ๋ผ, ๊ฐ ์ด์๋ ๊ณ ์ ํ ๋ฐ์ดํฐ ํ์์ด ์ง์ ๋จ, ๋ฐ์ดํฐ์ ์์ฑ
- ํ, ๋ ์ฝ๋, 1๊ฐ์ ๋ฐ์ดํฐ
- ์คํค๋ง, ํ ๊ฐ ์ด์ ์์, ์ฆ ๋ค์ด๊ฐ ๋ฐ์ดํฐ์ ๋ด์ฉ์ ์ ์ํจ
๊ตฌ์ฑ์์
- ๊ฐ์ฒด, entity( ์ฌ์๋ค)
- ๊ทธ๋ค์ด ๊ฐ์ง๋ ์์ฑ, attribute (์ฌ์๋ฒํธ, ์ฑ๋ช , ๋ถ์ , ์ง์ฑ )
- ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ (relation)
ORM(Object-Relational Mapping)
- SQL์ด ๋ชฐ๋ผ๋ ํ์ด์ฌ ๋ฌธ๋ฒ์ผ๋ก ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ด, ํ์ด์ฌ ์ธ์ด(์ด์, ์ฒญ์ฌ์ง)์ SQL ๋ฌธ์ผ๋ก ํด์ํ์ฌ ๊ฐ์ฒด๋ก ์ด์ฉํ๊ฒ ํด์ค, ์ค๊ฐ ๋ฒ์ญ์
CRUD๋?
- ๋ฐ์ดํฐ๋ก ํ ์ ์๋ 4๊ฐ์ง
- C: CREATE
- R: READ
- U: UPDATE
- D: DELETE
RDBMS(๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ )
- ๊ฐ์ฒด์ ๊ฐ์ฒด ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํํํ๊ธฐ ์ํด 2์ฐจ์์ ํ๋ฅผ ์ฌ์ฉ
- ์ฐจ์ : ์ดํธ๋ฆฌ๋ทฐํธ์ ์, ์นด๋๋๋ฌํฐ : ๊ฐ์ฒด์ ??
SQLite
- ์๋ฒ๊ฐ ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฃ์ด ์ฌ์ฉํ๋ ๋น๊ต์ ๊ฐ๋ฒผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค(์๋๋ก์ด๋, ์๋ฒ ๋๋ , django ๋ฑ), ์คํ์์ค์ด๋ฉฐ ๋ก์ปฌ์ ๊ฐ๋จํ DB ๊ตฌ์ฑ ๊ฐ๋ฅ,
๊ธฐ๋ณธ ์ฉ์ด ์ ์
- ์คํค๋ง(scheme) : ๋ฐ์ดํฐ ๋ฒ ์ด์ค์์ ์๋ฃ์ ๊ตฌ์กฐ, ํํ ๋ฐฉ๋ฒ, ๊ด๊ณ ๋ฑ์ ์ ์ํ ๊ตฌ์กฐ, ๋ช ์ธ์, ๋ฐ์ดํฐ ๊ท๊ฒฉ, ๋ฐ์ดํฐ ํ์ ์ ์, ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๊ตฌ์กฐ์ ์ ์ฝ ์กฐ๊ฑด์ ๊ด๋ จํ ์ ๋ฐ์ ์ธ ๋ช ์ธ๋ฅผ ๊ธฐ์ .
- ํ ์ด๋ธ: ์คํค๋ง๋ก ๊ตฌํํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ, ์์ ํ ๊ฐ์๊ฑฐ, ๋ฐ์ดํฐ๋ค์ ์งํฉ
- ์ด(์นผ๋ผ, ์ดํธ๋ฆฌ๋ทฐํธ, ์์ฑ, Column): ๊ณ ์ ํ ๋ฐ์ดํฐ ํ์์ ์ง์
- ํ(๋ ์ฝ๋, ๋ฐ์ดํฐ, row):
- PK(๊ธฐ๋ณธ ํค, Primary Key) : ๊ฐ ํ(๋ ์ฝ๋)์ ๊ณ ์ ํ ๊ฐ, ๋ฐ๋์ ์ค์ ๋จ, ๊ด๋ฆฌ ๋ฐ ๊ด๊ณ ์ค์ ์ ํ์ฉ
SQL ๊ฐ๋
- SQL(Structured Query Language)๋ RDBMS์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๊ณ๋ ํน์ ๋ชฉ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค, ์๋ฃ์ ๊ฒ์, ๊ด๋ฆฌ, ์คํค๋ง ์์ฑ๊ณผ ์์ , ๊ฐ์ฒด ์ ๊ทผ ์กฐ์ ๊ด๋ฆฌ๋ฅผ ์ํด ๊ณ ์
๋ฌธ๋ฒ ์ข ๋ฅ
- DDL(Data Definition Language) - ๋ฐ์ดํฐ ์ ์ ์ธ์ด.๊ตฌ์กฐ, ์ฆ ํ ์ด๋ธ๊ณผ ์คํค๋ง๋ฅผ ์ ์
- CREATE, DROP, ALTER ๋ฑ
- DML(Data Manipulation Language) - ๋ฐ์ดํฐ ์กฐ์ ์ธ์ด. ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์ญ์ , ์กฐํ
- INSERT(๋ฐ์ดํฐ์ฝ์
), UPDATE(๊ฐฑ์ ), DELETE(์ญ์ , ํ์ ๊ฑฐ), SELECT(๋ฐ์ดํฐ, ๊ฒ์)
- DCL(Data Control Language) - ๋ฐ์ดํฐ ์ ์ด ์ธ์ด, ์ฌ์ฉ์ ๊ถํ ์ ์ด๋ฅผ ์ํด ์ฌ์ฉ
- GRANT, REVOKE, COMMIT, ROLLBACK
์ค์ต
๊ธฐ๋ณธ sql ๋์
- sqlite3.exe๊ฐ ์๋ ํด๋์์ ํฐ๋ฏธ๋๋ก sqlite3 ์น๋ฉด
```sql
$ sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
- sqlite3.exe๊ฐ ์๋ ํด๋์์ ํฐ๋ฏธ๋๋ก sqlite3 ์น๋ฉด
์๋จ์ฒ๋ผ ํ์๋๋ค. ๋ช
๋ น์ด ์์ `.`์ ์
๋ ฅํ๋ฉด DB ๊ด๋ จ ๋ช
๋ น์ด์ด๋ค.
- ์๋ฅผ ๋ค์ด .exit๋ก ๋๊ฐ ์ ์๋ค
2. sqlite3 ํ์ผ ์์ฑ๋ฒ
1) sqlite3 test.sqlite3 ์
๋ ฅ
2) .databases ์
๋ ฅ
```sql
sqlite3 test.sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
sqlite> .databases
main: C:\Users\student\sqlite\test.sqlite3
sqlite>
- test๋ ์ํ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ช
- csv ํ์ผ ๊ฐ์ ธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง๋ค๊ธฐ
```sql
sqlite> .mode csv
sqlite> .import hellodb.csv examples
- csv ํ์ผ ๊ฐ์ ธ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ง๋ค๊ธฐ
- hellodb๋ csv ํ์ผ ์ด๋ฆ
- .mode csv๋ ์ด๋ค ํ์ผ์ ๋์์ผ๋ก ํ ๊ฒ์ธ๊ฐ?
- ๋ค .import ๋ ๊ทธ ํ์ผ์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ก ๋ง๋ค๊ณ , ํ
์ด๋ธ ์ด๋ฆ์ examples๋ก ๋ง๋ฆ
-
4. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋์ผ๋ก ๋ณด์ด๊ฒ ๋ง๋ค๊ธฐ
```sql
SELECT * FROM examples;
1,"๊ธธ๋","ํ",600,"์ถฉ์ฒญ๋",010-2424-1232
-
- ์ ์ ๋ถ ๋ค๋ผ๋ ํํ์ ๊ฐ๊น์, examples๋ผ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ๋ถ(*) ๋ฐํํด ๋ผ๋ ๋ป
- ์ฌ๊ธฐ์ SELECT, FROM ๋ฑ์ ํค์๋์ด๋ฉฐ, ํค์๋๋ ๋๋ฌธ์๊ฐ ๊ด๋ก(์๋ฌธ์๋ก ๋๊ธดํจ)
- ๋ ์์๊ฒ ๊ฐ์ ธ์ค๊ธฐ
```sql
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM examples;
id first_name last_name age country phone
โโโ- โโโ- โโโ- โโโ- โโโ- โโโโ-
1 ๊ธธ๋ ํ 600 ์ถฉ์ฒญ๋ 010-2424-1232
- ๋ ์์๊ฒ ๊ฐ์ ธ์ค๊ธฐ
- .headers๋ก ํค๋๋ฅผ ์ ๋ ๋ชจ๋๋ก, .mode column์ผ๋ก ๊ฐ ์ปฌ๋ผ๋ง๋ค ๊ตฌ๋ณํ๋ ๋ชจ๋๋ก ๋ฐ๊พผ ๋ฏ?
6. ํ์ผ๋ก ๋ช
๋ น์ด ์ ์ด์ ์คํํ๊ธฐ
1) 00_intro.sql ํ์ผ ๋ง๋ค๊ธฐ
> 00_intro.sql ํ์ผ ๋ด์ฉ
```sql
-- sql ์ฃผ์์ฒ๋ฆฌ๋ --๋ก ํ์ค
-- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ
.database
-- csvํ์ผ์ ์ฝ์ด์ค๊ธฐ sqlite์ ๊ธฐ๋ฅ์ sql ๋ฌธ๋ฒ ์๋, ; ํ์ ์์
.mode csv
.import hellodb.csv examples -- ์ธ๋ถ ํ์ผ์์ ์คํค๋ง ๊ฐ์ ธ์ค๊ธฐ (์ ๋ถ TEXT๋ก ๊ฐ์ ธ์ด)
-- ์์๊ฒ ๋ณด๊ธฐ
.headers on
.mode column
-- ํ
์ด๋ธ ์กฐํ sql ๋ฌธ๋ฒ ๋์๋ ๊ผญ ;๋ฅผ ๋ถ์
SELECT * FROM examples;
- CAST(๊ฐ AS INTEGER) = INTEGER๋ก ํ๋ณํ์ผ๋ก ์ ์ ํ ํ๋ณํ ๊ฐ๋ฅ
2) ํฐ๋ฏธ๋์์ .read 00_intro.sql ๋ช ๋ น์ด๋ก ์คํ( ๊ฐ์ ๋๋ ํ ๋ฆฌ์ผ์)
sqlite> .read 00_intro.sql
main: C:\Users\student\sqlite\test.sqlite3
id,first_name,last_name,age,country,phone
1,"๊ธธ๋","ํ",600,"์ถฉ์ฒญ๋",010-2424-1232
id,first_name,last_name,age,country,phone
1,"๊ธธ๋","ํ",600,"์ถฉ์ฒญ๋",010-2424-1232
CRUD ๋์
๋ฐ์ดํฐ ์์ฑ CREATE, Table ์์ฑ
1) 01_DDL.sql ํ์ผ ์์ฑ > 01_DDL.sql ํ์ผ ๋ด์ฉ ```sql -- DDL(๋ฐ์ดํฐ ์ ์ ์ธ์ด) CREATE TABLE classmates (
id INTEGER PRIMARY KEY,
name TEXT ); -- ํ์ด์ฌ๊ณผ ๋ฌ๋ฆฌ ๋ง์ง๋ง ์์์ ',' ๋จ๊ธฐ๋ฉด ์ค๋ฅ๊ฐ ๋จ -- ๋ง๋ค์ด์ง ํ
์ด๋ธ ๋ชฉ๋ก ์กฐํ .tables
โ ์คํค๋ง ์กฐํ, ์ฃผ์๋ ๊ฐ์ด ๋์จ๋ค.
.schema classmates
โ ํ
์ด๋ธ ์ญ์
DROP TABLE classmates;
.tables
1) ํฐ๋ฏธ๋์ .read 01_DDL.sql
> ํฐ๋ฏธ๋ ์
๋ ฅ
```sql
sqlite> .read 01_DDL.sql
classmates
CREATE TABLE classmates (
id INTEGER PRIMARY KEY, -- INTEGER๋ INT๋ก ์ค์ฌ์จ๋ ๋จ, ๋จ PRIMARY KEY๋ INTEGER๋ก ์จ์ผํจ, ์๋์๋ INT๋ก ์จ๋ ๋จ
name TEXT
);
๋ฐ์ดํฐ ์ถ๊ฐ (INSERT)
1. data ์ถ๊ฐ (INSERT) : ํน์ table์ ์๋ก์ด ํ์ ์ถ๊ฐํด ๋ฐ์ดํฐ ์ถ๊ฐ
- INSERT INTO talbe(column1, column2,...)
- VALUES (value1, value2, ...)
2. 02_CRUD.sql ํ์ผ ์์ฑ
> 02_CRUD.sql ํ์ผ ๋ด์ฉ ```sql
-- ๋ฐ์ดํฐ ํ
์ด๋ธ ๋ง๋ค๊ธฐ CREATE TABLE classmates (
name TEXT,
age INT,
address TEXT );
โ CREATE โ ;์ด ๋ฑ์ฅํ์ง ์์ผ๋ฉด 1์ค๋ก ์ธ์ํจ
INSERT INTO classmates (
name,
age,
address
)
VALUES ('์ค์ค์', 27, '๊ด์ฃผ');
.headers on
.mode column
โ ํ์ธ
SELECT * FROM classmates;
3. ํฐ๋ฏธ๋์ .read 02_CRUD.sql ์คํ
> ํฐ๋ฏธ๋ ๋ด์ฉ, classmate 1๊ฐ ์ถ๊ฐ
```sql
sqlite> .read 02_CRUD.sql
id name age address
---------- ---------- ---------- ----------
1 ์ค์ค์ 27 ๊ด์ฃผ
- ํ๋ฒ ๋ ์คํ
ํฐ๋ฏธ๋ ๋ด์ฉ, ๊ฐ์ ๋ด์ฉ์ด ๋ค์ด์๋ classmate 1๊ฐ ๋ ์ถ๊ฐ
```sql
sqlite> .read 02_CRUD.sql
id name age address
โโโ- โโโ- โโโ- โโโ-
1 ์ค์ค์ 27 ๊ด์ฃผ
2 ์ค์ค์ 11 ๊ด์ฃผ
5. ํ์ผ์์ ์์ ํ๋๋ฅผ ๋นผ์ .read 02_CRUD.sql ์คํ
> ๋ณ๊ฒฝ๋ 02_CRUD.sql ํ์ผ ๋ด์ฉ
```sql
-- ๋ฐ์ดํฐ ํ
์ด๋ธ ๋ง๋ค๊ธฐ
CREATE TABLE classmates (
name TEXT,
age INT,
address TEXT
);
-- CREATE -- ;์ด ๋ฑ์ฅํ์ง ์์ผ๋ฉด 1์ค๋ก ์ธ์ํจ
INSERT INTO classmates (
name,
address
)
VALUES ('์ค์ค์', '๊ด์ฃผ');
.headers on
.mode column
-- ํ์ธ
SELECT * FROM classmates;
age ์นธ์ด ๋น์ด์๋ classmate 1๊ฐ ๋ ์ถ๊ฐ
```sql
sqlite> .read 02_CRUD.sql
id name age address
โโโ- โโโ- โโโ- โโโ-
1 ์ค์ค์ 27 ๊ด์ฃผ
2 ์ค์ค์ 11 ๊ด์ฃผ
3 ์ค์ค์ ๊ด์ฃผ
6. ํ์ผ์ ๋ ๋ณ๊ฒฝํ ์์
> ๋ณ๊ฒฝ๋ 02_CRUD.sql ํ์ผ ๋ด์ฉ
```sql
CREATE TABLE classmates (
name TEXT,
age INT,
address TEXT
);
INSERT INTO classmates -- ๋ชจ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์๋๋ ์๋ต ๊ฐ๋ฅ
VALUES('ํ๊ธธ๋', 30, '์์ธ');
SELECT rowid, * FROM classmates; -- ์๋์ผ๋ก ์์ฑ๋ rowid๋ฅผ ๊ฐ์ด ์ถ๋ ฅ
DROP TABLE classmates; -- ํ
์ด๋ธ ์ญ์
ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
```sql
sqlite> .read 02_CRUD.sql
rowid name age address
โโโ- โโโ- โโโ- โโโ-
1 ํ๊ธธ๋ 30 ์์ธ
7. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ฌด๊ฒฐ์ฑ์ ์์น์ ์ํ NOT NULL ์ถ๊ฐ
> ๋ณ๊ฒฝ๋ 02_CRUD.sql ํ์ผ ๋ด์ฉ
```sql
DROP TABLE classmates;
.tables
CREATE TABLE classmates (
id INTEGER PRIMARY KEY NOT NULL,
name TEXT NOT NULL, -- NOT NULL์ ๋ฃ์ผ๋ฉด ๋น์ด์ฑ๋ก ๋ฃ์ ์ ์๋ค.
age INT NOT NULL,
address TEXT NOT NULL
);
INSERT INTO classmates
VALUES
(1, '์ค์ค์', 27, '๊ด์ฃผ'),
(2, '์ค์ฐฝํฌ', 11, '๊ด์ฃผ'),
(3, '๋ฐ๋๋', 25, '์์ธ'),
(4, '์ด์์
', 29, '๊ตฌ๋ฏธ'),
(5, '๊น์ฒ ์', 27, '๋์ ');
-- ์์ ๊ฐ์ ํ์์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ํ๊บผ๋ฒ์ ๋ฃ์ ์๋ ์๋ค.
SELECT * FROM classmates;
๋ง์ฝ NOT NULL์ธ ๊ฐ์ ๋น ์ฑ๋ก ์ฐ๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ๋ฌ๋ค.
```sql
Error: near line 9: NOT NULL constraint failed: classmates.address
- ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ๊ณต๋ฐฑ์ด ๋๋๊ฑธ ๋ฐฉ์งํ๋ค.
> ๋ง์ฝ id ๊ฐ์ด ๊ฒน์น๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ๋ฌ๋ค.
```sql
Error: near line 11: UNIQUE constraint failed: classmates.id
-
์ด๋ฅผ ๋ฐฉ์งํ๊ณ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ง์ ๋ฃ์ง ๋ง๊ณ sql์ด ์๋์ผ๋ก ์์ฑ๋๋ ๊ฐ์ ์ฐ์
-
๋ง์ฝ id๋ฅผ ์ง์ ์ง์ด ๋ฃ์ด์ค์ผ ํ๋ค๋ฉด NOT NULL ๋์ AUTOINCREMENT ๋ฅผ ๋ฃ์ด์ ์๋์ผ๋ก ์ฆ๊ฐํ๊ฒ ํด์ฃผ์.(์ด๋ฌ๋ฉด ์ง์์ง id๋ฅผ ์๋ก์ด ์ด์ ์ฌ์ฉํ์ง ์๋๋ค, SQLite์์๋ ๋น์ถ์ฒํจ(๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ฆ๊ฐ))
-
AUTOINCREMENT๋ฅผ ์ฐ๋ฉด ๊ทธ ๋ถ๋ถ์ ์ ์ธ ์ด์ ๋์ดํด์ค์ผํจ
AUTOINCREMENT ์์
```sql
CREATE TABLE bands(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
debut INTEGER
);
INSERT INTO bands (name, debut) VALUES
('Queen', 1973),
('Coldplay', 1998),
('MCR', 2001);
> CREATE TABLE classmates์ ์์
```sql
id INT PRIMARY KEY AUTOINCREMENT,
-- ๋๋ ์์ id ์์จ์ ์๋์์ฑ๋๊ฒ๋
์ํ๋ ๋ฐ์ดํฐ๋ง ์ ํํด์ ๊ฐ์ ธ์ค๊ธฐ(READ)
select ๋ช ๋ น๋ฌธ
```sql
SELECT rowid, name FROM classmates; โ ์ ์ฒด ๋ฐ์ดํฐ์ค ์ผ๋ถ๋ง ๊ฐ์ ธ์ค๋๋ฒ
โ ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
examples
rowid name
โโโ- โโโ-
1 ์ค์ค์
2 ์ค์ฐฝํฌ
3 ๋ฐ๋๋
4 ์ด์์
5 ๊น์ฒ ์
>ํน์ ํ ํ
์ด๋ธ์์ ์ํ๋ ๊ฐฏ์๋งํผ๋ง ๊ฐ์ ธ์ค๊ธฐ(LIMIT ๋ช
๋ น์ด)
```sql
SELECT rowid, name FROM classmates LIMIT 1; -- ์ ์ฒด ๋ฐ์ดํฐ์ค 1๊ฐ๋ง ๊ฐ์ ธ์ค๋๋ฒ
-- ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
sqlite> .read 02_CRUD.sql
examples
rowid name
---------- ----------
1 ์ค์ค์
๋ฐ์ดํฐ ๋ช๊ฐ๋ฅผ ์คํตํ๊ณ ๊ฐ์ ธ์ค๊ธฐ(OFFSET ๋ช ๋ น์ด)
```sql
SELECT rowid, name FROM classmates LIMIT 1 OFFSET 2; โ ์ ์ฒด ๋ฐ์ดํฐ์ค ์ฒ์ 2๊ฐ๋ฅผ ์คํตํ๊ณ 1๊ฐ๋ง ๊ฐ์ ธ์ค๋๋ฒ
โ ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
sqlite> .read 02_CRUD.sql
examples
rowid name
โโโ- โโโ-
3 ๋ฐ๋๋
- LIMIT์ ํจ๊ป ์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค
> ํน์ ํ ๊ฐ ๋ง ๊ฒ์ํด์ ๊ฐ์ ธ์ค๊ธฐ(WHERE ๋ช
๋ น์ด)
```sql
SELECT rowid, name FROM classmates WHERE address='๊ตฌ๋ฏธ'; -- ์ ์ฒด ๋ฐ์ดํฐ์ค ์ฃผ์๊ฐ '๊ตฌ๋ฏธ'์ธ ์ฌ๋๋ง ๊ฐ์ ธ์ค๊ธฐ
-- ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
sqlite> .read 02_CRUD.sql
examples
rowid name
---------- ----------
4 ์ด์์
- ๊ฒ์ ๋ฑ์ ํ์ฉ
ํน์ table ์ค๋ณต ์ ๊ฑฐ๊ฒฐ๊ณผ ์ถ๋ ฅ
```sql
โ ์ ์ฒด ๋์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋, ์ค๋ณต์ ์์ฐ
SELECT DISTINCT age FROM classmates;
โ ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ, ๋ง์ง๋ง 27์ด์ด ์์ด์ง
name age address
โโโ- โโโ- โโโ-
์ค์ค์ 27 ๊ด์ฃผ
์ค์ฐฝํฌ 11 ๊ด์ฃผ
๋ฐ๋๋ 25 ์์ธ
์ด์์ 29 ๊ตฌ๋ฏธ
๊น์ฒ ์ 27 ๋์
age
โโโ-
27
11
25
29
#### ๋ฐ์ดํฐ ์ญ์ (DELETE)
```sql
DELETE FROM classmates WHERE address='๊ด์ฃผ'; -- ์ฃผ์๊ฐ ๊ด์ฃผ์ธ ์ฌ๋๋ง ์ง์ฐ๊ธฐ
-- ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
name age address
---------- ---------- ----------
๋ฐ๋๋ 25 ์์ธ
์ด์์
29 ๊ตฌ๋ฏธ
๊น์ฒ ์ 27 ๋์
- ์ค๋ณต์ด ๋ถ๊ฐ๋ฅํ(UNIQUEํ) id๋ฅผ ๊ธฐ์ค์ผ๋ก ์ง์ฐ๋ฉด ํน์ ์ด๋ง ์ง์ธ ์ ์๋ค.
- ์ง์์ง id๋ ๋ค์์ ์๋ก ์ถ๊ฐํ ์ด๊ฐ์ ํ ๋น๋๋ค ์ด๋ฅผ ๋ง์ผ๋ ค๋ฉด id๊ฐ์ ์ ์ธํ ๋AUTOINCREMENT๋ฅผ ์จ์ผํจ(SQLite์์๋ ๋น์ถ์ฒ)
๋ฐ์ดํฐ ์์ (UPDATE)
UPDATE์ SET, WHERE๋ก ์ผ๋ถ๋ง ์์ ํ๊ธฐ
UPDATE classmates SET name='ํ๊ธธ๋', address='์ ์ฃผ'
WHERE age>=50 AND address="๋งํฌ"; -- ๋์ด๊ฐ 50์ด ์ด์์ด๊ณ ๊ณ ํฅ์ด ๋งํฌ์ธ ์ฌ๋ ์ฌ๋์ ์ด๋ฆ๊ณผ ์ฃผ์ ๋ฐ๊พธ๊ธฐ
-- ํฐ๋ฏธ๋ ๊ฒฐ๊ณผ
rowid name age address
---------- ---------- ---------- ----------
1 ์ค์ค์ 27 ๊ด์ฃผ
2 ์ค์ฐฝํฌ 11 ๊ด์ฃผ
3 ๋ฐ๋๋ 25 ์์ธ
4 ์ด์์
29 ๊ตฌ๋ฏธ
5 ํ๊ธธ๋ 54 ์ ์ฃผ -- ๋ฐ์ฒ ์ฉ, ๋งํฌ๊ฐ ํ๊ธธ๋, ์ ์ฃผ๋ก ๋ฐ๋
- address==โ๋งํฌโ ์ฌ๋ ๊ด์ฐฎ์, ๊ดํธ ์ฒ๋ฆฌ๋ ๊ด์ฐฎ์
CONUT()๋ฅผ ์ด์ฉํ์ฌ ์ซ์์ธ๊ธฐ
```sql
SELECT COUNT(*) FROM users WHERE age >= 30 AND last_name = '๊น';
โ ๋์ด๊ฐ 30์ด์์ด๊ณ ์ฑ์ด ๊น์จ์ธ ์ ์ ์ ์๋?
> AVG()๋ฅผ ์ด์ฉํ ํ๊ท ๋ด๊ธฐ(INT ํ๋ง ๊ฐ๋ฅ)
```sql
SELECT AVG(age) FROM users WHERE age >= 30 AND last_name = '๊น';
-- ๋์ด๊ฐ 30์ด์์ด๊ณ ์ฑ์ด ๊น์จ์ธ ์ ์ ๋ค์ ํ๊ท ๋์ด๋?
MAX()๋ฅผ ์ด์ฉํ ์ต๋๊ฐ๊ตฌํ๊ธฐ
```sql
SELECT MAX(balance), first_name FROM users;
โ ๊ฐ์ฅ ์์ก์ด ๋ง์ ์ฌ๋์ ์์ก๊ณผ ์ด๋ฆ์?
- MIN()์ ์ต์๊ฐ์ ๊ตฌํ๋๋ฐ ์ฌ์ฉ
> ์์ผ๋์นด๋ ํจํด (LIKE)
```sql
SELECT * FROM users WHERE age LIKE '2_';
-- users ์ค 20๋์ธ ์ฌ๋ ์ถ๋ ฅ 2%๋กํ๋ฉด 2์ด, 200์ด๋ ๋์ด
-
ํด๋น ์ ๋ณด์์ ํฌํจ์ด ๋์ด์๋๊ฐ? ๋ฑ์ ์ฐพ์
-
๊ตฌ๊ธ ๊ฒ์ ๋ฑ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค (?? : ํน์ ํ ๋ฌธ์ ๊ฐฏ์ ๋๋ค ๋ฌธ์, *: ๊ฐฏ์์ ์๊ด์์ด ์๋ฌด ๋ฌธ์๋)
ํ์ ์์ ์๋ฏธ % 2% 2๋ก ์์ํ๋ ๊ฐ %2 2๋ก ๋๋๋ ๊ฐ %2% 2๊ฐ ๋ค์ด๊ฐ๋ ๊ฐ - _2% ์๋ฌด๊ฐ์ด๋ ๋ค์ด๊ฐ๊ณ ๋๋ฒ์งธ๊ฐ 2๋ก ์์ํ๋ ๊ฐ 1____ 1๋ก ์์ํ๊ณ 4์๋ฆฌ์ธ ๊ฐ 2_%_% 2๋ก ์์ํ๊ณ ์ ์ด๋ 3์๋ฆฌ์ธ ๊ฐ
๋ฐ์ดํฐ ์ ๋ ฌ(ORDER)
ORDER
```sql
SELECT * FROM users ORDER BY age DESC, last_name ASC LIMIT 10;
โ ๋์ด๊ฐ ๋ง์ ์์ 10๋ช ์ ์ฑ์์ผ๋ก 10๋ช ์ค๋ฆ์ฐจ์ ์ ๋ณด
- ORDER BY column1, column2 [ASC|DESC], ASC = ์ฌ๋ฆผ์ฐจ์ (๊ธฐ๋ณธ๊ฐ) ์์๊ฒ ๋ถํฐ, DESC= ๋ด๋ฆผ์ฐจ์, ํฐ๊ฒ๋ถํฐ ์์๊ฒ
1. ํ
์ด๋ธ๋ช
์์
> 04_DDL_a.sql ํ์ผ ๋ด์ฉ
```sql
DROP TABLE articles;
DROP TABLE news;
CREATE TABLE articles(
title TEXT NOT NULL,
content TEXT NOT NULL
);
INSERT INTO articles VALUES('์ค์ค์ ๊ตถ์ด์ฃฝ๋ค', '๋ฐฑ์ ์ํ ๊ธธ์ด ์์ก ๋ถ์กฑํด... ์ถฉ๊ฒฉ');
SELECT * FROM articles;
ALTER TABLE articles RENAME TO news; -- ํ
์ด๋ธ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ
-- created_at์ด๋ผ๋ DATETIME ํ์
์ COLUMN์ ์๋ก ๋ฃ์ผ๋ ค๊ณ ์๋
ALTER TABLE news
-- ADD COLUMN created_at DATETIME NOT NULL; -- ๋น์ด์๋ ๊ฐ์ ์๋ก์ด column์ด ์๊ธฐ๋ฉด ์๋๋ฏ๋ก ์๋ฌ ๋ฐ์
ADD COLUMN created_at DATETIME NOT NULL DEFAULT 1; -- DEFAULT ๊ฐ ์ ํด์ฃผ์์ผ๋ฏ๋ก ์๋ฌ ์๋จ
.tables
- ADD COLUMN ๋์ RENAME COLUMN ๋ฐ๊ฟ์ปฌ๋ผ TO ๋ฐ๋์ด๋ฆ ์ผ๋ก ์ปฌ๋ผ ์ด๋ฆ ๋ฐ๊ฟ ์ ์์
- ALTER TABLE โtable_nameโ Change โcolumn 1โ โcolumn 2โ [โData Typeโ]; ํ๊บผ๋ฒ์ ํ๋ณํ
_articles/computer_science/database/Database SQL ๊ธฐ์ด.md