목차
![[SQL] Oracle SELECT query 실행 순서 [SQL] Oracle SELECT query 실행 순서](https://blog.kakaocdn.net/dn/eJKno9/btrSeha3McX/rls9qMKDf7k7wuqWtEHYkk/img.jpg)
SQL SELECT 쿼리 실행 순서😀
SELECT 쿼리에서 실행 순서는 아래와 같다.
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀](https://blog.kakaocdn.net/dn/Y0FhU/btrSjnIjYFI/V389oFW8OfkPZnsskkLcdk/img.png)
부끄럽지만 처음엔 저런 순서가 있는 지 몰랐고 최근에 알았다.
아무것도 모르는 초보 시절엔 그냥 썼다고 치면 시간이 흐르면서는 점점 이해하면서 쓰려고 한다.
저 순서를 반드시 기억하고 쿼리를 작성해야 하며 이에 따른 퍼포먼스의 차이가 크다.
예시 SELECT SQL😄
SELECT
JOB_ID
,AVG(SALARY) SAL_AVG
FROM
EMPLOYEES2 e
WHERE
SALARY > 13000
GROUP BY
JOB_ID
HAVING
COUNT(*) > 1
ORDER BY SAL_AVG DESC
;
위 간단한 쿼리문에서도 내부적으로는 6단계를 거친다.
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - 예시 SELECT SQL😄 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - 예시 SELECT SQL😄](https://blog.kakaocdn.net/dn/bDKXeI/btrSasq4pn8/fpOAmLg0kvkF8LNkXifdtk/img.png)
저 실행 순서를 하나씩 뜯어 보겠다.😎
FROM절
쿼리의 첫번 째 실행순서인 FROM절에서 아래처럼 EMPLOYEES2 테이블의 전체 데이터를 가지고 온다.
-- EMPLOYEES2테이블의 전체 데이터 조회
FROM EMPLOYEES2
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - FROM절 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - FROM절](https://blog.kakaocdn.net/dn/Kzxux/btrSegXvxBP/7ZD855EMTOPoOs2GGT8RX0/img.png)
WHERE절
WHERE절에서는 전체 데이터에서 아래처럼 조건에 맞는 결과를 필터링한다.
-- 급여가 13000 이상인 데이터 필터링
WHERE SALARY > 13000
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - WHERE절 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - WHERE절](https://blog.kakaocdn.net/dn/9dHRW/btrShIFWxjo/XoG6O9k85JAlGh2Y4AL8Hk/img.png)
GROUP BY절
GROUP BY절에서는 WHERE절로 필터링된 데이터를 그룹핑하는 작업을 한다.
(GROUP BY한 컬럼으로 중복제거 후 그룹화함)
GROUP BY절 사용 시 그룹함수를 사용할 수 있음(count(), sum(), avg() 등)
-- JOB_ID를 기준으로 그룹핑
GROUP BY JOB_ID
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - GROUP BY절 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - GROUP BY절](https://blog.kakaocdn.net/dn/Y344P/btrScai9Udh/fuhvEKVaekobGK6kpjSWR1/img.png)
HAVING절
HAVING절은 GROUP BY한 데이터에 조건을 줄 때 사용됨
HAVING절에서는 집계함수를 조건으로 사용가능
WHERE절과는 다른용도로 사용됨(WHERE절은 FROM절 다음에 나온 데이터 필터링, 즉 GROUP BY 전에 필터링)
-- GROUP BY한 데이터가 1개 이상인 것만 조회
HAVING COUNT(*) > 1
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - HAVING절 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - HAVING절](https://blog.kakaocdn.net/dn/oNYsD/btrSjvGlmOr/3XCMwpcAm8d2RQVkGn1ZW1/img.png)
SELECT절
여러 조건들 필터링한 최종 데이터에서 출력할 데이터를 선택하는 절이 SELECT절이다.
-- 조건 처리 후 출력할 데이터 선택
SELECT JOB_ID, AVG(SALARY) SAL_AVG
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - SELECT절 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - SELECT절](https://blog.kakaocdn.net/dn/c6idTp/btrSa8eQx7S/1DRuIQoQUfKXhUDqF0YEnK/img.png)
ORDER BY 절🤩
마지막 어떤 데이터를 출력할지 정한 뒤 선택사항으로 row의 순서를 정렬해주는 절이 ORDER BY 절이다.
-- 평균값을 SAL_AVG로 별칭을 주고 그로 내림차순 정렬
ORDER BY SAL_AVG DESC
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - ORDER BY 절🤩 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - ORDER BY 절🤩](https://blog.kakaocdn.net/dn/byibs1/btrShHmI7EN/824jmfhwzfkJTp60jWqmoK/img.png)
참조 : 마이자봉 블로그, 2020.03.17, https://myjamong.tistory.com/172
[Oracle] SQL SELECT 쿼리 실행 순서 처리 과정 :: 마이자몽
SELECT 쿼리 실행 순서 SQL 쿼리문을 작성할때 사용되는 WHERE, GROUP BY, ORDER BY 절과 같은 구문을 실행하는데 순서가 존재합니다. 이 순서에 의해서 쿼리가 처리되고 어떻게 쿼리문을 작성하느냐에 따...
myjamong.tistory.com
![[SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - ORDER BY 절🤩 [SQL] Oracle SELECT query 실행 순서 - SQL SELECT 쿼리 실행 순서😀 - ORDER BY 절🤩](https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif)
'IT > DataBase' 카테고리의 다른 글
[Oracle] Oracle 중복데이터 제거(feat. delete from table + group by having) (0) | 2022.11.29 |
---|---|
[Oracle] system 계정 비밀번호 만료/비밀번호 변경(feat. ORA-00988) (0) | 2022.11.28 |
[PostGreSQL] 현재 실행중인 SQL 조회, 종료 (0) | 2022.11.28 |
[Oracle] oracle 쿼리 로그 보기 (0) | 2022.11.28 |
[PostGreSQL] 테이블/테이블 목록 조회 (0) | 2022.11.28 |
댓글