일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 패캠부트캠프
- Java
- pokeapi
- 프로그래머스코테
- 프로그래머스 JS 코테
- 국비지원취업
- FE
- JS
- 개발 프로젝트
- 프로그래머스
- 개발블로그
- 자바스크립트 코딩테스트
- 프론트엔드
- 패스트캠퍼스부트캠프
- 영상처리
- 프로젝트
- 자바스크립트
- js코테
- 깃
- 딥러닝
- 국비지원
- 개인프로젝트
- 부트캠프
- 미니 프로젝트
- 패캠
- 패스트캠퍼스
- 프론트엔드부트캠프
- 깃허브
- 프론트엔드개발자
- 코딩테스트
- Today
- Total
가쟤의 해변일기 🐳
풀스택과정 DB - Having | ROLLUP | JDBC 본문
2025 05 21
- Having절
- RollUP절
💡 2025 05 21
1. Having절
2. RollUP절
3. JDBC 4단계
예리한 분석을 위해서는 데이터 자체가 좋아야 하고, 남들이 생각해내지 못하는 feature를 집어낼 수 있어야 한다.
ex) 미국 레스토랑 데이터 - 성별, 식사 인원, 음식 총 비용, 흡연 여부 … → 팁 얼마 냈는지 예측
자기만의 주관, 분석이 필요하다. (의지하면 안 된다)
구획(구간)을 어떻게 설정하고 분석하는지도 중요
Having절
-- step 1.
SELECT deptno, AVG(sal) AvgSalary
FROM emp
WHERE avg(sal)>=2000
GROUP BY deptno;
-- 에러남. -> where절에서는 alias 사용 못 함, 그룹 함수 사용 못 함
-- step 2. 그룹핑 후 filter해야 함
SELECT deptno, AVG(sal) AvgSalary
FROM emp
GROUP BY deptno
HAVING avg(sal) >= 2000
ORDER BY 1;
GROUP한 후, 원하는 데이터만 display하고 싶을 때는
HAVING절을 사용해서 한 번 더 걸러줄 수 있다.
WHERE절은 GROUP 하기 전에 실행되는 반면에
HAVING절은 GROUP 한 후에 실행된다.
→ 그룹 함수는 WHERE절에서는 사용할 수 없고, HAVING절에서 사용된다 ❗
HAVING절은 GROUP BY절 뒤에 오는 것이 의미론적으로 더 맞다.
MySQL에서는 그룹 함수 중첩을 사용할 수 없다.
ROLLUP
그룹별 중간 합계나 총 합계를 위해서 사용한다.
확장된 GROUP BY다.
소계 사용 가능, 인수 순서를 잘 봐야 함.
JDBC
서버의 정보를 가지고 잇는 제품을 Driver라고 한다.
DAO 프로그램을 통해서 DB 서버에 연결하려면
사전에 반드시 이 드라이버가 프로그램 사이드 메모리에 로딩 되어져 있어야 한다.
프로젝트 > Build Path > Add Library > User Library > Add해서 라이브러리 이름 추가 > 다운 받은 경로 연결
- MySQL Driver를 해당 클래스 메모리에 로딩 ⭐⭐⭐
- DB 서버 접속 - 접속 성공하면 Connection 객체를 반환받고접속 성공하면 Connection 객체를 반환받고jdbc:mysql://127.0.0.1:3306/kosa?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8
- 이후 작업은 Connection을 통해서 모든 작업이 이뤄진다.
- 이후 작업은 Connection을 통해서 모든 작업이 이뤄진다.
- 쿼리문을 실행 executeQuery()
위의 3단계로 실행된다 !+드라이버 로딩도 static으로 먼저 실행되게 함public class JDBCProcessTest1 { public static void main(String[] args) { // 1. 드라이버 로딩 try { Class.forName("com.mysql.cj.jdbc.Driver"); // Driver.class 파일이 메모리에 로드된단 말 // 여기에 코드 실행 System.out.println("✅ Driver loading Success..."); // 2. 디비 서버 연결 String url = "jdbc:mysql://127.0.0.1:3306/kosa?serverTimezone=UTC&useUnicode=yes&characterEncoding=UTF-8"; try { Connection conn = DriverManager.getConnection(url, "root", "1234"); // 3. PreparedStatement 생성 PreparedStatement ps = conn.prepareStatement("DELETE * FROM custom WHERE id=3"); System.out.println("PreparedStatement Creating..."); } catch (SQLException e) { System.out.println("DB Connect Fail..."); } } catch (ClassNotFoundException e) { System.out.println("❌ Driver loading Fail..."); } } }
그 다음 단계 - 주소, 아이디, 비번은 따로 빼야 함!
#1 JDBC의 실행 순서와 구성요소를 알아보자..
executeUpdate() — INSERT/DELETE/UPDATE (DML)
한 번 더 돌리면 Error → 이미 있으니까 ..
파일로 분리 → properties 파일
Hashtable - properties(String key - String value)
이건 막 호출하고 불러와야해서 복잡함..
→ Interface로 분리 !
이건 유출되면 안 되는 정보니까 Interface로 따로 분리했다.
public class CustomDAO {
public CustomDAO() throws SQLException {
Connection conn = DriverManager.getConnection(ServerInfo.URL, ServerInfo.USER, ServerInfo.PASS);
System.out.println("서버 연결...");
String query = "INSERT INTO custom (id, name, address) VALUES(?, ?, ?)";
PreparedStatement ps = conn.prepareStatement(query);
ps.setInt(1, 5);
ps.setString(2, "엄혜경");
ps.setString(3, "제주 애월읍");
System.out.println(ps.executeUpdate() + "명 등록 성공 !!");
}
}
그러고 DAO 클래스 만들어서 여기서 로직 작성, SQLException은 던지기!
public class JDBCProcessTest3 {
public static void main(String[] args) {
try {
new CustomDAO();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
}
static {
try {
Class.forName(ServerInfo.DRIVER_NAME);
System.out.println("드라이버 로딩..");
} catch(ClassNotFoundException e) {
System.out.println(e.getMessage());
}
}
}
그러고 main에서 받아서 예외 처리해준다.
이게 완성인건 아니지만 DAO와 JDBC의 구조를 알기 위해서 이렇게 한 것 같다.
실제론 어떻게 사용하는지 내일 배우는데 궁금하다.!.!
'풀스택과정' 카테고리의 다른 글
풀스택과정 DB - 조인 | JDBC CRUD (1) | 2025.05.26 |
---|---|
풀스택과정 DB - JDBC 4단계 Process | Connection 자원 반납 (0) | 2025.05.22 |
풀스택과정 DB - LIKE | IN | 단일행함수 | GROUP (2) | 2025.05.20 |
풀스택과정 DB - SELECT 구문 | Alias | null값 치환 | LIMIT | LIKE (0) | 2025.05.19 |
풀스택과정 DB - DBMS | MySQL | 계정/테이블/데이터 넣기 | 기본 CRUD (0) | 2025.05.19 |