์ ์ฝ ์กฐ๊ฑด
PRIMARY KEY (๊ธฐ๋ณธ ํค):
- PRIMARY KEY๋ ํ ์ด๋ธ์ ๊ฐ ๋ ์ฝ๋๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ ํ ์ด๋ธ์ ํ๋์ PRIMARY KEY๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- PRIMARY KEY๋ NULL ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
CREATE TABLE Users (
UserID INT PRIMARY KEY,
UserName VARCHAR(50),
Email VARCHAR(50)
);
์ฌ์ฉ์ ํ ์ด๋ธ์์ ์ฌ์ฉ์ ID๋ฅผ PRIMARY KEY๋ก ์ง์ ํ๋ฉด ๊ฐ ์ฌ์ฉ์์ ID๊ฐ ๊ณ ์ ํ๊ฒ ์๋ณ๋ฉ๋๋ค.
FOREIGN KEY (์ธ๋ ํค):
- FOREIGN KEY๋ ๋ค๋ฅธ ํ ์ด๋ธ์ PRIMARY KEY์ ์ฐ๊ฒฐ๋๋ ํ๋๋ก, ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ฉฐ, ๋ณดํต์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๊ณ ์ ๊ธฐ๋ณธ ํค์ ํจ๊ป ์ฌ์ฉ๋๋ค. ์ผ์ข ์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ๊ฐ์์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ค.
- FOREIGN KEY๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ด๋ธ์ ํ์ ํ ์ด๋ธ, PRIMARY KEY๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ด๋ธ์ ์ฐธ์กฐ ํ ์ด๋ธ ๋๋ ์์ ํ ์ด๋ธ์ด๋ผ๊ณ ํ๋ค.
- FOREIGN KEY๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํ ์ด๋ธ ๊ฐ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- FOREIGN KEY๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ํ ์ด๋ธ์ PRIMARY KEY ๊ฐ์ด๋ UNIQUE KEY ๊ฐ๋ง์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
ProductName VARCHAR(50),
UserID INT,
FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
์์ ์์์ Orders ํ ์ด๋ธ์ UserID๋ Users ํ ์ด๋ธ์ UserID๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ด Users ํ ์ด๋ธ์ UserID์ ์กด์ฌํ๋ ๊ฐ๋ง์ด Orders ํ ์ด๋ธ์ UserID์ ๋ค์ด๊ฐ ์ ์๋๋ก ํฉ๋๋ค.
SERIAL
SERIAL์ ์ผ๋ จ๋ฒํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ์ํ ๋ฐ์ดํฐ ํ์ ์ด๋ ์์ฑ์ด๋ฉฐ, ์ ์ํ ๋ฐ์ดํฐ ํ์ ์ ํน๋ณํ ์ข ๋ฅ๋ก์จ ์๋์ผ๋ก ์ฆ๊ฐํ๋ ์ผ๋ จ๋ฒํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉ๋๋ฉฐ, ๊ฐ ํ์ ๋ํด ๊ณ ์ ํ ๊ฐ์ ์์ฑํฉ๋๋ค.
โ๏ธrow๊ฐ ์ญ์ ๋์๊ฑฐ๋, ์ฝ์ ๋ช ๋ น์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ทธ ํด๋น pk๋ ๊ฑด๋๋ฐ๊ณ ๋ค์ pk๊ฐ ๋ถ์ฌ๋๋ค.
CREATE TABLE players(
player_id SERIAL PRIMARY KEY,
age SMALLINT NOT NULL
);
CREATE
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๋ค.
CREATE TABLE account(
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(50) NOT NULL,
email VARCHAR(250) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
)
CREATE TABLE job(
job_id SERIAL PRIMARY KEY,
job_name VARCHAR(200) UNIQUE NOT NULL
)
account์ job๋ฅผ ์ฐ๊ฒฐํ๋ ์ค๊ฐํ
CREATE TABLE account_job(
user_id INTEGER REFERENCES account(user_id),
job_id INTEGER REFERENCES job(job_id),
hire_date TIMESTAMP
)
user_id์ job_id๋ fkey๊ฐ ๋๋ค!
INSERT
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋ก์ด ํ์ ์ถ๊ฐํ๋ค.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
//acount ํ
์ด๋ธ ์
๋ ฅ
INSERT INTO account(username,password,email,created_on)
VALUES
('Jose','password','jose@mail.com',CURRENT_TIMESTAMP)
user_id๋ serial๋ก ์ธํด ์๋์์ฑ๋๋ฏ๋ก, ๋๋จธ์ง col์ ๊ฐ์ insert๋ก ๋ฃ์ด์ค๋ค.
CURRENT_TIMESTAMP๋ฅผ ์ด์ฉํด, ํ์ฌ ์๊ฐ๊ณผ ๋ ์ง๋ฅผ ๋ฃ์ด์ค๋ค.
INSERT INTO account_job(user_id,job_id,hire_date)
VALUES (10,10,CURRENT_TIMESTAMP)
์ค๊ฐํ์ธ account_job์ ์กด์ฌํ์ง ์๋ user_id, job_id ๊ฐ 10์ ๋ฃ์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค
INTEGER REFERENCES ์ด๊ธฐ ๋๋ฌธ์ fkey ์ ์ฝ์กฐ๊ฑด์ ์๋ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
UPDATE
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ํ์ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ์ ์ฒด ํ ์ด๋ธ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. returning ์ ์ ๋งจ๋ค์ ์์ฑํ์ฌ, select์์ด ๋ฐ๋ก ํ์ธํ๊ณ ์ถ์ col ์ ์์ฑํ ์ ์๋ค. (๋ณ๊ฒฝ๋ ๊ฐ ์ถ๋ ฅ)
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
UPDATE account_job
SET hire_date=account.created_on
FROM account
WHERE account_job.user_id=account.user_id
ALTER
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด(ํ ์ด๋ธ, ๋ทฐ, ์ธ๋ฑ์ค ๋ฑ)์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
//์กฐ๊ฑด ์ญ์
ALTER TABLE new_info
ALTER COLUMN people DROP NOT NULL (SET: ์กฐ๊ฑด ์ถ๊ฐ)
//ํ
์ด๋ธ์ ์๋ก์ด ์ด ์ถ๊ฐ
ALTER TABLE table_name
ADD COLUMN new_column_name datatype;
//์ด์ ๋ฐ์ดํฐ ํ์
๋ณ๊ฒฝ
ALTER TABLE table_name
ALTER COLUMN column_name new_datatype;
//ํ
์ด๋ธ์ ์ด ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;
ํ๊ฐ์ํ3
CREATE TABLE students(
student_id serial PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50 NOT NULL,
homeroom_number integer,
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE,
grad_year integer);
CREATE TABLE teachers(
teacher_id serial PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
homeroom_number integer,
department VARCHAR(50),
email VARCHAR(100) UNIQUE,
phone VARCHAR(20) UNIQUE);
phone๋ฒํธ ํ์ ์ ์ซ์๋ณด๋ค ๋ฌธ์์ด์ ์ฌ์ฉํ๋๊ฒ์ ๊ถ์ฅํ๋ค๊ณ ํ๋ค. (์ฐ์ฐํ์x)
INSERT INTO students(first_name,last_name, homeroom_number,phone,grad_year)
VALUES ('Mark','Watney',5,'7755551234',2035);
INSERT INTO teachers(first_name,last_name, homeroom_number,department,email,phone)
VALUES ('Jonas','Salk',5,'Biology','jsalk@school.org','7755554321');
์กฐ๊ฑด์
CASE
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ์ ํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
SELECT
column1,
column2,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END AS alias
FROM table_name;
AS ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ์ด์ ๋ณ์นญ์ ๋ณ๊ฒฝํ ์ ์๋ค!
- WHEN : ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์ฐ
- ELSE : ์์ ๋ชจ๋ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ
SELECT
SUM(
CASE rating
WHEN 'R' THEN 1 ELSE 0
)AS r
FROM film
ํด๋น๊ฐ์ 1๋ก ๋ณ๊ฒฝ์์ผ์ sum์ผ๋ก ์นด์ดํธํด์ R๋ฑ๊ธ์ด ๋ช๊ฐ๊ฐ ์๋์ง ์ด๋ ๊ฒ ํ์ธํด๋ณผ ์ ์๋ค!
COALESCE
Null๊ฐ์ ๊ฐ์ง ํ๋ฅผ ์ฟผ๋ฆฌํ ๋ ์ ์ฉํ๋ค -> Null๊ฐ์ ๋ค๋ฅธ ์๋ก ์นํํ ๋ ์ฌ์ฉํ๋ค.
SELECT item,(price-COALESCE(discount,0)) AS final
FROM table
null๊ฐ์ 0์ผ๋ก ์นํํ์ฌ, ๋บ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํด์ง๋ค.
CAST
ํ์ ๋ณํ์ด ๊ฐ๋ฅํ๋ค
SELECT CHAR_LENGHT(CAST(inventory_id AS VARCHAR)) FROM rental
NULLIF
๋๊ฐ์ ๊ฐ์ ๋ฃ์ด์, ๋ ๊ฐ์ด ๊ฐ์ผ๋ฉด NULL , ๋ค๋ฅด๋ฉด ์ฒซ๋ฒ์งธ ๊ฐ์ด ๋์ถ๋๋ค.
SELECT(
SUM(CASE WHEN department='A' THEN 1 ELSE 0 END)/
NULLIF(SUM(CASE WHEN department='B' THEN 1 ELSE 0 END),0)
) AS department_ratio
FROM depts
๋ ๊ฐ์ด null,0์ผ๋ก ์ฒซ๋ฒ์งธ ๊ฐ์ธ null์ด ๋ฐํ๋๋ค.
VIEW
ํ ์ด๋ธ์์ ์ ํ์ ์ธ ์ด๊ณผ ํ์ ์กฐํฉ์ ๋ํ๋ด๋ ๊ฐ์ ํ ์ด๋ธ๋ก,
๋ทฐ๋ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
CREATE VIEW HighSalaryEmployees AS
SELECT EmployeeID, FirstName, LastName, Salary
FROM Employees
WHERE Salary > 50000;
SELECT * FROM HighSalaryEmployees;
'โ๏ธ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ์ฝ ์กฐ๊ฑด
PRIMARY KEY (๊ธฐ๋ณธ ํค):
- PRIMARY KEY๋ ํ ์ด๋ธ์ ๊ฐ ๋ ์ฝ๋๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ๊ฐ ํ ์ด๋ธ์ ํ๋์ PRIMARY KEY๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
- PRIMARY KEY๋ NULL ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
CREATE TABLE Users (
UserID INT PRIMARY KEY,
UserName VARCHAR(50),
Email VARCHAR(50)
);
์ฌ์ฉ์ ํ ์ด๋ธ์์ ์ฌ์ฉ์ ID๋ฅผ PRIMARY KEY๋ก ์ง์ ํ๋ฉด ๊ฐ ์ฌ์ฉ์์ ID๊ฐ ๊ณ ์ ํ๊ฒ ์๋ณ๋ฉ๋๋ค.
FOREIGN KEY (์ธ๋ ํค):
- FOREIGN KEY๋ ๋ค๋ฅธ ํ ์ด๋ธ์ PRIMARY KEY์ ์ฐ๊ฒฐ๋๋ ํ๋๋ก, ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ฉฐ, ๋ณดํต์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๊ณ ์ ๊ธฐ๋ณธ ํค์ ํจ๊ป ์ฌ์ฉ๋๋ค. ์ผ์ข ์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ๊ฐ์์ ๋ค๋ฆฌ ์ญํ ์ ํ๋ค.
- FOREIGN KEY๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ด๋ธ์ ํ์ ํ ์ด๋ธ, PRIMARY KEY๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ด๋ธ์ ์ฐธ์กฐ ํ ์ด๋ธ ๋๋ ์์ ํ ์ด๋ธ์ด๋ผ๊ณ ํ๋ค.
- FOREIGN KEY๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ํ ์ด๋ธ ๊ฐ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- FOREIGN KEY๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ํ ์ด๋ธ์ PRIMARY KEY ๊ฐ์ด๋ UNIQUE KEY ๊ฐ๋ง์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
CREATE TABLE Orders (
OrderID INT PRIMARY KEY,
ProductName VARCHAR(50),
UserID INT,
FOREIGN KEY (UserID) REFERENCES Users(UserID)
);
์์ ์์์ Orders ํ ์ด๋ธ์ UserID๋ Users ํ ์ด๋ธ์ UserID๋ฅผ ์ฐธ์กฐํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, FOREIGN KEY ์ ์ฝ ์กฐ๊ฑด์ด Users ํ ์ด๋ธ์ UserID์ ์กด์ฌํ๋ ๊ฐ๋ง์ด Orders ํ ์ด๋ธ์ UserID์ ๋ค์ด๊ฐ ์ ์๋๋ก ํฉ๋๋ค.
SERIAL
SERIAL์ ์ผ๋ จ๋ฒํธ๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ธฐ ์ํ ๋ฐ์ดํฐ ํ์ ์ด๋ ์์ฑ์ด๋ฉฐ, ์ ์ํ ๋ฐ์ดํฐ ํ์ ์ ํน๋ณํ ์ข ๋ฅ๋ก์จ ์๋์ผ๋ก ์ฆ๊ฐํ๋ ์ผ๋ จ๋ฒํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ ํค๋ก ์ฌ์ฉ๋๋ฉฐ, ๊ฐ ํ์ ๋ํด ๊ณ ์ ํ ๊ฐ์ ์์ฑํฉ๋๋ค.
โ๏ธrow๊ฐ ์ญ์ ๋์๊ฑฐ๋, ์ฝ์ ๋ช ๋ น์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๊ทธ ํด๋น pk๋ ๊ฑด๋๋ฐ๊ณ ๋ค์ pk๊ฐ ๋ถ์ฌ๋๋ค.
CREATE TABLE players(
player_id SERIAL PRIMARY KEY,
age SMALLINT NOT NULL
);
CREATE
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ฑํ๋ค.
CREATE TABLE account(
user_id SERIAL PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(50) NOT NULL,
email VARCHAR(250) UNIQUE NOT NULL,
created_on TIMESTAMP NOT NULL,
last_login TIMESTAMP
)
CREATE TABLE job(
job_id SERIAL PRIMARY KEY,
job_name VARCHAR(200) UNIQUE NOT NULL
)
account์ job๋ฅผ ์ฐ๊ฒฐํ๋ ์ค๊ฐํ
CREATE TABLE account_job(
user_id INTEGER REFERENCES account(user_id),
job_id INTEGER REFERENCES job(job_id),
hire_date TIMESTAMP
)
user_id์ job_id๋ fkey๊ฐ ๋๋ค!
INSERT
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์๋ก์ด ํ์ ์ถ๊ฐํ๋ค.
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
//acount ํ
์ด๋ธ ์
๋ ฅ
INSERT INTO account(username,password,email,created_on)
VALUES
('Jose','password','jose@mail.com',CURRENT_TIMESTAMP)
user_id๋ serial๋ก ์ธํด ์๋์์ฑ๋๋ฏ๋ก, ๋๋จธ์ง col์ ๊ฐ์ insert๋ก ๋ฃ์ด์ค๋ค.
CURRENT_TIMESTAMP๋ฅผ ์ด์ฉํด, ํ์ฌ ์๊ฐ๊ณผ ๋ ์ง๋ฅผ ๋ฃ์ด์ค๋ค.
INSERT INTO account_job(user_id,job_id,hire_date)
VALUES (10,10,CURRENT_TIMESTAMP)
์ค๊ฐํ์ธ account_job์ ์กด์ฌํ์ง ์๋ user_id, job_id ๊ฐ 10์ ๋ฃ์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค
INTEGER REFERENCES ์ด๊ธฐ ๋๋ฌธ์ fkey ์ ์ฝ์กฐ๊ฑด์ ์๋ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
UPDATE
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ธฐ์กด ๋ ์ฝ๋๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ํ์ ๊ฐ์ ์ ๋ฐ์ดํธํ๊ฑฐ๋, ์ ์ฒด ํ ์ด๋ธ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. returning ์ ์ ๋งจ๋ค์ ์์ฑํ์ฌ, select์์ด ๋ฐ๋ก ํ์ธํ๊ณ ์ถ์ col ์ ์์ฑํ ์ ์๋ค. (๋ณ๊ฒฝ๋ ๊ฐ ์ถ๋ ฅ)
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
UPDATE account_job
SET hire_date=account.created_on
FROM account
WHERE account_job.user_id=account.user_id
ALTER
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ฒด(ํ ์ด๋ธ, ๋ทฐ, ์ธ๋ฑ์ค ๋ฑ)์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค.
//์กฐ๊ฑด ์ญ์
ALTER TABLE new_info
ALTER COLUMN people DROP NOT NULL (SET: ์กฐ๊ฑด ์ถ๊ฐ)
//ํ
์ด๋ธ์ ์๋ก์ด ์ด ์ถ๊ฐ
ALTER TABLE table_name
ADD COLUMN new_column_name datatype;
//์ด์ ๋ฐ์ดํฐ ํ์
๋ณ๊ฒฝ
ALTER TABLE table_name
ALTER COLUMN column_name new_datatype;
//ํ
์ด๋ธ์ ์ด ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;
ํ๊ฐ์ํ3
CREATE TABLE students(
student_id serial PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50 NOT NULL,
homeroom_number integer,
phone VARCHAR(20) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE,
grad_year integer);
CREATE TABLE teachers(
teacher_id serial PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
homeroom_number integer,
department VARCHAR(50),
email VARCHAR(100) UNIQUE,
phone VARCHAR(20) UNIQUE);
phone๋ฒํธ ํ์ ์ ์ซ์๋ณด๋ค ๋ฌธ์์ด์ ์ฌ์ฉํ๋๊ฒ์ ๊ถ์ฅํ๋ค๊ณ ํ๋ค. (์ฐ์ฐํ์x)
INSERT INTO students(first_name,last_name, homeroom_number,phone,grad_year)
VALUES ('Mark','Watney',5,'7755551234',2035);
INSERT INTO teachers(first_name,last_name, homeroom_number,department,email,phone)
VALUES ('Jonas','Salk',5,'Biology','jsalk@school.org','7755554321');
์กฐ๊ฑด์
CASE
์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ์ ํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
SELECT
column1,
column2,
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END AS alias
FROM table_name;
AS ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ ์ด์ ๋ณ์นญ์ ๋ณ๊ฒฝํ ์ ์๋ค!
- WHEN : ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์ฐ
- ELSE : ์์ ๋ชจ๋ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ
SELECT
SUM(
CASE rating
WHEN 'R' THEN 1 ELSE 0
)AS r
FROM film
ํด๋น๊ฐ์ 1๋ก ๋ณ๊ฒฝ์์ผ์ sum์ผ๋ก ์นด์ดํธํด์ R๋ฑ๊ธ์ด ๋ช๊ฐ๊ฐ ์๋์ง ์ด๋ ๊ฒ ํ์ธํด๋ณผ ์ ์๋ค!
COALESCE
Null๊ฐ์ ๊ฐ์ง ํ๋ฅผ ์ฟผ๋ฆฌํ ๋ ์ ์ฉํ๋ค -> Null๊ฐ์ ๋ค๋ฅธ ์๋ก ์นํํ ๋ ์ฌ์ฉํ๋ค.
SELECT item,(price-COALESCE(discount,0)) AS final
FROM table
null๊ฐ์ 0์ผ๋ก ์นํํ์ฌ, ๋บ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํด์ง๋ค.
CAST
ํ์ ๋ณํ์ด ๊ฐ๋ฅํ๋ค
SELECT CHAR_LENGHT(CAST(inventory_id AS VARCHAR)) FROM rental
NULLIF
๋๊ฐ์ ๊ฐ์ ๋ฃ์ด์, ๋ ๊ฐ์ด ๊ฐ์ผ๋ฉด NULL , ๋ค๋ฅด๋ฉด ์ฒซ๋ฒ์งธ ๊ฐ์ด ๋์ถ๋๋ค.
SELECT(
SUM(CASE WHEN department='A' THEN 1 ELSE 0 END)/
NULLIF(SUM(CASE WHEN department='B' THEN 1 ELSE 0 END),0)
) AS department_ratio
FROM depts
๋ ๊ฐ์ด null,0์ผ๋ก ์ฒซ๋ฒ์งธ ๊ฐ์ธ null์ด ๋ฐํ๋๋ค.
VIEW
ํ ์ด๋ธ์์ ์ ํ์ ์ธ ์ด๊ณผ ํ์ ์กฐํฉ์ ๋ํ๋ด๋ ๊ฐ์ ํ ์ด๋ธ๋ก,
๋ทฐ๋ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฟผ๋ฆฌ๋ฅผ ๋จ์ํํ๊ณ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
CREATE VIEW HighSalaryEmployees AS
SELECT EmployeeID, FirstName, LastName, Salary
FROM Employees
WHERE Salary > 50000;
SELECT * FROM HighSalaryEmployees;