MySQL

SQL 중첩 질의 Subquery 조인 join 외래 키 제약조건 FOREIGN KEY 트랜잭션 start commit bollback

윤슬새벽 2025. 6. 20. 12:55
반응형

🔹 1. 중첩 질의 (Subquery)

📌 서브쿼리란?

  • 쿼리 안에 포함된 또 다른 SELECT 문
  • 주로 WHERE, FROM, SELECT, HAVING 절에 사용

📊 WHERE 절에서의 중첩 질의 종류 (정리표)

술어 유형 연산자 예 반환 행 반환 열 상관 쿼리 가능 설명
비교 =, <, > 1행 1열 가능 단일 값과 비교
집합 IN, NOT IN 여러 행 1열 가능 포함 여부 판단
한정 ANY, ALL 여러 행 1열 가능 여러 값 중 일부/전체 비교
존재 EXISTS, NOT EXISTS 무관 무관 반드시 필요 결과 존재 여부 판단
 

✅ 대표 예시: 고객별 평균보다 높은 주문 찾기

SELECT orderid, saleprice
FROM orders o1
WHERE saleprice >= (
  SELECT AVG(saleprice)
  FROM orders o2
  WHERE o2.custid = o1.custid
);
 

🔹 2. 외래 키 제약조건 (FOREIGN KEY)

✅ 외래 키 연결 방법

ALTER TABLE cart
ADD CONSTRAINT fk_cart_customer
  FOREIGN KEY (custid)
  REFERENCES customer(custid);

💡 cart 테이블은 customer와 book 테이블의 자식


🔹 3. 트랜잭션 (Transaction)

✅ 기본 흐름

START TRANSACTION;
DELETE FROM book WHERE bookid = 7;
ROLLBACK; -- 되돌리기
  • START TRANSACTION: 트랜잭션 시작
  • COMMIT: 확정
  • ROLLBACK: 취소

🔹 4. 조인 & 집계 활용

✅ 고객별 판매액 구하기

SELECT c.name, SUM(o.saleprice)
FROM customer c
JOIN orders o ON c.custid = o.custid
GROUP BY c.name;

✅ 주문 없는 고객도 포함하려면

SELECT c.name, IFNULL(SUM(o.saleprice), 0)
FROM customer c
LEFT OUTER JOIN orders o ON c.custid = o.custid
GROUP BY c.name;

🔹 5. 뷰(View) 생성 및 조회

✅ 복잡한 조인 결과를 뷰로 저장

CREATE VIEW vw_order_summary AS
SELECT b.bookname, o.orderid, c.name, o.saleprice
FROM book b, orders o, customer c
WHERE b.bookid = o.bookid AND o.custid = c.custid;

✅ 뷰에서 간단하게 조회

SELECT * FROM vw_order_summary;

🔹 핵심 정리 한 줄 요약

주제 핵심 요약
중첩 질의 비교 연산자는 단일값, IN은 다중값, EXISTS는 존재 여부 판단
트랜잭션 START → COMMIT 또는 ROLLBACK으로 데이터 무결성 보장
외래 키 부모 테이블 참조 제약, ON DELETE 옵션 중요
LEFT JOIN 주문이 없는 고객도 포함하여 0원 처리 가능
뷰(View) 복잡한 조인을 논리 테이블로 저장해서 재사용
 

반응형