DB) #3 SQL 기초 (1)

지우·2026년 3월 20일

database

목록 보기
3/7

SQL이란?

비절차적 데이터 언어 : 데이터를 조회/조작하는 데 필요한 조건을 기술
어떻게 데이터를 갖고 처리하는지 같은 실행 절차는 명시 X

SQL의 분류 : 데이터 정의어 / 데이터 조작어 / 데이터 제어어

데이터 조작어 - 검색

SELECT [All | DISTINCT] 속성이름
FROM 테이블이름
WHERE 검색조건
GROUP BY 속성이름
HAVING 검색조건
ORDER BY 속성이름 [ASC | DES]


SELECT문

ALL : *로 대체 가능
DISTINCT : 중복 제거

AS : 결과 테이블에서 속성이름의 별칭 부여

주의할 점 !!
SELECT 문에서 각 문장의 실행 순서는

➌ SELECT
➊ FROM
➋ WHERE

=> FROM이나 WHERE에서 AS로 정의된 키워드는 SELECT에서 사용 가능하지만, SELECT에서 AS로 정의된 키워드는 FROM이나 WHERE에서 사용할 수 없음


WHERE 조건

WHERE은 행 추출

조건 종류

1) 비교 / 범위 : <, >, =, BETWEEN, AND, OR 등 사용
2) 집합 : IN, NOT IN

3) 패턴 & 복합조건
복합조건으로 활용 : LIKE + 와일드 문자
와일드 문자 없으면 LIKE 대신 = 사용 가능

와일드 문자 종류

  • % : 0개 이상의 문자열과 일치 ex) '%축구%'- 축구를 포함하는 문자열
  • [ ] : 1개 이상의 문자와 일치 ex) '[0~5]%' - 0~5 사이 숫자로 시작하는 문자열
  • [^] : 1개 이상의 문자와 불일치 ex) '[^0~5]%' - 0~5 사이 숫자로 시작하지 않는 문자열
  • _ : 특정 위치의 1개의 문자와 일치 ex) '_구%' - 두번째 위치에 '구'가 들어가는 문자열

예시 1) 축구에 관한 도서 중 가격이 20000원 이상인 도서

예시 2) 출판사가 '대'로 시작하는 5자리 이름을 가진 도서



ORDER BY

ASC : 오름차순 / DESC : 내림차순
문자의 경우 숫자 -> 영문자 -> 한글 순으로 정렬

예시1 ) 도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색

예시 2) 도서를 가격순으로 내림차순 검색하되, 가격이 같으면 출판사를 오름차순으로 출력


집계함수와 GROUP BY

집계함수 : 특정 속성 값을 통계적으로 계산하는 함수
NULL 값은 제외하고 계산
WHERE절에서는 사용 X , SELECT나 HAVING 절에서만 사용 가능

집계함수 종류

  • SUM
  • AVG
  • COUNT : 행 개수 세기
  • MAX
  • MIN

예시 1) 고객이 주문한 도서의 총 판매액

예시 2) 마당서점의 도서 판매 건수


GROUP BY : 특정 속성의 값이 같은 튜플을 모아 그룹을 만든 후 검색

예시 1) 고객별로 주문한 도서의 총수량과 총판매액 (속성이름은 도서수량과 총액 사용)

SELECT에는 필요한 값들 -> 고객번호 / 총수량 / 총판매액
'고객별' -> GROUP BY, ORDER BY 사용


예시 2) 가격이 8000원 이상인 도서를 구매한 고객에 대해서, 고객별 주문도서의 총수량 (단, 2권 이상 구매한 고객에 대해서만)


SQL의 실행 순서

HAVING : GROUP BY 절의 결과에 나타나는 그룹을 제한

주의사항

  • GROUP BY를 사용해 튜플을 그룹으로 묶으면 SELECT 절에는 GROUP BY에서 사용한 속성과 집계함수만 나올 수 있음
    ex) GROUP BY custid -> SELECT절에는 custid와 이와 관련된 집계함수만 나올 수 있음

  • HAVING 절은 1) 반드시 GROUP BY 절과 함께 작성 2) WHERE 절보다 뒤에 나와야 함 3) 검색조건에는 집계함수가 나와야 함


GROUP BY, HAVING, ORDER BY가 포함된 SQL의 실행 순서

➎ SELECT
➊ FROM
➋ WHERE
➌ GROUP BY
➍ HAVING
❻ ORDER BY

퀴즈

Q1. 마당서점의 고객이 요구하는 다음 질문에 대해 SQL 문을 작성하시오.
(1) 도서번호가 1인 도서의 이름

(2) 가격이 20,000원 이상인 도서의 이름

(3) 박지성의 총구매액

조인을 하지 않았기 때문에 WHERE 절에서 또다른 SELECT문 사용

(4) 박지성이 구매한 도서의 수

Q2. 마당서점의 운영자와 경영자가 요구하는 다음 질문에 대해 SQL 문을 작성하시오.
(1) 마당서점 도서의 총개수

(2) 마당서점에 도서를 출고하는 출판사의 총개수

DISTINCT 사용해서 book 테이블에서 출판사의 중복을 없앤 뒤, 행 개수 count

(3) 모든 고객의 이름, 주소

(4) 2024년 7월 4일 ~ 2024년 7월 7일 사이에 주문받은 도서의 주문번호

(5) 성이 '김' 씨이고 이름이 '아'로 끝나는 고객의 이름과 주소

'김_아' 라고 쓰면 이름이 무조건 세 글자여야 함 -> 이름이 세 글자가 아닐 수도 있으므로 조건을 만족하는건 '김%아'가 더 정확

두 개 이상의 테이블을 이용한 SQL 질의

조인 검색

  • 여러 개의 테이블을 연결하여 데이터 검색
  • 일반적으로 외래키를 조인 속성으로 이용
  • FROM 절에 검색에 필요한 모든 테이블 나열
  • 테이블 이름에 별칭 제시 가능 ex) FROM Customer C, Order O
  • WHERE 절에 조인 조건 제시

조인

FROM 절에 단순히 테이블 나열 = 조건 없이 연결 -> 카티션 프로덕트

외부조인

조인 조건을 만족하지 않는 튜플에 대해서도 검색 수행
LEFT RIGHT 과 ON 키워드 이용 => 왼쪽외부조인 오른쪽외부조인

FULL OUTER JOIN(완전외부조인)은 MYSQL에서 지원 안함 !!
=> LEFT + RIGHT = FULL

SELECT <속성>
FROM <테이블1> {LEFT/RIGHT} OUTER JOIN <테이블2> ON <조인조건>
WHERE <검색조건>

JOIN의 SQL 구현 예

1) NATURAL JOIN

2) INNER JOIN

3) LEFT OUTER JOIN

4) RIGHT OUTER JOIN

0개의 댓글