Post

SQL datatype, commands

๐Ÿ†š SQL์€ ๋ฐ์ดํ„ฐ ์ง€ํ–ฅ์  ๋ชจ๋ธ๋ง, ํ–‰์œ„๊ฐ€ ์—†์Œ
๋ฐ˜๋ฉด JAVA๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ (๋˜๋Š” ํ–‰์œ„ ์ง€ํ–ฅ) ๋ชจ๋ธ๋ง

โœ”๏ธ SQL์—์„œ๋Š” DB๋ฅผ schema๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
โœ”๏ธ DB๋ผ๋ฆฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • column: ์—ด ๐ŸŸฐ ํ•„๋“œ ๐ŸŸฐ attribute
  • row: ํ–‰ ๐ŸŸฐ ๋ ˆ์ฝ”๋“œ
    row๋‹จ์œ„๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.
    (๊ณ ๊ฐ ์•„์ด๋””, ์ด๋ฆ„, ์„ฑ๋ณ„, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ๋“ฑ์ด ๋ชจ์—ฌ์„œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง.)

โœ… SQL ๋ฐ์ดํ„ฐ ํ˜•์‹

MYSQL ๋ฐ์ดํ„ฐํ˜•์‹์ด ๋‹ค๋ฅด๋ฉด ๊ทธ๋งŒํผ RAM/DISK ๋‚ญ๋น„
ํšจ์œจ์ฐจ์ด๊ฐ€ ์‹ฌํ•ด์ง€๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

โญ๏ธ ๊ฐ€๋ณ€ํ˜• ํƒ€์ž…: ์ข€ ๋„‰๋„‰ํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ฃผ์—ˆ๋‹ค๊ฐ€ ์‹ค์ œ๋กœ๋Š” ๋” ์ž‘์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์•Œ์•„์„œ ์šฉ๋Ÿ‰์„ ์ค„์ธ๋‹ค.

  • Varchar
  • Text
  • binary

โœ”๏ธ Char/String

  • Varchar
    ๊ธธ์ด๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ
    VARCHAR(6) ํ•ด๋„ 3๊ฐœ์˜ ๋ฐ์ดํ„ฐ ๋“ค์–ด์˜ค๋ฉด 3์นธ๋งŒ ์ฐจ์ง€
    ์ด๋ฉ”์ผ ์ฃผ์†Œ, ์ง‘ ์ฃผ์†Œ

  • Char
    ๊ธธ์ด๊ฐ€ ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ
    CHAR(6) ํ•ด๋„ 3๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋“ค์–ด์™€๋„ 6์นธ ๋‹ค ์ฐจ์ง€
    ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ, ์šฐํŽธ๋ฒˆํ˜ธ

  • Text
    Varchar, Char๋กœ ์ปค๋ฒ„ํ•  ์ˆ˜ ์—†๋Š” ๊ธ€์ž ์ˆ˜
    ์˜ํ™” ๋ฆฌ๋ทฐ, ์ž๊ธฐ์†Œ๊ฐœ์„œ ๋“ฑ

โœ”๏ธ Numeric

์ž๋ฐ”๋ž‘ ๋น„์Šท int

โœ”๏ธ Date/Time

  • DATE YYYY-MM-DD
  • TIME HH-MM-SS
  • DATETIME YYYY-MM-DD-HH-MM-SS
    ์‹œ๊ฐ„๋Œ€ ์ •๋ณด ์—†์Œ
    ์‹œ๊ฐ„ ๋ฒ”์œ„ ๋„“์€
  • TIMESTAMP YYYY-MM-DD-HH-MM-SS
    ํ˜„์žฌ ์‹œ๊ฐ„๋Œ€๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์ €์žฅ
    1970๋…„๋ถ€ํ„ฐ 2038๋…„๊นŒ์ง€๋งŒ ๊ฐ€๋Šฅ

โœ”๏ธ Blob

์‚ฌ์ง„, ๋™์˜์ƒ ์ €์žฅ ์œ„ํ•จ

โœ”๏ธ Binary

  • binary

โœ… SQL commands

โœ”๏ธ DDL

Data Definition Language
DB, schema ์ˆ˜์ค€์˜ ์ž‘์—…
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ญ”๊ฐ€๋ฅผ ํ•˜๊ฑฐ๋‚˜
table ์ƒ์„ฑ, ์‚ญ์ œ, ์ปฌ๋Ÿผ ๋ณ€๊ฒฝโ€ฆ
์ปฌ๋Ÿผ์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜โ€ฆ

CREATE: DB ์ƒ์„ฑ
ALTER
DROP
RENAME
TRUNCATE

โœ”๏ธ DML

Data Manipulation Language
DB๋ฐ์ดํ„ฐ(=๋ ˆ์ฝ”๋“œ) ์ˆ˜์ค€์˜ ์ž‘์—…
๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ช…๋ น์–ด
๋ฐ์ดํ„ฐ ์กฐํšŒ, ์‚ฝ์ž…, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ ๋“ฑโ€ฆ

