비절차적 데이터 언어 : 데이터를 조회/조작하는 데 필요한 조건을 기술
어떻게 데이터를 갖고 처리하는지 같은 실행 절차는 명시 X
SQL의 분류 : 데이터 정의어 / 데이터 조작어 / 데이터 제어어
SELECT [All | DISTINCT] 속성이름
FROM 테이블이름
WHERE 검색조건
GROUP BY 속성이름
HAVING 검색조건
ORDER BY 속성이름 [ASC | DES]
ALL : *로 대체 가능
DISTINCT : 중복 제거
AS : 결과 테이블에서 속성이름의 별칭 부여
주의할 점 !!
SELECT 문에서 각 문장의 실행 순서는
➌ SELECT
➊ FROM
➋ WHERE
=> FROM이나 WHERE에서 AS로 정의된 키워드는 SELECT에서 사용 가능하지만, SELECT에서 AS로 정의된 키워드는 FROM이나 WHERE에서 사용할 수 없음
WHERE은 행 추출
조건 종류
1) 비교 / 범위 : <, >, =, BETWEEN, AND, OR 등 사용
2) 집합 : IN, NOT IN
3) 패턴 & 복합조건
복합조건으로 활용 : LIKE + 와일드 문자
와일드 문자 없으면 LIKE 대신 = 사용 가능
와일드 문자 종류
예시 1) 축구에 관한 도서 중 가격이 20000원 이상인 도서
예시 2) 출판사가 '대'로 시작하는 5자리 이름을 가진 도서
ASC : 오름차순 / DESC : 내림차순
문자의 경우 숫자 -> 영문자 -> 한글 순으로 정렬
예시1 ) 도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색
예시 2) 도서를 가격순으로 내림차순 검색하되, 가격이 같으면 출판사를 오름차순으로 출력
집계함수 : 특정 속성 값을 통계적으로 계산하는 함수
NULL 값은 제외하고 계산
WHERE절에서는 사용 X , SELECT나 HAVING 절에서만 사용 가능
집계함수 종류
예시 1) 고객이 주문한 도서의 총 판매액
예시 2) 마당서점의 도서 판매 건수
GROUP BY : 특정 속성의 값이 같은 튜플을 모아 그룹을 만든 후 검색
예시 1) 고객별로 주문한 도서의 총수량과 총판매액 (속성이름은 도서수량과 총액 사용)
SELECT에는 필요한 값들 -> 고객번호 / 총수량 / 총판매액
'고객별' -> GROUP BY, ORDER BY 사용
예시 2) 가격이 8000원 이상인 도서를 구매한 고객에 대해서, 고객별 주문도서의 총수량 (단, 2권 이상 구매한 고객에 대해서만)
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의 실행 순서
➎ SELECTQ1. 마당서점의 고객이 요구하는 다음 질문에 대해 SQL 문을 작성하시오.
(1) 도서번호가 1인 도서의 이름
(2) 가격이 20,000원 이상인 도서의 이름
(3) 박지성의 총구매액
조인을 하지 않았기 때문에 WHERE 절에서 또다른 SELECT문 사용
(4) 박지성이 구매한 도서의 수
Q2. 마당서점의 운영자와 경영자가 요구하는 다음 질문에 대해 SQL 문을 작성하시오.
(1) 마당서점 도서의 총개수
(2) 마당서점에 도서를 출고하는 출판사의 총개수
(3) 모든 고객의 이름, 주소
(4) 2024년 7월 4일 ~ 2024년 7월 7일 사이에 주문받은 도서의 주문번호
(5) 성이 '김' 씨이고 이름이 '아'로 끝나는 고객의 이름과 주소
조인 검색
FROM 절에 단순히 테이블 나열 = 조건 없이 연결 -> 카티션 프로덕트
조인 조건을 만족하지 않는 튜플에 대해서도 검색 수행
LEFT RIGHT 과 ON 키워드 이용 => 왼쪽외부조인 오른쪽외부조인
FULL OUTER JOIN(완전외부조인)은 MYSQL에서 지원 안함 !!
=> LEFT + RIGHT = FULL
1) NATURAL JOIN
2) INNER JOIN
3) LEFT OUTER JOIN