💾database

[데이터 베이스] SQL 기본 문법 1 (SELECT, WHERE, ORDER BY, GROUP BY)

pkyung 2023. 2. 15. 00:55
반응형

mysql로 배우는 데이터베이스 개론과 실습 책을 보고 정리했습니다. 

https://www.hanbit.co.kr/academy/books/book_view.html?p_code=B8548562053 

 

IT CookBook , MySQL로 배우는 데이터베이스 개론과 실습

데이터베이스를 처음 배우는 학생을 대상으로, 이론과 실습을 함께 공부할 수 있도록 구성한 책입니다. 데이터베이스 시스템을 이해하는 데 필요한 이론을 4개의 부로 나누어 설명하고, 마지막

www.hanbit.co.kr

 

Table Book
bookid INTEGER
bookname VARCHAR
publisher VARCHAR
price INTEGER

 

 

Table Customer
custid INTEGER
name VARCHAR
address VARCHAR
phone VARCHAR

 

 

Table Orders
orderid INTEGER
custid INTEGER
bookid INTEGER
saleprice INTEGER
orderdate DATE
foreign key REFERENCES Customer(custid)
foreign key REFERENCES Book(bookid)

 

Table Imported_Book
bookid INTEGER
bookname VARCHAR
publisher VARCHAR
price INTEGER

SELECT문의 기본 문법

SELECT   속성 이름
FROM     테이블 이름
WHERE    조건

 

모든 도서의 이름과 가격을 검색하시오

SELECT bookname, price
FROM Book;

 

모든 도서의 도서번호와 도서이름 출판사, 가격을 검색하시오

*은 asterisk 로 모든 열을 나타낸다. 

SELECT bookid, bookname, publisher, price
FROM Book;

아래 위 동일하다.

SELECT *
FROM Book;

 

도서 테이블에 있는 모든 출판사를 검색하시오

종복 제거를 원할 때는 DISTINCT 키워드를 사용한다. 

SELECT DISTINCT publisher
FROM Book;

 

 

WHERE 조건 : 조건에 맞는 검색을 할 때 사용한다. 

 

가격이 20,000원 미만인 도서를 검색하시오

SELECT *
FROM Book
WHERE price < 20000;

 

가격이 10,000원 이상 20,000원 이하인 도서를 검색하시오

범위는 BETWEEN 사용한다. 

SELECT *
FROM Book
WHERE price BETWEEN 10000 AND 20000

 

출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하시오

WHERE 절에 두 개 이상의 값을 비교하려면 IN 또는 NOT IN을 사용한다. 

이는 집합은 원소인지 확인하는 연산자이다. 

SELECT *
FROM Book
WHERE publisher IN ('굿스포츠', '대한미디어');

 

'축구의 역사'를 출간한 출판사를 검색하시오

LIKE는 문자열의 패턴을 비교하는 연산자이다. 

이때는 ``(영문 따옴표)를 사용해야한다. 

SELECT bookname, publisher
FROM Book
WHERE bookname LIKE `축구의 역사`;

 

도서이름에 '축구'가 포함된 출판사를 검색하시오

SELECT bookname, publisher
FROM Book
WHERE bookname LINE `%축구%`

 

문자열 검색하는 와일드 문자

와일드 문자 의미 사용 예
+ 문자열 연결 `골프` + `바이블` : `골프 바이블`
% 0개 이상의 문자열과 일치 `%축구%` : 축구를 포함한 문자열
[] 1개의 문자와 일치 `[0-5]%` : 0-5사이 숫자로 시작하는 문자열
[^] 1개의 문자와 불일치 `[^0-5]%` : 0-5사이 숫자로 시작하지 않는 문자열
_ 특정 위치의 1개 문자와 일치 `_구%` : 두 번째 자리에 구가 들어가는 문자열

 

축구에 관한 도서 중 가격이 20,000원 이상인 도서를 검색하시오

AND와 OR, NOT을 사용하면 복합조건을 명시할 수 있다.

SELECT *
FROM Book
WHERE bookname LIKE `%축구%` AND price >= 20000;

 

 

도서를 이름순으로 검색하시오

ORDER BY는 특정 순서대로 출력할 때 사용한다. 

SELECT *
FROM Book
ORDER BY bookname;

 

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

default = ASC

SELECT *
FROM Book
ORDER BY price, bookname;

 

도서 가격의 내림차순으로 검색하시오 만약 가격이 같다면 출판사의 오름차순으로 출력하시오

내림차순 키워드는 DESC, 오름차순 키워드는 ASC이다. 

SELECT *
FROM Book
ORDER BY price DESC, publisher ASC;

 

 

집계함수와 GROUP BY

 

고객이 주문한 도서의 총 판매액을 구하시오

SUM(saleprice)는 저장된 데이터를 가공하여 얻은 새로운 데이터로 테이블에 별도의 이름이 없이 SUM(saleprice)로 출력된다. 따라서 AS 키워드로 별칭을 지정할 수 있다. 

SELECT SUM(saleprice) AS 총매출
FROM ORDERS;

 

2번 김연아 고객이 주문한 도서의 종 판매액을 구하시오

SELECT SUM(saleprice) AS 총매출
FROM ORDERS
WHERE custid=2;

 

고객이 주문한 도서의 총 판매액, 평균값, 최저가, 최고가를 구하시오

SELECT SUM(saleprice) AS 판매액,
       AVG(saleprice) AS 평균값,
       MIN(saleprice) AS 최저가,
       MAX(saleprice) AS 최고가,
FROM ORDERS;

 

마당서점의 도서 판매 건수를 구하시오

COUNT(*)은 해당 속성의 튜플 수를 세어준다. (NULL 제외)

SELECT COUNT(*)
FROM Orders;

 

고객별로 주문한 도서의 총 수량과 총 판매액을 구하시오

GROUP BY custid라고 명시하면 custid가 같은 값끼리 그룹으로 묶는다. 

SELECT custid, COUNT(*) AS 도서수량, SUM(saleprice) AS 총액
FROM Orders
GROUP BY custid;

 

custid 도서수량 총액
1 3 39000
2 2 15000
3 3 31000

 

가격이 8000원 이상인 도서를 구매한 고객에 대하여 고객별 주문 도서의 총 수량을 구하시오 단, 두 권 이상 구매한 고객만 구하시오

HAVING 키워드는 GROUP BY절의 결과를 나타내는 그룹을 제한하는 역할을 한다. 

SELECT custid, COUNT(*) AS 도서수량
FROM Orders
WHERE price >= 8000
GROUP BY custid
HAVING count(*) >= 2;

** HAVING은 반드시 ⓐGROUP BY와 함께 작성되어야 하며 ⓑWHERE 절보다 뒤에 나와야 한다. ⓒHAVING의 검색조건에는 반드시 SUM, AVG, MAX, MIN, COUNT와 같은 집계함수가 와야한다. **

 

 

반응형