티스토리 뷰
※ SQL 실행 순서 ※
구문 | 순서 | 필수여부 |
SELECT | 5 | 필수 |
FROM | 1 | 필수 |
WHERE | 2 | 선택 |
GROUP BY | 3 | 선택 |
HAVING | 4 | 선택 |
ORDER BY | 6 | 선택 |
1. FROM 절에서 테이블의 목록을 가져옴
2. WHERE 절에서 검색 조건에 불일치 하는 행 제외
3. GROUP BY 절에서 명시된 행의 값을 그룹화
4. HAVING 절이 GROUP BY 절의 결과 행 중 검색 조건에 불일치 하는 행 제외
5. SELECT 절에서 명시된 열을 정리
6. ORDER BY 절에서 열을 기준으로 출력할 대상을 정렬 후 출력
다중행 함수
SUM, COUNT, MAX·MIN·AVG 등등
여러 행을 바탕으로 하나의 결과 반환
SELECT는 열의 행을 출력하기 때문에 주의.
여러 행을 바탕으로 하나의 결과를 반환하는 것과 데이터 수(?)가 안 맞음.
(1) SUM 함수는 NULL 데이터 제외
--추가 수당 합계 구하기
SELECT SUM(COMM)
FROM EMP;
(2) COUNT : 데이터 개수
--COUNT(*) : NULL값 포함 // COUNT(컬럼명) : NULL값 제외한 데이터 개수
--EMP 테이블 데이터 개수 출력
SELECT COUNT(*)
FROM EMP;
--부서 번호 30번인 직원 수 구하기
SELECT COUNT(*)
FROM EMP
WHERE DEPTNO = 30;
--COUNT 함수 사용하여 추가수당(COMM) 열 개수 출력
SELECT COUNT(COMM)
FROM EMP;
(3) 최대값, 최소값, 평균값
--MAX
--부서 번호가 10번인 사원들 중 최대 급여 출력
SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = 10;
SELECT SAL
FROM EMP
WHERE DEPTNO = 10
ORDER BY SAL DESC;
--부서 번호가 20번인 사원들의 입사일 중 제일 최근 입사일 출력
SELECT MAX(HIREDATE)
FROM EMP
WHERE DEPTNO = 20;
--MIN
--부서번호가 10번인 사원들의 최소 급여 출력
SELECT MIN(SAL)
FROM EMP
WHERE DEPTNO =10;
--검증
SELECT SAL
FROM EMP
WHERE DEPTNO = 10
ORDER BY SAL DESC;
--부서 번호가 20인 사원의 입사일 중 제일 오래된 입사일 출력
SELECT MIN(HIREDATE)
FROM EMP
WHERE DEPTNO = 20;
--AVG
--부서 번호가 30인 사람들의 평균 급여
SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = 30;
(4) GROUP BY
여러 데이터에서 의미 있는 하나의 결과를 특정 열값별로 묶어서 출력.
(*단일그룹함수가 아니라고 오류 떴을 때, SELECT절과 GROUPY BY절의 열이 똑같이 나열됐는지 확인)
--GROUP BY
SELECT 조회할 열 이름 나열
FROM 조회할 테이블 이름
WHERE 조회할 행을 선별하는 조건식
GROUP BY 그룹화할 열 지정(여러 개 가능)
ORDER BY 정렬하려는 열 지정
(예제)
-부서번호별 급여 평균 출력 : UNION ALL
SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = 10
UNION ALL
SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = 20
UNION ALL
SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = 30;
-부서번호별 급여 평균 출력 : GROUP BY
SELECT DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
-GROUP BY 주의사항
GROUP BY절에 명시된 열 외의 것을 SELECT절에 명시할 수 없음. 에러 뜸.
SELECT는 전체를 출력하는데 GROUP BY는 하나의 결과로 묶어서 출력하기 때문에 데이터 수(?)가 안 맞음
--GROUP BY절에 없는 열을 SELECT절에 포함했을 경우
SELECT ENAME, DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
--GROUP BY절에 명시된 열 외의 것을 SELECT절에 명시할 수 없음. 에러 뜸.
--SELECT절에 추가한 것을 GROUP BY절에도 추가해준다. 혹은 함께 빼거나.
SELECT ENAME, DEPTNO, AVG(SAL)
FROM EMP
GROUP BY ENAME, DEPTNO;
(5) HAVING
그룹화된 대상을 출력에서 제한
SELECT 조회할 열 이름 나열
FROM 조회할 테이블 이름
WHERE 조회할 행을 선별하는 조건식
GROUP BY 그룹화할 열 지정(여러 개 가능)
HAVING 출력 그룹을 제한하는 조건식
ORDER BY 정렬하려는 열 지정
-예제)
--GROUP BY절, HAVING절 사용하여 출력
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
-사용시 주의사항
WHERE절과 GROUP BY절의 차이점!!
WHERE은 조회할 행을 선별하는 조건식, HAVING은 그룹화된 대상 중에서 출력의 제한을 거는 것.
SELECT DEPTNO, JOB, AVG(SAL)
FROM EMP
WHERE SAL <= 3000
GROUP BY DEPTNO, JOB
HAVING AVG(SAL) >= 2000
ORDER BY DEPTNO, JOB;
--WHERE절 조건인 연봉 3000이하 조건에서 평균값 구하고
--그룹화된 값 중에서 HAVING 조건으로 평균값이 2000이상인 것 출력.
'수업 > └Oracle' 카테고리의 다른 글
[CH10]데이터 조작(DML) : 데이터 추가(INSERT), 수정(UPDATE), 삭제(DELETE) (0) | 2022.01.17 |
---|---|
[CH_08] 조인(JOIN) (0) | 2022.01.14 |
[함수]_문자 (0) | 2022.01.07 |
[CH05]WHERE, 연산자 (0) | 2022.01.07 |
[CH04]SELECT, DISTINCT, ANNSAL, ORDER BY (0) | 2022.01.07 |
- Total
- Today
- Yesterday
- html
- html layout
- 외부구성요소
- input type 종류
- initialized
- scanner
- BAEKJOON
- JavaScript
- CascadingStyleSheet
- css
- ScriptTag
- improt
- typeof
- caption-side
- selcetor
- border-spacing
- A%B
- text formatting
- Java
- 미디어 태그
- html atrribute
- html a tag
- html input type
- empty-cell
- 입력양식
- 기본선택자
- html base tag
- 변수
- 스크립태그
- html pre
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |