๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, SQL

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค / SQL ๊ตฌ๋ฌธ ๋ฌธ๋ฒ•

SQL

Structured Query Language, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ์–ธ์–ด

  • SQL์€ ANSI์™€ ISO์—์„œ ํ‘œ์ค€ํ™”๋œ ์–ธ์–ด๋กœ, ๋Œ€๋ถ€๋ถ„์˜ RDBMS์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•จ

 


 

DDL(Data Definition Language)

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ์œ„ํ•œ ์–ธ์–ด

๋ฐ์ดํ„ฐ ์†์„ฑ์— ์ž˜ ๋งž๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

 

  • create : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ…Œ์ด๋ธ” ๋“ฑ ์ƒ์„ฑ
  • alter : ํ…Œ์ด๋ธ” ์ˆ˜์ •
  • drop : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ…Œ์ด๋ธ” ์‚ญ์ œ
  • truncate : ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
  • rename : ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ

 

DML(Data Manipulation Language)

๋ฐ์ดํ„ฐ ์กฐํšŒ, ์กฐ์ž‘์„ ์œ„ํ•œ ์–ธ์–ด

  • select : ๋ฐ์ดํ„ฐ ์กฐํšŒ
  • insert : ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
  • update : ๋ฐ์ดํ„ฐ ์ˆ˜์ •
  • delete : ๋ฐ์ดํ„ฐ ์‚ญ์ œ

 

DCL(Data Control Language)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ถŒํ•œ, ํšŒ์ˆ˜๋ฅผ ์œ„ํ•œ ์–ธ์–ด

  • grant : ์œ ์ €์—๊ฒŒ ํŠน์ • ์ž‘์—…์— ๋Œ€ํ•œ ์ˆ˜ํ–‰ ๊ถŒํ•œ์„ ๋ถ€์—ฌ
  • revoke : ์œ ์ €์—๊ฒŒ ํŠน์ • ์ž‘์—…์— ๋Œ€ํ•œ ์ˆ˜ํ–‰ ๊ถŒํ•œ์„ ๋ฐ•ํƒˆ, ํšŒ์ˆ˜

 

TCL(Transaction Control Language)

ํŠธ๋žœ์ ์…˜ ๋ณ„ ์ œ์–ด๋ฅผ ์œ„ํ•œ ์–ธ์–ด

  • commit : ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—…์„ ์ €์žฅ
  • rollback : ํŠธ๋žœ์žญ์…˜์˜ ์ž‘์—…์„ ์ทจ์†Œํ•˜๊ณ  ์ด์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆผ
  • savepoint : ์ €์žฅ์ ์„ ์ง€์ • ํ›„ rollback๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ํŠน์  ์ง€์ ๊นŒ์ง€ rollback์„ ํ•˜๊ฒŒ ํ•จ 

 


 

 

๋ฐ์ดํ„ฐ ํƒ€์ž…

PostgreSQL MySQL ์„ค๋ช…
Char(1) Char(x) ๊ธ€์ž ํ•˜๋‚˜ ์ €์žฅ ๊ฐ€๋Šฅ
VARCHAR(x) VARCHAR(x) ๊ธธ์ด x๋งŒํผ ๊ธ€์ž ์ €์žฅ ๊ฐ€๋Šฅ
TEXT TEXT ๋งค์šฐ ๊ธด ๋ฌธ์ž์—ด ์ €์žฅ ๊ฐ€๋Šฅ
BOOLEAN tinyint ์ฐธ, ๊ฑฐ์ง“ ํ‘œํ˜„
ENUM('bad', 'good', 'great') ENUM('bad', 'good', 'great') ์ง€์ •ํ•œ ๊ฐ’๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…

 

์ˆซ์ž ํƒ€์ž…, autoincrement๋•Œ๋ฌธ์— serial์ด id๊ฐ’์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค

 

DateTime, timestamp(3)์ด ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค

 

 


 

 

CRUD

Create, Read, Update, Delete. ์ƒ์„ฑ ์กฐํšŒ ๊ฐฑ์‹  ์‚ญ์ œ๋ฅผ ์˜๋ฏธ

 

CREATE

CREATE : ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE accommodation (
  id serial primary key,
  name varchar(255) not null,
  address text not null,
  city varchar(100) not null,
  country varchar(100) not null,
  rating decimal(3, 2),
  description text,
  created_at timestamp default current_timestamp
);

 

 

INSERT : ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€ 

INSERT INTO accommodation (name, address, city, country, rating, description)
VALUES
    ('Nomad House', '123 Beach Rd', 'Canggu', 'Indonesia', 4.5, '๋ฉ‹์ง„ ๋ฐ”๋‹ค'),
    ('Remote Work Haven', '456 Mountain St', 'Chiang Mai', 'Thailand', 4.7, '์•„๋ฆ„๋‹ค์šด ์‚ฐ'),
    ('Digital Nomad Loft', '789 City Center', 'Medellin', 'Colombia', 4.8, '๋„์‹œ ์ค‘์‹ฌ');

 

์ด ๋•Œ created_at์€ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ default ๊ฐ’์„ timestamp๋กœ ์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ ˆ์ฝ”๋“œ ์‚ฝ์ž…์‹œ ์ž๋™์œผ๋กœ ๊ธฐ๋ก๋จ

 


 

READ

SELECT : ํ…Œ์ด๋ธ” ๋กœ์šฐ ์กฐํšŒ

