링크: https://inf.run/13fan
그 동안 강의를 들으며 노트에 정리한 것을 토대로 기록남기기
CREATE Table customers(
customer_id INT Auto_Increment Primary Key,
address VARCHAR(100) NotNull UNIQUE,
name VARCHAR(50) NOTNULL
); CREATE Table orders(
order_id INT Auto_Increment Primary Key,
customer_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
CONSTRATINT fk_orders_customers FOREGIN KEY (customer_id)
REFERENCES customers(customer_id)
);alter Table customers add column point INT NOT NULL DEFAULT 0;Alter Table customers modify column address VARCHER(500) NOT NULL;Alter Table customer drop point; Drop VS Truncate
1. Drop 는 구조 자체를 삭제
2. Truncate 는 구조는 유지하되, 내부 Data를 삭제
1) 모든 컬럼을 나열
INSERT INTO customers values(
Null,'kangnam@네이버','강감찬'
);
2) 해당 컬럼을 나열
INSERT INTO customers (address,name)
values('kangnam@구글','kangnam')
update customers
set address = 'elre519@네이버'
where name ='강감찬';
Delete from customers
where name = '강감찬';
Select address, name, customer_id
from customers
where customer_id = 1;DB 에서 Null은 중요하다. 의미는 "값이 없는 상태"를 의미.
따라서
Select from TABLE
where 조건 = null;
입력시 값은 아무것도 나오지 않는다.
Null 비교하려면
is Null, is Not Null 를 사용
coalesce : 첫 번째로 Null이 아닌 값을 반환.
Q. 왜 중요한가?
A. DATA를 기반으로 정확한 의사결정을 하기 위해
Where VS Having절
시점 : Group By이전 Group By이후
대상 : 개별 행 그룹
집계함수 X 집계함수 O
참고로 SQL 적용 순서
F -> W -> G -> H -> S -> O -> Limit
- 하나의 Talble에 모든 컬럼이 존재 할 시
ㄱ. Data 중복, ㄴ. 갱신 이상, ㄷ. 삽입 이상, ㄹ. 삭제이상 의 문제가 발생
-> 그래서 DB에서 "정규화" 라는 개념이 존재한다. 정규화는 간단히 말해서 DB를 분리? 했다 생각하자. 그렇기에 Join을 사용한다!.- Join은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것.
- Join 은 PK, FK를 주로 연결고리 사용.
ㄱ. 내부 조인 (Inner Join)
양쪽 table에 모두 공통된 Data(교집합)를 결과로 보여줌.
Select *
From orders
inner join users on users.user_id = orders.user_id;

if 기준 table 과 join하는 table에 data가 없다면?
A. Null 을 반환
Select e.name As employee_name, M.name As Manager_name
From employee e
Join employee M on e.manager_id = M.employee_id;
정의 : '여러 단위에 단계를 논리적으로 하나의 작업 단위로 만듬'
단일 행
ex) = , > , < 등을 -> Select , Where, Having
다중 행
ex) in, any, all 등을 -> Where, Having
단일 행
ex) (c1,c2) = ... 등을 Where, Having
다중 행
ex) (c1,c2) in ... 등을 Where, Having
다중 행
ex) From(...) as 등을 From 가상테이블
'메인 쿼리' , '서브 쿼리'가 서로 영향을 줌 -> '동적'
추가적으로 독립적으로 실행 X, 메인 쿼리 값을 참조
Select product_id, name, category, price
From product p1
Where price >=(Select Avg(price)
From product p2
where p2.category = p1.categoey);
Select 서브쿼리
select에 사용하는 서브쿼리는 스칼라만 가능
select name(
select dept_name
From department d
Where d.dept_id = e.dept_id) As dept_name
From employees e;
SELECT p.product, p.name, p.price
FROM product p
JOIN (
SELECT category, MAX(price) AS max_price
FROM product
GROUP BY category
) cmp
ON p.category = cmp.category
AND p.price = cmp.max_price;