RDBMS, SQL 기초, DDL, DML
데이터베이스 (데이터 적제 및 관리)
SQL (Structured Query Language): 관계형 데이터베이스를 사용하기 위한 표준 언어
- 테이블 (행, 열로 이루어진 이차원 표)
- 행과 열끼리, 그리고 테이블끼리 관계를 맺고있어 관계형 DB라고함
SELECT name, category
FROM products
SELECT product_id, category
FROM products
WHERE 1=1
AND category = "주방용품"
SELECT product_id, name
FROM products
WHERE 1=1
AND price < 30000
LIMIT 2
AND category = "주방용품"
AND price = 2000
AND price > 5000
AND category <> "키즈"
AND category != "키즈"
!=
도 같지 않음을 의미한다.AND (category = "주방용품" OR name = "손목보호대")
AND NOT category = "키즈"
AND category IN ("스포츠","디지털","식품")
AND name LIKE "%보호%"
AND name LIKE "_그릇"
AND price BETWEEN 5000 and 15000
AND purchase_date between '20231001' and '20231003'
AND purchase_date IS NULL
AND product_name IS NOT NULL
ISNULL(컬럼명)
이라는 함수도 사용 가능하다.ORDER BY price
ORDER BY price DESC
ORDER BY price DESC, name
ORDER BY 1 DESC, 2
SUM(price) as sum_price, avg(price) as avg_price
SELECT name as name_v2, 1 as new_col
SELECT name as name_v2, 'tmp' as new_col
count(1) as cnt
count(name)
count(distinct price) as unique_price_cnt
SELECT category, count(1) as sales_cnt
FROM products_v3
WHERE 1=1
AND sale_yn = 'yes'
GROUP BY 1
ORDER BY 2, 1 DESC
GROUP BY 1, 2
GROUP BY 1,2
HAVING avg_price > 3000
SELECT CONCAT(category, '-', name) as comb_name
SELECT CONCAT(category, ' ', name) as comb_name
SELECT CONCAT(category, 5000, name) as comb_name
SELECT CONCAT(name, '의 가격은', price,'입니다.') as comb_name
SUBSTRING(name, 1, 2) as sub_string
LEFT(name, 3) as sub_string
RIGHT(name, 3) as sub_string
SELECT UPPER('John') AS up, LOWER('JOHN') AS low
CHAR_LENGTH(name) AS name_length
ROUND(avg(price)) as avg_price
ROUND(avg(price), 2) as avg_price
CEIL(avg(price)) as avg_price
FLOOR(avg(price)) as avg_price
TRUNCATE(avg(price), 2) as avg_price
SELECT ABS(price) as res
SELECT MOD(price, product_id) as mods
POW(2, 3)
GREATEST(2,5,1,7,14)
LEAST(2,5,1,7,14)
COALESCE(purchase_date, 'Unknown') as purchase_date
테이블: 표 형태로 저장된 데이터 (행과 열로 구성)
뷰: 가상의 테이블 (일부분만 본다던지, 다른 테이블과 결합한다던지 할 때 사용)
인덱스: 원하는 데이터를 빠르게 찾기위한 목적으로 만드는 색인
DDL(Data Definition Language): 데이터베이스 구조를 정의하고 관리
CREATE: 테이블/뷰/인덱스 생성
ALTER: 테이블/뷰/인덱스 구조 변경
DROP: 테이블/뷰/인덱스 삭제
IF NOT EXIST를 이용해 ‘products’ 이름의 테이블이 없을 때만 create한다.
절대 음수가 입력되지 않는 값은 unsigned로 지정
NOT NULL은 해당 컬럼의 값이 NULL 값이 될 수 없음을 의미한다.
varchar,char는 최대 길이를 인자로 받는다.
primary key는 테이블 내에 모든 행에 적용되는 고유한(unique) 아이디이다.
CHARSET을 이용해 테이블의 기본 문자 세트(문자 인코딩 방식)를 지정
sql 구문을 콘솔 하나에서 여러개 사용할 떈 세미콜론을 이용해 다른 ddl, dml 구문과 구별한다.
- 왜 어떨 땐 세미콜론을 쓰고 어떨땐 안쓰는지 궁금했는데 이해됐다!
ALTER TABLE product drop column price;
ALTER TABLE product add price int NULL;
ALTER TABLE products modify column price int NULL;
ALTER TABLE products CHANGE price price_2 int;
ALTER을 이용해 컬럼을 없애고(drop) 생성하고(add), 수정하고(modify) 컬럼 이름을 변경(CHANGE)할 수 있다.
DROP TABLE products;
products 테이블을 삭제한다
DML(Data Manipulation Language): 데이터를 쿼리하거나 조작
SELECT: 질의
INSERT: 삽입
UPDATE: 수정
DELETE: 삭제
테이블에 데이터를 추가
특정 조건의 데이터의 값을 변경
테이블에서 특정 레코드를 삭제
❗char과 varchar의 차이점
CREATE VIEW employee_view AS
-- 아래 SELECT문이 view 조회할 때마다 실행된다.
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department_id = 1;
-- view 조회
SELECT * FROM employee_view;