[Oracle SQL] insert, delete, update, select, join, 상관 서브쿼리

신효경·2025년 8월 12일
0

용어 정리

1. 데이터베이스 (Database, DB)

정의: 전자적으로 체계적으로 저장된 데이터의 집합
설명: 데이터 그 자체를 의미하며, 파일이나 표 형태로 조직화되어 있음
예시: 회원 테이블, 주문 기록, 재고 목록

2. 데이터베이스 관리 시스템 (Database Management System, DBMS)

정의: 데이터베이스를 생성, 관리, 검색, 수정, 삭제하는 소프트웨어
설명: 데이터에 접근하고 조작할 수 있도록 API와 쿼리 언어(SQL 등)를 제공
예시: MySQL, PostgreSQL, Oracle DB, MongoDB

3. 데이터베이스 시스템 (Database System)

정의: 데이터베이스(DB) + DBMS + 이를 운용하는 하드웨어·소프트웨어 환경 전체
설명: DB와 DBMS를 모두 포함하는 더 넓은 개념. 실제 운영 환경까지 아우름
예시: 서버 하드웨어 + MySQL DBMS + 회사의 고객 데이터.

🖊️ 총 정리

데이터베이스는 데이터 그 자체의 집합이고,
DBMS는 그 데이터를 생성·조회·수정·삭제할 수 있는 소프트웨어.
데이터베이스 시스템은 데이터베이스와 DBMS, 그리고 이를 구동하는 전체 환경을 통틀어 말함.
비유 : DB는 ‘책장 속 책’, DBMS는 ‘사서’, DB 시스템은 ‘도서관 전체’


1. 데이터(Data)

정의: 가공되지 않은 사실이나 값, 관찰 결과.
특징: 그 자체로는 의미가 명확하지 않음.
예시:

  • 37, 25, 19
  • "서울", "부산", "대전"
  • 엑셀에 적힌 2025년 8월의 온도 측정값

2. 정보(Information)

정의: 데이터를 분석·정리·가공하여 의미를 부여한 결과
특징: 의사결정에 활용 가능
예시:

  • 데이터 37, 25, 19 → "8월 10일 최고기온은 37도, 최저기온은 19도였다."
  • "서울", "부산", "대전" → "지난주 매출 1~3위 도시는 서울, 부산, 대전이었다."
  • 온도 측정값을 분석해 "올해 8월은 30년 만에 가장 더운 여름"이라는 결론을 도출

DML 정리

1. INSERT

INSERT 문은 테이블에 새로운 데이터를 추가하는 명령어이다.
하나의 행을 추가할 수도 있고, 서브쿼리를 통해 여러 행을 삽입할 수도 있다.

문법

INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (1,2, ...);

예시

INSERT INTO book (BOOKNO, BOOKNAME, BOOKAUTHOR, BOOKPRICE, PUBNO, BOOKSTOCK)
VALUES (101, '데이터베이스 기초', '홍길동', 25000, 1, 10);



서브쿼리로 여러 행 삽입

INSERT INTO bestseller (BOOKNO, BOOKNAME, BOOKPRICE)
SELECT BOOKNO, BOOKNAME, BOOKPRICE
FROM book
WHERE BOOKPRICE >= 30000;

2. DELETE

DELETE 문은 테이블의 데이터를 삭제하는 명령어이다.
조건절을 생략하면 모든 데이터가 삭제되므로 주의해야 한다.

문법

DELETE FROM 테이블명
WHERE 조건;

예시

DELETE FROM book
WHERE BOOKNO = 101;



3. UPDATE

UPDATE 문은 기존 데이터를 수정하는 명령어이다.

문법

UPDATE 테이블명
SET 컬럼1 =1, 컬럼2 =2, ...
WHERE 조건;

예시

UPDATE book
SET BOOKPRICE = 27000, BOOKSTOCK = BOOKSTOCK + 5
WHERE BOOKNAME = '자료구조';




4. SELECT

SELECT 문은 데이터를 조회하는 명령어로, 조건, 정렬, 그룹화 등을 통해 원하는 데이터를 출력할 수 있다.

기본 문법

SELECT 컬럼1, 컬럼2, ...
FROM 테이블명
[WHERE 조건]
[GROUP BY 컬럼]
[HAVING 그룹조건]
[ORDER BY 컬럼 ASC|DESC];

