Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바의 정석 기초편 ch4
- 자바의 정석 기초편 ch8
- 자바의 정석 기초편 ch6
- 자바의 정석 기초편 ch5
- 게시글 목록 api
- 자바의 정석 기초편 ch2
- 스프링 mvc2 - 로그인 처리
- 자바의 정석 기초편 ch13
- 자바의 정석 기초편 ch1
- 스프링 db2 - 데이터 접근 기술
- 2024 정보처리기사 수제비 실기
- 자바의 정석 기초편 ch3
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch9
- 자바의 정석 기초편 ch12
- 타임리프 - 기본기능
- 스프링 고급 - 스프링 aop
- 스프링 mvc1 - 스프링 mvc
- jpa 활용2 - api 개발 고급
- 자바의 정석 기초편 ch14
- 스프링 mvc2 - 검증
- jpa - 객체지향 쿼리 언어
- 코드로 시작하는 자바 첫걸음
- 스프링 mvc2 - 타임리프
- 스프링 입문(무료)
- 스프링 db1 - 스프링과 문제 해결
- 2024 정보처리기사 시나공 필기
- 자바의 정석 기초편 ch7
- 자바의 정석 기초편 ch11
- @Aspect
Archives
- Today
- Total
나구리의 개발공부기록
CHAPTER 02 - 응용 SQL, CHAPTER 03 - SQL 활용 및 최적화 본문
2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 7강 - SQL 응용
CHAPTER 02 - 응용 SQL, CHAPTER 03 - SQL 활용 및 최적화
소소한나구리 2024. 7. 1. 19:262024년도 수제비 실기책(6판) 내용 정리
CHAPTER 2 - 응용 SQL / 1. 집계성 SQL
1) 다중 행 연산자
- 개념 : 서브 쿼리의 결과가 여러 개의 튜플을 반환하는 다중 행 서브쿼리에서 사용되는 연산자
- 다중 행 비교 연산자는 단일 행 비교 연산자(<, >, =, <>)와 결합하여 사용할 수 있음
연산자 | 설명 |
IN | 리턴되는 값 중에서 조건에 해당하는 값이 있으면 참 |
ANY, SOME | 서브쿼리에 의해 리턴되는 각각의 값과 조건을 모두 비교하여 하나 이상을 만족하면 참 |
ALL | 값을 서브쿼리에 의해 리턴되는 모든 값과 조건 값을 모두 비교하여 모든 값을 만족해야만 참 |
EXISTS | 메인 쿼리의 비교 조건이 서브쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참 |
[1] IN 연산자
SELECT EMP_ID, EMP_NAME, DEPT_ID FROM EMP WHERE EMP_ID IN (SELECT MGR_ID FROM DEPT); |
SELECT 절에서 EMP_ID, EMP_NAME, DEPT_ID컬럼을 조회 FORM 절에서 EMP 테이블을 검색 WHERE 절에서 EMP_ID 컬럼에 대한 IN 조건을 다중행 서브쿼리로 정의 서브 쿼리에서 DEPT 테이블의 MGR_ID 값을 조회 결과적으로 부서별 관리자의 정보를 조회 |
[2] ANY 연산자
SELECT EMP_ID, EMP_NAME, SALARY, JOB_TITLE FROM EMP WHERE SALARY > ANY (SELECT SALARY FROM EMP WHERE JOB_TITLE = '과장'); |
SELECT 절에서 EMP_ID, EMP_NAME, SALARY, JOB_TITLE 컬럼을 조회 FROM 절에서 EMP 테이블을 검색 WHERE 절에서 SALARY컬럼에 대한 조건을 ANY 연산자를 활용한 Multi Row Subquery 로 정의 서브쿼리에서 JOB_TITLE 컬럼이 과장인 직원의 SALARY의 값을 조회 -> 서브쿼리의 값이 SALARY 와 비교했을 때 하나라도 맞으면 반환 직책이 과장이고 급여가 4000000 보다 많은 급여를 받는 직원들을 조회 |
[3] ALL 연산자
SELECT EMP_ID, EMP_NAME, SALARY, JOB_TITLE FROM EMP WHERE SALARY > ALL (SELECT SALARY FROM EMP WHERE JOB_TITLE = '과장'); |
SELECT, FROM절 위와 동일 WHERE 절에서 SALARY컬럼에 대한 조건을 ALL 연산자를 활용한 Multi Row Subquery 로 정의 서브쿼리에서 JOB_TITLE 컬림이 과장인 직원의 SALARY의 값을 조회 -> 서브쿼리의 값이 SALARY와 비교 했을 때 모두 맞아야 반환 직책이 과장인 직원보다 많은 급여를 받는 직원들을 조회 |
[4] EXISTS 연산자
SELECT EMP_ID, EMP_NAME, SALARY, JOB_TITLE FROM EMP A WHERE EXISTS (SELECT 1 FROM EMP B WHERE A.SALARY = B.SALARY AND EMP_NAME = '홍길동'); |
SELECT, FROM절 위와 동일, EMP를 A로 명명 WHERE 절에서 SALARY컬럼에 대한 조건을 EXISTS 연산자를 활용한 Multi Row Subquery 로 정의 서브쿼리에서 메인 쿼리와의 관계를 SALARY 컬럼의 등치조건으로 정의 -> 서브쿼리의 조건을 만족하면 1을 반환, EXISTS에서 많이 사용 -> 서브쿼리가 하나이상의 행을 반환하면 EXISTS조건이 TRUE가 됨 홍길동과 동일한 급여를 받는 직원들을 조회 |
2) 집계 함수
- 여러 행 또는 테이블 전체 행으로부터 하나의 결괏 값을 반환하는 함수
(1) 집계 함수 구문
SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
[WHERE 조건]
GROUP BY 컬럼1, 컬럼2, ...
[HAVING 조건식(집계함수 포함)]
- WHERE조건으로 지정된 데이터 집합으로부터 그룹화된 집합에 대한 조건 선택 시 에 HAVING을 사용하는 것
- GROUP BY 구문 뒤에는 테이블을 구분하는 컬럼을 기재하여 그룹화
- HAVING 구문은 그룹화된 집합에 대한 조건 지정 시 사용하고, 상수나 집약 함수, 집약 키를 사용할 수 있음
[1] GROUP BY 구문
- SQL에서는 WHERE 구문을 활용하여 조건별 대상 ROW를 선택함
- 복수 ROW 대상의 데이터 분석 시 그룹핑 대상이 되는 부분을 선별할 필요가 있을 때 GROUP BY를 사용하며 아래와 같은 특성을 가짐
NULL 값을 가지는 ROW는 제외한 후 산출 |
SELECT에서 사용하는 것과 같은 ALIAS 사용이 불가함 |
WHERE 구문 안에 포함되지 않음 |
WHERE 구문은 GROUP BY 보다 먼저 실행되고, 대상이 되는 단일 행을 사전에 선별하는 역할을 함 |
- GROUP BY 구문은 실제 구체적 데이터 분석값을 보고자 하는 컬럼 단위를 선정할 때 사용되는 기준이 되며, 이 부분의 조정을 통해 사용자가 원하는 분석 데이터를 볼 수 있게 해줌
[2] HAVING 구문 - GROUP BY 및 집계 함수에 대한 WHERE 구문이라고 할 수 있음
- WHERE 구문 내에는 사용할 수 없는 집계 함수의 구문을 적용하여 복수 행의 계산 결과를 조건별로 적용하는데 사용 됨
- 일반적으로 GROUP BY 뒤에 기재하고 GROUP BY 구문의 기준 항목이나 소그룹 집계 함수를 활용한 조건을 적용하는데 사용
(2) 집계 함수 종류
- 집계 특성상 숫자 유형의 계산에 사용되는 것이 대다수이나 MAX/MIN 또는 COUNT와 같이 문자열 유형의 최대/최소나 건수 계산 등에도 사용됨
집계 함수 | 내용 |
COUNT | 복수 행의 줄 수를 반환하는 함수 |
SUM | 복수 행의 해당 컬럼 간의 합계를 계산하는 함수 |
AVG | 복수 행의 해당 컬럼 간의 평균을 계산하는 함수 |
MAX | 복수 행의 해당 컬럼 중 최댓값을 계산하는 함수 |
MIN | 복수 행의 해당 컬럼 중 최솟값을 계산하는 함수 |
STDDEV | 복수 행의 해당 컬럼 간의 표준편차를 계산하는 함수 |
VARIANCE | 복수 행의 해당 컬럼 간의 분산을 계산하는 함수 |
[1] 집계 함수 활용 예시
쿼리 | 설명 |
SELECT COUNT(*) FROM 학생 WHERE 국어 >= 80; |
국어 점수가 80점 이상인 학생들(국어 >= 80)의 숫자를 알려줌(2명) |
SELECT SUM(국어), AVG(영어) FROM 학생; |
국어 점수의 합(300점), 영어 점수의 평균 값(85점)을 알려줌 |
SELECT MAX(국어), MIN(국어) FROM 학생; |
국어 점수 최고점(100점)과 최저점(50점)을 알려줌 |
SELECT STDDEV(국어), VARIANCE(국어) FROM 학생; |
국어 점수의 표준편차(18.03), 분산(325)을 알려줌 |
CHAPTER 3 - SQL 활용 및 최적화 / 1. 절차형 SQL
1) 절차형 SQL (Procesural SQL) 개념
- 일반적인 개발 언어처럼 SQL 언어에서도 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어
2) 절차형 SQL 종류
종류 | 설명 |
프로시저(Procedure) | 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합 |
사용자 정의 함수 (User-Defined Function) |
일련의 SQL처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL |
트리거 (Trigger) | 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL |
CHAPTER 3 - SQL 활용 및 최적화 / 2. SQL 최적화
1) 튜닝(쿼리 성능 개선)의 개념
- 데이터베이스에서 프로시저에 있는 SQL 실행 계획을 분석, 수정을 통해 최소의 시간으로 원하는 결과를 얻도록 프로시저를 수정하는 작업
- SQL 성능 개선을 통해 데이터 조작 프로시저의 성능 개선이 가능함
2) 옵티마이저(Optimizer)
- SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심엔진
- 옵티마이저가 생성한 SQL처리경로를 실행계획(Execution Plan)이라고 부름
- 옵티마이저의 유형으로 RBO(Rule Based Optimizer)와 CBO(Cost Based Optimizer)가 있음
항목 | 규칙기반 옵티마이저(RBO) | 비용기반 옵티마이저(CBO) |
개념 | 통계 정보가 없는 상태에서 사전 등록된 규칙에 따라 질의 실행 계획을 선택하는 옵티마이저 | 통계 정보로부터 모든 접근 경로를 고려한 질의실행 계획을 선택하는 옵티마이저 |
핵심 | 규칙(우선순위) 기반 | 비용(수행 시간) 기반 |
평가기준 | 인덱스 구조, 연산자, 조건절 형태 등 | 레코드 개수, 블록 개수, 평균 행 길이, 컬럼 값의 수, 컬럼 값의 분포, 인덱스 높이, 클러스터링 팩터 등 |
장점 | 사용자가 원하는 처리경로로 유도하기가 쉬움 | 옵티마이저의 이해도가 낮아도 성능보장 가능(기본 설정) |
'2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비) > 실기 7강 - SQL 응용' 카테고리의 다른 글
Chapter 04 - 단원종합문제 (0) | 2024.07.02 |
---|---|
CHAPTER 02 - 응용 SQL, CHAPTER 03 - SQL 활용 및 최적화 (기출문제, 예상문제) (0) | 2024.07.01 |
CHAPTER 01 - 데이터베이스(예상문제) (0) | 2024.07.01 |
CHAPTER 01 - 데이터베이스(기출문제) (1) | 2024.06.30 |
CHAPTER 01 - 데이터베이스 기본(2) (1) | 2024.06.30 |