SQL의 함수는 내장 함수와 사용자 정의 함수로 나뉜다.
SQL내장 함수는 상수나 속성 이름을 입력 값으로 받아 단일 값을 결과로 반환한다
SELECT ABS(-78), ABS(+78);
ABS(-78) | ABS(+78) |
---|---|
78 | 78 |
MySQL이나 SQL server는 FROM 절이 필수적이지 않지만, 오라클은 필수이기에 일시적인 연산 작업에 사용하기 위한 DUAL이라는 가상의 테이블을 사용해야 한다.
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값 : 아직 지정되지 않은 값
0, ''(빈 문자), ' '(공백 문자열) 등과는 명백히 다른 값이다.
지정되지 않은 값이므로 비교 연산자를 적용할 수 없다
NULL에 어떤 수를 더해도 NULL이다.
NULL은 집계 함수의 집계 대상에서 제외된다
해당되는 행이 하나도 없을 경우 SUM, AVG 함수의 결과는 NULL이 되고, COUNT 함수의 결과는 0이다.
SELECT *
FROM Mybook
WHERE price IS NULL;
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;