메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
2번째 줄: 2번째 줄:
{{:SELECT 기본 구문 작성 순서}}
{{:SELECT 기본 구문 작성 순서}}


=== [[GROUP BY 절]] ===
{{:GROUP BY 절}}
 
=== [[WITH 절]] ===
=== [[WITH 절]] ===
=== [[SQL 조인]] ===
=== [[SQL 조인]] ===

2025년 5월 14일 (수) 00:57 판

데이터 베이스 기본 용어

영문 용어 한글 용어 설명
SQL 질의어 Structured Query Language,SQL은 데이터베이스에서 데이터를 관리하거나 조작하기 위해 설계된 표준 프로그래밍 언어
QUERY 쿼리 질의어,SQL 문장에서 데이터를 조회하는 명령어를 Query 라 함.
질의 > 학생들(STUDENTS) 에서 나이가 18보다 큰 학생의 이름과 ,나이를 조회 
SQL  > SELECT name, age FROM STUDENTS WHERE age > 18;
TABLE 테이블 데이터를 정리하고 표시하기 위한 행(row)과 열(column)로 구성된 구조, 엑셀에서 쉬트를 테이블과 유사하다고 생각하면 됨.
=================== 
| Name   | Age | City      |
=================== 
| Alice  | 24  | New York |
---------------------------------
| Bob    | 30  | Chicago   |
---------------------------------
  • 테이블 생성 예시
CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    city VARCHAR(100)
);
COLUMN 컬럼(열) 컬럼은 세로 줄, 열을 의미, 엑셀에서 세로줄과 유사
  • 데이터값을 조회 하기위한 타이틀
=================== 
| Name   | Age | City      |
===================
ROW 로우(행) 로우는 줄,행을 의미, 엑셀에서 가로줄과 유사 , 주로 1개의 줄을 레코드라고 한다.
  • 데이터의 값이 저장되어 있다.
| Alice  | 24  | New York |
---------------------------------
| Bob    | 30  | Chicago   |
INDEX 인덱스 데이터를 빠르게 검색하기 위해 사용하는 특별한 데이터 구조, 책에 있는 목차(INDEX) 와 유사
VIEW 데이터베이스에서는 가상 테이블을 의미, 테이블에 있는 일부 속성(컬럼)을 사용하고 할때 사용

현업에서 사용하는 업무 용어

모델링

  • 데이터베이스에서 사용하는 테이블과 컬럼을 설계 하는 업무
  • 주로 논리 모델은 모델링 단계를 의미하고 물리모델은 데이터베이스에 적용하는 단계를 의미함

Entity(엔터티)

  • 주로 논리모델링에서 사용하는 용어로 속성을 포함하고 있는 객체를 의미함.
  • 물리모델에서는 엔터티를 테이블이라 함.

ERD

  • Entity Relationship Diagram

엔터티의 관계를 다이어그램으로 나타낸 도표

DW(데이터웨어하우스)

  • 현업 업무는 실시간 업무를 처리 하는 기간계와 통계성 업무를 처리하는 정보계로 나누어짐
  • OLTP 업무는 기간계 , OLAP 업무는 정보계라 칭함

ASIS 시스템

  • 현재 개발중인 시스템에서 과거 시스템을 부를때 칭함.
  • 주로 레거시 난 AS-IS 라 칭함

TOBE 시스템

  • 현재 개발중인 시스템을 칭함
  • 주로 차세대라 칭함.

DDL DML DCL TCL

DDL (Data Definition Language; 데이터 정의 언어)

  1. 데이터 정의어
    :데이터베이스의 구조를 만들고 변경,수정 하는 명령어
    1. - CREATE TABLE : 테이블 생성
    2. - ALTER TABLE  : 테이블 수정
    3. - DROP TABLE  : 테이블 삭제
    4. - CREATE INDEX : 인덱스 생성
    5. - ALTER INDEX  : 인덱스 수정
    6. - DROP INDEX  : 인덱스 삭제

DML (Data Manipulation Language; 데이터 조작 언어)

  1. 데이터 조작어
    :테이블 안의 데이터를 넣고, 바꾸고, 지우고, 조회하는 데 사용해요.
    1. - SELECT
    2. - SELECT INTO
    3. - INSERT
    4. - DELETE
    5. - UPDATE
    6. - CREATE SEQUENCE
    7. - ALTER SEQUENCE
    8. - DROP SEQUENCE

DCL (Data Control Language : 데이터 제어 언어)

  1. 데이터 제어어
    사용자 권한을 관리해요. 누가 무엇을 할 수 있는지 정해요.
    1. - CREATE USER
    2. - ALTER USER
    3. - GRANT
  2. TCL (Transaction Control Language; 트랜잭션 제어 언어)
    1. - COMMIT
    2. - ROLLBACK

DDL (Data Definition Language; 데이터 정의 언어)

  • CREATE / ALTER / DROP [테이블 or 인덱스]

CREATE TABLE (테이블 생성)

