내장 함수

WooBuntu·2021년 1월 6일
0

데이터베이스

목록 보기
9/16

SQL의 함수는 내장 함수와 사용자 정의 함수로 나뉜다.

SQL내장 함수는 상수나 속성 이름을 입력 값으로 받아 단일 값을 결과로 반환한다

숫자 함수

  • ABS()
SELECT ABS(-78), ABS(+78);
ABS(-78)ABS(+78)
7878

MySQL이나 SQL server는 FROM 절이 필수적이지 않지만, 오라클은 필수이기에 일시적인 연산 작업에 사용하기 위한 DUAL이라는 가상의 테이블을 사용해야 한다.

  • ROUND(반올림할 숫자, 소수 n째 자리)
SELECT ROUND(4.875, 1);
ROUND(4.875, 1)
4.9
  • 숫자 함수의 연산

    • 숫자 함수는 입력 값으로 숫자를 입력할 수도 있지만 열 이름을 사용할 수도 있다.

    • 여러 함수를 복합적으로 사용할 수도 있다.

SELECT custid AS '고객번호', ROUND(SUM(saleprice)/COUNT(*), -2) AS '평균금액'
FROM Orders
GROUP BY custid;

귀찮다, 나중에 추가 하자

문자 함수

문자 함수는 주로 CHAR나 VARCHAR의 데이터 타입을 대상으로 단일 문자나 문자열을 가공한 결과를 반환한다

  • REPLACE()

    문자열을 치환하는 함수로, 여러 행의 자료를 한꺼번에 변경할 수 있다.

SELECT bookid, REPLACE(bookname, '야구', '농구') bookname, publisher, price 
FROM Book;
-- UPDATE문이 아니므로 원본 테이블의 데이터에는 변화가 없다
  • LENGTH() OR CHAR_LENGTH()

    • LENGTH()는 바이트 수를 반환한다.

      일반적으로 알파벳(ex:'A')은 1바이트, 한글(ex:'아')은 3바이트

    • CHAR_LENGTH()는 문자의 수를 반환한다

      알파벳과 한글 모두 1

SELECT bookname AS '제목', 
       CHAR_LENGTH(bookname) AS '문자수',
       LENGTH(bookname) AS '바이트수'
FROM Book
WHERE publisher='굿스포츠';
  • SUBSTR(속성, 시작 위치, 길이)

    문자열 중 특정 위치에서 시작하여 지정한 길이만큼의 문자열을 반환하는 함수

SELECT SUBSTR(name, 1, 1) AS '성', COUNT(*) AS '인원'
FROM Customer
GROUP BY SUBSTR(name, 1, 1);
-- GROUP BY 역시 SELECT랑 맞춰줘야 한다

귀찮다, 나중에 추가 하자

날짜, 시간 함수

날짜, 시간 함수에서 날짜와 시간 부분을 나타내는 인수는 format으로 표기한다.

format은 날짜 형식 지정자로 날짜와 시간 부분을 표기하기 위해 특별한 규칙을 갖는다.

귀찮다, 나중에 추가 하자

NULL값 처리

NULL값 : 아직 지정되지 않은 값

  • 0, ''(빈 문자), ' '(공백 문자열) 등과는 명백히 다른 값이다.

  • 지정되지 않은 값이므로 비교 연산자를 적용할 수 없다

NULL값에 대한 연산과 집계 함수

  • NULL에 어떤 수를 더해도 NULL이다.

  • NULL은 집계 함수의 집계 대상에서 제외된다

  • 해당되는 행이 하나도 없을 경우 SUM, AVG 함수의 결과는 NULL이 되고, COUNT 함수의 결과는 0이다.

NULL값을 확인하는 방법

  • = 연산자 대신 IS NULL
SELECT * 
FROM Mybook
WHERE price IS NULL;
  • <> 연산자 대신 IS NOT NULL

IFNULL

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

IFNULL(속성,)
-- 속성 값이 NULL이면 '값'으로 대치한다
SELECT name AS '이름', IFNULL(phone, '연락처없음') AS '전화번호'
FROM Customer;

행번호 출력

MySQL에서는 변수를 사용하여, SQL문 결과로 나오는 행에 번호를 붙이거나 행번호에 따라 결과의 개수를 조절할 수 있다.

-- 변수명을 seq로 지었다고 가정
SET @seq:=0;
SELECT (@seq:=@seq+1) AS '순번', custid, name, phone
FROM Customer
WHERE @seq < 2;

0개의 댓글

관련 채용 정보