(Structured Query Language)
데이터베이스 연구실
1
[목 차]
3.5 2개 이상 테이블에서 결과가 필요하다
3.5.1 조인을 이용한 여러 테이블 질의 3.5.2 부속질의를 사용한 여러 테이블 질의 3.5.3. 집합 연산
3.5.4. EXISTS 문 3.6 SQL DML 문
3.6.1 SQL INSERT 문 3.6.2 SQL Update 문 3.6.3 SQL DELETE 문 연습문제
[목 차]
3.5 2개 이상 테이블에서 결과가 필요하다
3.5.1 조인을 이용한 여러 테이블 질의 3.5.2 부속질의를 사용한 여러 테이블 질의 3.5.3. 집합 연산
3.5.4. EXISTS 문 3.6 SQL DML 문
3.6.1 SQL INSERT 문 3.6.2 SQL Update 문 3.6.3 SQL DELETE 문 연습문제
2
3.5.1 조인을 이용한 여러 테이블 질의
SELECT 문
- (고객과 주문 데이터의 의미 없는 연결)
SELECT *
FROM CUSTOMER, ORDERS;
3
SELECT 문
- 고객과 고객의 주문에 관한 데이터를 모두 보여라.
SELECT *
FROM CUSTOMER, ORDERS
WHERE CUSTOMER.custid=ORDERS.custid;
4
- 고객과 고객의 주문에 관한 데이터를 고객번호로 정렬 하여 모두 보여라.
SELECT *
FROM CUSTOMER, ORDERS;
WHERE CUSTOMER.custid=ORDERS.custid ORDER BY CUSTOMER.custid;
SELECT *
FROM CUSTOMER, ORDERS;
WHERE CUSTOMER.custid=ORDERS.custid ORDER BY CUSTOMER.custid;
5
SELECT 문
-고객의 이름과 구매된 모든 도서의 구매값(saleprice)을 구하라.
SELECT CUSTOMER.name, saleprice FROM CUSTOMER, ORDERS
WHERE CUSTOMER.custid=ORDERS.custid;
6
- 고객별로 구매된 모든 도서의 구매값(saleprice)을 구하여 고객별로 정렬하여라.
SELECT CUSTOMER.name, SUM(saleprice) FROM CUSTOMER, ORDERS
WHERE CUSTOMER.custid=ORDERS.custid GROUP BY CUSTOMER.name
ORDER BY CUSTOMER.name;
SELECT CUSTOMER.name, SUM(saleprice) FROM CUSTOMER, ORDERS
WHERE CUSTOMER.custid=ORDERS.custid GROUP BY CUSTOMER.name
ORDER BY CUSTOMER.name;
7
SELECT 문
- 고객의 이름과 구매한 도서의 이름을 구하여라.
SELECT CUSTOMER.name, BOOK.bookname FROM CUSTOMER, ORDERS, BOOK
WHERE CUSTOMER.custid=ORDERS.custid AND ORDERS.bookid=BOOK.bookid;
SELECT CUSTOMER.name, BOOK.bookname FROM CUSTOMER, ORDERS, BOOK
WHERE CUSTOMER.custid=ORDERS.custid AND ORDERS.bookid=BOOK.bookid;
8
- 20000원 이상 책을 구매한 고객의 이름과 구매한 도서의 이름을 구하여라.
SELECT CUSTOMER.name, BOOK.bookname FROM CUSTOMER, ORDERS, BOOK
WHERE CUSTOMER.custid=ORDERS.custid AND ORDERS.bookid=BOOK.bookid
AND ORDERS.saleprice >= 20000;
SELECT CUSTOMER.name, BOOK.bookname FROM CUSTOMER, ORDERS, BOOK
WHERE CUSTOMER.custid=ORDERS.custid AND ORDERS.bookid=BOOK.bookid
AND ORDERS.saleprice >= 20000;
9
3.5.2 부속질의를 사용한 여러 테이블 질의
SELECT 문
- 주문이 있는 고객을 찾아라(전체 고객중에서)
SELECT name
FROM CUSTOMER
WHERE custid IN (SELECT custid FROM ORDERS);
10
- ‘대한미디어’ 출판사 책을 구매한 고객의 이름을 보여라.
SELECT name
FROM CUSTOMER
WHERE custid IN (SELECT custid FROM ORDERS
WHERE bookid IN (SELECT bookid FROM BOOK
WHERE publisher='대한미디어'));
SELECT name
FROM CUSTOMER
WHERE custid IN (SELECT custid FROM ORDERS
WHERE bookid IN (SELECT bookid FROM BOOK
WHERE publisher='대한미디어'));
11
(SELECT custid FROM ORDERS WHERE bookid IN SELECT name
FROM CUSTOMER WHERE custid IN
앞의 SQL문을 이해하려면 아래서부터 읽어야 한다.
(SELECT bookid FROM BOOK
WHERE publisher='대한미디어') (SELECT custid
FROM ORDERS WHERE bookid IN
마지막 SELECT문은 ‘대한미디어’에서 출판한 책의 bookid를 구한다. 가 운데 SELECT 문은 bookid를 주문한 고객의 custid를 구한다. 맨 위
SELECT 문은 중간 SELECT 문에서 찾은 custid에 대한 name을 구한다.
12
SELECT 문
- 도서를 구매하지 않은 고객의 이름을 보여라.
SELECT name
FROM CUSTOMER MINUS
SELECT name
FROM CUSTOMER
WHERE custid IN (SELECT custid FROM ORDERS);
SELECT name
FROM CUSTOMER MINUS
SELECT name
FROM CUSTOMER
WHERE custid IN (SELECT custid FROM ORDERS);
13
3.5.4. EXISTS 문
SELECT 문
- 주문이 있는 고객을 보여라
SELECT name, address FROM CUSTOMER c1 WHERE EXISTS
(SELECT *
FROM ORDERS c2
WHERE c1.custid=c2.custid);
조건에 맞는 튜플이 존재하면 결과에 포함이 되도록 하는 문장이다.
SELECT name, address FROM CUSTOMER c1 WHERE EXISTS
(SELECT *
FROM ORDERS c2
WHERE c1.custid=c2.custid);
14
FROM CUSTOMER c1 WHERE EXISTS
(SELECT *
FROM ORDERS c2
WHERE c1.custid=c2.custid);
①
②`
③
④
③
④
⑤
15
3.6 SQL DML 문
3.6.1 SQL INSERT 문
INSERT INTO BOOK(bookid, bookname, publisher, price) VALUES(11, '스포츠 의학‘, ’한솔의학서적‘, 90000);
INSERT INTO BOOK(bookid, bookname, publisher) VALUES(11, '스포츠 의학', '한솔의학서적');
입력하지 않은 도서의 가격은 0이 아니고 NULL이라 는 특수한 값이 입력된다.
16
- 대량 삽입(Bulk Insert)
INSERT INTO BOOK(bookid, bookname, price, publisher)
SELECT bookid, bookname, price, publisher
FROM IMPORTED_BOOK;
UPDATE 문은 기존 행의 값을 바꾸는 문장이다.
UPDATE CUSTOMER
SET address = '대한민국 서울' WHERE custid=5;
- 대량 수정
UPDATE CUSTOMER
SET address = ‘대한민국 서울’;
UPDATE CUSTOMER
SET address = ‘대한민국 서울’;
- 다른 테이블의 값을 이용한 수정 UPDATE CUSTOMER
SET address =
(SELECT address
FROM CUSTOMER WHERE name='김연아‘) WHERE name= '박세리‘;
17
3.6.3 SQL DELETE 문
DELETE FROM CUSTOMER WHERE custid = 5;
18
2. 책 번호가 1인 도서의 이름 검색
3. 책 값이 20000원 이상인 책 이름의 검색 4. ‘박지성’의 총 구매액
5. 박지성이 구매한 총 도서의 수 [1] - 마당서점 기초문제 - 고객
[2] - 마당서점 심화문제 - 운영자/경영자
1. 2011년 7월 4일에서 7월 7일 사이에 주문된 책의 주문번호
2. 2011년 7월 4일에서 7월 7일 사이에 주문되지 않은 책의 주문 번호 3. 성이 김씨인 고객의 이름과 주소
4. 성이 “김”씨이고 이름이 “아”로 끝나는 고객의 이름과 주소 5. 주문을 하지 않은 고객의 이름(조인 사용)
6. 주문 금액의 총액과 주문의 평균 금액.
7. 고객의 이름과 고객 별 주문액
8. 고객의 이름과 고객이 구매한 도서 목록
9. 도서의 값과 도서의 구매 값의 차이가 가장 많은 주문
10. 고객들의 평균 구매액보다 구매액이 많은 고객들의 이름 [2] - 마당서점 심화문제 - 운영자/경영자
1. 2011년 7월 4일에서 7월 7일 사이에 주문된 책의 주문번호
2. 2011년 7월 4일에서 7월 7일 사이에 주문되지 않은 책의 주문 번호 3. 성이 김씨인 고객의 이름과 주소
4. 성이 “김”씨이고 이름이 “아”로 끝나는 고객의 이름과 주소 5. 주문을 하지 않은 고객의 이름(조인 사용)
6. 주문 금액의 총액과 주문의 평균 금액.
7. 고객의 이름과 고객 별 주문액
8. 고객의 이름과 고객이 구매한 도서 목록
9. 도서의 값과 도서의 구매 값의 차이가 가장 많은 주문
10. 고객들의 평균 구매액보다 구매액이 많은 고객들의 이름
19
[3] - 마당서점 어려운 문제
1. 박지성이 구매한 책의 출판사와 같은 출판사에서 책을 구매한 고객들 이름 2. 2개 이상의 서로 다른 출판사에서 책을 구매한 고객의 이름
3. 전체 고객의 30%이상의 고객이 구매한 도서
[4] 다음 DML 문을 작성하여라
1. 도서 (‘스포츠 세계’, ‘대한미디어’, 10000원)가 새로 마당서점에 들어왔다.
2. ‘이상미디어’에서 출판한 도서의 삭제
3. 출판사 ‘삼성당’이 ‘삼성출판사’로 이름이 바뀌었다.
[3] - 마당서점 어려운 문제
1. 박지성이 구매한 책의 출판사와 같은 출판사에서 책을 구매한 고객들 이름 2. 2개 이상의 서로 다른 출판사에서 책을 구매한 고객의 이름
3. 전체 고객의 30%이상의 고객이 구매한 도서
[4] 다음 DML 문을 작성하여라
1. 도서 (‘스포츠 세계’, ‘대한미디어’, 10000원)가 새로 마당서점에 들어왔다.
2. ‘이상미디어’에서 출판한 도서의 삭제
3. 출판사 ‘삼성당’이 ‘삼성출판사’로 이름이 바뀌었다.
20