예시 1 — 가격 순 내림차순, 동일 가격 시 저자 오름차순

SELECT BOOKNAME, BOOKAUTHOR, BOOKPRICE
FROM book
ORDER BY BOOKPRICE DESC, BOOKAUTHOR ASC;

예시 2 — 저자명에 '길동'이 포함된 도서의 총 재고 수량

SELECT SUM(BOOKSTOCK) AS "총 재고 수량"
FROM book
WHERE BOOKAUTHOR LIKE '%길동%';

예시 3 — '서울 출판사' 도서 중 최고가와 최저가

SELECT MAX(BOOKPRICE) AS "최고가", MIN(BOOKPRICE) AS "최저가"
FROM book
WHERE PUBNO = (SELECT PUBNO FROM publisher WHERE PUBNAME = '서울 출판사');

예시 4 — 출판사별 총 재고 수량과 평균 재고 수량 (총 재고 수량 내림차순)

SELECT SUM(BOOKSTOCK) AS "총 재고 수량", AVG(BOOKSTOCK) AS "평균 재고 수량"
FROM book
GROUP BY PUBNO
ORDER BY SUM(BOOKSTOCK) DESC;

예시 5 — 고객별 총 주문 수량, 총 주문 건수 (주문 건수 2 이상)

SELECT CLIENTNO, SUM(BSQTY) AS "총 주문 수량", COUNT(*) AS "총 주문 건수"
FROM booksale
GROUP BY CLIENTNO
HAVING COUNT(*) >= 2;


5. JOIN

JOIN은 여러 테이블의 데이터를 연결하여 하나의 결과로 조회하는 기능이다.
두 테이블 이상에서 관련된 데이터를 한 번에 가져올 때 사용한다.


5.1 INNER JOIN

두 테이블에서 조건이 일치하는 데이터만 조회한다.

SELECT b.BOOKNAME, bs.bookno
FROM book b
INNER JOIN booksale bs
ON bs.bookno = b.bookno;


5.2 LEFT JOIN

왼쪽 테이블의 모든 데이터와, 조건에 맞는 오른쪽 테이블의 데이터만 조회한다.

SELECT b.BOOKNAME, bs.bookno
FROM book b
LEFT OUTER JOIN booksale bs
ON bs.bookno = b.bookno;


5.3 RIGHT JOIN

오른쪽 테이블의 모든 데이터와, 조건에 맞는 왼쪽 테이블의 데이터만 조회한다.

SELECT b.BOOKNAME, p.PUBNAME
FROM book b
RIGHT JOIN publisher p
ON b.PUBNO = p.PUBNO
WHERE p.PUBNO=1;


5.4 FULL OUTER JOIN

두 테이블의 모든 데이터를 출력하고, 매칭되지 않는 경우 NULL을 채운다.

SELECT b.BOOKNAME, bs.bookno
FROM book b
FULL OUTER JOIN booksale bs
ON bs.bookno = b.bookno;


6. 상관 서브쿼리 (Correlated Subquery)

상관 서브쿼리는 외부 쿼리의 각 행에 대해 서브쿼리가 반복 실행되는 형태이다.
즉, 서브쿼리가 독립적으로 실행되지 않고, 외부 쿼리의 컬럼 값을 참조한다.

예시 — 각 도서보다 가격이 높은 도서 수

SELECT b1.BOOKNAME, b1.BOOKPRICE,
       (SELECT COUNT(*)
        FROM book b2
        WHERE b2.BOOKPRICE > b1.BOOKPRICE) AS "더 비싼 도서 수"
FROM book b1;

예시 — 출판사별 최고가 도서

SELECT b1.BOOKNAME, b1.BOOKPRICE, b1.PUBNO
FROM book b1
WHERE b1.BOOKPRICE = (
    SELECT MAX(b2.BOOKPRICE)
    FROM book b2
    WHERE b2.PUBNO = b1.PUBNO
);

업로드중..


마무리 정리

  • INSERT → 새로운 데이터 추가
  • DELETE → 데이터 삭제
  • UPDATE → 데이터 수정
  • SELECT → 데이터 조회 (정렬, 그룹화 가능)
  • JOIN → 여러 테이블 결합
  • 상관 서브쿼리 → 외부 쿼리의 데이터를 참조하여 행 단위로 서브쿼리 실행

0개의 댓글