โจ SQL์ด๋?
Structured Query Language ์ ์ฝ์๋ก, RDBMS(Relational Database Management System) ๊ณผ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ธ์ด์ด๋ค. SQL ๋ด ํ๋์ Database ๋ ์ฌ๋ฌ๊ฐ์ table (๋๋ entity)๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ๊ฐ table ์ ํ(record), ์ด(field), ๋ฐ์ดํฐ ๊ฐ(value) ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
SQL ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ ํ ์ด๋ธ์ ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค. ๊ฐ๋ น, users ํ ์ด๋ธ์ ๋ฐ์ดํฐ ์ ๋ถ๋ฅผ ๋ถ๋ฌ์ค๊ณ ์ ํ๋ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ผ ์ ์๋ค.
SELECT *
FROM users;
์ฟผ๋ฆฌ๋ Case-sensitive ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋์๋ฌธ์ ๊ตฌ๋ถ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋, ์์ ์ปจ๋ฒค์ ์ ๋ง์ถฐ ์์ฑํ๋ ๊ฒ์ด ์ข๋ค. ๋ํ, ๋งค ์ฟผ๋ฆฌ๊ฐ ๋๋๋ ์ง์ ์ ์ธ๋ฏธ์ฝ๋ก ( ; ) ์ ๋ถ์ฌ์ ์ฟผ๋ฆฌ ์์ฑ์ด ์ข ๋ฃ๋์์์ ์๋ ค์ผ ํ๋ค. ์ฃผ์์ -- (single line) ๋๋ /* */ (multiline) ์ผ๋ก ๋ฌ ์ ์๋ค.
SQL ๋ช ๋ น๋ฌธ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค/ํ ์ด๋ธ ๋ช ์ด ์๋ ๋ฌธ์์ด ๊ฐ์ ์ฟผ๋ฆฌ์ ํฌํจํ ๊ฒฝ์ฐ ๋ฐ์ดํ๋ก ํํํด์ฃผ์ด์ผ ํ๋ค.
SELECT *
FROM users
WHERE name = 'Haeun';
โจ DDL, DML, DCL
SQL ๋ช ๋ น์ด๋ค์ DDL, DML, DCL ์ ๊ด์ ์์ ๋ถ๋ฅํ ์ ์๋ค.
DDL: Data Definition Language (๋ฐ์ดํฐ ์ ์ ์ธ์ด)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ธ์ด์ด๋ค.
- ํ ์ด๋ธ ์์ฑ, ๋ณ๊ฒฝ, ์ญ์ ๋ฑ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ๋ช ๋ น์ด๋ค์ ๋งํ๋ค.
- CREATE, ALTER, DROP, TRUNCATE ๋ฑ์ด ์ด์ ํด๋นํ๋ค.
DML: Data Manipulation Language (๋ฐ์ดํฐ ์กฐ์ ์ธ์ด)
- ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํ ์ธ์ด์ด๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ฑฐ๋, ํ ์ด๋ธ ์์ ๋ฐ์ดํฐ์ ๋ณํ์ ๊ฐํ๋ ๋ช ๋ น์ด๋ค์ ๋งํ๋ค.
- SELECT, INSERT, UPDATE, DELETE ๋ฑ์ด ์ด์ ํด๋นํ๋ค.
DCL: Data Control Language (๋ฐ์ดํฐ ์ ์ด ์ธ์ด)
- ์ฌ์ฉ์ ๊ด๋ฆฌ ๋ฐ ์ฌ์ฉ์๋ณ ๊ถํ (๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ, ๊ฐ์ฒด ์ฌ์ฉ ๋ฑ)์ ๋ค๋ฃจ๊ธฐ ์ํ ์ธ์ด์ด๋ค.
- GRANT, REVOKE ๋ฑ์ด ์ด์ ํด๋นํ๋ค.
์ด ๋ฐฉ๋ฒ ๋ง๊ณ ๋ CRUD (Create, Read, Update, Delete) ์ ๊ด์ ์์ ๋ค์ ๋ถ๋ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
โจ ๋ฌธ๋ฒ ๊ธฐ์ด ์ ๋ฆฌ
โจ DDL
CREATE
database ์ table ์ ์์ฑํ๋ค. table ๋ช ์ ์ง์ ํด์ค ๋ค ๊ดํธ ์์ field ๋ช ๊ณผ field ์ datatype, ๊ทธ๋ฆฌ๊ณ constraints (์ ์ฝ ์กฐ๊ฑด) ์ ์ค์ ํด์ค ์ ์๋ค.
CREATE TABLE users(
id int PRIMARY KEY,
name varchar(255)
);
/*
ํ
์ด๋ธ๋ช
: users
field ๋ช
: id, name
field datatype: int, varchar(255)
options: primary key
*/
-- database ์์ฒด๋ฅผ ์์ฑํ ์๋ ์๋ค.
CREATE DATABASE database_name;
ํ์ฉํ ์ ์๋ ์ ์ฝ์กฐ๊ฑด (constraint) ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋ค.
-- constraints
PRIMARY KEY -- ํ
์ด๋ธ๋ง๋ค ํ ๊ฐ์ฉ์ ์์ด์ผ ํ๋ฉฐ, ๋ฐ์ดํฐ ๋ ์ฝ๋๋ฅผ ์๋ณํ๊ฒ ํด ์ฃผ๋ ๊ณ ์ ๊ฐ์ด๋ค
FOREIGN KEY -- ๋ค๋ฅธ ํ
์ด๋ธ์ ์ฐธ์กฐํ๋ ์ธ๋ํค์ด๋ค
AUTO_INCREMENT -- datatype ๊ฐ int ์ธ ๊ฒฝ์ฐ, ๊ฐ์ ์๋์ผ๋ก ์ฆ๊ฐ์ํจ๋ค
NOT NULL -- null ๊ฐ์ด ์ฝ์
๋์ง ์๋๋ก ํ๋ค
UNIQUE -- ๋์ผ ํ
์ด๋ธ์ ์ด๋ฏธ ์๋ ๊ฐ์ด๋ฉด ์ค๋ณต ์
๋ ฅ๋์ง ์๋๋ก ํ๋ค
DEFAULT -- ์๋ฌด๊ฒ๋ ์
๋ ฅ๋์ง ์์์ ๋ ๋ถ์ฌํ ๊ฐ์ ์ค์ ํ๋ค
CHECK -- ์ผ์ ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๋ค
๋ํ int, varchar ์ด์ธ์ ์์ฃผ ํ์ฉํ๋ datatype ๋ค๋ ์กด์ฌํ๋ค.
-- Date types
DATE -- format: YYYY-MM-DD
DATETIME -- format: YYYY-MM-DD HH:MI:SS
TIMESTAMP -- format: YYYY-MM-DD HH:MI:SS
YEAR -- format: YYYY or YY
ALTER
table ๋ด์ ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, ๊ธฐ์กด ํ๋๋ฅผ ์ง์ฐ๊ฑฐ๋ ์์ ํ ์ ์๋ค.
ALTER TABLE table_name
ADD column_name datatype;
-- ํ๋ ์ถ๊ฐ
ALTER TABLE table_name
DROP COLUMN column_name;
-- ํ๋ ์ญ์ (constraint ๋ ์ญ์ ๊ฐ๋ฅ)
ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
-- ํ๋ ์์
DROP
table (๋๋ database) ์ ์ญ์ ํ๋ ๋ช ๋ น์ด๋ค.
DROP TABLE table_name;
DROP DATABASE database_name;
TRUNCATE
table ๋ด์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ค.
TRUNCATE TABLE users;
โจ DML
SELECT
table ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ช ๋ น์ด์ด๋ฉฐ, FROM ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์กฐํํ table ์ ์ง์ ํ๋ค.
SELECT 'hello'
SELECT 2 + 5 // or 2
SELECT Column_1, Column_2; -- ๋ณต์ ์ด ์ ํ
SELECT * FROM table_1; -- * ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ์ด์ ์ ํํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
DISTINCT ๋ช ๋ น์ด์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ ํํ๊ณ ์ ํ๋ ํ๋์์ ์ค๋ณต๋์ง ์๋ ์ ์ผํ ๊ฐ๋ค๋ง ์ ํํ๋ค.
SELECT DISTINCT name
FROM users
SELECT DISTINCT name, age
FROM users
-- age + name ์ ์ ์ผํ ์กฐํฉ๋ง ๋จ๊น
AS ๋ช ๋ น์ด๋ฅผ ์ฐ๋ฉด ์กฐํํ๊ณ ์ ํ๋ ํ๋๋ช ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ถ๋ ฅํ ์ ์๋ค.
-- ํ๋ ์ด๋ฆ์ด name ์ด ์๋๋ผ n ์ผ๋ก ์ถ๋ ฅ๋๋ค
SELECT name AS n
FROM users
-- ์ฌ๋ฌ ์ ํ์ง๋ฅผ ํ๋๋ก ํฉ์น ์๋ ์๋ค
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;
WHERE ๋ช ๋ น์ด๋ฅผ ์ฐ๋ฉด ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ๋ ์ฝ๋๋ง ์ถ์ถํ ์ ์๋ค.
SELECT age
FROM users
WHERE age >= 20
-- WHERE age = 20, <, >, >=, <= ๋ค ๊ฐ๋ฅ
-- WHERE age != 20 ํน์ ๊ฐ๋ง ์ ์ธ
SELECT name
FROM users
WHERE price BETWEEN 10 AND 20
-- ๋ ๊ฐ์ ์ฌ์ด์ ๋์ธ ๊ฐ๋ง ์ถ์ถํ๋ค
-- NOT BETWEEN ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
SELECT name
FROM users
WHERE name LIKE '%haeun%'
-- ํน์ ํจํด๊ณผ ์ผ์นํ๋ ๊ฐ์ ์ถ์ถํ๋ค
-- NOT LIKE ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
SELECT name
FROM users
WHERE name IN ('haeun', 'kang')
-- ์ถ์ถํ๊ณ ์ ํ๋ ๊ฐ์ด ๊ดํธ ์์ ์๋ ๊ฐ๋ค ์ค ํ๋์ ์ผ์นํ๋ ๊ฒฝ์ฐ ์ถ์ถํ๋ค
-- NOT IN ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
SELECT * FROM users
WHERE city = 'Berlin' AND city = 'London'
-- ๊ฐ์ด ๋ ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ์ถฉ์กฑํ ๋ ์ถ์ถํ๋ค
-- OR ๋ฅผ ํ์ฉํ์ฌ ๋ ๊ฐ์ง ์กฐ๊ฑด ์ค ํ๋๋ฅผ ์ถฉ์กฑํ ๋ ์ถ์ถํ ์๋ ์๋ค
-- city IS NULL ๋๋ city IS NOT NULL ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
INSERT
table ์ ์๋ก์ด ๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ค. INTO ๋ช ๋ น์ด์ ํจ๊ป ์ฌ์ฉํ๋ค.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
-- PK ๊ฐ auto-increment ๋ผ๋ฉด ์ถ๊ฐํ์ง ์์๋ ๋๋ค
-- ๋ช
์ํ์ง ์์ ์ด์ ๊ฒฝ์ฐ, null ๋๋ default ๊ฐ์ด ์ฝ์
๋๋ค
-- column ์์์ value ์์๊ฐ ์ผ์นํ๋๋ก ์ฝ์
ํด์ผ ํ๋ค
-- ๋ชจ๋ ์ด์ ๋ํด ๊ฐ์ ์ถ๊ฐํ๋ค๋ฉด:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
UPDATE
table ์ ์๋ ๋ ์ฝ๋์ ๊ฐ๋ค์ ์์ ํ๋ค. SET ๋ช ๋ น์ด์ ํจ๊ป ์ฌ์ฉ๋๋ค.
UPDATE Customers
SET City = 'Oslo'
-- ๋ชจ๋ ๋ ์ฝ๋์ City ๊ฐ์ Oslo ๋ก ๋ฐ๊ฟ
UPDATE Customers
SET City = 'Oslo', ContactName = 'Haeun'
WHERE City = 'London'
-- City ๊ฐ์ด London ์ธ ๋ ์ฝ๋์ ๋ํด City ๊ฐ์ Oslo ๋ก ๋ณํ
DELETE
table ์ ๋ ์ฝ๋ ๊ฐ์ ์ญ์ ํ๋ค.
DELETE FROM Customers
WHERE Country = 'Norway'
-- WHERE ์์ด DELETE FROM ๋ง ํ๋ค๋ฉด ๋ ์ฝ๋ ์ ์ฒด๋ฅผ ์ญ์ ํ๋ค (TRUNCATE ์ ๋์ผ)
โจ ๋ง๋ฌด๋ฆฌ
SQL ์ ํ๋์ ์๋ก์ด ์ธ์ด์ด๊ธด ํ์ง๋ง ๊ฐ๋ฐ์๋ค๋, ๊ฐ๋ฐ์๊ฐ ์๋ ๋ฐ์ดํฐ ์ง๊ตฐ ์ข ์ฌ์๋ค๋ ์ฝ๊ณ ํธํ๊ฒ ๋ค๋ฃฐ ์ ์๋ ์ธ์ด์ด๋ค. ๋ฐ์ดํฐ ์๋์ ์ ์ด๋ค๋ฉฐ SQL ์ ๋ค๋ฃจ๋ ๋ฅ๋ ฅ์ด ์ ์ฐจ ๋ ๊ฐ์กฐ๋๊ณ ์์ผ๋ฉฐ, ๊ทธ ์ค์์ฑ ๋ํ ๋๋๋๊ณ ์๋ค. ์ฌํ ํ์ต์ ํ๊ณ ์ถ๋ค๋ฉด SQLD ์๊ฒฉ์ฆ์ ๋ชฉํํ์ฌ ๊ณต๋ถํด๋ ๊ด์ฐฎ์ ๊ฒ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
โจ์ฐธ๊ณ ์๋ฃ
'๐ป DEV > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Real MySQL] 02_์ค์น์ ์ค์ (0) | 2021.10.13 |
---|
๋๊ธ