-
데이터 조작 함수 사용하기Database/SQL 2023. 9. 29. 17:19728x90
목차
함수 이해하기
다른 컴퓨터 언어처럼 SQL도 데이터를 조작할 수 있도록 함수를 지원한다.
함수는 데이터를 다룰 때 사용되는데, 보통 데이터를 변환하거나 조작할 수 있게 해주므로 중요한 SQL 툴 중 하나이다.함수로 발생하는 문제
SQL 함수는 편리하지만 문제의 소지가 많다는 것을 알고 있어야 한다.
- 대다수 함수는 DBMS에 매우 종속적이다.
- 함수가 지원하는 기능은 대체로 비슷하지만 문법은 DBMS마다 매우 다르다.
SQL과 달리 SQL 함수는 호환성이 낮기 때문에 특정 SQL 구현에 맞추어 짠 코드가 다른 DBMS에서는 동작하지 않을 수 있다는 의미이다.
이를 염두에 둔 SQL 개발자들은 실행 환경에 종속적인 함수를 사용하지 않겠지만, 프로그램 성능을 희생해야 할 수도 있다.(함수를 사용한다면 DBMS가 효율적으로 작업을 수행하기 때문이다.)
그렇다면 함수를 사용해야할까?
결정은 사용자의 몫이지만, 옳고 그름은 없다. 만일 함수를 사용하기로 했다면, 코드에 주석을 잘 작성하여 또 다른 개발자가 어떤 SQL 실행 환경에서 동작하는 것인지 파악할 수 있게 하자함수 사용하기
대부분의 SQL 실행 환경은 다음 유형의 함수를 지원한다.
- 문자열을 조작하기 위한 문자 함수
(예) 문자의 공백을 삭제하거나 추가하는 함수, 대소문자를 바꾸는 함수 - 수치 데이터로 수학 계산을 시행하기 위한 수치 함수
(예) 절댓값을 반환하거나 대수 계산을 시행하기 위한 함수 - 날짜와 시간을 조작하기 위한 날짜 함수
(예) 날짜의 차이를 반환하는 함수, 유효한 날짜인지 확인하는 함수 - 결과를 사용자 친화적인 형식으로 보여주기 위한 서식 설정 함수
(예) 현지 언어 형식으로 날짜 표시, 통화와 쉼표에 적절한 기호 추가 - 사용하고 있는 DBMS 정보를 반환하는 시스템 함수
(예) 사용자 로그인 정보를 반환하는 함수
함수는
SELECT문
이 아니더라도WEHRE문
등 다른 곳에서도 사용할 수 있다.문자열 조작 함수
함수 설명 ABS() 절댓값을 반환 COS() 코사인값 반환 EXP() 지숫값 반환 PI() 파이값 반환 SIN() 사인값 반환 SQRT() 제곱근 반환 TAN() 탄젠트값 반환 SELECT vend_name, UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; SELECT cust_name, cust_contact FROM Customers WHERE cust_contact = 'Michael Green'; SELECT cust_name, cust_contact FROM Customers WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green'); SELECT cust_id, cust_name, CONCAT(UPPER(LEFT(cust_contact, 2)), UPPER(LEFT(cust_city, 3))) AS user_login FROM Customers;
날짜와 시간 조작 함수
날짜와 시간은 각각의 DBMS마다 특별한 특성을 지닌 데이터형을 사용한다.
날짜와 시간 값은 물리적인 공간을 절약할 수 있고, 효율적이면서 빠르게 정렬되거나 필터링 되도록 특별한 형식으로 저장된다.보통 이를 저장하는데 사용하는 내부 데이터 형식은 응용 프로그램에서는 사용할 수 없는 형식이므로, 날짜 또는 시간을 읽거나 조작하기 위해서는 함수가 필요하다. 날짜, 시간 조작 함수는 SQL 언어에서도 매우 중요한 기능을 차지하지만, DBMS간 일관성이 매우 적고, 호환이 거의 되지 않는다.
# SQL Server SELECT order_num FROM Orders WHERE DATEPART(yy, order_date) = 2020; # PostgreSQL (Extract()함수도 동일 결과 반환) SELECT order_num FROM Orders WHERE DATE_PART('year', order_date) = 2020; # Oracle SELECT order_num FROM Orders WHERE EXTRACT(year FROM order_date) = '2020'; SELECT order_num FROM Orders WHERE order_date BETWEEN to_date('2020-01-01', 'yyyy-mm-dd') AND to_date('2020-12-31', 'yyyy-mm-dd'); # Db2, MySQL, MariaDB SELECT order_num FROM Orders WHERE YEAR(order_date) = 2020; # SQLite SELECT order_num FROM Orders WHERE strftime('%Y', order_date) = '2020'; SELECT order_num, DATE(order_date) FROM Orders WHERE YEAR(order_date) = '2020' AND MONTH(order_date) = '01' ORDER BY order_date;
수치 조작 함수
수치 조작 함수는 대수학, 삼각법, 또는 기하학 계산에 주로 사용되고 대형 DBMS에서 지원하는 수치 조작 함수는 대부분 비슷하다.지원 되는 수치 조작 함수를 확인하려면 사용하는 DBMS의 매뉴얼을 살펴보자.
함수 설명 ABS() 절댓값을 반환 COS() 코사인값 반환 EXP() 지숫값 반환 PI() 파이값 반환 SIN() 사인값 반환 SQRT() 제곱근 반환 TAN() 탄젠트값 반환 정리
이번 장의 핵심은 다음과 같다.
- SQL 함수는 유용하지만, DBMS에 종속적이다.
- 직접 함수와 같은 기능을 사용한다면 성능의 희생이 발생할 수 있다.
'Database > SQL' 카테고리의 다른 글
데이터 업데이트, 삭제 (0) 2023.09.29 데이터 요약 (0) 2023.09.29 서브쿼리 사용하기 (0) 2023.09.29 와일드카드 문자를 이용한 필터링 (0) 2023.09.29 쿼리 결합하기 (0) 2023.09.29