SQL 고급(1) - 0913(2)

안씅👩🏻‍💻·2022년 9월 13일
0
post-thumbnail

DBA : DB 관리사

  • 전체 DB관리 ,전체 테이블 관리, 백업, system performance(HW, DBMS, 설치, 튜닝)

일반개발자

  • DML(insert, update, delete, select) 업무
    • 주로 select(조회)를 사용함
    • 원칙적으로 insert(입력), update(수정), delete(삭제)를 개발자가 사용하면 안 됨.(실제 개발자가 사용할 일은 없음)
      -> (영업시스템 : 영업실적을 영업사원이 입력하는 것이 원칙임.)
      -> * workflow : 영업사원이 영업실적을 입력하면 경리, 영업관리담당, 팀장... 결제 받는 과정






1. 내장 함수

: 수학의 함수와 마찬가지로 특정 값이나 열의 값을 입력 받아 그 값 내장된 함수로 계산하여 결과 값을 돌려 주는 것.



SQL 내장 함수 - 숫자함수



ABS 함수 : 절댓값 구하기.

  • 질의 4-1 -78과 +78의 절댓값을 구하시오.
SELECT ABS(-78), ABS(+78)
FROM Dual;	-- dual :  dummy table
  • [실행 결과]

  • ++ ) dual은 임시로 만든 더미 테이블임.
    • 저장되지 않음.

ROUND : 반올림 구하기.

  • ROUND(숫자, m)
    : 숫자의 반올림
    : m은 반올림 기준 자릿수
  • 소수점 1번째 자리에서 반올림
SELECT  ROUND(562.845, 1)
FROM    dual;
  • [실행 결과]
    • 소수점 1번째 자리까지만 남기고 다 날려버림.

  • 숫자 10의 자리에서 반올림
  • ROUND(숫자, m) 에서 m(양수)은 소수점 이하 m번째 자리를 의미함.
    • m이 음수(-)가 되면 소수점 이상의 자리를 의미함.
SELECT  ROUND(562.845, -2)
FROM    dual;
  • [실행 결과]
    • 소수점 이상 2번째 자리 밑으로 다 날려버림^^

  • 질의 4-3 고객별 평균 주문 금액을 백 원 단위로 반올림한 값을 구하시오.
SELECT  custid "고객번호",
        ROUND(SUM(salesprice)/COUNT(*), -2) "평균금액"
        -- '매출총합/매출건수' 의 소수점2자리 이상 자리수 반올림.
FROM    Orders
GROUP BY custid;
  • "평균금액" : ROUND (SUM(salesprice)/COUNT(*), -2)

    • 반올림(총구매액/구매건수, 소수점 위로 2번째 자리 )

    • [실행 결과]



SQL 내장 함수 - 문자 함수



REPLACE : 지정 문자열 치환하기.

REPLACE(s1,s2,s3) : 문자열을 치환하는 함수

  • s1
    : 바꿔줄 문자열 지정함.

  • s2 , s3
    : s2s3로 치환함.


  • 질의 4-4 도서제목에 야구가 포함된 도서를 농구로 변경한 후 도서 목록을 보이시오.
  • [REPLACE 전 실행결과]
SELECT   bookid, 
REPLACE (bookname, '야구', '농구') bookname, 
         publisher, 
         price
FROM     Book;
  • [실행 결과]
    • 테이블에서 bookname에 있는 문자열에 있는 야구농구로 바꿔줌.

LENGTH : 글자 수 출력하기.(+ LENGTHB)

  • LENGTH(s): 글자의 수(문자 단위)를 세어주는 함수
    : 한글 영어 상관없이 1바이트로 인식함.
  • LENGTHB(s) : 한글은 3바이트 영어는 1바이트로 인식

  • 질의 4-5 굿스포츠에서 출판한 도서의 제목과 제목의 글자 수를 확인하시오.
    • 한글은 2바이트 혹은 UNICODE 경우는 3바이트를 차지함
SELECT  bookname "제목",
        LENGTH(bookname) "글자수",
        LENGTHB(bookname) "바이트수"
FROM    Book
WHERE   publisher='굿스포츠';
  • [실행 결과]

SUBSTR : 지정 길이 문자열 출력하기.

SUBSTR(s,n,k)
: 지정한 길이만큼의 문자열을 반환하는 함수

  • (s,n,k) : (문자열, 시작위치, 갯수)
  • 시작 위치가 1 부터 시작함. (0부터 시작x)
SELECT  SUBSTR('ABCDEFG',3,4)
FROM    dual;
  • [실행 결과]

  • 질의 4-6 마당서점의 고객 중에서 같은 성(姓)을 가진 사람이 몇 명이나 되는지 성별 인원수를구하시오.
    (+ 오름차순 정렬)
  • [SUBSTR 전 실행결과]
SELECT      SUBSTR(name, 1, 1) "성",
            COUNT(*) "인원"
FROM        Customer
GROUP BY    SUBSTR(name, 1, 1)
ORDER BY    SUBSTR(name, 1, 1);
  • [실행 결과]



SQL 내장 함수 - 날짜•시간 함수



  • 질의 4-7 마당서점은 주문일로부터 25일 후 매출을 확정한다. 각 주문의 확정일자를 구하시오.
SELECT  orderid "주문번호", 
        orderdate "주문일", 
        orderdate+25 "확정"
FROM    Orders;
  • [실행 결과]

TO_DATE

: 문자형으로 저장된 날짜를 날짜형으로 변환하는 함수(문자열을 date type으로 변환하는 함수)


TO_CHAR

: 날짜형을 문자형으로 변환하는 함수

  • 질의 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');
  • [실행 결과]



SYSDATETIME

: 오라클의 현재 날짜와 시간을 반환하는 함수

SYSTIMESTAMP

: 현재 날짜, 시간과 함께 초 이하의 시간과 서버의 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"
  • [실행 결과]



NULL 값 처리



NULL 값을 확인하는 방법 - IS NULL

  • NULL 값을 확인하는 방법
    • IS NULL
    • IS NOT NULL
  • NULL 값을 찾을 때는 ‘=’ 연산자가 아닌 ‘IS NULL’을 사용
  • NULL이 아닌 값을 찾을 때는 ‘<>’ 연산자가 아닌 ‘IS NOT NULL’을 사용함
-- 동작하지 않는 sql명령어 : 이유는 null은 '='로 표현 불가
-- '='은 is로 대체 , '!=' 은 is not
SELECT * FROM book
--WHERE   price = null;
WHERE   price is null;

NVL

: NULL 값을 다른 값으로 대치하여 연산하거나 다른 값으로 출력

  • NVL(속성, 값)
    • 속성 값이 NULL이면 '값'으로 대치한다
  • 질의 4-10 이름, 전화번호가 포함된 고객목록을 보이시오. 단, 전화번호가 없는 고객은 ‘연락처없음’ 으로 표시한다.
SELECT  name "이름", 
        NVL(phone, '연락처없음') "전화번호"
FROM    Customer;
  • [실행 결과]
profile
그냥 은근슬쩍 살다 가긴 싫어

0개의 댓글