CREATE TABLE 테이블명 (
    컬럼명 컬럼 타입 ,
             ... ,
    <column-name-n> <type>
)
[tablespace 테이블스페이스명] -- 생략시 default tablespace에 생성.
;

ALTER TABLE (테이블 변경)

  • 컬럼 추가
    ALTER TABLE 테이블명
    ADD ( 컬럼명 데이터타입, ...<column-name-n> <type> );
  • 컬럼 수정
    ALTER TABLE 테이블명
    MODIFY ( 컬럼명 새로운타입 );
  • 컬럼 삭제
     
    ALTER TABLE 테이블명
     DROP COLUMN 컬럼명;

DROP TABLE (테이블 삭제)

DROP TABLE 테이블명 ;

CREATE INDEX (인덱스 생성)

CREATE INDEX 인덱스명 
    ON 테이블명 (
              컬럼1,컬럼2, ...
              );

ALTER INDEX (인덱스 수정)

  • 인덱스 재생성 (통계정보 수집은 동시에 )
    -- COLLECTING STATISTICS ON INDEX
    ALTER INDEX 인덱스 
        REBUILD COMPUTE STATISTICS; -- 인덱스를 통계정보화 함께 리빌드 한다.
  • 인덱스명 변경
    -- RENAME INDEX
    ALTER INDEX 인덱스명
         RENAME TO 새 인덱스명;

DROP INDEX (인덱스 삭제)

DROP INDEX 인덱스명;

DML (Data Manipulation Language; 데이터 조작 언어)

SELECT (조회)

SELECT 컬럼명1, 컬럼명2, ..., <column-name-n>
 FROM 테이블명1,테이블명2, ..., <table-name-n>
WHERE <조건 표현 구문 >
GROUP BY <그룹핑 컬럼>, ..., <grouping-column-name-n>
HAVING <그룹핑 표현구문>
 ORDER BY <정렬 컬럼1>, ..., <order-column-name-n>
;

INSERT (입력)

  • 전체 데이터 입력시
    -- INSERT ALL VALUES
    INSERT INTO 테이블명
    VALUES ( 값1, ..., <value-n> );
  • 부분 데이터 입력시
     
    -- INSERT SOME VALUES
    INSERT INTO 테이블명 ( 컬럼명1, ..., <column-name-n> )
    VALUES ( 값1, ..., <value-n> );

DELETE (삭제)

DELETE FROM 테이블명
      WHERE 조건표현구문;

UPDATE (갱신)

UPDATE 테이블명
   SET 컬럼명 = <value>
 WHERE 조건표현구문

CREATE SEQUENCE

CREATE SEQUENCE 시퀀스명
       MINVALUE <min-value>
       MAXVALUE <max-value>
     START WITH <start-value>
   INCREMENT BY <step-value>
          CACHE <cache-value>

ALTER SEQUENCE

-- ALTER MINVALUE
ALTER SEQUENCE 시퀀스명 MINVALUE <new-min-value>;

-- ALTER MAXVALUE
ALTER SEQUENCE 시퀀스명 MAXVALUE <new-max-value>;

-- ALTER INCREMENT
ALTER SEQUENCE 시퀀스명 INCREMENT BY <new-step-value>;

-- SET CYCLE OR NOCYCLE
ALTER SEQUENCE 시퀀스명 <CYCLE | NOCYCLE>;

-- ALTER CACHE
ALTER SEQUENCE 시퀀스명 CACHE <new-cache-value>;

DROP SEQUENCE

DROP SEQUENCE 시퀀스명;

DCL (Data Control Language; 데이터 제어 언어)

  • CREATE USER
CREATE USER 유저명 IDENTIFIED BY <user-password>;
  • ALTER USER
ALTER USER 유저명 IDENTIFIED BY <new-user-password>;
  • GRANT
GRANT 권한 TO 유저명;

TCL (Transaction Control Language; 트랜잭션 제어 언어)

  • COMMIT
  • ROLLBACK

SELECT 기본 구문 작성 순서

GROUP BY 절

menu_book GROUP BY 절이란?
  • (영문): GROUP BY is used to group rows that have the same values in specified columns into summary rows.
  • (한글): GROUP BY는 특정 컬럼 값을 기준으로 같은 값들끼리 묶어서 결과를 보여주는 SQL 절입니다.


특징

집계 함수(예: COUNT(), SUM(), AVG(), MAX(), MIN())와 함께 자주 사용됩니다.

데이터를 그룹별 요약하거나 분류해서 볼 수 있습니다.


사용 방법

SELECT 컬럼명, 집계함수
FROM 테이블명
GROUP BY 컬럼명;

예제

employees 테이블 예시

emp_id name department salary
1 John Sales 3000
2 Alice Sales 3200
3 Bob IT 4000
4 Carol IT 4200
5 David HR 2800

예제 1: 부서별 평균 급여 구하기

SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
  • 조회 결과
department avg_salary
Sales 3100
IT 4100
HR 2800

설명: department(부서)별로 묶어서, 각 부서의 salary(급여) 평균을 구한 것입니다.

