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와 같은 집계함수가 와야한다. **
'💾database' 카테고리의 다른 글
[프로그래머스 / SQL] SELECT 문 부수기 (0) | 2024.09.18 |
---|---|
[Mysql] 데이터베이스에 이모지(이모티콘) 안들어가는 이슈 해결하기 (1) | 2024.04.02 |
[데이터 베이스] SQL 고급 문법 1 (내장 함수, NULL 값 처리, 부속 질의) (1) | 2023.02.19 |
[데이터 베이스] SQL 기본 문법 3 (CREATE, ALTER, INSERT, UPDATE, DELETE) (0) | 2023.02.15 |
[데이터 베이스] SQL 기본 문법 2 (JOIN, SUBQUERY) (0) | 2023.02.15 |