[SQL 분석] CH 4. HR 데이터를 통한 채용 기획하기 : DBeaver (Join 등)

이진호·2024년 11월 12일

새 테이블 생성 + 기존 테이블로부터 데이터 가져오기

CREATE & INSERT 따로

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 
);

CREATE & INSERT 동시에

변수형 : numeric

변수형 : string


어떤 TEXT를 입력할지 고정된 게 아니라면, 대부분 VARCHAR 사용함

대소문자 구분?

MySQL에서 대소문자 구분 설정값 확인하는 법
(대소문자 구분 여부를 직접 설정해줄 수도 있음)

데이터 타입을 VARBINARY로 설정하면, OS와 관계 없이 대문자와 소문자를 구분해줌


테이블 연결 (Key)

엔티티 관계도 창에 연결하고픈 테이블을 드래그해서 끌어다 놓은 후,

아래처럼 Key로 쓸 필드를 다른 테이블에 드래그하고 OK 누르기


Join

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

using

두 테이블 간 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);

HAVING

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는 마지막에 들어가야 한다.

코드 실행 순서

  1. FROM
  2. JOIN
  3. WHERE
  4. SELECT
  5. GROUP BY
  6. HAVING
  7. ORDER BY
    순으로 실행됨.
    즉, WHERE이 SELECT보다 먼저 실행되므로, SELECT에서 집계한 값을 WHERE에서 쓸 수 없는 것임.

🔵 흥미로웠던 점:
select부터 order by까지 정해진 순서에 따라 작성해야된다는 것을 알게 된 후로 코드의 실행 순서가 정해져있구나, 생각했는데 위처럼 명확한 순서를 알게 되어 좋았다.

🔵 다음 학습 계획:
WINDOW Function의 집계함수, Lead & Lag 등에 대해 배운 후, Power BI 툴을 실습할 예정입니다.

0개의 댓글