예제 2: 부서별 직원 수 구하기

SELECT department, COUNT(*) AS num_employees
FROM employees
GROUP BY department;
  • 조회 결과
department num_employees
Sales 2
IT 2
HR 1

설명: GROUP BY department를 통해 부서별로 직원 수를 센 것입니다.


주의사항

GROUP BY에 사용하지 않은 컬럼은 SELECT절에 직접 쓸 수 없습니다. (단, 집계 함수(max(),count(),sum()..) 안에 들어가는 경우는 예외)

GROUP BY는 정렬 기능이 아닙니다. 정렬은 ORDER BY를 사용해야 합니다.


GROUP BY 절 고급

HAVING 절

HAVING은 GROUP BY로 그룹화한 결과에 조건을 거는 절입니다.

WHERE는 그룹화 전에 조건, HAVING은 그룹화 후 조건입니다.


예제 테이블: sales

id product region amount
1 Laptop Seoul 2000
2 Laptop Busan 1500
3 Phone Seoul 1000
4 Phone Busan 1200
5 Laptop Seoul 2200
6 Phone Seoul 1300



예제 1: 지역별로 제품 판매 총합이 3000 이상인 경우만 보기

SELECT region, SUM(amount) AS total_sales
FROM sales
GROUP BY region
HAVING SUM(amount) >= 3000;

결과

region total_sales
Seoul 5500

설명: GROUP BY region으로 지역별로 묶고, HAVING을 통해 총합이 3000 이상인 지역만 필터링합니다.


다중 컬럼 GROUP BY

개념 • 두 개 이상의 컬럼을 기준으로 복합적으로 그룹화할 수 있습니다.


예제 2: 지역 + 제품별 판매 총액 구하기

SELECT region, product, SUM(amount) AS total_sales
FROM sales
GROUP BY region, product;

결과

지역별 제품 매출
지역 제품 매출액(USD)
Seoul Laptop 4,200
Seoul Phone 2,300
Busan Laptop 1,500
Busan Phone 1,200

설명: region과 product를 동시에 그룹화하여, 각 지역-제품 조합별로 총 판매량을 계산했습니다.


GROUP BY + JOIN 활용

복잡한 데이터 분석에는 JOIN과 GROUP BY를 함께 사용합니다.


예제 테이블

  • employees
직원 정보
사원 ID 이름 부서 ID
1 John 10
2 Alice 10
3 Bob 20
  • departments
부서 정보
부서 ID 부서 이름
10 Sales
20 IT
  • salaries
직원 급여 정보
사원 ID 급여 (USD)
1 3,000
2 3,500
3 4,000

부서별 평균 급여 구하기 (JOIN 사용)

SELECT d.dept_name, AVG(s.salary) AS avg_salary
FROM employees e
JOIN departments d ON e.dept_id = d.dept_id
JOIN salaries s ON e.emp_id = s.emp_id
GROUP BY d.dept_name;

결과

부서별 평균 급여
부서명 평균 급여(USD)
Sales 3,250
IT 4,000
전체 평균 3,625

설명: 여러 테이블을 JOIN해서 dept_name 기준으로 묶고 평균 급여를 계산했습니다.


ROLLUP (고급)

ROLLUP은 그룹별 합계 외에 **전체 합계(총계)**까지 같이 보여줍니다.


예제 4: 제품별 판매 총액과 전체 총액까지 보여주기

SELECT product, SUM(amount) AS total_sales
FROM sales
GROUP BY ROLLUP(product);

결과

제품별 매출 현황 (집계 결과)
제품 매출액(USD)
Laptop 3,700
Phone 3,500
전체 합계 7,200

설명: NULL은 전체 총합을 의미합니다. 제품별 합계 + 전체 합계를 한 번에 볼 수 있습니다.


요점정리

SQL 그룹화(Grouping) 주요 개념
개념 설명 사용 예시
GROUP BY 특정 컬럼 값으로 행을 그룹화
SELECT dept, COUNT(*) 
  FROM emp 
 GROUP BY dept
HAVING 그룹화된 결과에 필터링 조건 적용
(WHERE 절과 유사하지만 그룹 후 적용)
SELECT dept, AVG(salary) 
  FROM emp
 GROUP BY dept 
HAVING AVG(salary) > 5000
다중 그룹화 두 개 이상 컬럼으로 계층적 그룹화
SELECT dept, gender, COUNT(*) 
  FROM emp
 GROUP BY dept, gender
JOIN + GROUP BY 여러 테이블 연결 후 그룹화 수행
SELECT d.dept_name, COUNT(e.emp_id)
  FROM emp e 
  JOIN dept d ON e.dept_id = d.dept_id
 GROUP BY d.dept_name
ROLLUP 그룹별 소계 + 총계를 한 번에 출력
(다차원 분석용)
SELECT dept, gender, SUM(salary)
  FROM emp 
 GROUP BY ROLLUP(dept, gender)

WITH 절

SQL 조인

INSERT 구문

UPDATE 구문

MERGE 구문