SELECT
INSERT
UPDATE
DELETE

โ˜‘๏ธ SQL commands exmaple

1
2
3
AUTO_INCREMENT //์ž๋™ ์ฆ๊ฐ•
PRIMARY KEY //๊ธฐ๋ณธํ‚ค
NOT NULL //๋น„์šธ ์ˆ˜ ์—†์Œ
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE member(
	member_id INT AUTO_INCREMENT PRIMARY KEY,
	  mem_name VARCHAR(10) NOT NULL,
    mem_number INT ,
    addr VARCHAR(30),
    phone CHAR(12),
    height TINYINT UNSIGNED,
    enroll_date DATETIME
);

DESC member; -- add comment like this

โ˜‘๏ธ DDL

๐Ÿ’ก ALTER

โœ”๏ธ add column

1
2
ALTER TABLE netflix
ADD COLUMN release_date DATE AFTER movie_title; -- add column

โœ”๏ธ update column

1
2
ALTER TABLE netflix
MODIFY COLUMN movie_director VARCHAR(100) NOT NULL; -- update column

โœ”๏ธ delete column

1
2
ALTER TABLE netflix
DROP COLUMN movie_script; -- delete column

๐Ÿ’ก DROP, TRUNCATE

DROP: table ์ž์ฒด๋ฅผ ์™„์ „ ์‚ญ์ œ
TRUNCATE: table์˜ ๋‚ด์šฉ๋ฌผ ์‚ญ์ œ

โ˜‘๏ธ DML

๐Ÿ’ก INSERT

1
2
3
4
5
6
INSERT INTO member (mem_name, mem_number, addr, phone, height, enroll_date)
VALUES ('Kim', 1, 'Seoul', 010, 160, '2024-01-01 10:00:00'),
		('Park', 3, 'Gimpo', 010, 180, '2024-01-01 11:00:00'),
		('Jang', 7, 'Anyang', 010, 190, '2024-01-01 10:00:00'),
		('Sin', 5, 'Mokdong', 010, 130, '2024-01-01 10:00:00'),
		('Lee', 2, 'Busan', 010, 170, '2024-01-01 13:00:00');

๐Ÿ’ก UPDATE & WHERE

WHERE ์—†์œผ๋ฉด ๋‹ค ์ˆ˜์ •๋จโ€ฆ

1
2
3
4
5
UPDATE member
SET addr= 'NewYork'
WHERE mem_name= 'Kim';

SET SQL_SAFE_UPDATES = 0;

๐Ÿ’ก DELETE & WHERE

WHERE ์—†์œผ๋ฉด ๋‹ค ์ง€์›Œ์งโ€ฆ
๋งŒ์•ฝ WHERE ์•ˆ ์“ฐ๋ฉด TRUNCATE๋ž‘ ๊ฐ™์Œ

1
DELETE FROM member WHERE mem_name= 'Lee';

๐Ÿ†š DELETE TUNCATE DROP
DELETE: where ์จ์„œ ์กฐ๊ฑด ๋งŒ์กฑํ•˜๋Š” ํ•œ ํ–‰์”ฉ ์ง€์šฐ๊ธฐ
TUNCATE: ํ‘œ์˜ ์—ด์€ ๋‚จ๊ฒจ๋‘๊ณ  ๋‚ด์šฉ(ํ–‰)์€ ์ง€์šฐ๊ธฐ, auto_increment๋„ ์ดˆ๊ธฐํ™”
DROP: ๋ชจ๋“  ํ–‰๊ณผ ํ…Œ์ด๋ธ” ์‚ญ์ œ

๐Ÿ’ก SELECT

โ˜‘๏ธ SELECT ๊ตฌ๋ฌธ ์ž‘์„ฑ ์ˆœ์„œ

  • SELECT
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

โ˜‘๏ธ SELECT ๋‚ด๋ถ€ ์‹คํ–‰ ์ˆœ์„œ

  • FROM + JOIN
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • ORDER BY
  • LIMIT

โœ”๏ธ WHERE, BETWEEN, IN, LIKE

  • BETWEEN
  • IN
  • % ๊ธ€์ž์ˆ˜ ์ƒ๊ด€ ์—†์Œ
  • LIKE__ ๊ธ€์ž์ˆ˜ ์ œํ•œ ์žˆ์Œ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT *
FROM group_singer
WHERE height >= 180;

SELECT *
FROM group_singer
WHERE height > 160 AND height < 170;

SELECT *
FROM group_singer
WHERE height BETWEEN 160 AND 170; -- same code as before

SELECT *
FROM group_singer
WHERE addr IN ('๊ฒฝ๊ธฐ', '๊ฒฝ๋‚จ');

1
2
3
4
5
6
7
SELECT *
FROM group_singer
WHERE mem_name LIKE '์•„'; --์•„์ด์œ , ์•„์ผ๋žœ๋“œ ๋“ฑ๋“ฑ

