일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영상처리
- 국비지원취업
- 패스트캠퍼스부트캠프
- 프론트엔드
- 국비지원
- 프로그래머스
- 패캠부트캠프
- 개인프로젝트
- pokeapi
- 프론트엔드부트캠프
- 패캠
- 깃
- 깃허브
- FE
- 자바스크립트 코딩테스트
- 프로그래머스코테
- 프로젝트
- 부트캠프
- Java
- 미니 프로젝트
- 자바스크립트
- 패스트캠퍼스
- 프론트엔드개발자
- 개발블로그
- js코테
- 프로그래머스 JS 코테
- 개발 프로젝트
- 딥러닝
- 코딩테스트
- JS
- Today
- Total
가쟤의 해변일기 🐳
풀스택과정 DB - MySQL 서브 쿼리 | UseCase 다이어그램 본문
💡 2025 05 26 수업 이슈
1. Sub Query
- 단일행 서브쿼리
- 다중행 서브쿼리
- 서브쿼리에서 null값 다루기
2. 분석 설계 Flow
- UseCase 시나리오 작성
- SRS 명세서 (요구사항 정의서)
- UseCase Diagram
DB 프로젝트 끝나면 프론트기술 할 예정
html5, css, jquery, bootstrap 한다고 한다....
서브쿼리
- 서브쿼리(SubQuery)란 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다.
- 서브쿼리는 알려지지 않은 기준을 이용한 검색을 위해 사용한다.
- 일반적으로 서브쿼리가 먼저 실행되고, 그 결과를 사용하여 메인쿼리(Main query)에 대한 질의 조건을 완성한다.
서브쿼리의 반대 → 메인쿼리
(서브쿼리)Inner 쿼리의 반대 → Outer 쿼리
- 서브쿼리는 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문이다.
- 서브쿼리는 ?에 해당하는 부분을 먼저 검색하는데 사용한다.
- 서브쿼리가 먼저 실행되고 그 결과를 사용해서 메인 쿼리가 실행된다.
- 서브쿼리에서는 ORDER BY절이 의미가 없다.
- 서브쿼리의 종류로는 WHERE절/HAVING절/FROM절에 사용하는 서브쿼리가 있다.
JOIN과 함께 서브쿼리가 굉장히 많이 사용된다.
-- 2번의 질의를 DB에 함(DB Access를 2번 진행) --> 효율성, 성능 저하
SELECT sal FROM emp WHERE ename='ADAMS'; -- 1100
SELECT ename, sal FROM emp WHERE sal >= 1100;
?에 해당하는 것을 먼저 알아내야하기에 ( )로 ?에 해당하는 쿼리를 싸준다.
( ) 실행한 결과가 전체 쿼리에서 실행된다.
SELECT ename, sal
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename='ADAMS');
이렇게 바꿀 수 있다.
1 ROW 1 COULMN의 값을 스칼라값 혹은 스칼라 서브쿼리라고 한다.
서브쿼리 수행 결과로 스칼라 값이 나오면 단일행 연산자를 사용해야 한다.
-- 업무별 가장 적은 평균 급여를 검색
-- step 1.
-- 그룹 함수 중첩 ❌❌
SELECT job, avg(sal)
FROM emp
GROUP BY job
HAVING avg(sal) = (SELECT min(avg(sal)) FROM emp GROUP BY job;
-- step 2.
-- 아래처럼 하면 된다 ✅
SELECT job, min(AvgSal) -- 그룹함수 Alias 필요
FROM (SELECT job, avg(sal) AvgSal FROM emp GROUP BY job) e -- table Alias 필요
GROUP BY job;
-- step 3.
-- limit (서브쿼리 사용 안 함, 정렬 사용)
SELECT job, avg(sal) AvgSal
FROM emp
GROUP BY job
ORDER BY 2
LIMIT 1;
MySQL은 그룹 함수 중첩이 안 된다!
그래서 그룹 함수(avg(sal)) Alias와 Table Alias를 사용하면 된다.
-- SCOTT의 급여보다 더 많은 급여를 받는 사원을 검색
-- step 1.
SELECT ename, sal
FROM emp
WHERE sal > (SELECT sal FROM emp WHERE ename='SCOTT');
-- step 2.
SELECT ename, a.sal, job FROM emp a, (SELECT sal FROM emp WHERE ename='SCOTT') b
WHERE a.sal > b.sal;
Table Alias를 달아서 step 2처럼 사용할 수 있다.
-- 다중행 연산자와 함게 사용된 서브 쿼리
SELECT empno, ename
FROM emp
WHERE sal=(SELECT min(sal) FROM emp GROUP BY deptno); -- ERROR 이건 단일행이 아니기 때문
-- 다중행 연산 + 서브쿼리 (IN 사용)
SELECT empno, ename, sal
FROM emp
WHERE sal IN (SELECT min(sal) FROM emp GROUP BY deptno);
단일행 스칼라 서브쿼리 → 다중행 서브쿼리 - 연산자가 달라짐 !
연산자 의미
> ANY | 집합 중 최소값보다 크면 참 (1개라도 크면 참) |
< ANY | 집합 중 최대값보다 작으면 참 (1개라도 작으면 참) |
> ALL | 집합 중 모든 값보다 커야 참 (최대값보다 커야 참) |
< ALL | 집합 중 모든 값보다 작아야 참 (최소값보다 작아야 참) |
자바 + DB 프로젝트 설명
유스케이스 시나리오
요구사항 정의서 (SRS 명세서)
유스케이스 다이어그램⭐ 후 → 방사형 확장
DB Modeling | Class Diagram | (화면설계 _ 이번 플젝땐 X)
UseCase Diagram
구성 요소 : Actor / UseCase / System boundary, Relation
UseCase간의 관계 설정
- Include : 특정한 기능이 수행되기 전에 선행되어져야 하는 선행 조건 기능
- Extend : 일반적인 기능에서 세부적인 기능으로 확장된 기능
- Generalization : 주로 Actor에서 많이 사용한다.
Actor와 UseCase간의 관계
—> Association / Direct Association

사람 모양 : Actor
타원 : UseCase

관계들..

draw.io로 작업하다가 피그잼이 편해서 안 쓰기로 했다.

이런 식으로 해봤는데 잘했다고 해주셨다.
은근 세세한 부분까지 신경써서 가독성 좋게 직관적으로 해야 할 것 같다.

그리고 DB에 테이블을 생성해준다.

자바 프로젝트를 만들고 book 테이블의 정보를 담고 있는 VO 클래스를 생성한다.
DOMAIN(Record) --> VO --> DTO 지금은 똑같지만 JPA때 VO, DTO 완전히 다른 의미이다.
빠르게 기본 생성자 2개와 setter/getter, 그리고 toString까지 Source > generate …로 만들어준다.

만들었다^!^
꿀잼
'풀스택과정' 카테고리의 다른 글
풀스택과정 DB - 조인 | JDBC CRUD (1) | 2025.05.26 |
---|---|
풀스택과정 DB - JDBC 4단계 Process | Connection 자원 반납 (0) | 2025.05.22 |
풀스택과정 DB - Having | ROLLUP | JDBC (0) | 2025.05.21 |
풀스택과정 DB - LIKE | IN | 단일행함수 | GROUP (2) | 2025.05.20 |
풀스택과정 DB - SELECT 구문 | Alias | null값 치환 | LIMIT | LIKE (0) | 2025.05.19 |