- SELECT 문의 기본 형식은 다음과 같다.
SELECT [ALL | DISTINCT] 속성이름(들)
FROM 테이블이름(들)
WHERE 검색조건(들)
GROUP BY 속성이름
HAVING 검색조건(들)
ORDER BY 속성이름 [ASC | DESC]
Table 이름이 Customer인 다음과 같은 릴레이션이 존재할 때, select의 간단한 쓰임을 정리해 보려 한다.
Custid | name | address | phone |
---|---|---|---|
1 | 박지성 | 영국 맨체스터 | 010-0000-0001 |
2 | 김연아 | 대한민국 서울 | 010-1000-0001 |
3 | 장미란 | 대한민국 강원도 | 010-2000-0001 |
4 | 추신수 | 미국 클리블랜드 | 010-3000-0001 |
5 | 박세리 | 대한민국 대전 | NULL |
ex1). 김연아 고객의 전화번호를 찾아보세요!
example 1
SELECT phone
FROM Customer
WHERE name='김연아';
phone |
---|
010-0000-0001 |
Table 이름이 Book인 다음과 같은 릴레이션이 존재할 때, select의 간단한 쓰임을 정리해 보려 한다.
bookid | bookname | publisher | price |
---|---|---|---|
1 | 축구의 역사 | 굿스포츠 | 7000 |
2 | 축구아는 여자 | 나무수 | 13000 |
3 | 축구의 이해 | 대한미디어 | 22000 |
4 | 골프 바이블 | 대한미디어 | 35000 |
5 | 피겨 교본 | 굿스포츠 | 8000 |
6 | 역도 단계별 기술 | 이상미디어 | 6000 |
7 | 야구의 추억 | 이상미디어 | 20000 |
8 | 야구를 부탁해 | 대한미디어 | 13000 |
9 | 올림픽 이야기 | 삼성당 | 7500 |
10 | Olymic Champions | Pearson | 13000 |
ex2). 모든 도서의 도서번호, 도서이름, 출판사, 가격을 검색하세요!
ex2.1
SELECT bookid, bookname, publisher, price
FROM Book
ex2.2
SELECT *
FROM Book
# 둘의 결과값은 같습니다
ex3). 도서 테이블에 있는 모든 출판사를 검색하세요!
# 중복있이 모든 출판사가 검색됨
SELECT publisher
FROM Book;
# 중복을 없애고 싶으면 DISTINCT라는 키워드 사용
SELECT DISTINCT publisher
FROM Book;
- 조건 검색: 조건을 만족하는 데이터만 검색
# 기본 형식
SELECT [ALL | DISTINCT] 속성이름(들)
FROM 테이블이름(들)
WHERE 검색조건(들)
- WHERE 절에 조건으로 사용할 수 있는 술어는 다음과 같다.
술어 | 연산자 | 예 |
---|---|---|
비교 | =, <>, <, <=, >, >= | price < 20000 |
범위 | BETWEEN | price BETWEEN 10000 AND 20000 |
집합 | IN, NOT IN | price IN(10000, 20000, 30000) |
패턴 | LIKE | bookname LIKE '축구의 역사' |
NULL | IS NULL, IS NOT NULL | price IS NULL |
복합조건 | AND, OR, NOT | (price < 20000) AND (bookname LIKE '축구의 역사') |
ex4). 가격이 20,000원 미만인 도서를 검색하세요
# example 4
SELECT *
FROM Book
WHERE price < 20000;
ex5). 가격이 10,000원 이상 20,000원 이하인 도서를 검색하세요
# example 5
SELECT *
FROM Book
WHERE price BETWEEN 10000 AND 20000;
# BETWEEN은 논리 연산자인 AND를 사용할 수 있다.
# 위의 답과 동일합니다.
SELECT *
FROM Book
WHERE price >= 10000 AND price <= 20000;
ex6). 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하시오
# example 6
SELECT *
FROM Book
WHERE publisher IN('굿스포츠', '대한미디어');
ex7). 출판사가 '굿스포츠' 혹은 '대한미디어'가 아닌 도서를 검색하시오
# example 7
SELECT *
FROM Book
WHERE publisher NOT IN('굿스포츠', '대한미디어');
와일드 문자의 종류는 다음과 같습니다.
와일드 문자 | 의미 | 사용 예 |
---|---|---|
+ | 문자열을 연결 | '골프' + '바이블' = '골프 바이블' |
% | 0개 이상의 문자열과 일치 | '%축구%' = 축구를 포함하는 문자열 |
[] | 1개의 문자와 일치 | '[0-5]%' = 0-5 사이 숫자로 시작하는 문자열 |
[^] | 1개의 문자와 불일치 | '[^0-5]%' = 0-5 사이 숫자로 시작하지 않는 문자열 |
_ | 특정 위치의 1개의 문자와 일치 | '_구%' = 두 번째 위치에 '구'가 들어가는 문자열 |
ex8). '축구의 역사'를 출간한 출판사를 검색하세요
# example 8
SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '축구의 역사';
ex9). 도서 이름에 '축구'가 포함된 출판사를 검색하세요
# example 9
SELECT bookname, publisher
FROM Book
WHERE bookname LIKE '%축구%';
ex10). 도서 이름의 왼쪽 두 번째 위치에 '구'라는 문자열을 갖는 도서를 검색하세요
# example 10
SELECT *
FROM Book
WHERE bookname LIKE '_구%';
# exam 1. 전화번호가 아직 입력되지 않은 고객의 이름을 검색
SELECT name
FROM Customer
WHERE phone IS NULL;
>> 박세리
# exam 2. 전화번호가 입력된 고객의 이름을 검색
SELECT name
FROM Customer
WHERE phone IS NOT NULL;
>> 박지성, 김연아, 장미란, 추신수
ex11). 축구에 관한 도서 중 가격이 20,000원 이상인 도서를 검색하세요
# example 11
SELECT *
FROM Book
WHERE bookname LIKE '%축구%' AND price >= 20000;
ex12). 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하세요
# example 12
SELECT *
FROM Book
WHERE publisher='굿스포츠' OR publisher='대한미디어';
SELECT [ALL | DISTINCT] 속성이름(들)
FROM 테이블이름(들)
ORDER BY 속성이름 [ASC | DESC]
ex13). 도서를 이름순으로 검색하세요
# example 13
SELECT *
FROM Book
ORDER BY bookname;
ex14). 도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하세요
# example 14
SELECT *
FROM Book
ORDER BY price, bookname;
ex15). 도서를 가격순으로 검색해 내림차순으로, 가격이 같으면 출판사순으로 검색하세요
# example 15
SELECT *
FROM Book
ORDER BY price DESC, publisher ASC;
특정 속상 값을 통계적으로 계산한 결과를 검색하기 위해 집계 함수를 이용
- 개수, 합계, 평균, 최댓값, 최솟값의 계산 기능을 제공
집계 함수 사용 시 주의 사항
- NULL인 속성 값은 제외하고 계산함
- WHERE 절에서는 사용할 수 없고, SELECT 절이나 HAVING 절에서만 사용 가능
함수 | 의미 | 문법 | 사용 가능한 속성의 타입 |
---|---|---|---|
SUM | 속성 값의 합계 | SUM([ALL | DISTINCT]속성이름) | 숫자 데이터 |
AVG | 속성 값의 평균 | AVG([ALL | DISTINCT]속성이름) | 숫자 데이터 |
COUNT | 속성 값의 개수 | COUNT([ALL | DISTINCT]속성이름 | *) | 모든 데이터 |
MAX | 속성 값의 최댓값 | MAX([ALL | DISTINCT]속성이름) | 모든 데이터 |
MIN | 속성 값의 최솟값 | MIN([ALL | DISTINCT]속성이름) | 모든 데이터 |
ex16). 고객이 주문한 도서의 총 판매액을 구하시오
# example 16
SELECT SUM(saleprice)
FROM Orders;
AS 키워드 : 속성이름의 별칭을 지칭할 수 있음
- AS 키워드는 생략 가능합니다.
# 위와 같은 문제입니다.
SELECT SUM(saleprice) AS '총매출'
FROM Orders;
ex17). 2번 고객이 주문한 도서의 총 판매액을 구하시오
# example 17
SELECT SUM(saleprice) AS '총매출'
FROM Orders;
WHERE custid = 2;
ex18). 고객이 주문한 도서의 총 판매액, 평균값, 최저가, 최고가를 구하시오
# example 18
SELECT SUM(saleprice) AS Total,
AVG(saleprice) AS Average,
MAX(saleprice) AS Minimum,
MIN(saleprice) AS Maximum
FROM Orders;
ex19). 마당서점의 도서 판매 건수를 구하시오
# example 19
SELECT COUNT(*)
FROM Orders;
ex20). 마당서점의 판매 된(서로 다른) 도서의 수를 구하시오.
# example 20
SELECT COUNT(DISTINCT bookid) AS '판매 도서 수'
FROM Orders;
ex21). 도서 가격에 따른 5% 적립금을 검색하시오
# example 21
SELECT bookname, price, price * 0.05 AS '적립금'
FROM Book;
# 기본 형식
SELECT [ALL | DISTINCT] 속성이름(들)
FROM 테이블이름(들)
WHERE 검색조건(들)
GROUP BY 속성이름
HAVING 검색조건(들)
WHERE랑 HAVING의 차이는 WHERE은 그룹화 하기 전이고, HAVING은 그룹화 후에 조건입니다.
ex22). 고객별로 주문한 도서의 총 수량과 총 판매액을 구하시오.
# example 22
SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액
FROM Orders
GROUP BY custid;
ex23). 가격이 8,000원 이상인 도서를 구매한 고객에 대하여 고객별 주문 도서의 총 수량을 구하시오. 단, 두 권 이상 구매한 고객만 구한다.
# example 23
SELECT custid, COUNT(*) AS 도서수량
FROM Orders
WHERE saleprice >= 8000
GROUP BY custid
HAVING count(*) >= 2;