SELECT *
FROM group_singer
WHERE mem_name LIKE '์•„__';  -- ์•„์ด์œ (์•„ ๋’ค์— 2๊ธ€์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ์Œ)

โœ”๏ธ ORDER BY, ASC, DESC, LIMIT, DISTINCT

โ—๏ธ ์ ๋Š” ์ˆœ์„œ์— ์œ ์˜ํ•˜์ž!

โž– ORDER BY
1
2
3
4
5
6
7
8
9
10
SELECT *
FROM group_singer
WHERE mem_number < 6
ORDER BY debut_date DESC;

-- ๐Ÿ’ฅ ๋งŒ์•ฝ ์ˆœ์„œ๋ฐ”๋€Œ๋ฉด ์‹คํ–‰ โŒ
--SELECT *
--FROM group_singer
--ORDER BY debut_date DESC
--WHERE mem_number < 6;
โž– LIMIT
1
2
3
4
SELECT mem_name, debut_date
FROM group_singer
ORDER BY debut_date ASC
LIMIT 3;
1
2
3
4
5
SELECT mem_name, debut_date
FROM group_singer
WHERE mem_number > 4
ORDER BY debut_date ASC
LIMIT 5,3; --5๋ฒˆ์จฐ๋ถ€ํ„ฐ 3๊ฐœ ๊ฐ€์ ธ์˜ค๊ธฐ
โž– DISTINCT

DISTINCT๋Š” SELECT๋’ค์—์„œ ์“ฐ์ธ๋‹ค.
๋ช‡ ๊ฐœ์˜ ์„ ํƒ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋–„ ์œ ์šฉํ•˜๋‹ค.

1
2
3
SELECT DISTINCT  addr
FROM group_singer
ORDER BY addr; --๊ฒฝ๊ธฐ, ์„œ์šธ, ๊ฒฝ๋‚จ, ์ „๋‚จ, ์ถฉ๋ถ ์ถœ๋ ฅ

โœ”๏ธ GROUP BY, SUM, AVERAGE, HAVING, COUNT

โž– GROUP BY

๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ์•„์„œ ๋ณด์—ฌ์ค€๋‹ค.
๊ตฌ๋งค์ด๋ ฅ์—์„œ ์ด ์‚ฌ๋žŒ์ด ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋ฌผ๊ฑด์„ ์ƒ€๋Š”๋ฐ(GROUP BY), ๋ช‡ ๋ฒˆ ์ƒ€๋Š”์ง€ ๋‹ค ๋”ํ•˜๊ธฐ(SUM)

1
2
3
4
5
6
7
8
9
10
11
SELECT mem_id, SUM(amount)
FROM buy_history
GROUP BY mem_id;

SELECT mem_id, SUM(price * amount) -- ์–ผ๋งˆ์งœ๋ฆฌ๋ฅผ ๋ช‡ ๋ฒˆ ์ƒ€๋Š”์ง€, ์ด ๋น„์šฉ ๊ตฌํ•˜๊ธฐ
FROM buy_history
GROUP BY mem_id;

SELECT mem_id, SUM(price * amount) AS total_price --์ถœ๋ ฅ๋˜๋Š” ์ปฌ๋Ÿผ๋ช…์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ
FROM buy_history
GROUP BY mem_id;
โž– AVG
1
2
3
SELECT mem_id, AVG(price * amount) AS average
FROM buy_history
GROUP BY mem_id;
โž– COUNT

๊ฐœ์ˆ˜ ์„ธ์–ด ์ค€๋‹ค.

1
2
3
4
5
6
7
SELECT COUNT(*) -- mem001์ด ์ด ๋ช‡ ๊ฐœ ์ƒ€๋Š”์ง€ ๊ฐœ์ˆ˜ ์„ธ์–ด ์ค€๋‹ค.
FROM buy_history
WHERE mem_id = 'mem001';

SELECT mem_id, COUNT(*) --๊ฐ ์•„์ด๋””๋ณ„๋กœ ์ด ๋ช‡ ๊ฐœ ์ƒ€๋Š”์ง€ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
FROM buy_history
GROUP BY mem_id;
โž– HAVING

ํŠน์ • ๊ทธ๋ฃน ํ•‘ ๋ฐ์ดํ„ฐ ํŠน์ •ํ•˜๊ธฐ
WHERE์ ˆ์ด GROUP BY๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
HAVING๋ฌธ์œผ๋กœ ์กฐ๊ฑด์‹์„ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
-- SELECT mem_id, SUM(amount * price) AS total_price
-- FROM buy_history
-- WHERE SUM(amount * price) > 10000; --WHERE์ด GROUPBY๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜์„œ ์ด ์ฝ”๋“œ๋Š” ๋ถˆ๊ฐ€๋Šฅ
-- GROUP BY mem_id;

-- HAVING ์œผ๋กœ ํ•ด๊ฒฐ
SELECT mem_id, SUM(amount * price) AS total_price
FROM buy_history
GROUP BY mem_id
HAVING SUM(amount * price) > 10000;
This post is licensed under CC BY 4.0 by the author.