1. SQL 분류
DDL = 구조 생성/변경/삭제
CREATE, ALTER, DROP
DML = 데이터 검색/삽입/수정/삭제
SELECT, INSERT, UPDATE, DELETE
DCL = 권한 관리
GRANT, REVOKE
2. SELECT 기본형
SELECT 속성명
FROM 테이블명
WHERE 조건
GROUPBY 그룹기준
HAVING 그룹조건
ORDERBY 정렬기준;
순서 암기:
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY
3. SELECT
전체 조회
SELECT*
FROM Book;
- = 모든 속성
특정 속성 조회
SELECT bookname, price
FROM Book;
중복 제거
SELECT DISTINCT publisher
FROM Book;
DISTINCT = 중복 제거
4. WHERE 조건
비교
WHERE price=10000
WHERE price<>10000
WHERE price>10000
WHERE price>=10000
WHERE price<10000
WHERE price<=10000
= 같다
<> 같지 않다
> 초과
>= 이상
< 미만
<= 이하
5. BETWEEN
WHERE price BETWEEN 10000 AND 20000
뜻:
10000 이상 20000 이하
중요:
BETWEEN은 양끝 포함
같은 뜻:
WHERE price>=10000 AND price<=20000
6. IN
WHERE publisher IN ('굿스포츠','대한미디어')
뜻:
출판사가 굿스포츠 또는 대한미디어
같은 뜻:
WHERE publisher='굿스포츠'
OR publisher='대한미디어'
7. LIKE 패턴 검색
%
WHERE booknameLIKE'%축구%'
뜻:
앞뒤에 뭐가 있든 '축구'가 포함되면 됨
예:
축구의 역사
월드컵 축구 이야기
_
WHERE booknameLIKE'_구%'
뜻:
첫 글자는 아무거나 1글자
두 번째 글자가 '구'
그 뒤는 아무거나
예:
축구의 역사
축 = _
구 = 구
의 역사 = %
자주 나오는 패턴
LIKE'축구%'
축구로 시작
LIKE'%축구'
축구로 끝남
LIKE'%축구%'
축구 포함
LIKE'_구%'
두 번째 글자가 구
LIKE'__구%'
세 번째 글자가 구
8. NULL
WHERE phone IS NULL
전화번호가 없는 고객
WHERE phone IS NOT NULL
전화번호가 있는 고객
주의:
phone = NULL
이렇게 쓰면 안 됨.
9. AND OR NOT
WHERE price >= 10000 AND price <= 20000
둘 다 만족
WHERE publisher = '굿스포츠'
OR publisher = '대한미디어'
하나라도 만족
WHERE NOT publisher = '굿스포츠'
반대 조건
10. ORDER BY
ORDER BY priceASC;
오름차순, 작은 값 → 큰 값
ORDER BY price DESC;
내림차순, 큰 값 → 작은 값
기본값은 ASC.
SELECT *
FROM Book
ORDER BY price DESC;
11. 집계 함수
SUM = 합계
AVG = 평균
COUNT = 개수
MAX = 최댓값
MIN = 최솟값
합계
SELECT SUM(saleprice)
FROM Orders;
평균
SELECT AVG(saleprice)
FROM Orders;
개수
SELECT COUNT(*)
FROM Orders;
COUNT(*) = 전체 행 개수
최댓값
SELECT MAX(price)
FROM Book;
최솟값
SELECT MIN(price)
FROM Book;
12. GROUP BY
같은 값끼리 묶어서 계산.
SELECT custid, SUM(saleprice)
FROM Orders
GROUPBY custid;
뜻:
고객별 총 구매금액
중요 규칙:
GROUP BY를 쓰면 SELECT에는
GROUP BY에 쓴 속성 + 집계함수
위주로 써야 함
13. HAVING
그룹 결과에 조건 걸기.
SELECT custid,COUNT(*)
FROM Orders
GROUP BY custid
HAVING COUNT(*) >= 2;
뜻:
주문을 2번 이상 한 고객
WHERE vs HAVING
WHERE = 행 조건
HAVING = 그룹 조건
예:
WHERE price>=10000
개별 행 조건
HAVING SUM(saleprice)>=20000
그룹 합계 조건
14. JOIN
JOIN = 테이블 연결.
PDF 예제 기준 연결키:
Customer ↔ Orders = custid
Book ↔ Orders = bookid
기본 조인
SELECT Customer.name, Orders.saleprice
FROM Customer, Orders
WHERE Customer.custid= Orders.custid;
뜻:
고객번호가 같은 것끼리 연결해서
고객 이름과 판매가격 출력
세 테이블 조인
SELECT Customer.name, Book.bookname, Orders.saleprice
FROM Customer, Book, Orders
WHERE Customer.custid= Orders.custid
AND Book.bookid= Orders.bookid;
뜻:
고객 이름, 주문한 책 이름, 판매가격 출력
15. INNER JOIN
SELECT Customer.name, Orders.saleprice
FROM CustomerINNERJOIN Orders
ON Customer.custid= Orders.custid;
뜻:
양쪽 테이블에서 조건이 일치하는 행만 출력
암기:
INNER JOIN = 교집합 느낌
16. LEFT OUTER JOIN
SELECT Customer.name, Orders.saleprice
FROM CustomerLEFTOUTERJOIN Orders
ON Customer.custid= Orders.custid;
뜻:
왼쪽 테이블 Customer는 전부 출력
Orders와 매칭되면 주문 정보 출력
매칭 안 되면 Orders 쪽은 NULL
암기:
LEFT OUTER JOIN = 왼쪽은 무조건 살림
시험 문장:
주문하지 않은 고객도 포함하여 출력
이러면 LEFT OUTER JOIN 가능성 높음.
17. RIGHT OUTER JOIN
SELECT Customer.name, Orders.saleprice
FROM CustomerRIGHTOUTERJOIN Orders
ON Customer.custid= Orders.custid;
뜻:
오른쪽 테이블 Orders는 전부 출력
Customer와 매칭 안 되면 Customer 쪽은 NULL
암기:
RIGHT OUTER JOIN = 오른쪽은 무조건 살림
18. FULL OUTER JOIN
SELECT Customer.name, Orders.saleprice
FROM CustomerFULLOUTERJOIN Orders
ON Customer.custid= Orders.custid;
뜻:
왼쪽, 오른쪽 둘 다 전부 출력
매칭 안 되는 쪽은 NULL
암기:
FULL OUTER JOIN = 양쪽 다 살림
19. JOIN 한 줄 암기
INNER JOIN = 일치하는 것만
LEFT OUTER JOIN = 왼쪽 전부
RIGHT OUTER JOIN = 오른쪽 전부
FULL OUTER JOIN = 양쪽 전부
20. 부속질의 / 서브쿼리
SQL 안에 SQL.
SELECT bookname
FROM Book
WHERE price= (
SELECT MAX(price)
FROM Book
);
뜻:
가장 비싼 도서 이름 출력
안쪽 먼저:
SELECT MAX(price)
FROM Book;
그다음 바깥쪽 실행.
21. IN 부속질의
SELECT name
FROM Customer
WHERE custidIN (
SELECT custid
FROM Orders
);
뜻:
주문한 적 있는 고객 이름
22. 상관 부속질의
안쪽 SQL이 바깥쪽 SQL 값을 사용함.
SELECT b1.bookname
FROM Book b1
WHERE b1.price> (
SELECT AVG(b2.price)
FROM Book b2
WHERE b2.publisher= b1.publisher
);
뜻:
같은 출판사의 평균 가격보다 비싼 책
핵심:
b2.publisher= b1.publisher
안쪽 쿼리가 바깥쪽 b1.publisher를 씀.
23. 집합연산
PDF에 나옴.
UNION = 합집합
MINUS = 차집합
INTERSECT = 교집합
UNION
SELECT custid
FROM Customer
UNION
SELECT custid
FROM Orders;
뜻:
Customer의 custid와 Orders의 custid를 합침
중복은 제거
MINUS
SELECT custid
FROM Customer
MINUS
SELECT custid
FROM Orders;
뜻:
전체 고객 중 주문하지 않은 고객번호
앞에서 뒤를 뺌.
INTERSECT
SELECT custid
FROM Customer
INTERSECT
SELECT custid
FROM Orders;
뜻:
Customer에도 있고 Orders에도 있는 고객번호
즉 주문한 적 있는 고객번호
24. EXISTS
조건에 맞는 행이 존재하면 참.
SELECT name
FROM Customer c
WHERE EXISTS (
SELECT*
FROM Orders o
WHERE c.custid= o.custid
);
뜻:
주문한 적 있는 고객 이름
NOT EXISTS
SELECT name
FROM Customer c
WHERENOTEXISTS (
SELECT*
FROM Orders o
WHERE c.custid= o.custid
);
뜻:
주문한 적 없는 고객 이름
25. CREATE
테이블 생성.
CREATETABLE NewBook (
bookid NUMBER,
bookname VARCHAR2(20),
publisher VARCHAR2(20),
price NUMBER,
PRIMARYKEY(bookid)
);
제약조건
PRIMARY KEY = 기본키
FOREIGN KEY = 외래키
NOT NULL = NULL 금지
UNIQUE = 중복 금지
DEFAULT = 기본값
CHECK = 조건 제한
예:
CREATETABLE NewBook (
bookid NUMBERPRIMARYKEY,
bookname VARCHAR2(20)NOTNULL,
publisher VARCHAR2(20),
price NUMBERDEFAULT10000CHECK(price>1000)
);
26. FOREIGN KEY
FOREIGNKEY(custid)REFERENCES Customer(custid)
뜻:
현재 테이블의 custid가
Customer 테이블의 custid를 참조함
27. ALTER
테이블 구조 변경.
속성 추가
ALTERTABLE NewBook
ADD isbn VARCHAR2(13);
속성 변경
ALTERTABLE NewBook
MODIFY isbn NUMBER;
속성 삭제
ALTERTABLE NewBook
DROPCOLUMN isbn;
기본키 추가
ALTERTABLE NewBook
ADDPRIMARYKEY(bookid);
28. DROP
테이블 자체 삭제.
DROPTABLE NewBook;
중요:
DROP = 테이블 구조 + 데이터 모두 삭제
DELETE = 데이터만 삭제
29. INSERT
데이터 삽입.
INSERTINTO Book(bookid, bookname, publisher, price)
VALUES (11,'스포츠 의학','한솔의학서적',90000);
속성 생략 가능:
INSERTINTO Book
VALUES (11,'스포츠 의학','한솔의학서적',90000);
단, 테이블 속성 순서와 값 순서가 정확히 맞아야 함.
30. 대량 삽입
INSERTINTO NewBook(bookid, bookname, publisher, price)
SELECT bookid, bookname, publisher, price
FROM Book;
뜻:
Book의 조회 결과를 NewBook에 한꺼번에 삽입
31. UPDATE
데이터 수정.
UPDATE Customer
SET address='대한민국 부산'
WHERE custid=5;
뜻:
custid가 5인 고객의 주소 수정
주의:
UPDATE Customer
SET address='대한민국 부산';
WHERE 없으면 전체 고객 주소가 바뀜.
32. DELETE
데이터 삭제.
DELETEFROM Customer
WHERE custid=5;
뜻:
custid가 5인 고객 삭제
전체 삭제:
DELETEFROM Customer;
뜻:
Customer 테이블의 모든 데이터 삭제
테이블 구조는 남음
진짜 시험 직전 암기표
SELECT = 조회
FROM = 테이블
WHERE = 행 조건
GROUP BY = 그룹 묶기
HAVING = 그룹 조건
ORDER BY = 정렬
DISTINCT = 중복 제거
BETWEEN = 이상 이하
IN = 목록 중 하나
LIKE = 패턴 검색
% = 여러 글자
_ = 한 글자
IS NULL = NULL 찾기
SUM = 합계
AVG = 평균
COUNT = 개수
MAX = 최댓값
MIN = 최솟값
INNER JOIN = 일치하는 것만
LEFT OUTER JOIN = 왼쪽 전부
RIGHT OUTER JOIN = 오른쪽 전부
FULL OUTER JOIN = 양쪽 전부
UNION = 합집합
MINUS = 차집합
INTERSECT = 교집합
EXISTS = 존재하면 참
CREATE = 테이블 생성
ALTER = 구조 변경
DROP = 테이블 삭제
INSERT = 데이터 삽입
UPDATE = 데이터 수정
DELETE = 데이터 삭제
진짜 위험한 건 이 5개임:
1. BETWEEN은 양끝 포함
2. LIKE에서 %는 여러 글자, _는 한 글자
3. WHERE는 행 조건, HAVING은 그룹 조건
4. LEFT OUTER JOIN은 왼쪽 전부 출력
5. DROP은 테이블 삭제, DELETE는 데이터 삭제