연산자 & 내장함수
목표
- 산술/비교/논리 연산자를 사용할 수 있다.
- 내장함수 사용할 수 있다.
- 문자열을 다룰 수 있다.
산술 연산자
SQL에서 숫자 리터럴에 사용할 수 있는 연산자
- 데이터의 형식(정수/실수/날자 ..)에 따라 결과값이 다를 수 있다.
예시
- book 테이블의 price에 0.05 곱하기
SELECT price * 0.05 FROM book;
- book 테이블의 price를 2로 나눔
SELECT price / 2 FROM book;
- book 테이블의 price를 2로 나누기 100 곱하기
- 우선순위를 위해 ( )
사용
SELECT (price / 2) * 100 FROM book;
비교 연산자
SQL 비교 리터럴 및 WHERE 절의 값의 비교에 사용하는 연산자
- 비교 연산자 사용 시 연산 결과 조건이 성립한 경우
논리 연산자
여러 리터럴 조건을 조합해 복합 조건을 나타낼 수 있음
- 참 : 1, 거짓 : 0 값 반환.
- AND
- 연결된 두 구문이 모두 참이여야 참 반환
- 연결된 두 구문 중 하나만 거짓이어도 거짓 반환
- OR
- 연결된 두 구문 중 하나만 참이어도 참 반환
- 연결된 두 구문이 모두 거짓이여야 거짓 반환
- NOT
내장함수
내장함수는 DBMS에서 자주 사용하는 기능을 제공하는 것.
SELECT 내장함수();
SELECT 내장함수(column)
FROM 테이블이름;
몇 가지 내장함수
- 값의 합, 평균, 개수, 최대, 최소 값에 대한 함수를
집계 함수
라고 한다.
- 다른 함수와 다르게, COUNT 함수는
*
같이 와일드카드 값이 들어갈 수 있다.
- 예
고객이 주문한 도서의 총 판매액 구하기
SELECT SUM(saleprice)
FROM Orders;
- 단, 내장함수 결과 출력시 컬럼 이름이 내장함수 이름으로 나타난다.
- Alias의 AS절로 정리할 수 있다.
ALIAS
- SQL 구문에서 대상을 다른 이름으로 사용.
- Column Alias : AS 절을 붙여 컬럼 이름을 사용
- Table Alias : 테이블 이름 뒤에 Alias 이름 사용
SELECT column_name AS column_alias,
column_name AS column_alias,
...
FROM table_name table_alias,
table_name, table_alias,
...;
내장함수와 Alias 사용 예시
- 고객이 주문한 도서의 총 판매액을 '총매출'로 구하기.
SELECT SUM(saleprice) AS 총매출
FROM Orders;
- 고객의 주문한 도서의 평균 판매액을 '매출평균'으로 구하기
SELECT AVG(saleprice) AS 매출평균
FROM Orders;
- 의미 있는 열 이름을 출력하고 싶다면, 속성이름의 별칭을 지칭하는 AS 키워드를 사용해 열 이름을 부여할 수 있음
기타 내장함수
POWER (숫자, 제곱);
- SELECT POWER(2,1), POWER(2,2), POWER(2,3);
- 2의 1, 2, 3 제곱 구하기
ROUND(값, 소수점);
- SELECT ROUND(12345.6789,1), ROUND(12345.6789,2), ROUND(12345.6789,-1)
- 값(12345.6789)의 소수점 1,2 번째 자리와 -1 자리(1의 자리) 구하기.
MOD(값, 값);
- SELECT MOD(9,2) FROM dual;
- dual table은 시스템에서 제공하는 가상의 테이블로, 함수 등을 쿼리로 계산 시 사용한다.
- CEIL(), FLOOR() 등이 있다.
문자열 다루기
문자열 결합 할 때는 CONCAT() 함수를 사용
CONCAT("문자리터럴", "문자리터럴", ...);
- 사용 예시
- bookname 앞에 접두사로
도서명 :
을 붙이고 싶을 때.
SELECT CONCAT ("도서명 : ", bookname)
FROM book;
문자열 길이 함수
- LENGTH(문자열) : 문자열의 Byte 길이
- CHAR_LENGTH(문자열) : 문자의 개수
공백 제거 함수
- TRIM : 문자열 좌우 공백 제거
SELECT TRIM (' 안녕하세요 ');
- →
안녕하세요
- LTRIM : 좌측 공백 제거
SELECT LTRIM (' 안녕하세요 ');
- →
안녕하세요
- RTRIM : 우측 공백 제거
SELECT RTRIM (' 안녕하세요 ');
- →
안녕하세요
- LEADING : 문자열 좌측 문자 제거
SELECT TRIM(LEADING '안' FROM ' 안녕하세요안 ');
- →
녕하세요안
- TRAILING : 문자열 우측 문자 제거
SELECT TRIM(TRAILING '안' FROM ' 요안녕하세요 ');
- →
요안녕하세
문자 개수 함수
- Byte 단위 개수와 문자 개수 함수를 구분해야한다.
대/소문자 변환 함수
UPPER(문자열) : 대문자 변환
LOWER(문자열) : 소문자 변환
결합 함수
CONCAT (문자열, 문자열, ...) : 공백없이 문자열들만 결합.
CONCAT_WS (구분자, 문자열, 문자열, ...) : 구분자로 문자열을 결합
SELECT GROUP_CONCAT (묶을 컬럼[, 데이터1, 데이터2, ....])
FROM 테이블명
- 컬럼들을 지시해서 해당하는 컬럼들의 문자열을 어떤 식으로 결합해서 출력해야할지 지시할 때
GROUP_CONCAT
사용. 여러 컬럼들을 동시에 할 때.
- 컬럼에서 NULL이 아닌 모든 값을
,
(콤마)로 합쳐 하나의 문자열로 가져오는 함수
- 컬럼에 추가로 데이터 1, 2, ... 를 붙인 다음 결합
문자열 추출 함수
- SUBSTRING(문자열, 시작지점) : 문자열을 시작지점에서부터 모두 추출
- SELECT SUBSTRING ('안녕하세요', 3);
- 3번째 문자
하
부터 전체 문자 추출. 하세요
- SUBSTRING(문자열, 시작지점, 길이) : 문자열을 시작지점에서부터 길이만큼 추출
- SELECT SUBSTRING ('안녕하세요', 2, 3);
- 두번째 글자인
녕
부터 3개의 문자 추출. 녕하세
- SUBSTRING_INDEX(문자열, 구분자, 구분자index) : 문자열을 구분자로 구분하고, index 개수만큼 추출.
- SELECT SUBSTRING_INDEX('사과, 바나나, 딸기, 포도', ',', 3);
- 사과, 바나나, 딸기
- SELECT SUBSTRING_INDEX('사과, 바나나, 딸기, 포도', ',', -3);
- 바나나, 딸기, 포도
- LEFT(문자열, count) : 문자열에서 왼쪽을 기준으로 일정 갯수를 가져옴
- RIGHT(문자열, count) : 문자열에서 오른쪽을 기준으로 일정 갯수를 가져옴
- MID(문자열, start, count) : 문자에 지정한 시작 위치를 기준으로 일정 개수를 가져오는 함수