-- p195 연습문제 1, 2
-- 01 (1)도서 번호가 1인 도서의 이름
select * from book
where Bookid = 1;
-- 01 (2) 가격이 20,000원 이상인 도서의 이름
select * from book
where price > 20000;
-- 01 (3) 박지성의 총구매액
select SUM(Saleprice) from Orders
where CUSTid = 1;
-- 01 (4) 박지성이 구매한 도서의 수
select count(Bookid) from Orders
where CUSTid = 1;
-- 02 (1) 마당서점 도서의 총수
SELECT *
FROM Book;
-- 02 (2) 마당서점에 도서를 출고하는 출판사의 총수
select COUNT(DISTINCT PUBLISHER)
from Book;
-- 02 (3) 모든 고객의 이름, 주소
select Name,Address
from Customer;
-- 02 (4) 2020년 7월 4일 ~ 7월 7일 사이에 주문받은 도서의 주문번호
SELECT BOOKID
FROM ORDERS
WHERE ORDERDATE
BETWEEN TO_DATE('2020-07-04','YYYY-MM-DD')
AND TO_DATE('2020-07-07','YYYY-MM-DD');
-- 02 (5) 2020년 7월 4일 ~ 7월 7일 사이에 주문받은 도서를 제외한 도서의 주문번호
SELECT BOOKID
FROM ORDERS
WHERE ORDERDATE NOT
BETWEEN TO_DATE('2020-07-04','YYYY-MM-DD')
AND TO_DATE('2020-07-07','YYYY-MM-DD');
-- 02 (6) 성이 '김'씨인 고객의 이름과 주소
select Name,Address
from Customer
WHERE Name like '김%';
-- 02 (7) 성이 '김'씨이고 이름이 '아'로 끝나는 고객의 이름과 주소
select Name,Address
from Customer
WHERE Name LIKE '김%아' ;
===========================================
-- p256 연습문제 1, 2, 3
1. 다음 내장 함수의 결과를 적으시오.
ABS(-15) = 15(절대값)
CEIL(15.7) = 16(15.7보다 크거나 같은 최소의 정수)
COS(3.14159) = -0.999999999996479
FLOOR(15.7) = 15(15.7보다 작거나 같은 최소의 정수)
LOG(10,100) = 2
MOD(11,4) = 3 (나머지)
POWER(3,2) = 9
ROUND(15.7) = 16
SIGN(-15) = -1(음수)
TRUNC(15.7) = 15
CHR(67) = C
CONCAT('HAPPY ', 'Birthday') = HAPPY BIRTHDAY
LOWER('Birthday') = birthday
LPAD('Page 1', 15, '*.') = *.*.*.*.*Page 1 (문자열의 왼쪽에 지정한 자리수까지 지정한 문자열 채움)
LTRIM('Page 1', 'ae') = Page 1 (지정한 문자를 왼쪽에서 제거) ?
REPLACE('JACK', 'J', 'BL') = BLACK (JACK에서 J를 BL로 교체)
RPAD('Page 1', 15, '*.') = Page 1*.*.*.*.*
RTRIM('Page 1', 'ae') = Page1
SUBSTR('ABCDEFG', 3, 4) = CDEF (문자열 3번째 자리에서 4개 글자)
TRIM(LEADING 0 FROM '00AA00') = AA00
UPPER('Birthday') = BIRTHDAY
ASCII('A') = 65 (A의 ASCII 코드 값)
INSTR('CORPORATE FLOOR','OR', 3, 2) = 14 (문자열 3번째에서 OR을 검색하여 2번째 OR의 위치)
LENGTH('Birthday') = 8 (문자열 길이)
ADD_MONTHS('14/05/21', 1) = 14/06/21
LAST_DAY(SYSDATE) = 21/06/30 (해당 월의 마지막 일자)
NEXT_DAY(SYSDATE, ‘화’) = 21/06/29
ROUND(SYSDATE) = 21/06/26
SYSDATE = 21/06/25
TO_CHAR(SYSDATE) = 21/06/25 (SYSDATE 값을 varchar2값으로 변환)
TO_CHAR(123) = 123
TO_DATE('12 05 2014', 'DD MM YYYY') = 14/05/12 (date 타입으로 변환)
TO_NUMBER('12.3') = 12.3 (문자열을 숫자로 변환)
DECODE(1,1,'aa','bb') = aa
NULLIF(123, 345) = 123 ('123'과 '345'이 다르므로, 같으면 NULL)
NVL(NULL, 123) = 123 (NULL 값을 지정한 값으로 변환)
2. Mybook 테이블을 생성하고 NULL에 관한 다음 SQL 문에 답하시오. 질의의 결과를
보면서 NULL에 대한 개념을 정리해보시오.
(1) SELECT *
FROM Mybook;
- 질의 결과 : 전체 테이블 자료를 출력
(2) SELECT bookid, NVL(price,0)
FROM Mybook;
- 질의 결과 : NULL을 0으로 교체하여 출력함
(3) SELECT *
FROM Mybook
WHERE price IS NULL;
- 질의 결과 : price가 NULL인 행을 검색하여 출력함
(4) SELECT *
FROM Mybook
WHERE price = '';
- 질의 결과 : NULL처리되니 않고, data가 없음
(5) SELECT bookid, price+100
FROM Mybook;
- 질의 결과 : NULL의 연산은 NULL임
(6) SELECT SUM(price),AVG(price), COUNT(*)
FROM Mybook
WHERE bookid >= 4;
- 질의 결과 : 테이블 자료가 없으므로 NULL로 표시함
(7) SELECT COUNT(*), COUNT(price)
FROM Mybook;
- 질의 결과 : 전체 자료를 카운트하면 NULL이 포함되나,
price를 설정하여 카운트하면 NULL은 포함되지 않음
(8) SELECT SUM(price), AVG(price)
FROM Mybook;
질의 결과 : SUM, AVG 연산에 NULL은 포함되지 않음
3. ROWNUM에 관한 다음 SQL 문에 답하시오. 데이터는 마당서점 데이터베이스를
이용한다.
(1)SELECT *
FROM Book;
(2)SELECT *
FROM Book;
WHERE ROWNUM <= 5;
(3)SELECT *
FROM Book;
WHERE ROWNUM <= 5;
ORDER BY price
(4)SELECT *
FROM (SELECT * FROM Book ORDER BY Price) b
WHERE ROWNUM <= 5;
(5)SELECT *
FROM (SELECT * FROM Book WHERE ROWNUM <= 5) b
ORDER BY price;
(6)SELECT *
FROM (SELECT * FROM Book WHERE ROWNUM <= 5 ORDER BY price) b;