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;