편집 요약 없음 태그: 수동 되돌리기 |
|||
21번째 줄: | 21번째 줄: | ||
|| 정렬 명령어 (주로 속성값에 오름차순, 내림차순 속성을 지정) | || 정렬 명령어 (주로 속성값에 오름차순, 내림차순 속성을 지정) | ||
|} | |} | ||
==== 예제 1. 부서/사원 조회 ==== | |||
<source lang=sql> | |||
-- 부서별 평균 급여가 5000 이상인 부서 중 | |||
-- 2005년 이후 입사한 사원만 조회하여 | |||
-- 평균 급여가 높은 순으로 정렬 | |||
SELECT | |||
department_id AS 부서번호, | |||
COUNT(*) AS 사원수, | |||
ROUND(AVG(salary), 0) AS 평균급여, | |||
MAX(hire_date) AS 최근입사일 | |||
FROM | |||
employees | |||
WHERE | |||
hire_date > TO_DATE('2005-01-01', 'YYYY-MM-DD') | |||
GROUP BY | |||
department_id | |||
HAVING | |||
AVG(salary) >= 5000 | |||
ORDER BY | |||
평균급여 DESC; | |||
</source> | |||
==== 예제 2. 제품 판매 분석 ==== | |||
<source lang=sql> | |||
-- 2023년 분기별, 카테고리별 판매액 집계 | |||
-- 총 판매액이 100만원 이상인 그룹만 표시 | |||
-- 분기와 카테고리 순으로 정렬 | |||
SELECT | |||
TO_CHAR(sale_date, 'Q') AS 분기, | |||
product_category AS 카테고리, | |||
COUNT(*) AS 판매건수, | |||
SUM(sale_amount) AS 총판매액, | |||
AVG(sale_amount) AS 평균판매액 | |||
FROM | |||
sales | |||
WHERE | |||
sale_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') | |||
AND TO_DATE('2023-12-31', 'YYYY-MM-DD') | |||
GROUP BY | |||
TO_CHAR(sale_date, 'Q'), | |||
product_category | |||
HAVING | |||
SUM(sale_amount) >= 1000000 | |||
ORDER BY | |||
분기 ASC, | |||
총판매액 DESC; | |||
</source> | |||
==== 예제 3. 학생 성적 조회 ==== | |||
<source lang=sql> | |||
-- 각 학과별로 성적이 80점 이상인 학생들만 집계 | |||
-- 학과 평균이 85점 이상인 그룹만 선택 | |||
-- 평균 점수 순으로 정렬 | |||
SELECT | |||
department AS 학과, | |||
COUNT(*) AS 학생수, | |||
ROUND(AVG(score), 1) AS 평균점수, | |||
MAX(score) AS 최고점수, | |||
MIN(score) AS 최저점수 | |||
FROM | |||
students | |||
WHERE | |||
score >= 80 | |||
GROUP BY | |||
department | |||
HAVING | |||
AVG(score) >= 85 | |||
ORDER BY | |||
평균점수 DESC; | |||
</source> | |||
==== 예제 4. 고객 구매 패턴 조회(ANSI SQL)==== | |||
<source lang=sql> | |||
-- VIP 고객(연간 구매액 500만원 이상) 중 | |||
-- 2022년에 구매한 고객별 구매 통계 | |||
-- 총 구매액 순으로 정렬 | |||
SELECT | |||
c.customer_id AS 고객ID, | |||
c.customer_name AS 고객명, | |||
COUNT(o.order_id) AS 주문횟수, | |||
SUM(o.order_amount) AS 총구매액, | |||
MAX(o.order_date) AS 최근구매일 | |||
FROM | |||
customers c | |||
JOIN | |||
orders o ON c.customer_id = o.customer_id | |||
WHERE | |||
o.order_date BETWEEN TO_DATE('2022-01-01', 'YYYY-MM-DD') | |||
AND TO_DATE('2022-12-31', 'YYYY-MM-DD') | |||
GROUP BY | |||
c.customer_id, c.customer_name | |||
HAVING | |||
SUM(o.order_amount) >= 5000000 | |||
ORDER BY | |||
총구매액 DESC; | |||
</source> | |||
[[category:oracle]] | [[category:oracle]] | ||
[[category:database 용어]] | [[category:database 용어]] |
2025년 5월 18일 (일) 15:02 판
SELECT 기본 구문
명령어 | 설명 |
---|---|
SELECT | 테이블에 있는 속성을 지정하여 데이터를 조회하는 명령어 (주로 속성(컬럼)을 기술) |
FROM | 데이터가 있는 테이블이나 뷰를 지정하는 명령어 (주로 테이블, 뷰, 인라인뷰 등을 기술) |
WHERE | 데이터를 조회하는 조건을 지정하는 명령어 (주로 조건을 기술) |
GROUP BY | 특정 속성을 기준으로 그룹화하여 검색할 때 사용하는 명령어 (주로 SELECT 절에 사용된 속성을 그룹핑할 때 기술) |
HAVING | 그룹화된 속성에 조건을 지정하는 명령어 (주로 ~보다 크거나 작은 경우, 같은 경우를 지정) |
ORDER BY | 정렬 명령어 (주로 속성값에 오름차순, 내림차순 속성을 지정) |
예제 1. 부서/사원 조회
-- 부서별 평균 급여가 5000 이상인 부서 중 -- 2005년 이후 입사한 사원만 조회하여 -- 평균 급여가 높은 순으로 정렬 SELECT department_id AS 부서번호, COUNT(*) AS 사원수, ROUND(AVG(salary), 0) AS 평균급여, MAX(hire_date) AS 최근입사일 FROM employees WHERE hire_date > TO_DATE('2005-01-01', 'YYYY-MM-DD') GROUP BY department_id HAVING AVG(salary) >= 5000 ORDER BY 평균급여 DESC;
예제 2. 제품 판매 분석
-- 2023년 분기별, 카테고리별 판매액 집계 -- 총 판매액이 100만원 이상인 그룹만 표시 -- 분기와 카테고리 순으로 정렬 SELECT TO_CHAR(sale_date, 'Q') AS 분기, product_category AS 카테고리, COUNT(*) AS 판매건수, SUM(sale_amount) AS 총판매액, AVG(sale_amount) AS 평균판매액 FROM sales WHERE sale_date BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TO_DATE('2023-12-31', 'YYYY-MM-DD') GROUP BY TO_CHAR(sale_date, 'Q'), product_category HAVING SUM(sale_amount) >= 1000000 ORDER BY 분기 ASC, 총판매액 DESC;
예제 3. 학생 성적 조회
-- 각 학과별로 성적이 80점 이상인 학생들만 집계 -- 학과 평균이 85점 이상인 그룹만 선택 -- 평균 점수 순으로 정렬 SELECT department AS 학과, COUNT(*) AS 학생수, ROUND(AVG(score), 1) AS 평균점수, MAX(score) AS 최고점수, MIN(score) AS 최저점수 FROM students WHERE score >= 80 GROUP BY department HAVING AVG(score) >= 85 ORDER BY 평균점수 DESC;
예제 4. 고객 구매 패턴 조회(ANSI SQL)
-- VIP 고객(연간 구매액 500만원 이상) 중 -- 2022년에 구매한 고객별 구매 통계 -- 총 구매액 순으로 정렬 SELECT c.customer_id AS 고객ID, c.customer_name AS 고객명, COUNT(o.order_id) AS 주문횟수, SUM(o.order_amount) AS 총구매액, MAX(o.order_date) AS 최근구매일 FROM customers c JOIN orders o ON c.customer_id = o.customer_id WHERE o.order_date BETWEEN TO_DATE('2022-01-01', 'YYYY-MM-DD') AND TO_DATE('2022-12-31', 'YYYY-MM-DD') GROUP BY c.customer_id, c.customer_name HAVING SUM(o.order_amount) >= 5000000 ORDER BY 총구매액 DESC;