/* == 작성 순서에 주의할 것 ==*/
SELECT [ALL | DISTINCT] 속성이름
FROM 테이블이름
WHERE 검색조건
GROUP BY 속성이름
HAVING 검색조건
ORDER BY 속성이름;
SELECT
WHERE vs. HAVING
| WHERE | HAVING | |
|---|---|---|
| 사용 가능 조건 | 비교, 범위, 집합(IN/NOT IN), 패턴(LIKE), NULL, 복합조건(AND/OR/NOT) | 집계함수(SUM/AVG/MAX/MIN/COUNT) |
| 예시 | 가격이 1만원이상 2만원 이하인 도서 검색 | |
| SELECT * | ||
| FROM Book | ||
| WHERE price BETWEEN 10000 AND 20000 | 아래 참고 |
와일드 문자(LIKE와 같이 사용됨)
% : 0개 이상의 문자열과 일치
ex) %축구% = 축구를 포함하는 문자열
[] : 1개의 문자와 일치
ex) [0-5]% = 0-5 사이 숫자로 시작하는 문자열
[^] : 1개의 문자와 불일치
ex) [^0-5]% = 0-5 사이 숫자로 시작하지 않는 문자열
_ : 특정 위치의 1개의 문자와 일치
ex) _구% 두 번째 위치에 ‘구’가 들어가는 문자열
ORDER BY
ORDER BY bookname DESC, publisher ASC
집계함수
: 특정 속성 값을 통계적으로 계산하는 함수
SUM([ALL | DISTINCT] 속성이름)AVG([ALL | DISTINCT] 속성이름)COUNT([[ALL | DISTINCT] 속성이름] | *) : 행의 개수 카운트MAX([ALL | DISTINCT] 속성이름)MIN([ALL | DISTINCT] 속성이름)AS 키워드
: 속성이름의 별칭 부여(AS 생략 가능)
ex) SELECT SUM(salesprice) AS 총매출
→ [주의!] 실행 순서 유의하기
GROUP BY
: 특성 속성의 값이 같은 튜플을 모아 그룹을 만든 후 검색
/*== 실행 순서 ==*/
5 SELECT custid, COUNT(*) AS 도서수량,
SUM(saleprice) AS 총액
1 FROM Orders
2 WHERE saleprice >= 8000
3 GROUP BY custid
4 HAVING COUNT(*) >= 2
6 ORDER BY custid;
조인 검색
: 여러 개의 테이블으 연결하여 데이터를 검색하는 것 일반적으로 외래키를 속성으로 사용
ex) 주문.주문고객 (테이블이름.속성)
카티션 프로덕트 (→ 비효율)
SELECT *
FROM Customer, Orders; = 조건 없이 연결
외부조인
테이블1 LEFT | RIGHT OUTER JOIN 테이블2 ON 조인조건
> 도서를 구매하지 않은 고객을 포함하여 고객의 이름과 고객이 주문한 도서의 판매가격을 구하세요
SELECT Customer.name, saleprice
FROM Customer LEFT OUTER JOIN Orders ON
Customer.custid=Orders.custid;