인사말

안녕하세요!

벌써 SQL 걷기반의 마지막 퀘스트를 푸는 날이 왔네요

시원하면서도 섭섭합니다!

더 공부하고 싶고 더 알아가고 싶은데 걷기반 퀘스트는 끝이네요

본 캠프 가서 더 배우면 되겠죠! 😊


9) 💪🏻 아프면 안됩니다! 항상 건강 챙기세요!

데이터 베이스가 될 파일 내용입니다.
9) 아프면 안됩니다! 항상 건강 챙기세요!_20241120배민경.sql
0.00MB

 

문제 1. 테이블에서 각 성별(gender)에 따른 환자 수를 계산하는 쿼리를 작성해주세요!

select gender, count(id) as count_patients
from patients
group by gender;

 

문제 2. 테이블에서 현재 나이가 40세 이상인 환자들의 수를 계산하는 쿼리를 작성해주세요!

select count(*) as count_patients
from patients
where timestampdiff(year, birth_date, curdate()) >= 40;

여기서 새롭게 알게 된 게

curdate() current_date()같은 거라고 하더라구요

이렇게도 쓰는구나를 알 게 되었습니다!

 

문제 3. 테이블에서 마지막 방문 날짜(last_visit_date)가 1년 이상 된 환자들을 선택하는 쿼리를 작성해주세요!

select count(*) as count_patients
from patients
where timestampdiff(year, last_visit_date, curdate()) >= 1;

이제는 날짜를 계산할 때 timestampdiff()를 쓴다는 게 바로 떠올라서

기분이 굉장히 좋았습니다. 😉

'제대로 이해를 했구나!' 싶더라구요 ㅎㅎ

 

문제 4. 테이블에서 생년월일이 1980년대인 환자들의 수를 계산하는 쿼리를 작성해주세요!

select count(*) as count_patients
from patients
where birth_date like "198%";

like 활용할 수 있다는 게 좋았던 문제였습니다

다른 팀원분께서는 이렇게 표현하셨더라구요

SELECT COUNT(*) AS 환자수
FROM patients
WHERE birth_date BETWEEN '1980-01-01' AND '1989-12-31';

같은 문제더라도 다른 방식으로 코드를 짜서 결과값을 낼 수 있다는 게

재밌다고 느껴진 대화였습니다 ㅎㅎㅎ


10) 👆🏻 이젠 테이블이 2개입니다.

데이터 베이스가 될 파일 내용입니다.
10) 이젠 테이블이 2개입니다_20241120배민경.sql
0.00MB

 

문제 1. 현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!

select count(name)
from department;

 

문제 2. 모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!

select * from employee as e
left join department as d
on e.department_id = d.id;

새로운 개념이 나와서 몇 시간을 고민했는지 모르겠더라구요

"Join"이라는 걸 처음 접하게 되었습니다!

테이블이 두 개지만 함께 데이터를 불러오고 싶을 때, "Join"를 쓴다고 하더라구요

"Join"도 종류가 다양했습니다.

그중에서 자주 쓰는 게 "Left join"라서 정리를 해보았습니다.

 

**Left Join**은 두 테이블을 결합할 때,

왼쪽 테이블의 모든 행을 유지하고,

오른쪽 테이블의 일치하는 행을 포함하는 방식으로

데이터를 가져온다는 것을 의미합니다.

따라서,

왼쪽 테이블에 있는 모든 행이 항상 결과에 포함되는 것이죠

오른쪽 테이블에 일치하는 데이터가 없는 경우는 NULL 값으로 채워진다고 합니다!

출처 : Chat GPT

예)

select * from employee as e
left join department as d
on e.department_id = d.id;

"From" 뒤에 오는 파일이 기준이 되는 테이블이 되는 거죠

"left join" 뒤에 오는 파일이 "From" 뒤에 오는 테이블과 일치하는 행을 데리고 오는 거구요

이걸 이해하는데 2시간이 걸렸습니다. 🤔

이해를 하지 못하니까 시작을 못하겠더라구요

그래서 오래 걸렸던 거 같아요

또한

처음 배울 때, 확실히 잡고 가는 게 나중에도 활용성이 높다고 생각을 해서

머리 쥐어뜯으며 공부했습니다 😂

 

어쨌든 해냈다는 게 중요한 거죠 😋

 

문제 3. '기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!

select e.name, d.name
from employee e
join department d
on e.department_id = d.id
where department_id = 103;

"기술팀"의 id가 103이라서 저는 103으로 표시하여 원하는 결과값을 만들어냈습니다!

다른 팀원분들은 '기술팀'으로 서술하셨더라구요!

문자로도 되고, 숫자로도 표시가 된다는 게 재밌었습니다 😋

그리고

"Join"을 쓸 때 "On"을 이용해서 조건을 줄 수 있어요!

기준이 되는 employee 파일과, 포함이 되는 department 파일의 공통되는 행의 내용이

Id와 department_id였기 때문에 "on" 뒤에는 "e.department_id = d.id"로 적어주시면

공통되는 department 값이 불러와집니다!

이때 "e.", "d."는 employee(=파일명)의 "e", department(=파일명)의 "d"입니다!

 

문제 4. 부서별로 직원 수를 계산하는 쿼리를 작성해주세요!

select d.name, d.id, count(e.department_id) as count_departments
from department d
join employee e
on d.id = e.department_id
group by d.id;

이번에는 알고자 하는 주요 내용이 "부서별" 직원 수이기 때문에

기준이 되는 파일을 "department"로 했습니다!!

그리고, count()를 쓸 때는 group by와 함께 쓰는 것도 잊지 말아주세용!

 

문제 5. 직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!

select d.name
from department d
join employee e
on d.id = e.department_id
where e.department_id is null;

직원이 없는 부서가 없었기 때문에 결과값은 0이 나왔습니다.

이때 "Null"을 사용할 때 "="을 쓰면 원하는 값이 나오는 게 아니라 그냥 Null로 나오는 거더라구요

그래서 "Null"을 쓰실 때는 "Is"로 써주시길 바랍니다!

저는 여기서 "="을 썼죠!

이렇게 하면 안된답니다 😋

 

문제 6. '마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!

select e.name
from employee e
join department d
on d.id = e.department_id
where d.id = 102;

 


마무리

이렇게 오늘도 SQL 공부가 마무리 되었습니다!

오늘의 에러 사항은 "Join"을 이해하는 데에 있었습니다!

자주 사용되는 코드라고 하니까, 공부를 더 해봐야겠어요!

 

오늘도 새롭게 배우고, 깨닫게 되니까 도파민 뿜뿜해서 좋았습니다 ㅎㅎ

내일도 화이팅! 

이제 다음주 월요일(11/25)부터는 본 캠프가 시작되기 때문에

12시간 공부하게 될 예정입니다!

지금 것보단 훨씬 배운 내용이 많아질 걸 생각하니까, 얼른 공부하고 싶어지네요 😋

오늘 하루도 수고 많으셨습니다!

 

감사합니다!

 

<새롭게 배운 것들>

1. join ~ on ~ : 다른 테이블에서 데이터를 찾아올 때와 조건

2. Null을 활용하게 될 땐 이퀄(=)이 아닌 "Is"로 쓸 것

+ Recent posts