데이터베이스 생성
USE bookshopdb;
CREATE TABLE bookClient(
clientNo VARCHAR(10) NOT NULL PRIMARY KEY,
clientName VARCHAR(30) NOT NULL,
clientPhone VARCHAR(15),
clientAddress VARCHAR(40),
clientBirth DATE,
clientHobby VARCHAR(15),
clientGender VARCHAR(5)
);
CREATE TABLE bookSale(
bsNo VARCHAR(10) NOT NULL PRIMARY KEY,
bsDate DATE,
bsQty INT,
clientNo VARCHAR(10) NOT NULL,
bookNo VARCHAR(10) NOT NULL,
CONSTRAINT FK_bookSale_clientNo FOREIGN KEY (clientNo)
REFERENCES bookClient(clientNo),
CONSTRAINT FK_bookSale_bookNo FOREIGN KEY (bookNo)
REFERENCES book(bookNo)
);
ALTER TABLE book
ADD (bookAuthor VARCHAR(20),
bookStock INT);
- 최종 데이터베이스 테이블은 다음과 같다.
book / bookclient
📌 SELECT
데이터 조회(SELECT)
SELECT [ALL|DISTINCT] 컬럼(열)리스트 (*)
FROM 테이블명
[WHERE 검색조건(들)]
[GROUP BY 열이름]
[HAVING 검색조건(들)]
[ORDER BY 얄이름[ASC|DESC]]
SELECT [ALL|DISTINCT] 컬럼(열)리스트 (*) : 검색할 열리스트 지정
WHERE 검색조건(들) : 질의 결과에 포함될 행들이 만족할 조건
GROUP BY 열이름 : 그룹 질의 → 특정 컬럼으로 그룹화한 후 각 그룹에 대해 1행씩 질의 결과 생성
HAVING 검색조건(들) : GROUP BY 절에 의해 구성된 그룹들에 대해 적용할 조건
ORDER BY 열이름 [ASC|DESC] : 열이름의 값을 기준으로 결과를 정령
- ASC: 오름차순, DESC: 내림차순
SELECT문 실행순서
SELECT >> (5)
DISTICT >> (6)
FROM >> (1)
WHERE >> (2)
GROUP BY >> (3)
HAVING >> (4)
ORDER BY >> (7)
1️⃣ SELECT
SELECT * FROM book;
SELECT * FROM bookSale;
2️⃣ SELECT DISTINCT
- 중복된 레코드(행)를 한번만 출력:
DISTINCT
- 모든 레코드 출력:
ALL (기본값)
SELECT DISTINCT bookName, bookPrice, bookAuthor FROM bookshopdb.book
WHERE bookPrice >= 30000;
SELECT bookName, bookPrice, bookAuthor, bookStock FROM bookshopdb.book
WHERE bookStock >= 3 AND bookStock <= 5;
SELECT DISTINCT bookAuthor from book;
3️⃣ SELECT FROM ~ WHERE
SELECT [All|DISTINCT] FROM 테이블명 WHERE 조건식
WHERE 조건식에 사용되는 연산자
1) 비교: >, <, >=, <=, =, !=
2) 논리: AND, OR
3) 범위: BETWEEN 시작 AND 끝
4) 리스트에 포함여부(멤버): IN, NOT IN
5) NULL: IS NULL, IS NOT NULL
6) 패턴매칭: LIKE 문자열서식 (%, _) (문자열의 일부가 위치하는 데이터 검색)
- %: ALL
- _: 단일문자(문자하나)
- ___: 3개 문자로 구성된 문자열
- bookName LIKE '%파이썬%' >> '파이썬' 문자열이 들어가있는 모든 문자열
- bookName LIKE '파이썬%' >> '파이썬' 문자열로 시작하는 문자열
- bookName LIKE '%파이썬' >> '파이썬' 문자열로 끝나는 문자열
- bookName LIKE '%' >> 0개 이상의 문자를 가진 문자열
- bookName LIKE '_' >> 단일문자
- bookName LIKE '____' >> 4개의 문자로 구성된 문자열
1) 비교
SELECT bookName, bookAuthor
FROM bookshopdb.book
WHERE bookAuthor='홍길동';
SELECT bookName, bookPrice, bookStock
FROM bookshopdb.book
WHERE bookPrice >= 30000;
2) 논리
SELECT *
FROM bookshopdb.book
WHERE bookAuthor='홍길동' AND bookStock >= 3;
SELECT *
FROM bookshopdb.book
WHERE bookAuthor='홍길동' OR bookAuthor='성춘향';
3) BETWEEN AND
SELECT bookName, bookPrice
FROM bookshopdb.book
WHERE bookPrice BETWEEN 25000 AND 30000;
SELECT bookName, bookPrice
FROM bookshopdb.book
WHERE bookPrice >= 25000 AND bookPrice <= 30000;
4) 리스트에 포함
SELECT * FROM publisher
WHERE pubName='좋은출판사' OR pubName='강남출판사';
SELECT bookName, bookAuthor, pubNo
FROM bookshopdb.book
WHERE pubNo IN (1, 2);
SELECT bookName, pubNo
FROM bookshopdb.book
WHERE pubNo NOT IN (1);
5) 조건
SELECT *
FROM bookshopdb.bookclient
WHERE clientHobby IS NULL;
SELECT *
FROM bookshopdb.bookclient
WHERE clientHobby = '';
UPDATE bookClient SET clientHobby=NULL WHERE clientHobby='';
SELECT *
FROM bookshopdb.bookclient
WHERE clientHobby IS NOT NULL;
6) 패턴매칭
SELECT clientName, clientBirth
FROM bookshopdb.bookclient
WHERE clientBirth LIKE '199%';
SELECT clientName, clientBirth
FROM bookshopdb.bookclient
WHERE clientBirth >= '1990-01-01' AND clientBirth <= '1999-12-31';
SELECT *
FROM bookshopdb.bookclient
WHERE clientName LIKE '____';
4️⃣ ORDER BY
데이터 정렬 : ORDER BY절
- 가장 마지막에 실행
- 정렬 방식: ASC(오름차순) | DESC(내림차순)
SELECT *
FROM bookshopdb.book
ORDER BY bookName ASC;
SELECT *
FROM bookshopdb.book
ORDER BY bookName ASC;
SELECT *
FROM bookshopdb.book
ORDER BY bookDate DESC;
LIMIT : 출력 개수 설정
LIMIT OFFSET : 출력 시작 위치 설정
SELECT *
FROM bookshopdb.book
ORDER BY bookDate DESC
LIMIT 5;
SELECT *
FROM bookshopdb.book
ORDER BY bookDate DESC
LIMIT 5 OFFSET 3;
SELECT *
FROM bookshopdb.book
ORDER BY bookDate DESC
LIMIT 0, 5;
SELECT *
FROM bookshopdb.book
ORDER BY bookDate DESC
LIMIT 10, 3;
SELECT *
FROM bookshopdb.book
ORDER BY bookStock DESC, bookDate DESC;