다음과 같은 직원(employees) 테이블과 부서(departments) 테이블이 있습니다.
employees 테이블
id
|
department_id
|
name
|
1
|
101
|
르탄이
|
2
|
102
|
배캠이
|
3
|
103
|
구구이
|
4
|
101
|
이션이
|
departments 테이블
id
|
name
|
101
|
인사팀
|
102
|
마케팅팀
|
103
|
기술팀
|
38.
현재 존재하고 있는 총 부서의 수를 구하는 쿼리를 작성해주세요!
> SELECT COUNT(*) FROM departments;
39.
모든 직원과 그들이 속한 부서의 이름을 나열하는 쿼리를 작성해주세요!
> SELECT e.name, d.name FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;
40.
'기술팀' 부서에 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
> SELECT e.name,d.name FROM employees AS e
JOIN departments AS d ON e.department_id = d.id
WHERE d.name = '기술팀';
41.
부서별로 직원 수를 계산하는 쿼리를 작성해주세요!
> SELECT d.name COUNT(*) FROM employees AS e
JOIN departments AS d ON e.department_id = d.id
GROUP BY d.id;
42.
직원이 없는 부서의 이름을 찾는 쿼리를 작성해주세요!
> SELECT d.name FROM departments d
LEFT JOIN employees e ON d.id = e.department_id
WHERE e.name IS NULL;
43.
'마케팅팀' 부서에만 속한 직원들의 이름을 나열하는 쿼리를 작성해주세요!
> SELECT e.name FROM employees e
JOIN departments d ON e.department_id = d.id
WHERE d.name = '마케팅팀';
-- JOIN 개념은 확실히 헷갈리는 것 같다
-- 일반적으로 JOIN만 적게 된다면 INNER JOIN이 기본값으로 적용된다.
-- 두 테이블을 연결하기 위해서 ON 절을 사용하여 연결 조건을 지정한다.
-- FK가 설정되어 있을 경우 FK와 JOIN하는 테이블의 ID를 연결하면 된다.
-- 절이 많아 질수록 쿼리가 복잡해지고 헷갈리는 경우가 많아서 다시 확인을 잘해야 함.
INNER JOIN | 두 테이블에서 일치하는 데이터만 반환 | 두 테이블에서 일치하는 행만 반환 |
LEFT JOIN | 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 데이터 반환 | 왼쪽 테이블의 모든 데이터와 오른쪽 테이블에서 일치하는 데이터 반환, 일치하지 않으면 NULL |
RIGHT JOIN | 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 데이터 반환 | 오른쪽 테이블의 모든 데이터와 왼쪽 테이블에서 일치하는 데이터 반환, 일치하지 않으면 NULL |
FULL JOIN | 두 테이블의 모든 행을 반환, 일치하지 않으면 NULL 반환 | 두 테이블에서 일치하는 행과 일치하지 않는 행 모두 반환, 일치하지 않으면 NULL |
CROSS JOIN | 두 테이블의 모든 가능한 조합 반환 | 두 테이블의 모든 가능한 행 조합 반환 |
'SQL' 카테고리의 다른 글
[SQL 기초 연습] 9. 아프면 안됩니다! 항상 건강 챙기세요! (0) | 2025.01.16 |
---|---|
[SQL 기초 연습] 8. LOL을 하다가 홧병이 나서 병원을 찾아왔습니다. (0) | 2025.01.16 |
[SQL 기초 연습] 7. 랭크게임 하다가 싸워서 피드백 남겼어요 (0) | 2025.01.16 |
[SQL 기초 연습] 6. 팀 프로젝트 열심히 했으니 다시 놀아볼까요?! - LOL 유저 테이블 (0) | 2025.01.15 |
[SQL 기초 연습] 5. 공부하다보니 팀 프로젝트 시간이 왔어요! (0) | 2025.01.15 |