2024-01-09 (22일차) - JDBC_AM 문제 해결, mysql

민짱·2024년 1월 9일

📅2024. 01. 09 22일차


🎬JDBC_AM

🔐문제 발생

  • 없는 게시물인데 수정이 된다?? 이 문제점은 삭제 상세보기에서도 발생!!

🔑 문제 해결

  • 없는 게시글이면 articleMap이 가져올 수 있는 게 없다.
  • if문으로 비어있으면 글이 없다고 나오게 만들기!!
  • 없는 글 처리 ==> 글 하나를 통째로 가져와서 Map에 담아 그리고 그 Map이 비어있는지 아닌지 확인.
💡Tip error 발생시 f6 눌러서 error 보기.
if (articleMap.isEmpty()) {0
	System.out.println(id + "번 글은 없습니다.");
    return 0;
}

📖mysql 오늘의 개념

join?

  • 조인(Join)은 SELECT와 더불어 가장 많이 사용하는 옵션 중 하나이고, 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 만들어 내는 것 이다. 즉, 서로 다른 테이블에서 데이터를 가져올 때 사용하는 것이 조인(Join)이다.

📋 sql 문제 풀이

가장 큰 사원 번호 출력
🔑내 풀이

SELECT id AS '가장 큰 사원 번호'
FROM emp
ORDER BY id DESC LIMIT 1;

🔑슨생님 풀이

SELECT MAX(id)
FROM emp
  • 그냥 MAX 함수 실행시키면 된다.

부서별, 1년 고정 지출(인건비)
🔑내 풀이

SELECT SUM(salary) AS '홍보부서, 1년 고정 지출'
FROM emp
WHERE deptName = '홍보';
SELECT SUM(salary) AS '기획부서, 1년 고정 지출'
FROM emp
WHERE deptName = '기획';

🔑슨생님 풀이

SELECT deptId, SUM(salary)
FROM emp
GROUP BY deptId;
  • deptName이 아닌 deptId가 맞음.
  • 부서이름을 바꾸면 이곳저곳 다 손봐야한다. 부서이름대신 부서id로 식별하자!!
  • deptId로 그룹을 만들고 그룹별 salary를 SUM함수로 나타낸다.

쇼핑물 db 연습 문제
🔑 (table join x ver.)

# 1. 손흥민의 주문 개수는? ???
SELECT COUNT(*) 
FROM t_shopping
WHERE userName = '손흥민';

# 2. 손흥민이 산 상품은? ???
SELECT DISTINCT pname
FROM t_shopping
WHERE userName = '손흥민';

# 3. 스커트를 산 사람은? ???
SELECT DISTINCT userName
FROM t_shopping
WHERE pname = '스커트';

# 4. 가장 많이 주문한 사람의 아이디와 이름, 주문개수는? ???
SELECT userId, userName, COUNT(userId)
FROM t_shopping
GROUP BY userId
 
LIMIT 1;

# 5. 소지섭이 사용한 총 금액은? ???
SELECT SUM(price)
FROM t_shopping
WHERE userName = '소지섭';

🔑 (table join o ver.)

# 1. 손흥민의 주문 개수는? ???
SELECT u.userName, COUNT(o.userNo)
FROM t_order AS o
INNER JOIN t_user AS u
ON o.userNo = u.id
WHERE u.userName = '손흥민';

# 2. 손흥민이 산 상품과 각 상품별 개 수는???
SELECT p.pname, COUNT(*) 
FROM t_order AS o
INNER JOIN t_user AS u
ON o.userNo = u.id
INNER JOIN t_product AS p
ON o.productNo = p.id
WHERE u.userName = '손흥민'
GROUP BY p.id;

# 3. 스커트를 산 사람은? ???
SELECT DISTINCT u.userName
FROM t_user AS u
INNER JOIN t_order AS o
ON o.userNo = u.id
INNER JOIN t_product AS p
ON o.productNo = p.id
WHERE p.pname = '스커트';

# 4. 가장 많이 주문한 사람의 아이디와 이름, 주문개수는? ???
SELECT u.userId, u.userName, COUNT(*)
FROM t_order AS o
INNER JOIN t_user AS u
ON o.userNo = u.id
GROUP BY u.id
ORDER BY COUNT(*) DESC
LIMIT 1;

# 5. 소지섭이 사용한 총 금액은? ???
SELECT u.userName, SUM(p.price)
FROM t_product AS p
INNER JOIN t_order AS o
ON o.productNo = p.id
INNER JOIN t_user AS u
ON o.userNo = u.id
WHERE u.userName = '소지섭';

상황에 맞는 SQL을 작성해주세요, SUM, MAX, MIN, COUNT 문제
🔑 (table join x ver.)

부서별, 부서명, 사원리스트, 평균연봉, 최고연봉, 최소연봉, 사원수 나오게~~

SELECT E.deptId AS 부서번호,
GROUP_CONCAT(E.name) AS 사원리스트,
TRUNCATE(AVG(E.salary), 0) AS 평균연봉,
MAX(E.salary) AS 최고연봉,
MIN(E.salary) AS 최소연봉,
COUNT(*) AS 사원수
FROM emp AS E
GROUP BY E.deptId;

🔑 (table join o ver.)

SELECT D.name AS 부서,
GROUP_CONCAT(E.name) AS 사원리스트,
TRUNCATE(AVG(E.salary), 0) AS 평균연봉,
MAX(E.salary) AS 최고연봉,
MIN(E.salary) AS 최소연봉,
COUNT(*) AS 사원수
FROM emp AS E
INNER JOIN dept AS D
ON E.deptId = D.id
GROUP BY E.deptId;

🔔 TODO

  • INNER JOIN 관련 문제 다시
  • 사원, 부서, 쇼핑몰 JOIN
  • w3schools -> SQL 활용

0개의 댓글