CREATE TABLE hr.hr_cate
(
EmployeeNumber int(11),
Attrition varbinary(50),
BusinessTravel varbinary(50),
Department varbinary(50),
EducationField varbinary(50),
Gender varbinary(50),
JobRole varbinary(50),
MaritalStatus varbinary(50),
OverTime varbinary(50)
);
-- varbinary는 대/소문자 구분을 함
INSERT INTO hr.hr_cate (
SELECT EmployeeNumber, Attrition, BusinessTravel , Department , EducationField , Gender ,
JobRole , MaritalStatus , OverTime
FROM hr.hr_employee_attrition
);



어떤 TEXT를 입력할지 고정된 게 아니라면, 대부분 VARCHAR 사용함
MySQL에서 대소문자 구분 설정값 확인하는 법
(대소문자 구분 여부를 직접 설정해줄 수도 있음)

데이터 타입을 VARBINARY로 설정하면, OS와 관계 없이 대문자와 소문자를 구분해줌
엔티티 관계도 창에 연결하고픈 테이블을 드래그해서 끌어다 놓은 후,
아래처럼 Key로 쓸 필드를 다른 테이블에 드래그하고 OK 누르기

(Cartessian join 또는 Cross join 이란?)
모든 필드를 활용해서 조인하기 때문에, join key가 따로 필요 없음. 연산량이 많음.

두 테이블 간 join key로 쓸 컬럼명이 완전히 일치하는 경우, using을 쓸 수 있음

단, 가독성을 위해 주로 join + on을 사용한다고 함.
SELECT *
FROM hr.hr_cate hc
INNER JOIN hr.hr_num hn
ON hc.EmployeeNumber = hn.EmployeeNumber
SELECT *
FROM hr.hr_cate hc
LEFT JOIN hr.hr_num hn
USING (EmployeeNumber);
WHERE이랑 다르게, HAVING은 '집계값'에 조건을 걸 때 사용함
예를 들어,

위와 같은 요청이 있다고 가정할 때,
그룹군별 인원수는 (groupby한 것에) count를 해서 구할 수 있음.
이 count는 집계값으로, where이 아니라 having으로 조건을 걸어야 함.
SELECT Department , EducationField , count(*) AS cnt
FROM hr.hr_cate hc
LEFT JOIN hr.hr_num hn
ON hc.EmployeeNumber =hn.EmployeeNumber
GROUP BY 1,2
HAVING cnt <= 30
order by cnt DESC;
-- *모든 조회를 마친 후* 정렬을 하는 것이므로, order by는 마지막에 들어가야 한다.

🔵 흥미로웠던 점:
select부터 order by까지 정해진 순서에 따라 작성해야된다는 것을 알게 된 후로 코드의 실행 순서가 정해져있구나, 생각했는데 위처럼 명확한 순서를 알게 되어 좋았다.
🔵 다음 학습 계획:
WINDOW Function의 집계함수, Lead & Lag 등에 대해 배운 후, Power BI 툴을 실습할 예정입니다.