DBA : DB 관리사
- 전체 DB관리 ,전체 테이블 관리, 백업, system performance(HW, DBMS, 설치, 튜닝)
일반개발자
- DML(insert, update, delete, select) 업무
- 주로 select(조회)를 사용함
- 원칙적으로 insert(입력), update(수정), delete(삭제)를 개발자가 사용하면 안 됨.(실제 개발자가 사용할 일은 없음)
-> (영업시스템 : 영업실적을 영업사원이 입력하는 것이 원칙임.)
-> * workflow : 영업사원이 영업실적을 입력하면 경리, 영업관리담당, 팀장... 결제 받는 과정
: 수학의 함수와 마찬가지로 특정 값이나 열의 값을 입력 받아 그 값 내장된 함수로 계산하여 결과 값을 돌려 주는 것.
- 질의 4-1 -78과 +78의 절댓값을 구하시오.
SELECT ABS(-78), ABS(+78)
FROM Dual; -- dual : dummy table
ROUND(숫자, m)
숫자
의 반올림m
은 반올림 기준 자릿수
- 소수점 1번째 자리에서 반올림
SELECT ROUND(562.845, 1)
FROM dual;
- 숫자 10의 자리에서 반올림
ROUND(숫자, m)
에서 m
(양수)은 소수점 이하 m번째 자리를 의미함.m
이 음수(-)가 되면 소수점 이상의 자리를 의미함.SELECT ROUND(562.845, -2)
FROM dual;
- 질의 4-3 고객별 평균 주문 금액을 백 원 단위로 반올림한 값을 구하시오.
SELECT custid "고객번호",
ROUND(SUM(salesprice)/COUNT(*), -2) "평균금액"
-- '매출총합/매출건수' 의 소수점2자리 이상 자리수 반올림.
FROM Orders
GROUP BY custid;
"평균금액" : ROUND
(SUM(salesprice)/COUNT(*)
, -2
)
반올림
(총구매액/구매건수
, 소수점 위로 2번째 자리
)
[실행 결과]
REPLACE(s1,s2,s3)
: 문자열을 치환하는 함수
s1
: 바꿔줄 문자열 지정함.
s2
, s3
: s2
을 s3
로 치환함.
- 질의 4-4 도서제목에 야구가 포함된 도서를 농구로 변경한 후 도서 목록을 보이시오.
SELECT bookid,
REPLACE (bookname, '야구', '농구') bookname,
publisher,
price
FROM Book;
야구
를 농구
로 바꿔줌.LENGTH(s)
: 글자의 수(문자 단위)를 세어주는 함수LENGTHB(s)
: 한글은 3바이트 영어는 1바이트로 인식
- 질의 4-5 굿스포츠에서 출판한 도서의 제목과 제목의 글자 수를 확인하시오.
- 한글은 2바이트 혹은 UNICODE 경우는 3바이트를 차지함
SELECT bookname "제목",
LENGTH(bookname) "글자수",
LENGTHB(bookname) "바이트수"
FROM Book
WHERE publisher='굿스포츠';
SUBSTR(s,n,k)
: 지정한 길이만큼의 문자열을 반환하는 함수
(s,n,k)
: (문자열, 시작위치, 갯수) SELECT SUBSTR('ABCDEFG',3,4)
FROM dual;
- 질의 4-6 마당서점의 고객 중에서 같은 성(姓)을 가진 사람이 몇 명이나 되는지 성별 인원수를구하시오.
(+ 오름차순 정렬)
SELECT SUBSTR(name, 1, 1) "성",
COUNT(*) "인원"
FROM Customer
GROUP BY SUBSTR(name, 1, 1)
ORDER BY SUBSTR(name, 1, 1);
- 질의 4-7 마당서점은 주문일로부터 25일 후 매출을 확정한다. 각 주문의 확정일자를 구하시오.
SELECT orderid "주문번호",
orderdate "주문일",
orderdate+25 "확정"
FROM Orders;
: 문자형으로 저장된 날짜를 날짜형으로 변환하는 함수(문자열을 date type으로 변환하는 함수)
: 날짜형을 문자형으로 변환하는 함수
- 질의 4-8 마당서점이 2014년 7월 7일에 주문받은 도서의 주문번호, 주문일, 고객번호, 도서번호를 모두 보이시오.
단, 주문일은 ‘yyyy-mm-dd 요일’ 형태로 표시한다.
SELECT orderid "주문번호",
TO_CHAR(orderdate, 'yyyy-mm-dd dy') "주문일",
custid "고객번호",
bookid "도서번호"
FROM Orders
WHERE orderdate = TO_DATE('20140707', 'yyyymmdd');
: 오라클의 현재 날짜와 시간을 반환하는 함수
: 현재 날짜, 시간과 함께 초 이하의 시간과 서버의 TIMEZONE까지 출력함
- 질의 4-8 DBMS 서버에 설정된 현재 시간과 오늘 날짜를 확인하시오.
SELECT SYSDATE,
-- SYSDATE: 현재시간
TO_CHAR(SYSDATE, 'yyyy/mm/dd dy hh24:mi:ss') "SYSDATE_1"
-- TO_CHAR : 문자열 타입으로 변환
FROM Dual;
TO_CHAR(SYSDATE, 'yyyy/mm/dd dy hh12:mi:ss') "SYSDATE_1"
-- 동작하지 않는 sql명령어 : 이유는 null은 '='로 표현 불가
-- '='은 is로 대체 , '!=' 은 is not
SELECT * FROM book
--WHERE price = null;
WHERE price is null;
: NULL 값을 다른 값으로 대치하여 연산하거나 다른 값으로 출력
- 질의 4-10 이름, 전화번호가 포함된 고객목록을 보이시오. 단, 전화번호가 없는 고객은 ‘연락처없음’ 으로 표시한다.
SELECT name "이름",
NVL(phone, '연락처없음') "전화번호"
FROM Customer;