--- ์ „์ฒด ์ปฌ๋Ÿผ ์กฐํšŒ
SELECT * FROM accommodation;

-- ์ผ๋ถ€ ์ปฌ๋Ÿผ ์กฐํšŒ
SELECT name, description FROM accommodation;

--- ์กฐ๊ฑด
--- where ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ
SELECT * FROM accommodation WHERE city = 'Bali';

-- WHERE + OR
SELECT * FROM accommodation WHERE city = 'Chiang Mai' OR city = 'Bali';

-- ํ‰์  4.75์  ์ด์ƒ
SELECT * FROM accommodation WHERE rating >= 4.75;

-- ํ‰์  4.5์  ์ด์ƒ 4.6 ์ดํ•˜
SELECT * FROM accommodation WHERE rating BETWEEN 4.5 AND 4.6;

-- ID๊ฐ€ 1, 3
SELECT * FROM accommodation WHERE id IN (1, 3);

-- ID๊ฐ€ 1, 3์ด ์•„๋‹˜
SELECT * FROM accommodation WHERE id NOT IN (1, 3);

-- order by : ์ •๋ ฌ ํ‚ค์›Œ๋“œ
-- asc(์˜ค๋ฆ„์ฐจ์ˆœ)์€ ๊ธฐ๋ณธ๊ฐ’
-- ๋‚ด๋ฆผ์ฐจ์ˆœ (ํฐ ๊ฒƒ ๋ถ€ํ„ฐ)
SELECT * FROM accommodation ORDER BY rating DESC;

-- PostgreSQL์€ id ์ˆœ์„œ๋กค ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ๊ผญ sort๋ฅผ ํ•ด์ค€๋‹ค.
SELECT * FROM accommodation;
SELECT * FROM accommodation ORDER BY id ASC;
SELECT * FROM accommodation ORDER BY created_at ASC;

-- ํ‰์  ์ƒ์œ„ 3๊ฐœ
SELECT * FROM accommodation ORDER BY rating DESC LIMIT 3;

-- ์ „์ฒด ๋กœ์šฐ ๊ฐฏ์ˆ˜
SELECT COUNT(*) FROM accommodation;

-- ์ „์ฒด ํ‰์  ํ‰๊ท , ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’
SELECT AVG(rating) as avg_rating FROM accommodation;
SELECT MIN(rating) as min_rating FROM accommodation;
SELECT MAX(rating) as max_rating FROM accommodation;

-- ์ „์ฒด ํ•˜๋ฃจ ์ˆ™๋ฐ• ๊ฐ€๊ฒฉ ํ‰๊ท , ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’
SELECT AVG(price_per_night) as avg_price FROM accommodation;
SELECT MIN(price_per_night) as min_price FROM accommodation;
SELECT MAX(price_per_night) as max_price FROM accommodation;

-- ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ตญ๊ฐ€
SELECT DISTINCT country FROM accommodation;
SELECT COUNT(DISTINCT country) FROM accommodation;

 


 

UPDATE

update : ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ 

-- ํ˜„์žฌ ๋ฐ์ดํ„ฐ ํ™•์ธ
SELECT * FROM accommodation;

-- UPDATE ์ฟผ๋ฆฌ ์‹คํ–‰ ์ „ WHERE ์กฐ๊ฑด ํ™•์ธ
SELECT * FROM accommodation
WHERE id = 1;

-- UPDATE ์ฟผ๋ฆฌ ์‹คํ–‰
UPDATE accommodation
SET name = 'wow'
WHERE id = 1
RETURNING *;

-- ์›๋ž˜๋Œ€๋กœ ๋ณ€๊ฒฝ
UPDATE accommodation
SET name = 'Nomad House'
WHERE id = 1
RETURNING *;

-- UPDATE ์ฟผ๋ฆฌ ์‹คํ–‰ ์ „ WHERE ์กฐ๊ฑด ํ™•์ธ
SELECT * FROM accommodation
WHERE country = 'Thailand' AND rating < 5.0;

-- WHERE ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์—ฌ๋Ÿฌ ๋กœ์šฐ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ
-- ๊ธฐ์กด rating ๊ฐ’์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ
UPDATE accommodation
SET rating = rating + 0.1, price_per_night = price_per_night + 1
WHERE country = 'Thailand' AND rating < 5.0
RETURNING *;

-- ์›๋ž˜๋Œ€๋กœ ๋ณ€๊ฒฝ
UPDATE accommodation
SET rating = rating - 0.1, price_per_night = price_per_night - 1
WHERE country = 'Thailand' AND rating < 5.0
RETURNING *;

-- WHERE๋ฅผ ๋บด๋จน์œผ๋ฉด ๋กœ์šฐ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค.
UPDATE accommodation
SET price_per_night = price_per_night - 1
RETURNING *;

-- ์ด์ „์œผ๋กœ ๋ณ€๊ฒฝ
UPDATE accommodation
SET price_per_night = price_per_night + 1
RETURNING *;

 


 

DELETE

delete : ๋ฐ์ดํ„ฐ ์‚ญ์ œ

-- ํ˜„์žฌ ๋ฐ์ดํ„ฐ ํ™•์ธ
SELECT * FROM accommodation;

-- id๊ฐ€ 1์ธ ๋กœ์šฐ ์‚ญ์ œ
DELETE FROM accommodation
WHERE id = 1
RETURNING *;

DELETE FROM accommodation
WHERE id = 2 OR id = 3
RETURNING *;